From 63c5e0481e6297d2d8b2acd2a5577effd2157878 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Mon, 20 Dec 2021 14:03:37 -0800 Subject: [PATCH 01/58] chore: interim commit --- npm-shrinkwrap.json | 21 +- package.json | 2 +- src/commands/dev/dev.js | 23 +- src/commands/graph/graph-create.js | 41 ++ src/commands/graph/graph-edit.js | 73 ++ src/commands/graph/graph-pull.js | 41 ++ src/commands/graph/graph.js | 33 + src/commands/graph/index.js | 5 + src/commands/main.js | 2 + src/lib/oneGraph/client.js | 642 ++++++++++++++++++ src/lib/oneGraph/graphql-helpers.js | 490 +++++++++++++ .../netligraph-code-exporter-snippets.js | 580 ++++++++++++++++ src/lib/oneGraph/netligraph.js | 638 +++++++++++++++++ 13 files changed, 2581 insertions(+), 10 deletions(-) create mode 100644 src/commands/graph/graph-create.js create mode 100644 src/commands/graph/graph-edit.js create mode 100644 src/commands/graph/graph-pull.js create mode 100644 src/commands/graph/graph.js create mode 100644 src/commands/graph/index.js create mode 100644 src/lib/oneGraph/client.js create mode 100644 src/lib/oneGraph/graphql-helpers.js create mode 100644 src/lib/oneGraph/netligraph-code-exporter-snippets.js create mode 100644 src/lib/oneGraph/netligraph.js diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 3f52abcf76d..fd093a6e407 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -55,6 +55,7 @@ "gh-release-fetch": "^2.0.0", "git-repo-info": "^2.1.0", "gitconfiglocal": "^2.1.0", + "graphql": "^16.1.0", "hasbin": "^1.2.3", "hasha": "^5.2.2", "http-proxy": "^1.18.0", @@ -77,7 +78,6 @@ "minimist": "^1.2.5", "mock-require": "^3.0.3", "multiparty": "^4.2.1", - "netlify": "^10.0.0", "netlify-headers-parser": "^6.0.0", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", @@ -2569,7 +2569,8 @@ "node_modules/@netlify/build/node_modules/@types/node": { "version": "16.11.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", - "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==", + "peer": true }, "node_modules/@netlify/build/node_modules/ansi-styles": { "version": "4.3.0", @@ -10897,6 +10898,14 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, + "node_modules/graphql": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.1.0.tgz", + "integrity": "sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || >=16.0.0" + } + }, "node_modules/graphviz": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", @@ -22414,7 +22423,8 @@ "@types/node": { "version": "16.11.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.14.tgz", - "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==" + "integrity": "sha512-mK6BKLpL0bG6v2CxHbm0ed6RcZrAtTHBTd/ZpnlVPVa3HkumsqLE4BC4u6TQ8D7pnrRbOU0am6epuALs+Ncnzw==", + "peer": true }, "ansi-styles": { "version": "4.3.0", @@ -28715,6 +28725,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, + "graphql": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.1.0.tgz", + "integrity": "sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw==" + }, "graphviz": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", diff --git a/package.json b/package.json index 5e97c5864ea..fb8c59fc281 100644 --- a/package.json +++ b/package.json @@ -123,6 +123,7 @@ "gh-release-fetch": "^2.0.0", "git-repo-info": "^2.1.0", "gitconfiglocal": "^2.1.0", + "graphql": "^16.1.0", "hasbin": "^1.2.3", "hasha": "^5.2.2", "http-proxy": "^1.18.0", @@ -145,7 +146,6 @@ "minimist": "^1.2.5", "mock-require": "^3.0.3", "multiparty": "^4.2.1", - "netlify": "^10.0.0", "netlify-headers-parser": "^6.0.0", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 28cf6c31526..9ce16ee57ff 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -11,6 +11,7 @@ const stripAnsiCc = require('strip-ansi-control-characters') const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') +const { startOneGraphCLISession } = require('../../lib/oneGraph/client') const { NETLIFYDEV, NETLIFYDEVERR, @@ -105,12 +106,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -231,7 +232,7 @@ const printBanner = ({ url }) => { */ const dev = async (options, command) => { log(`${NETLIFYDEV}`) - const { api, config, site, siteInfo } = command.netlify + const { api, config, site, siteInfo, state } = command.netlify config.dev = { ...config.dev } config.build = { ...config.build } /** @type {import('./types').DevConfig} */ @@ -291,6 +292,16 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url + const oneGraphAdminToken = command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT && command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT.value; + + if (oneGraphAdminToken) { + const netlifyToken = await command.authenticate() + + startOneGraphCLISession({ netlifyToken, site, state }) + } else { + console.log("No OneGraph token found, skipping OneGraph...") + } + printBanner({ url }) } diff --git a/src/commands/graph/graph-create.js b/src/commands/graph/graph-create.js new file mode 100644 index 00000000000..5e03b16384c --- /dev/null +++ b/src/commands/graph/graph-create.js @@ -0,0 +1,41 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable no-unused-vars */ +const fs = require('fs') + +const { printSchema } = require('graphql') + +const { fetchOneGraphSchema } = require('../../lib/oneGraph/client') +const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') + +const graphCreate = async (options, command) => { + const { site } = command.netlify + const siteId = site.id + + // TODO: Get this from the app on OneGraph + const defaultEnabledServices = ['github', 'npm'] + + const basePath = netligraphPath() + const schema = await fetchOneGraphSchema(siteId, defaultEnabledServices) + const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const operationsDoc = readGraphQLOperationsSourceFile(basePath) + + generateFunctionsFile(basePath, schema, operationsDoc, operations) + fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) +} + +/** + * Creates the `netlify graph:create` command + * @param {import('../base-command').BaseCommand} program + * @returns + */ +const createGraphCreateCommand = (program) => + program + .command('graph:create') + .description('Create down your local Netligraph schema and regenerate your local functions') + .action(async (options, command) => { + await graphCreate(options, command) + }) + + +module.exports = { createGraphCreateCommand } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js new file mode 100644 index 00000000000..35b5df6cd0c --- /dev/null +++ b/src/commands/graph/graph-edit.js @@ -0,0 +1,73 @@ +const process = require('process') + +const gitRepoInfo = require('git-repo-info') + +const { createCLISession, createPersistedQuery, loadCLISession } = require('../../lib/oneGraph/client') +const { readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +const { warn } = require('../../utils/command-helpers') +const { openBrowser } = require('../../utils/open-browser') + + +const graphEdit = async (options, command) => { + const { api, site, state } = command.netlify + const siteId = site.id + + if (!siteId) { + warn(`No Site ID found in current directory. +Run \`netlify link\` to connect to this folder to a site`) + return false + } + + const oneGraphAdminToken = command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT && command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT.value; + + if (!oneGraphAdminToken) { + command.error('You must set ONEGRAPH_ADMIN_JWT in your Netlify environment variables to edit a schema from OneGraph') + } + + console.time("graph:edit") + + const siteData = await api.getSite({ siteId }) + + const { branch } = gitRepoInfo() + const cwd = process.cwd() + const base = cwd; + const graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) + + const netlifyToken = await command.authenticate() + + let oneGraphSessionId = loadCLISession(state) + if (!oneGraphSessionId) { + const oneGraphSession = await createCLISession(netlifyToken, site.id, "testing") + state.set('oneGraphSessionId', oneGraphSession.id) + oneGraphSessionId = state.get('oneGraphSessionId') + } + + console.log(`Using OneGraph session ${oneGraphSessionId}`) + + const persistedDoc = await createPersistedQuery(netlifyToken, { + appId: siteId, + description: "Temporary snapshot of local queries", + document: graphqlDocument, + tags: ["netlify-cli", `session:${oneGraphSessionId}`, `git-branch:${branch}`], + }) + + const url = `http://localhost:8080/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` + await openBrowser({ url }) + console.timeEnd("graph:edit") +} + +/** + * Creates the `netlify graph:edit` command + * @param {import('../base-command').BaseCommand} program + * @returns + */ +const createGraphEditCommand = (program) => + program + .command('graph:edit') + .description('Launch the browser to edit your local graph functions from Netlify') + .action(async (options, command) => { + await graphEdit(options, command) + }) + + +module.exports = { createGraphEditCommand } diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js new file mode 100644 index 00000000000..b7e7b7fb1ae --- /dev/null +++ b/src/commands/graph/graph-pull.js @@ -0,0 +1,41 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable no-unused-vars */ +const fs = require('fs') + +const { printSchema } = require('graphql') + +const { fetchOneGraphSchema } = require('../../lib/oneGraph/client') +const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') + +const graphPull = async (options, command) => { + const { site } = command.netlify + const siteId = site.id + + // TODO: Get this from the app + const enabledServices = ['npm'] + + const basePath = netligraphPath() + const schema = await fetchOneGraphSchema(siteId, enabledServices) + const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const operationsDoc = readGraphQLOperationsSourceFile(basePath) + + generateFunctionsFile(basePath, schema, operationsDoc, operations) + fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) +} + +/** + * Creates the `netlify graph:pull` command + * @param {import('../base-command').BaseCommand} program + * @returns + */ +const createGraphPullCommand = (program) => + program + .command('graph:pull') + .description('Pull down your local Netligraph schema and regenerate your local functions') + .action(async (options, command) => { + await graphPull(options, command) + }) + + +module.exports = { createGraphPullCommand } diff --git a/src/commands/graph/graph.js b/src/commands/graph/graph.js new file mode 100644 index 00000000000..146a8929863 --- /dev/null +++ b/src/commands/graph/graph.js @@ -0,0 +1,33 @@ +// @ts-check +const { createGraphEditCommand } = require('./graph-edit') +const { createGraphPullCommand } = require('./graph-pull') + +/** + * The graph command + * @param {import('commander').OptionValues} options + * @param {import('../base-command').BaseCommand} command + */ +const graph = (options, command) => { + command.help() +} + +/** + * Creates the `netlify graph` command + * @param {import('../base-command').BaseCommand} program + * @returns + */ +const createGraphCommand = (program) => { + createGraphEditCommand(program) + createGraphPullCommand(program) + + return program + .command('graph') + .description('(Beta) Control the Netligraph functions for the current site') + .addExamples([ + 'netlify graph:pull', + 'netlify graph:edit', + ]) + .action(graph) +} + +module.exports = { createGraphCommand } diff --git a/src/commands/graph/index.js b/src/commands/graph/index.js new file mode 100644 index 00000000000..46b2e983551 --- /dev/null +++ b/src/commands/graph/index.js @@ -0,0 +1,5 @@ +const { createGraphCommand } = require('./graph') + +module.exports = { + createGraphCommand, +} diff --git a/src/commands/main.js b/src/commands/main.js index 6959f96069f..14c4386a223 100644 --- a/src/commands/main.js +++ b/src/commands/main.js @@ -29,6 +29,7 @@ const { createDeployCommand } = require('./deploy') const { createDevCommand } = require('./dev') const { createEnvCommand } = require('./env') const { createFunctionsCommand } = require('./functions') +const { createGraphCommand } = require('./graph') const { createInitCommand } = require('./init') const { createLinkCommand } = require('./link') const { createLmCommand } = require('./lm') @@ -170,6 +171,7 @@ const createMainCommand = () => { createDevCommand(program) createEnvCommand(program) createFunctionsCommand(program) + createGraphCommand(program) createInitCommand(program) createLinkCommand(program) createLmCommand(program) diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js new file mode 100644 index 00000000000..6f5f845ac98 --- /dev/null +++ b/src/lib/oneGraph/client.js @@ -0,0 +1,642 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable no-unused-vars */ +const { buildClientSchema } = require('graphql') +const fetch = require('node-fetch') + +const { extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, netligraphPath, readAndParseGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile } = require("./netligraph") + +const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' + +// We mock out onegraph-auth to provide just enough functionality to work with server-side auth tokens +const makeAuth = (appId, authToken) => ({ + appId, + authHeaders: () => ({ "Authorization": `Bearer ${authToken}` }), + accessToken: () => ({ accessToken: authToken }), +}); + +const httpOkLow = 200 +const httpOkHigh = 299 + +const basicPost = async (url, options) => { + const reqBody = options.body || '' + const userHeaders = options.headers || {} + + const headers = { + ...userHeaders, + 'Content-Type': 'application/json', + 'Content-Length': reqBody.length, + } + + const timeoutMilliseconds = 30000 + + const resp = await fetch(url, { + method: 'POST', + headers, + timeout: timeoutMilliseconds, + compress: true, + body: reqBody + }) + + const respBody = await resp.text() + + if (resp.status < httpOkLow || resp.status > httpOkHigh) { + console.warn("Response:", respBody) + throw (new Error( + `Netlify OneGraph return non - OK HTTP status code: ${resp.status}`, + )) + } + + return respBody +} + +const fetchOneGraphSchemaJson = async (appId, enabledServices) => { + const url = `https://serve.onegraph.com/schema?app_id=${appId}&services=${enabledServices.join(',')}` + const headers = {} + + try { + const response = await basicPost(url, { + method: 'GET', + headers, + body: null + }) + + return JSON.parse(response) + } catch (error) { + console.error("Error fetching schema:", error) + } +} + +const fetchOneGraphSchema = async (appId, enabledServices) => { + const result = await fetchOneGraphSchemaJson(appId, enabledServices); + const schema = buildClientSchema(result.data); + return schema +} + +const fetchOneGraph = async ( + accessToken, + appId, + query, + operationName, + variables + // eslint-disable-next-line max-params +) => { + const payload = { + query, + variables, + operationName, + } + + const body = JSON.stringify(payload); + + const result = await basicPost( + `https://serve.onegraph.com/graphql?app_id=${appId}`, + { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body, + } + ) + + // @ts-ignore + const value = JSON.parse(result) + if (value.errors) { + console.log("fetchOneGraph errors", JSON.stringify(value, null, 2)) + } + return value +} + +const fetchOneGraphPersisted = async ( + appId, + accessToken, + docId, + operationName, + variables + // eslint-disable-next-line max-params +) => { + const payload = { + doc_id: docId, + variables, + operationName, + } + + const result = await basicPost( + `https://serve.onegraph.com/graphql?app_id=${appId}`, + { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body: JSON.stringify(payload), + } + ) + + return JSON.parse(result) +} + +const operationsDoc = `mutation CreatePersistedQueryMutation( + $nfToken: String! + $appId: String! + $query: String! + $tags: [String!]! + $description: String! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createPersistedQuery( + input: { + query: $query + appId: $appId + tags: $tags + description: $description + } + ) { + persistedQuery { + id + } + } + } +} + +query ListPersistedQueries( + $appId: String! + $first: Int! + $after: String + $tags: [String!]! + ) { + oneGraph { + app(id: $appId) { + id + persistedQueries( + first: $first + after: $after + tags: $tags + ) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + query + fixedVariables + freeVariables + allowedOperationNames + tags + description + } + } + } + } + } + + subscription ListPersistedQueriesSubscription( + $appId: String! + $first: Int! + $after: String + $tags: [String!]! + ) { + poll( + onlyTriggerWhenPayloadChanged: true + schedule: { every: { minutes: 1 } } + ) { + query { + oneGraph { + app(id: $appId) { + id + persistedQueries( + first: $first + after: $after + tags: $tags + ) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + query + fixedVariables + freeVariables + allowedOperationNames + tags + description + } + } + } + } + } + } + } + + query PersistedQueriesQuery( + $nfToken: String! + $appId: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + app(id: $appId) { + persistedQueries { + nodes { + id + query + allowedOperationNames + description + freeVariables + fixedVariables + tags + } + } + } + } + } + + query PersistedQueryQuery( + $nfToken: String! + $appId: String! + $id: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + persistedQuery(appId: $appId, id: $id) { + id + query + allowedOperationNames + description + freeVariables + fixedVariables + tags + } + } + } + + mutation CreateCLISessionMutation( + $nfToken: String! + $appId: String! + $name: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createNetlifyCliSession( + input: { appId: $appId, name: $name } + ) { + session { + id + appId + netlifyUserId + name + } + } + } + } + + mutation CreateCLISessionEventMutation( + $nfToken: String! + $sessionId: String! + $payload: JSON! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createNetlifyCliTestEvent( + input: { + data: { payload: $payload } + sessionId: $sessionId + } + ) { + event { + id + createdAt + sessionId + } + } + } + } + +query CLISessionEventsQuery( + $nfToken: String! + $sessionId: String! + $first: Int! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + netlifyCliEvents(sessionId: $sessionId, first: $first) { + __typename + createdAt + id + sessionId + ... on OneGraphNetlifyCliSessionLogEvent { + id + message + sessionId + createdAt + } + ... on OneGraphNetlifyCliSessionTestEvent { + id + createdAt + payload + sessionId + } + } + } +} + +mutation AckCLISessionEventMutation( + $nfToken: String! + $sessionId: String! + $eventIds: [String!]! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + ackNetlifyCliEvents( + input: { eventIds: $eventIds, sessionId: $sessionId } + ) { + events { + id + } + } + } +}` + +const fetchPersistedQuery = async ( + authToken, + appId, + docId, +) => { + const response = await fetchOneGraph( + authToken, + ONEDASH_APP_ID, + operationsDoc, + 'PersistedQueryQuery', + { + nfToken: authToken, + appId, + id: docId, + }, + ) + + const persistedQuery = + response.data + && response.data.oneGraph + && response.data.oneGraph.persistedQuery + + return persistedQuery +} + +const monitorCLISessionEvents = ( + appId, + authToken, + sessionId, + { onClose, onError, onEvents, } +) => { + const frequency = 5000 + let shouldClose = false + + const close = () => { + shouldClose = true + } + + // TODO: Convert this to recursive setTimeout + const handle = setInterval(async () => { + if (shouldClose) { + clearInterval(handle) + onClose() + } + + const first = 1000 + const next = await fetchOneGraph( + authToken, + appId, + operationsDoc, + 'CLISessionEventsQuery', + { + nfToken: authToken, + sessionId, + first, + }, + ) + + if (next.errors) { + next.errors.forEach(error => { + onError(error) + }) + } + + const events = + next.data + && next.data.oneGraph + && next.data.oneGraph.netlifyCliEvents || [] + + if (events.length !== 0) { + const ackIds = onEvents(events) + await fetchOneGraph( + authToken, + appId, + operationsDoc, + 'AckCLISessionEventMutation', + { + nfToken: authToken, + sessionId, + eventIds: ackIds, + }, + ) + } + }, frequency) + + return close +} + +const createCLISession = async ( + netlifyToken, + appId, + name, +) => { + const result = await fetchOneGraph( + null, + appId, + operationsDoc, + 'CreateCLISessionMutation', + { + nfToken: netlifyToken, + appId, + name, + }, + ) + + const session = result.data + && result.data.oneGraph + && result.data.oneGraph.createNetlifyCliSession + && result.data.oneGraph.createNetlifyCliSession.session + + return session +} + +const fetchCLISessionEvents = async ( + netlifyToken, + appId, + sessionId, + first, +) => { + const result = await fetchOneGraph( + null, + appId, + operationsDoc, + 'CLISessionEventsQuery', + { + nfToken: netlifyToken, + sessionId, + first, + }, + ) + + const events = + result.data + && result.data.oneGraph + && result.data.oneGraph.netlifyCliEvents + + return events +} + + +const ackCLISessionEvents = async ( + netlifyToken, + appId, + sessionId, + first, +) => { + const result = await fetchOneGraph( + null, + appId, + operationsDoc, + 'AckCLISessionEventMutation', + { + nfToken: netlifyToken, + sessionId, + first, + }, + ) + + const events = + result.data + && result.data.oneGraph + && result.data.oneGraph.ackNetlifyCliEvents + + return events +} + +const createPersistedQuery = async ( + netlifyToken, + { appId, + description, + document, + tags } +) => { + const result = await fetchOneGraph( + null, + appId, + operationsDoc, + 'CreatePersistedQueryMutation', + { + nfToken: netlifyToken, + appId, + query: document, + tags, + description + }, + ) + + const persistedQuery = + result.data + && result.data.oneGraph + && result.data.oneGraph.createPersistedQuery + && result.data.oneGraph.createPersistedQuery.persistedQuery + + return persistedQuery +} + +const loadCLISession = (state) => + state.get('oneGraphSessionId') + +const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { + let oneGraphSessionId = loadCLISession(state) + if (!oneGraphSessionId) { + const oneGraphSession = await createCLISession(netlifyToken, site.id, "testing") + state.set('oneGraphSessionId', oneGraphSession.id) + oneGraphSessionId = state.get('oneGraphSessionId') + } + + const enabledServices = ['npm', 'github', 'rss'] + const schema = await fetchOneGraphSchema(site.id, enabledServices) + + const updateGraphQLOperationsFile = async (docId) => { + const persistedDoc = await fetchPersistedQuery(netlifyToken, site.id, docId) + if (!persistedDoc) { + console.warn("No persisted doc found for:", docId) + return + } + + const doc = persistedDoc.query + writeGraphQLOperationsSourceFile(netligraphPath, doc) + const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(netligraphPath) + const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + generateFunctionsFile(netligraphPath, schema, appOperationsDoc, operations) + console.info("Regenerated netligraph functions files") + } + + const handleEvent = async (event) => { + const { __typename, payload } = await event + switch (__typename) { + case 'OneGraphNetlifyCliSessionTestEvent': + handleEvent(payload) + break; + case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': + generateHandler(netligraphPath, schema, payload.operationId, payload) + break; + case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': + updateGraphQLOperationsFile(payload.docId) + break; + default: { + console.log("Unrecognized event received", __typename, payload) + break + } + } + } + + monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, + { + onEvents: (events) => { + console.time("events:process") + events.forEach(handleEvent) + console.timeEnd("events:process") + return events.map(event => event.id) + }, + onError: (error) => { + console.error(`OneGraph: ${error}`) + }, + onClose: () => { + console.log("OneGraph: closed") + } + }) +} + + +module.exports = { + ackCLISessionEvents, + createCLISession, + createPersistedQuery, + fetchOneGraphPersisted, + fetchOneGraphSchemaJson, + fetchOneGraphSchema, + fetchPersistedQuery, + loadCLISession, + monitorCLISessionEvents, + startOneGraphCLISession +} \ No newline at end of file diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js new file mode 100644 index 00000000000..c8d5b2633f0 --- /dev/null +++ b/src/lib/oneGraph/graphql-helpers.js @@ -0,0 +1,490 @@ +const { TypeInfo, getNamedType, isEnumType, isInputObjectType, isInterfaceType, isListType, isNonNullType, isObjectType, isUnionType, isWrappingType, parseType, print, typeFromAST, visit, visitWithTypeInfo, } = require('graphql'); + +const capitalizeFirstLetter = (string) => + string.charAt(0).toUpperCase() + string.slice(1); + + +const gatherAllReferencedTypes = (schema, query) => { + const types = new Set([]); + const typeInfo = new TypeInfo(schema); + visit(query, visitWithTypeInfo(typeInfo, { + enter: () => { + const fullType = typeInfo.getType(); + if (fullType) { + const typ = getNamedType(fullType); + if (typ) + types.add(typ.name.toLocaleLowerCase().replace('oneme', '')); + } + }, + })); + const result = [...types]; + return result; +} + +const gatherVariableDefinitions = (definition) => { + const extract = (varDef) => [ + varDef.variable.name.value, + print(varDef.type), + ]; + return (definition?.variableDefinitions?.map(extract) || []).sort(([a], [b]) => a.localeCompare(b)); +} + +const typeScriptForGraphQLType = (schema, gqlType) => { + const scalarMap = { + String: 'string', + ID: 'string', + Int: 'number', + Float: 'number', + Boolean: 'boolean', + }; + if (isListType(gqlType)) { + const subType = typeScriptForGraphQLType(schema, gqlType.ofType); + return `Array<${subType}>`; + } + if (isObjectType(gqlType) || isInputObjectType(gqlType)) { + const fields = Object.values(gqlType.getFields()).map((field) => { + const nullable = !isNonNullType(field.type); + const type = typeScriptForGraphQLType(schema, field.type); + const description = field.description + ? `/** +* ${field.description} +*/ +` + : ''; + return `${description}"${field.name}"${nullable ? '?' : ''}: ${type}`; + }); + return `{${fields.join(', ')}}`; + } + if (isWrappingType(gqlType)) { + return typeScriptForGraphQLType(schema, gqlType.ofType); + } + if (isEnumType(gqlType)) { + const values = gqlType.getValues(); + const enums = values.map((enumValue) => `"${enumValue.value}"`); + return enums.join(' | '); + } + + const namedType = getNamedType(gqlType); + // @ts-ignore metaprogramming + const basicType = scalarMap[namedType?.name] || 'any'; + return basicType; + +} + +const typeScriptSignatureForOperationVariables = (variableNames, schema, operationDefinition) => { + const helper = (variableDefinition) => { + const variableName = variableDefinition.variable.name.value; + const result = [ + variableName, + variableDefinition, + ]; + return result; + }; + const variables = (operationDefinition.variableDefinitions || []) + .map(helper) + .filter(([variableName]) => variableNames.includes(variableName)); + const typesObject = variables.map(([varName, varDef]) => { + const printedType = print(varDef.type); + const parsedType = parseType(printedType); + // @ts-ignore + const gqlType = typeFromAST(schema, parsedType); + // @ts-ignore + const tsType = typeScriptForGraphQLType(schema, gqlType); + return [varName, tsType]; + }); + const typeFields = typesObject + .map(([name, tsType]) => `"${name}": ${tsType}`) + .join(', '); + const types = `{${typeFields}}`; + return types === '' ? 'null' : types; +} + +// @ts-ignore +const listCount = (gqlType) => { + let inspectedType = gqlType; + let listCount = 0; + let totalCount = 0; + while (isWrappingType(inspectedType)) { + if (isListType(inspectedType)) { + listCount += 1; + } + totalCount += 1; + if (totalCount > 30) { + console.warn('Bailing on potential infinite recursion'); + return -99; + } + inspectedType = inspectedType.ofType; + } + return listCount; +} + +const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fragmentDefinitions, shouldLog = true) => { + const scalarMap = { + String: 'string', + ID: 'string', + Int: 'number', + Float: 'number', + Boolean: 'boolean', + GitHubGitObjectID: 'string', + // JSON: "JSON", + }; + // @ts-ignore + const helper = (parentGqlType, selection) => { + if (!parentGqlType) { + return; + } + const parentNamedType = + // @ts-ignore + getNamedType(parentGqlType) || getNamedType(parentGqlType.type); + const alias = selection.alias?.value; + const name = selection?.name?.value; + const displayedName = alias || name; + // @ts-ignore + const field = parentNamedType.getFields()[name]; + const gqlType = field?.type; + if (name.startsWith('__')) { + return [ + displayedName, + { type: 'any', description: 'Internal GraphQL field' }, + ]; + } + const namedType = getNamedType(gqlType); + const isNullable = !isNonNullType(gqlType); + const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)); + const isObjectLike = isObjectType(namedType) || + isUnionType(namedType) || + isInterfaceType(namedType); + const sub = selection.selectionSet?.selections + // @ts-ignore + .map(function innerHelper(selection) { + if (selection.kind === 'Field') { + return helper(namedType, selection); + } + if (selection.kind === 'InlineFragment') { + const fragmentGqlType = typeFromAST(schema, selection.typeCondition); + if (!fragmentGqlType) { + return null; + } + const fragmentSelections = selection.selectionSet.selections.map( + // @ts-ignore + (subSelection) => { + const subSel = helper(fragmentGqlType, subSelection); + return subSel; + }); + return fragmentSelections; + } + if (selection.kind === 'FragmentSpread') { + const fragmentName = [selection.name.value]; + // @ts-ignore + const fragment = fragmentDefinitions[fragmentName]; + if (fragment) { + const fragmentGqlType = typeFromAST(schema, fragment.typeCondition); + if (!fragmentGqlType) { + return null; + } + const fragmentSelections = fragment.selectionSet.selections.map(innerHelper); + return fragmentSelections; + } + } + return null; + }) + .filter(Boolean) + // @ts-ignore + .reduce((acc, next) => { + if (Array.isArray(next[0])) { + return acc.concat(next); + } + + return [...acc, next]; + + }, []); + const nestingLevel = isList ? listCount(gqlType) : 0; + const isEnum = isEnumType(namedType); + const basicType = isEnum + ? // @ts-ignore + new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) + : // @ts-ignore + scalarMap[namedType?.name || 'any']; + let returnType; + if (isObjectLike) { + returnType = sub ? Object.fromEntries(sub) : null; + } + else if (basicType) { + returnType = basicType; + } + else { + returnType = 'any'; + } + if (returnType) { + let finalType = returnType; + for (let i = 0; i < nestingLevel; i++) { + finalType = [finalType]; + } + const entry = [ + displayedName, + { type: finalType, description: field?.description }, + ]; + return entry; + } + // @ts-ignore + console.warn('No returnType!', basicType, namedType.name, selection); + }; + const baseGqlType = operationDefinition.kind === 'OperationDefinition' + ? (operationDefinition.operation === 'query' + ? schema.getQueryType() + : operationDefinition.operation === 'mutation' + ? schema.getMutationType() + : operationDefinition.operation === 'subscription' + ? schema.getSubscriptionType() + : null) + : (operationDefinition.kind === 'FragmentDefinition' + ? // @ts-ignore + schema.getType(operationDefinition.typeCondition.name.value) + : null); + const selections = operationDefinition.selectionSet?.selections; + const sub = selections?.map((selection) => helper(baseGqlType, selection)); + if (sub) { + // @ts-ignore + const object = Object.fromEntries(sub); + const result = { + data: { + type: object, + description: 'Any data retrieved by the const function be returned here', + }, + errors: { + type: ['any'], + description: 'Any errors in the function will be returned here', + }, + }; + return result; + } + + return { + data: { + // @ts-ignore + type: 'any', + description: 'Any data retrieved by the const function be returned here', + }, + errors: { + type: ['any'], + description: 'Any errors in the function will be returned here', + }, + }; + +} + +const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions) => { + const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions); + const valueHelper = (value) => { + if (value?.type && typeof value.type === 'string') { + return value.type; + } + if (Array.isArray(value.type)) { + const subType = valueHelper({ type: value.type[0] }); + return `Array<${subType}>`; + } + if (value.type instanceof Set) { + // @ts-ignore + const enums = [...value.type.values()] + .map((value) => `"${value}"`) + .join(' | '); + return enums; + } + if (typeof value.type === 'object') { + const fields = objectHelper(value.type); + return `{ + ${fields.join(', ')} + }`; + } + }; + // @ts-ignore + function objectHelper(obj) { + return Object.entries(obj).map(([name, value]) => { + // @ts-ignore + const { description, type } = value; + // @ts-ignore + const tsType = valueHelper(value); + const doc = description + ? `/** +* ${description} +*/ +` + : ''; + return `${doc}"${name}": ${tsType}`; + }); + } + const fields = objectHelper(typeMap).join(', '); + return `{${fields}}`; +} + +const typeScriptTypeNameForOperation = (name) => `${capitalizeFirstLetter(name)}Payload` + +const typeScriptSignatureForOperation = (schema, operationDefinition, fragmentDefinitions) => { + const types = typeScriptForOperation(schema, operationDefinition, fragmentDefinitions); + const name = operationDefinition.name?.value || 'unknown'; + return `${types}`; +} + +/** + * Doesn't patch e.g. fragments + */ +const patchSubscriptionWebhookField = ({ definition, schema, }) => { + if (definition.operation !== 'subscription') { + return definition; + } + const subscriptionType = schema.getSubscriptionType(); + if (!subscriptionType) { + return definition; + } + const newSelections = definition.selectionSet.selections.map((selection) => { + if (selection.kind !== 'Field') + return selection; + const field = subscriptionType.getFields()[selection.name.value]; + const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl'); + const selectionHasWebhookUrlArg = selection.arguments?.some((arg) => arg.name.value === 'webhookUrl'); + if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { + return { + ...selection, + arguments: [ + ...(selection.arguments || []), + { + kind: 'Argument', + name: { + kind: 'Name', + value: 'webhookUrl', + }, + value: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ], + }; + } + return selection; + }); + const hasWebhookVariableDefinition = definition.variableDefinitions?.find((varDef) => varDef.variable.name.value === 'netligraphWebhookUrl'); + const variableDefinitions = hasWebhookVariableDefinition + ? definition.variableDefinitions + : [ + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'String', + }, + }, + }, + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ]; + return { + ...definition, + // @ts-ignore: Handle edge cases later + variableDefinitions, + // @ts-ignore: Handle edge cases later + selectionSet: { ...definition.selectionSet, selections: newSelections }, + }; +} + +const patchSubscriptionWebhookSecretField = ({ definition, schema, }) => { + if (definition.operation !== 'subscription') { + return definition; + } + const subscriptionType = schema.getSubscriptionType(); + if (!subscriptionType) { + return definition; + } + const newSelections = definition.selectionSet.selections.map((selection) => { + if (selection.kind !== 'Field') + return selection; + const field = subscriptionType.getFields()[selection.name.value]; + const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret'); + const selectionHasWebhookSecretArg = selection.arguments?.some((arg) => arg.name.value === 'secret'); + if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { + return { + ...selection, + arguments: [ + ...(selection.arguments || []), + { + kind: 'Argument', + name: { + kind: 'Name', + value: 'secret', + }, + value: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ], + }; + } + return selection; + }); + const hasWebhookVariableDefinition = definition.variableDefinitions?.find((varDef) => varDef.variable.name.value === 'netligraphWebhookSecret'); + const variableDefinitions = hasWebhookVariableDefinition + ? definition.variableDefinitions + : [ + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'OneGraphSubscriptionSecretInput', + }, + }, + }, + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ]; + return { + ...definition, + // @ts-ignore: Handle edge cases later + variableDefinitions, + // @ts-ignore: Handle edge cases later + selectionSet: { ...definition.selectionSet, selections: newSelections }, + }; +} + +module.exports = { + capitalizeFirstLetter, + gatherAllReferencedTypes, + gatherVariableDefinitions, + typeScriptForGraphQLType, + typeScriptSignatureForOperationVariables, + listCount, + typeScriptDefinitionObjectForOperation, + typeScriptForOperation, + typeScriptTypeNameForOperation, + typeScriptSignatureForOperation, + patchSubscriptionWebhookField, + patchSubscriptionWebhookSecretField, +} \ No newline at end of file diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js new file mode 100644 index 00000000000..6e3f13e3c89 --- /dev/null +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -0,0 +1,580 @@ +const { parse, print } = require('graphql') + +let operationNodesMemo = [null, null]; + +const getOperationNodes = ( + query, +) => { + if (operationNodesMemo[0] === query && operationNodesMemo[1]) { + return operationNodesMemo[1]; + } + const operationDefinitions = []; + try { + parse(query).definitions.forEach(def => { + if ( + def.kind === 'FragmentDefinition' || + def.kind === 'OperationDefinition' + ) { + operationDefinitions.push(def); + } + }) + } catch (error) { + // ignore + } + operationNodesMemo = [query, operationDefinitions]; + return operationDefinitions; +} + +const getOperationName = ( + operationDefinition +) => + operationDefinition.name + ? operationDefinition.name.value + : operationDefinition.operation; + +const getOperationDisplayName = (operationDefinition) => + operationDefinition.name + ? operationDefinition.name.value + : ``; + +const formatVariableName = (name) => { + const uppercasePattern = /[A-Z]/g; + + return ( + name.charAt(0).toUpperCase() + + name + .slice(1) + .replace(uppercasePattern, '_$&') + .toUpperCase() + ); +} + +const getUsedVariables = ( + variables, + operationDefinition, +) => + (operationDefinition.variableDefinitions || []).reduce( + (usedVariables, variable) => { + const variableName = variable.variable.name.value; + if (variables[variableName]) { + usedVariables[variableName] = variables[variableName]; + } + + return usedVariables; + }, + {}, + ); + + +const findFragmentDependencies = ( + operationDefinitions, + definition, +) => { + const fragmentByName = (name) => + operationDefinitions.find(def => def.name.value === name); + + + const findReferencedFragments = ( + selectionSet, + ) => { + const { selections } = selectionSet; + + const namedFragments = selections + .map(selection => { + if (selection.kind === 'FragmentSpread') { + return fragmentByName(selection.name.value); + } + return null; + + }) + .filter(Boolean); + + const nestedNamedFragments = selections.reduce( + (acc, selection) => { + if ( + (selection.kind === 'Field' || + selection.kind === 'SelectionNode' || + selection.kind === 'InlineFragment') && + selection.selectionSet !== undefined + ) { + return [...acc, ...findReferencedFragments(selection.selectionSet)]; + } + return acc; + + }, + [], + ); + + return [...namedFragments, ...nestedNamedFragments]; + }; + + const { selectionSet } = definition; + + return findReferencedFragments(selectionSet); +}; + + +const operationDataByName = (graph, name) => graph.find(operationData => operationData.name === name); + + +const topologicalSortHelper = ( + { graph, + node, + temp, + visited }, + result, +) => { + temp[node.name] = true; + const neighbors = node.fragmentDependencies; + neighbors.forEach(fragmentDependency => { + const fragmentOperationData = operationDataByName( + graph, + fragmentDependency.name.value, + ); + + if (!fragmentOperationData) { + return; + } + + if (temp[fragmentOperationData.name]) { + console.error('The operation graph has a cycle'); + return; + } + if (!visited[fragmentOperationData.name]) { + topologicalSortHelper( + { + node: fragmentOperationData, + visited, + temp, + graph + }, + result, + ); + } + }) + temp[node.name] = false; + visited[node.name] = true; + result.push(node); +} + +const toposort = (graph) => { + const result = []; + const visited = {}; + const temp = {}; + graph.forEach(node => { + if (!visited[node.name] && !temp[node.name]) { + topologicalSortHelper({ node, visited, temp, graph }, result); + } + }) + return result; +} + +const computeOperationDataList = ({ + query, + variables, +}) => { + const operationDefinitions = getOperationNodes(query); + + const fragmentDefinitions = []; + + operationDefinitions.forEach(operationDefinition => { + if (operationDefinition.kind === 'FragmentDefinition') { + fragmentDefinitions.push(operationDefinition); + } + }) + + const rawOperationDataList = operationDefinitions.map( + ( + operationDefinition + ) => ({ + query: print(operationDefinition), + name: getOperationName(operationDefinition), + displayName: getOperationDisplayName(operationDefinition), + // $FlowFixMe: Come back for this + type: operationDefinition.operation || 'fragment', + variableName: formatVariableName(getOperationName(operationDefinition)), + variables: getUsedVariables(variables, operationDefinition), + operationDefinition, + fragmentDependencies: findFragmentDependencies( + fragmentDefinitions, + operationDefinition, + ), + }), + ); + + const operationDataList = toposort(rawOperationDataList); + + return { + operationDefinitions, + fragmentDefinitions, + rawOperationDataList, + operationDataList, + }; +}; + +const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) + +const unnamedSymbols = new Set(['query', 'mutation', 'subscription']); + +const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) + +const addLeftWhitespace = (string, padding) => + string + .split('\n') + .map(line => line.padStart(padding)) + .join('\n'); + + +const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') + + +const snippetOptions = [ + { + id: 'postHttpMethod', + label: 'POST function', + initial: true, + }, + { + id: 'useClientAuth', + label: "Use user's OAuth token", + initial: false, + }, +] + + +const operationFunctionName = (operationData) => { + const { type } = operationData + + let prefix = 'unknow' + switch (type) { + case 'query': + prefix = 'fetch' + break; + case 'mutation': + prefix = 'execute' + break; + case 'subscription': + prefix = 'subscribeTo' + break; + default: + break; + } + + const fnName = prefix + (prefix.length === 0 ? operationData.name : capitalizeFirstLetter(operationData.name)) + + return fnName +} + +const coercerFor = (type, name) => { + const typeName = print(type).replace(/\W+/gi, '').toLocaleLowerCase() + + switch (typeName) { + case 'string': + return `${name}` + case 'int': + return `parseInt(${name})` + case 'float': + return `parseFloat(${name})` + case 'boolean': + return `${name} === 'true'` + default: + return `${name}` + } +} + +const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { + const invocations = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map((namedOperationData) => { + const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( + (def) => def.variable.name.value, + ) + + const pluckers = { + get: + namedOperationData.operationDefinition.variableDefinitions + ?.map((def) => { + const name = def.variable.name.value + const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) + return `const ${name} = ${withCoercer}` + }) + ?.join('\n ') || '', + post: + namedOperationData.operationDefinition.variableDefinitions + ?.map((def) => { + const name = def.variable.name.value + return `const ${name} = eventBodyJson?.${name}` + }) + .join('\n ') || '', + } + + let variableValidation = '' + + let requiredVariableCount = 0 + + if ( + Boolean(namedOperationData.operationDefinition.variableDefinitions) && + (namedOperationData.operationDefinition.variableDefinitions?.length || 0) > 0 + ) { + const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions + .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) + .filter(Boolean) + + requiredVariableCount = requiredVariableNames.length + + // TODO: Filter nullable variables + const condition = requiredVariableNames.map((name) => `${name} === undefined || ${name} === null`).join(' || ') + + const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') + + variableValidation = ` if (${condition}) { + return { + statusCode: 422, + body: JSON.stringify({error: 'You must supply parameters for: ${message}'}), + } + }` + } + + return `${pluckerStyle === 'get' ? pluckers.get : pluckers.post} + +${requiredVariableCount > 0 ? variableValidation : ''} + + const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name + }Data } = await Lib.${operationFunctionName(namedOperationData)}({${params.join(', ')}}, null /* accessToken */); + + if (${namedOperationData.name}Errors) { + console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); + } + + console.log(JSON.stringify(${namedOperationData.name}Data, null, 2));` + }) + .join('\n\n') + + return invocations +} + +const clientSideInvocations = ( + operationDataList, + pluckerStyle, + useClientAuth, +) => { + const invocations = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map((namedOperationData) => { + const whitespace = 8; + + const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( + (def) => def.variable.name.value, + ) + let bodyPayload = '' + + if ( + Boolean(namedOperationData.operationDefinition.variableDefinitions) && + (namedOperationData.operationDefinition.variableDefinitions?.length || 0) > 0 + ) { + const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( + (def) => def.variable.name.value, + ) + + const variables = variableNames.map((name) => `"${name}": ${name}`).join(',\n') + + bodyPayload = ` +${variables} +` + } + + const clientAuth = useClientAuth + ? `, + headers: { + ...oneGraphAuth?.authHeaders() + }` + : '' + + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { + const {${params.join(', ')}} = params || {}; + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map(param => `${param}=\${${param}}`).join('&')}` : ''}\`, + { + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, + body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}`} + }); + + const text = await resp.text(); + + return JSON.parse(text); +}` + }) + .join('\n\n') + + return invocations +} + +const subscriptionHandler = ({ + filename, + operationData, +}) => `/** Netlify serverless function: +Save this snippet in \`netlify/functions/${filename}\` +*/ +import { withSecrets } from "@sgrove/netlify-functions"; +import Lib from "../netligraphFunctions"; + +export const handler = withSecrets(async (event, { secrets }) => { + const payload = Lib.parseAndVerify${operationData.name}Event(event) + + if (!payload) { + return { + statusCode: 412, + data: JSON.stringify({ + success: false, + error: 'Unable to verify payload signature', + }), + } + } + const { errors: ${operationData.name}Errors, data: ${operationData.name}Data } = payload; + + if (${operationData.name}Errors) { + console.error(${operationData.name}Errors); + } + + console.log(${operationData.name}Data); + + /** + * If you want to unsubscribe from this webhook + * in order to stop receiving new events, + * simply return status 410, e.g.: + * + * return { + * statusCode: 410, + * body: JSON.stringify(null), + * headers: { + * 'content-type': 'application/json', + * }, + * } + */ + + return { + statusCode: 200, + body: JSON.stringify({ + successfullyProcessedIncomingWebhook: true, + }), + headers: { + 'content-type': 'application/json', + }, + } +}) +` + +// Snippet generation! +const netlifyFunctionSnippet = { + language: 'JavaScript', + codeMirrorMode: 'javascript', + name: 'Netlify Function', + options: snippetOptions, + generate: (opts) => { + const { options } = opts + + const operationDataList = opts.operationDataList.map((operationData, idx) => { + if (!isOperationNamed(operationData)) { + return { + ...operationData, + name: `unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1}`.trim(), + query: `# Consider giving this ${operationData.type} a unique, descriptive +# name in your application as a best practice +${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, + } + } + return operationData + }) + + const firstOperation = operationDataList.find( + (operation) => operation.operationDefinition.kind === 'OperationDefinition', + ) + + if (!firstOperation) { + return '// No operation found' + } + + const filename = `${firstOperation.name}.js` + + const isSubscription = firstOperation.type === 'subscription' + + if (isSubscription) { + const result = subscriptionHandler({ + filename, + operationData: firstOperation, + }) + + return result + } + + const fetcherInvocation = asyncFetcherInvocation( + operationDataList, + options?.postHttpMethod === true ? 'post' : 'get', + ) + + const netligraphClient = options.useClientAuth + ? ` + // Use the incoming authorization header when making API calls on the user's behalf + const accessToken = event.headers["authorization"]?.split(" ")[1] + +` + : '' + + const passThroughResults = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map( + (operationData) => `${operationData.name}Errors: ${operationData.name}Errors, +${operationData.name}Data: ${operationData.name}Data`, + ) + .join(',\n') + + const clientSideCalls = clientSideInvocations( + operationDataList, + options?.postHttpMethod === true ? 'post' : 'get', + options.useClientAuth, + ) + + const whitespace = 6; + + const snippet = `/** Netlify serverless function: +Save this snippet in \`netlify/functions/${filename}\` +*/ +import { withSecrets } from "@sgrove/netlify-functions"; +import Lib from "../netligraphFunctions"; + +export const handler = withSecrets(async (event, { secrets }) => { + ${netligraphClient} + const eventBodyJson = JSON.parse(event.body || "{}"); + + ${fetcherInvocation} + + return { + statusCode: 200, + body: JSON.stringify({ + success: true, +${addLeftWhitespace(passThroughResults, whitespace)} + }), + headers: { + 'content-type': 'application/json', + }, + } +}) + +/** + * Client-side invocations: + * Call your Netlify function from the browser (after saving + * the code to \`${filename}\`) with these helpers: + */ + +/** +${clientSideCalls} +*/ +` + + return collapseExtraNewlines(snippet.trim()) + }, +} + +module.exports = { computeOperationDataList, netlifyFunctionSnippet } \ No newline at end of file diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js new file mode 100644 index 00000000000..9f969c46ae9 --- /dev/null +++ b/src/lib/oneGraph/netligraph.js @@ -0,0 +1,638 @@ +const fs = require('fs') +const process = require('process') + +const { Kind, parse, print } = require('graphql') + +const { + patchSubscriptionWebhookField, + patchSubscriptionWebhookSecretField, + typeScriptSignatureForOperation, + typeScriptSignatureForOperationVariables, +} = require('./graphql-helpers'); +const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets'); + +const netligraphPath = `${process.cwd()}/netlify`; + +const capitalizeFirstLetter = (string) => + string.charAt(0).toUpperCase() + string.slice(1) + +const generatedOneGraphClient = ` +const fetch = (appId, options) => { + var reqBody = options.body || null + const userHeaders = options.headers || {} + const headers = { + ...userHeaders, + 'Content-Type': 'application/json', + 'Content-Length': reqBody.length, + } + + var reqOptions = { + method: 'POST', + headers: headers, + timeout: 30000, + } + + const url = 'https://serve.onegraph.com/graphql?app_id=' + appId + + const respBody = [] + + return new Promise((resolve, reject) => { + var req = https.request(url, reqOptions, (res) => { + if (res.statusCode < 200 || res.statusCode > 299) { + return reject( + new Error( + "Netlify OneGraph return non - OK HTTP status code" + res.statusCode, + ), + ) + } + + res.on('data', (chunk) => respBody.push(chunk)) + + res.on('end', () => { + const resString = Buffer.concat(respBody).toString() + resolve(resString) + }) + }) + + req.on('error', (e) => { + console.error('Error making request to Netlify OneGraph: ', e) + }) + + req.on('timeout', () => { + req.destroy() + reject(new Error('Request to Netlify OneGraph timed out')) + }) + + req.write(reqBody) + req.end() + }) +} + +export async function fetchOneGraphPersisted( + accessToken, + docId, + operationName, + variables, +) { + const payload = { + doc_id: docId, + variables: variables, + operationName: operationName, + } + + const result = await fetch( + process.env.SITE_ID, + { + method: 'POST', + headers: { + Authorization: accessToken ? "Bearer " + accessToken : '', + }, + body: JSON.stringify(payload), + }, + ) + + // @ts-ignore + return JSON.parse(result) +} + +export async function fetchOneGraph( + accessToken, + query, + operationName, + variables, +) { + const payload = { + query: query, + variables: variables, + operationName: operationName, + } + + const result = await fetch( + process.env.SITE_ID, + { + method: 'POST', + headers: { + Authorization: accessToken ? "Bearer " + accessToken : '', + }, + body: JSON.stringify(payload), + }, + ) + + // @ts-ignore + return JSON.parse(result) +} +` + +const subscriptionParserName = (fn) => `parseAndVerify${fn.operationName}Event` + +const subscriptionFunctionName = (fn) => `subscribeTo${fn.operationName}` + + +const generateSubscriptionFunctionTypeDefinition = ( + schema, + fn, + fragments, +) => { + const parsingFunctionReturnSignature = typeScriptSignatureForOperation( + schema, + fn.parsedOperation, + fragments + ) + + const variableNames = (fn.parsedOperation.variableDefinitions || []).map( + (varDef) => varDef.variable.name.value + ) + + const variableSignature = typeScriptSignatureForOperationVariables( + variableNames, + schema, + fn.parsedOperation + ) + + const jsDoc = (fn.description || '') + .replaceAll('*/', '!') + .split('\n') + .join('\n* ') + + return `/** + * ${jsDoc} + */ + export function ${subscriptionFunctionName(fn)} ( + /** + * This will be available in your webhook handler as a query parameter. + * Use this to keep track of which subscription you're receiving + * events for. + */ + netligraphWebhookId: string, + variables: ${variableSignature}, + accessToken?: string | null + ) : void + + /** + * Verify the ${fn.operationName} event body is signed securely, and then parse the result. + */ + export function ${subscriptionParserName( + fn + )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} +` +} + +// TODO: Handle fragments +const generateSubscriptionFunction = ( + schema, + fn, +) => { + const patchedWithWebhookUrl = patchSubscriptionWebhookField({ + schema, + definition: fn.parsedOperation, + }) + + const patched = patchSubscriptionWebhookSecretField({ + schema, + definition: patchedWithWebhookUrl, + }) + + // TODO: Don't allow unnamed operations as subscription + const filename = patched.name && patched.name.value || 'Unknown' + + const body = print(patched) + const safeBody = body.replaceAll('${', '\\${') + + return `const ${subscriptionFunctionName(fn)} = async ( + /** + * This will be available in your webhook handler as a query parameter. + * Use this to keep track of which subscription you're receiving + * events for. + */ + netligraphWebhookId, + variables, + accessToken, + ) => { + const netligraphWebhookUrl = \`\${process.env.DEPLOY_URL}/.netlify/functions/${filename}?netligraphWebhookId=\${netligraphWebhookId}\` + const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET + const fullVariables = {...variables, netligraphWebhookUrl: netligraphWebhookUrl, netligraphWebhookSecret: { hmacSha256Key: secret }} + + const persistedInput = { + doc_id: "${fn.id}", + oeprationName: "${fn.operationName}", + variables: fullVariables, + accessToken: accessToken + } + + const subscriptionOperationDoc = \`${safeBody}\`; + + const result = await // fetchOneGraphPersisted(persistedInput) + fetchOneGraph(accessToken, subscriptionOperationDoc, "${fn.operationName}", fullVariables) + + } + +const ${subscriptionParserName( + fn + )} = (event) => { + if (!verifyRequestSignature({ event: event })) { + console.warn("Unable to verify signature for ${filename}") + return null + } + + return JSON.parse(event.body || '{}') +}` +} + +const makeFunctionName = (kind, operationName) => { + if (kind === 'query') { + return `fetch${capitalizeFirstLetter(operationName)}` + } + if (kind === 'mutation') { + return `execute${capitalizeFirstLetter(operationName)} ` + } + + return capitalizeFirstLetter(operationName) +} + +const queryToFunctionDefinition = (fullSchema, persistedQuery) => { + const basicFn = { + id: persistedQuery.id, + definition: persistedQuery.query, + description: persistedQuery.description + } + + const body = basicFn.definition + const safeBody = body.replaceAll('${', '\\${') + + const parsed = parse(body) + const operations = parsed.definitions.filter( + (def) => def.kind === 'OperationDefinition' + ) + const fragments = parsed.definitions.filter( + (def) => def.kind === 'FragmentDefinition' + ) + + if (!operations) { + throw new Error(`Operation definition is required in ${basicFn.id}`) + } + + const [operation] = operations + + const returnSignature = typeScriptSignatureForOperation( + fullSchema, + operation, + fragments + ) + + const variableNames = (operation.variableDefinitions || []).map( + (varDef) => varDef.variable.name.value + ) + + const variableSignature = typeScriptSignatureForOperationVariables( + variableNames, + fullSchema, + operation + ) + + const operationName = operation.name && operation.name.value + + if (!operationName) { + throw new Error(`Operation name is required in ${basicFn.definition}\n\tfound: ${JSON.stringify(operation.name)}`) + } + + const fn = { + ...basicFn, + fnName: makeFunctionName(operation.operation, operationName), + safeBody, + kind: operation.operation, + variableSignature, + returnSignature, + operationName, + parsedOperation: operation + } + + return fn +} + +const generateJavaScriptClient = ( + schema, + operationsDoc, + enabledFunctions +) => { + const safeOperationsDoc = operationsDoc.replaceAll('${', '\\${').replaceAll('`', '\\`'); + const functionDecls = enabledFunctions.map((fn) => { + if (fn.kind === 'subscription') { + const fragments = [] + return generateSubscriptionFunction(schema, fn, fragments) + } + + + const dynamicFunction = `const ${fn.fnName} = ( + variables, + accessToken, + ) => { + return fetchOneGraph({ + query: \`${fn.safeBody}\`, + variables: variables, + accessToken: accessToken + }) +} + + ` + + const staticFunction = `const ${fn.fnName} = ( + variables, + accessToken, + ) => { +// return fetchOneGraphPersisted(accessToken, "${fn.id}", "${fn.operationName}", variables) + return fetchOneGraph(accessToken, operationsDoc, "${fn.operationName}", variables) +} + +` + return fn.id ? staticFunction : dynamicFunction + }) + + const exportedFunctionsObjectProperties = enabledFunctions + .map((fn) => { + const isSubscription = fn.kind === 'subscription' + + if (isSubscription) { + const subscriptionFnName = subscriptionFunctionName(fn) + const parserFnName = subscriptionParserName(fn) + + const jsDoc = (fn.description || '') + .replaceAll('*/', '') + .split('\n') + .join('\n* ') + + return `/** + * ${jsDoc} + */ + ${subscriptionFnName}:${subscriptionFnName}, + /** + * Verify the event body is signed securely, and then parse the result. + */ + ${parserFnName}:${parserFnName}` + } + const jsDoc = (fn.description || '') + .replaceAll('*/', '') + .split('\n') + .join('\n* ') + + return `/** + * ${jsDoc} + */ + ${fn.fnName}:${fn.fnName}` + + }) + .join(',\n ') + + const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! +import https from 'https' +import crypto from 'crypto' + +export const verifySignature = (input) => { + const secret = input.secret + const body = input.body + const signature = input.signature + + if (!signature) { + console.error('Missing signature') + return false + } + + const sig = {} + for (const pair of signature.split(',')) { + const [k, v] = pair.split('=') + sig[k] = v + } + + if (!sig.t || !sig.hmac_sha256) { + console.error('Invalid signature header') + return false + } + + const hash = crypto + .createHmac('sha256', secret) + .update(sig.t) + .update('.') + .update(body) + .digest('hex') + + if ( + !crypto.timingSafeEqual( + Buffer.from(hash, 'hex'), + Buffer.from(sig.hmac_sha256, 'hex') + ) + ) { + console.error('Invalid signature') + return false + } + + if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) { + console.error('Request is too old') + return false + } + + return true +} + +const operationsDoc = \`${safeOperationsDoc}\` + +${generatedOneGraphClient} + +export const verifyRequestSignature = (request) => { + const event = request.event + const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET + const signature = event.headers['x-onegraph-signature'] + const body = event.body + + if (!secret) { + console.error( + 'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request' + ) + return false + } + + return verifySignature({ secret, signature, body: body || '' }) +} + + ${functionDecls.join('\n\n')} + + const functions = { + ${exportedFunctionsObjectProperties} + } + + export default functions + ` + + // const formatted = Prettier.format(source, { + // tabWidth: 2, + // semi: false, + // singleQuote: true, + // parser: 'babel-ts', + // }) + + return source +} + +const generateTypeScriptDefinitions = ( + schema, + enabledFunctions +) => { + const functionDecls = enabledFunctions.map((fn) => { + const isSubscription = fn.kind === 'subscription' + + if (isSubscription) { + const fragments = [] + return generateSubscriptionFunctionTypeDefinition(schema, fn, fragments) + } + + if (isSubscription) { + const subscriptionFnName = subscriptionFunctionName(fn) + const parserFnName = subscriptionParserName(fn) + + const jsDoc = (fn.description || '') + .replaceAll('*/', '') + .split('\n') + .join('\n* ') + + return `/** + * ${jsDoc} + */ + ${subscriptionFnName}:${subscriptionFnName}, + /** + * Verify the event body is signed securely, and then parse the result. + */ + ${parserFnName}:${parserFnName}` + } + const jsDoc = (fn.description || ``) + .replaceAll('*/', '') + .split('\n') + .join('\n* ') + + return `/** + * ${jsDoc} + */ + export function ${fn.fnName}(variables: ${fn.variableSignature}, accessToken?: string): Promise<${fn.returnSignature}>;` + + }) + + const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! +${functionDecls.join('\n\n')} +` + + return source +} + +const generateFunctionsFile = (basePath, schema, operationsDoc, queries) => { + const functionDefinitions = queries.map((query) => queryToFunctionDefinition(schema, query)) + const clientSource = generateJavaScriptClient(schema, operationsDoc, functionDefinitions) + const typeDefinitionsSource = generateTypeScriptDefinitions(schema, functionDefinitions) + + fs.writeFileSync(`${basePath}/netligraphFunctions.mjs`, clientSource, 'utf8') + fs.writeFileSync(`${basePath}/netligraphFunctions.d.ts`, typeDefinitionsSource, 'utf8') +} + +const extractFunctionsFromOperationDoc = ( + parsedDoc +) => { + const fns = parsedDoc.definitions + .map((next) => { + if (next.kind !== 'OperationDefinition') { + return null; + } + + const key = next.name?.value; + + const directive = next.directives?.find( + (localDirective) => localDirective.name.value === 'netligraph' + ); + const docArg = + directive && + directive.arguments?.find((arg) => arg.name.value === 'doc'); + + const docString = docArg?.value?.value; + + if (!key || !docString) { + return null; + } + + const operation = { + id: key, + description: docString, + operation: next.operation, + query: print(next), + }; + + return operation; + }) + .filter(Boolean); + + return fns; +}; + +const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' + +const readGraphQLOperationsSourceFile = (basePath) => { + const fullFilename = `${basePath}/${sourceOperationsFilename}` + if (!fs.existsSync(fullFilename)) { + fs.closeSync(fs.openSync(fullFilename, 'w')) + } + const source = fs.readFileSync(fullFilename, 'utf8') + + return source +} + +const readAndParseGraphQLOperationsSourceFile = (basePath) => { + const source = readGraphQLOperationsSourceFile(basePath) + + try { + const parsedGraphQLDoc = parse(source, { + noLocation: true, + }) + + return [parsedGraphQLDoc] + } catch (error) { + return [] + } +} + +const writeGraphQLOperationsSourceFile = (basePath, operationDocString) => { + const graphqlSource = operationDocString + console.log("BasePath: ", basePath) + + fs.writeFileSync(`${basePath}/${sourceOperationsFilename}`, graphqlSource, 'utf8') +} + +const generateHandler = (basePath, schema, operationId, handlerOptions) => { + const [doc] = readAndParseGraphQLOperationsSourceFile(basePath) + const operation = doc.definitions.find(op => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) + + if (!operation) { + console.warn(`Operation ${operationId} not found in graphql.`) + } + + + const odl = computeOperationDataList(({ query: print(operation), variables: [] })) + + const source = netlifyFunctionSnippet.generate({ + operationDataList: odl.operationDataList, + schema, + options: handlerOptions + }) + + const newFunction = { + functionName: operationId, + } + + const filename = `netlify/functions/${newFunction.functionName}.ts` + + fs.writeFileSync(filename, source) +} + + +module.exports = { + extractFunctionsFromOperationDoc, + generateFunctionsFile, + generateHandler, + netligraphPath, + readGraphQLOperationsSourceFile, + readAndParseGraphQLOperationsSourceFile, + writeGraphQLOperationsSourceFile +} \ No newline at end of file From fb4097866ca96d793e1f6be7d588253459133503 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 22 Dec 2021 15:38:52 -0800 Subject: [PATCH 02/58] feat: clean up the code generation --- src/lib/oneGraph/client.js | 16 ++- .../netligraph-code-exporter-snippets.js | 101 +++++++++--------- src/lib/oneGraph/netligraph.js | 2 +- 3 files changed, 64 insertions(+), 55 deletions(-) diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 6f5f845ac98..6bfa0caaea7 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -3,7 +3,7 @@ const { buildClientSchema } = require('graphql') const fetch = require('node-fetch') -const { extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, netligraphPath, readAndParseGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile } = require("./netligraph") +const { extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require("./netligraph") const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' @@ -403,10 +403,11 @@ const monitorCLISessionEvents = ( shouldClose = true } - // TODO: Convert this to recursive setTimeout - const handle = setInterval(async () => { + let handle + + const helper = async () => { if (shouldClose) { - clearInterval(handle) + clearTimeout(handle) onClose() } @@ -448,7 +449,12 @@ const monitorCLISessionEvents = ( }, ) } - }, frequency) + + handle = setTimeout(helper, frequency) + } + + // Fire immediately to start rather than waiting the initial `frequency` + helper() return close } diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 6e3f13e3c89..e155670bea3 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,3 +1,4 @@ +/* eslint-disable no-unused-vars */ const { parse, print } = require('graphql') let operationNodesMemo = [null, null]; @@ -218,12 +219,14 @@ const unnamedSymbols = new Set(['query', 'mutation', 'subscription']); const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) -const addLeftWhitespace = (string, padding) => - string +const addLeftWhitespace = (string, padding) => { + const paddingString = ' '.repeat(padding); + + return string .split('\n') - .map(line => line.padStart(padding)) + .map(line => paddingString + line) .join('\n'); - +} const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') @@ -296,14 +299,14 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { ?.map((def) => { const name = def.variable.name.value const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) - return `const ${name} = ${withCoercer}` + return `const ${name} = ${withCoercer};` }) ?.join('\n ') || '', post: namedOperationData.operationDefinition.variableDefinitions ?.map((def) => { const name = def.variable.name.value - return `const ${name} = eventBodyJson?.${name}` + return `const ${name} = eventBodyJson?.${name};` }) .join('\n ') || '', } @@ -330,8 +333,10 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { variableValidation = ` if (${condition}) { return { statusCode: 422, - body: JSON.stringify({error: 'You must supply parameters for: ${message}'}), - } + body: JSON.stringify({ + error: 'You must supply parameters for: ${message}' + }), + }; }` } @@ -340,7 +345,8 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { ${requiredVariableCount > 0 ? variableValidation : ''} const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name - }Data } = await Lib.${operationFunctionName(namedOperationData)}({${params.join(', ')}}, null /* accessToken */); + }Data } = + await Netligraph.${operationFunctionName(namedOperationData)}({ ${params.join(', ')} }, accessToken); if (${namedOperationData.name}Errors) { console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); @@ -412,14 +418,13 @@ ${variables} const subscriptionHandler = ({ filename, operationData, -}) => `/** Netlify serverless function: -Save this snippet in \`netlify/functions/${filename}\` -*/ -import { withSecrets } from "@sgrove/netlify-functions"; -import Lib from "../netligraphFunctions"; +}) => `import { getSecrets } from "@netlify/functions"; +import Netligraph from "../netligraphFunctions"; -export const handler = withSecrets(async (event, { secrets }) => { - const payload = Lib.parseAndVerify${operationData.name}Event(event) +export const handler = async (event, context) => { + let secrets = await getSecrets(event); + + const payload = Netligraph.parseAndVerify${operationData.name}Event(event); if (!payload) { return { @@ -428,7 +433,7 @@ export const handler = withSecrets(async (event, { secrets }) => { success: false, error: 'Unable to verify payload signature', }), - } + }; } const { errors: ${operationData.name}Errors, data: ${operationData.name}Data } = payload; @@ -439,18 +444,18 @@ export const handler = withSecrets(async (event, { secrets }) => { console.log(${operationData.name}Data); /** - * If you want to unsubscribe from this webhook - * in order to stop receiving new events, - * simply return status 410, e.g.: - * - * return { - * statusCode: 410, - * body: JSON.stringify(null), - * headers: { - * 'content-type': 'application/json', - * }, - * } - */ + * If you want to unsubscribe from this webhook + * in order to stop receiving new events, + * simply return status 410, e.g.: + * + * return { + * statusCode: 410, + * body: JSON.stringify(null), + * headers: { + * 'content-type': 'application/json', + * }, + * } + */ return { statusCode: 200, @@ -460,8 +465,8 @@ export const handler = withSecrets(async (event, { secrets }) => { headers: { 'content-type': 'application/json', }, - } -}) + }; +}; ` // Snippet generation! @@ -514,14 +519,6 @@ ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + options?.postHttpMethod === true ? 'post' : 'get', ) - const netligraphClient = options.useClientAuth - ? ` - // Use the incoming authorization header when making API calls on the user's behalf - const accessToken = event.headers["authorization"]?.split(" ")[1] - -` - : '' - const passThroughResults = operationDataList .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) .map( @@ -538,14 +535,19 @@ ${operationData.name}Data: ${operationData.name}Data`, const whitespace = 6; - const snippet = `/** Netlify serverless function: -Save this snippet in \`netlify/functions/${filename}\` -*/ -import { withSecrets } from "@sgrove/netlify-functions"; -import Lib from "../netligraphFunctions"; + const snippet = `import { getSecrets } from "@netlify/functions"; +import Netligraph from "../netligraphFunctions"; + +export const handler = async (event, context) => { + // By default, all API calls use no authentication + let accessToken = null; -export const handler = withSecrets(async (event, { secrets }) => { - ${netligraphClient} + //// If you want to use the client's accessToken when making API calls on the user's behalf: + // accessToken = event.headers["authorization"]?.split(" ")[1] + + //// If you want to use the API with your own access token: + // accessToken = (await getSecrets(event))?.personalOmniAccessToken + const eventBodyJson = JSON.parse(event.body || "{}"); ${fetcherInvocation} @@ -559,8 +561,8 @@ ${addLeftWhitespace(passThroughResults, whitespace)} headers: { 'content-type': 'application/json', }, - } -}) + }; +}; /** * Client-side invocations: @@ -571,9 +573,10 @@ ${addLeftWhitespace(passThroughResults, whitespace)} /** ${clientSideCalls} */ + ` - return collapseExtraNewlines(snippet.trim()) + return collapseExtraNewlines(snippet) }, } diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 9f969c46ae9..8b5381770a9 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -595,7 +595,7 @@ const readAndParseGraphQLOperationsSourceFile = (basePath) => { const writeGraphQLOperationsSourceFile = (basePath, operationDocString) => { const graphqlSource = operationDocString - console.log("BasePath: ", basePath) + console.log("BasePath:", basePath) fs.writeFileSync(`${basePath}/${sourceOperationsFilename}`, graphqlSource, 'utf8') } From 5db491665882d50bb70b73799a3d5bfd30643874 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 22 Dec 2021 22:50:45 -0800 Subject: [PATCH 03/58] Fix up various imports and upserts --- src/commands/dev/dev.js | 14 +-- src/commands/graph/graph-edit.js | 34 ++++--- src/commands/graph/graph-pull.js | 44 ++++++--- src/lib/oneGraph/client.js | 162 ++++++++++++++++++++++++++++++- src/lib/oneGraph/netligraph.js | 1 - 5 files changed, 218 insertions(+), 37 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 9ce16ee57ff..d77dcc55ea1 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -11,7 +11,7 @@ const stripAnsiCc = require('strip-ansi-control-characters') const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') -const { startOneGraphCLISession } = require('../../lib/oneGraph/client') +const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/oneGraph/client') const { NETLIFYDEV, NETLIFYDEVERR, @@ -292,14 +292,16 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const oneGraphAdminToken = command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT && command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT.value; - - if (oneGraphAdminToken) { + if (site.id) { const netlifyToken = await command.authenticate() - + await ensureAppForSite(netlifyToken, site.id) startOneGraphCLISession({ netlifyToken, site, state }) } else { - console.log("No OneGraph token found, skipping OneGraph...") + console.warn( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + 'netlify init', + )} or ${chalk.yellow('netlify link')}?`, + ) } printBanner({ url }) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 35b5df6cd0c..3bccebc92de 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -2,26 +2,22 @@ const process = require('process') const gitRepoInfo = require('git-repo-info') -const { createCLISession, createPersistedQuery, loadCLISession } = require('../../lib/oneGraph/client') +const { createCLISession, createPersistedQuery, ensureAppForSite, loadCLISession } = require('../../lib/oneGraph/client') const { readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') -const { warn } = require('../../utils/command-helpers') +const { NETLIFYDEVERR, chalk } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') - const graphEdit = async (options, command) => { const { api, site, state } = command.netlify const siteId = site.id - if (!siteId) { - warn(`No Site ID found in current directory. -Run \`netlify link\` to connect to this folder to a site`) - return false - } - - const oneGraphAdminToken = command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT && command.netlify.cachedConfig.env.ONEGRAPH_ADMIN_JWT.value; - - if (!oneGraphAdminToken) { - command.error('You must set ONEGRAPH_ADMIN_JWT in your Netlify environment variables to edit a schema from OneGraph') + if (!site.id) { + console.error( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + 'netlify init', + )} or ${chalk.yellow('netlify link')}?`, + ) + process.exit(1) } console.time("graph:edit") @@ -31,10 +27,18 @@ Run \`netlify link\` to connect to this folder to a site`) const { branch } = gitRepoInfo() const cwd = process.cwd() const base = cwd; - const graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) + let graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) + + if (graphqlDocument.trim().length === 0) { + graphqlDocument = `query ExampleQuery { + __typename +}` + } const netlifyToken = await command.authenticate() + await ensureAppForSite(netlifyToken, siteId) + let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { const oneGraphSession = await createCLISession(netlifyToken, site.id, "testing") @@ -42,8 +46,6 @@ Run \`netlify link\` to connect to this folder to a site`) oneGraphSessionId = state.get('oneGraphSessionId') } - console.log(`Using OneGraph session ${oneGraphSessionId}`) - const persistedDoc = await createPersistedQuery(netlifyToken, { appId: siteId, description: "Temporary snapshot of local queries", diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index b7e7b7fb1ae..c664ab087e3 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,27 +1,47 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable no-unused-vars */ const fs = require('fs') +const process = require('process') -const { printSchema } = require('graphql') +const { parse, printSchema } = require('graphql') -const { fetchOneGraphSchema } = require('../../lib/oneGraph/client') -const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') + +const { ensureAppForSite, fetchEnabledServices, fetchOneGraphSchema } = require('../../lib/oneGraph/client') +const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { const { site } = command.netlify const siteId = site.id - // TODO: Get this from the app - const enabledServices = ['npm'] + if (!site.id) { + console.error( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + 'netlify init', + )} or ${chalk.yellow('netlify link')}?`, + ) + process.exit(1) + } + + const netlifyToken = await command.authenticate() + + await ensureAppForSite(netlifyToken, siteId) - const basePath = netligraphPath() + const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) + const enabledServices = enabledServicesInfo.map(service => service.service) const schema = await fetchOneGraphSchema(siteId, enabledServices) - const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) + let operationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + + if (operationsDoc.trim().length === 0) { + operationsDoc = `query ExampleQuery { +__typename +}` + } + + const parsedDoc = parse(operationsDoc) + const operations = extractFunctionsFromOperationDoc(parsedDoc) - const operationsDoc = readGraphQLOperationsSourceFile(basePath) - generateFunctionsFile(basePath, schema, operationsDoc, operations) - fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) + generateFunctionsFile(netligraphPath, schema, operationsDoc, operations) + fs.writeFileSync(`${netligraphPath}/netligraphSchema.graphql`, printSchema(schema)) } /** diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 6bfa0caaea7..a5096d25aaa 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -363,6 +363,90 @@ mutation AckCLISessionEventMutation( } } } +} + +query AppSchemaQuery( + $nfToken: String! + $appId: String! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + app(id: $appId) { + graphQLSchema { + appId + createdAt + id + services { + friendlyServiceName + logoUrl + service + slug + supportsCustomRedirectUri + supportsCustomServiceAuth + supportsOauthLogin + } + updatedAt + } + } + } +} + +mutation UpsertAppForSiteMutation( + $nfToken: String! + $siteId: String! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + upsertAppForNetlifySite( + input: { netlifySiteId: $siteId } + ) { + org { + id + name + } + app { + id + name + corsOrigins + customCorsOrigins { + friendlyServiceName + displayName + encodedValue + } + } + } + } +} + +mutation CreateNewSchemaMutation( + $nfToken: String! + $input: OneGraphCreateGraphQLSchemaInput! +) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createGraphQLSchema(input: $input) { + app { + graphQLSchema { + id + } + } + graphqlSchema { + id + services { + friendlyServiceName + logoUrl + service + slug + supportsCustomRedirectUri + supportsCustomServiceAuth + supportsOauthLogin + } + } + } + } }` const fetchPersistedQuery = async ( @@ -594,7 +678,6 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) const operations = extractFunctionsFromOperationDoc(parsedDoc) generateFunctionsFile(netligraphPath, schema, appOperationsDoc, operations) - console.info("Regenerated netligraph functions files") } const handleEvent = async (event) => { @@ -633,16 +716,91 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { }) } +const fetchAppSchema = async ( + authToken, + siteId +) => { + const result = await fetchOneGraph(authToken, siteId, operationsDoc, 'AppSchemaQuery', + { + nfToken: authToken, + appId: siteId, + }, + ); + + return result.data?.oneGraph?.app?.graphQLSchema +}; + +const upsertAppForSite = async ( + authToken, + siteId +) => { + const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'UpsertAppForSiteMutation', + { + nfToken: authToken, + siteId, + }, + ); + + return result.data?.oneGraph?.upsertAppForNetlifySite?.app +}; + +// export type CreateNewGraphQLSchemaInput = { +// /* Whether to set this schema as the default for the app. Defaults to false. */ +// setAsDefaultForApp: boolean; +// /* The list of services that this schema should use. Leave blank if you want to add support for all supported services. */ +// enabledServices: string[]; +// /* The id of the app that the schema should belong to. */ +// appId: string; +// parentId: string | undefined; +// }; + +const createNewAppSchema = async ( + nfToken, + input +) => { + const result = await fetchOneGraph(null, input.appId, operationsDoc, 'CreateNewSchemaMutation', + { + nfToken, input + }); + + return result.data?.oneGraph?.createGraphQLSchema?.graphqlSchema +}; + + +const ensureAppForSite = async ( + authToken, + siteId +) => { + const app = await upsertAppForSite(authToken, siteId) + const schema = await fetchAppSchema(authToken, app.id) + if (!schema) { + console.log("Creating new empty default GraphQL schema for site....") + await createNewAppSchema(authToken, { + appId: siteId, + enabledServices: ['ONEGRAPH'], + setAsDefaultForApp: true + }) + } +} + +const fetchEnabledServices = async (authToken, appId) => { + const appSchema = await fetchAppSchema(authToken, appId) + return appSchema?.services || [] +} + module.exports = { ackCLISessionEvents, createCLISession, createPersistedQuery, + ensureAppForSite, + fetchEnabledServices, fetchOneGraphPersisted, fetchOneGraphSchemaJson, fetchOneGraphSchema, fetchPersistedQuery, loadCLISession, monitorCLISessionEvents, - startOneGraphCLISession + startOneGraphCLISession, + upsertAppForSite } \ No newline at end of file diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 8b5381770a9..57ba4930315 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -595,7 +595,6 @@ const readAndParseGraphQLOperationsSourceFile = (basePath) => { const writeGraphQLOperationsSourceFile = (basePath, operationDocString) => { const graphqlSource = operationDocString - console.log("BasePath:", basePath) fs.writeFileSync(`${basePath}/${sourceOperationsFilename}`, graphqlSource, 'utf8') } From 7debe47cfe59f7d625ff8b6a2672e71f6d00947f Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 23 Dec 2021 09:04:50 -0800 Subject: [PATCH 04/58] chore: eslint and prettier --- src/commands/dev/dev.js | 10 +- src/commands/graph/graph-create.js | 44 +- src/commands/graph/graph-edit.js | 92 +- src/commands/graph/graph-pull.js | 11 +- src/commands/graph/graph.js | 19 +- src/commands/graph/index.js | 2 +- src/lib/oneGraph/client.js | 373 +++----- src/lib/oneGraph/graphql-helpers.js | 870 +++++++++--------- .../netligraph-code-exporter-snippets.js | 283 +++--- src/lib/oneGraph/netligraph.js | 158 +--- 10 files changed, 821 insertions(+), 1041 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index d77dcc55ea1..e15a768ef98 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -106,12 +106,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } diff --git a/src/commands/graph/graph-create.js b/src/commands/graph/graph-create.js index 5e03b16384c..7c175d24afa 100644 --- a/src/commands/graph/graph-create.js +++ b/src/commands/graph/graph-create.js @@ -5,23 +5,30 @@ const fs = require('fs') const { printSchema } = require('graphql') const { fetchOneGraphSchema } = require('../../lib/oneGraph/client') -const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +const { + extractFunctionsFromOperationDoc, + generateFunctionsFile, + netligraphPath, + readAndParseGraphQLOperationsSourceFile, + readGraphQLOperationsSourceFile, + writeGraphQLOperationsSourceFile, +} = require('../../lib/oneGraph/netligraph') const graphCreate = async (options, command) => { - const { site } = command.netlify - const siteId = site.id + const { site } = command.netlify + const siteId = site.id - // TODO: Get this from the app on OneGraph - const defaultEnabledServices = ['github', 'npm'] + // TODO: Get this from the app on OneGraph + const defaultEnabledServices = ['github', 'npm'] - const basePath = netligraphPath() - const schema = await fetchOneGraphSchema(siteId, defaultEnabledServices) - const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - const operationsDoc = readGraphQLOperationsSourceFile(basePath) + const basePath = netligraphPath() + const schema = await fetchOneGraphSchema(siteId, defaultEnabledServices) + const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const operationsDoc = readGraphQLOperationsSourceFile(basePath) - generateFunctionsFile(basePath, schema, operationsDoc, operations) - fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) + generateFunctionsFile(basePath, schema, operationsDoc, operations) + fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) } /** @@ -30,12 +37,11 @@ const graphCreate = async (options, command) => { * @returns */ const createGraphCreateCommand = (program) => - program - .command('graph:create') - .description('Create down your local Netligraph schema and regenerate your local functions') - .action(async (options, command) => { - await graphCreate(options, command) - }) - + program + .command('graph:create') + .description('Create down your local Netligraph schema and regenerate your local functions') + .action(async (options, command) => { + await graphCreate(options, command) + }) module.exports = { createGraphCreateCommand } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 3bccebc92de..b0a77477f6f 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -2,60 +2,65 @@ const process = require('process') const gitRepoInfo = require('git-repo-info') -const { createCLISession, createPersistedQuery, ensureAppForSite, loadCLISession } = require('../../lib/oneGraph/client') +const { + createCLISession, + createPersistedQuery, + ensureAppForSite, + loadCLISession, +} = require('../../lib/oneGraph/client') const { readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') const graphEdit = async (options, command) => { - const { api, site, state } = command.netlify - const siteId = site.id + const { api, site, state } = command.netlify + const siteId = site.id - if (!site.id) { - console.error( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( - 'netlify init', - )} or ${chalk.yellow('netlify link')}?`, - ) - process.exit(1) - } + if (!site.id) { + console.error( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + 'netlify init', + )} or ${chalk.yellow('netlify link')}?`, + ) + process.exit(1) + } - console.time("graph:edit") + console.time('graph:edit') - const siteData = await api.getSite({ siteId }) + const siteData = await api.getSite({ siteId }) - const { branch } = gitRepoInfo() - const cwd = process.cwd() - const base = cwd; - let graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) + const { branch } = gitRepoInfo() + const cwd = process.cwd() + const base = cwd + let graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) - if (graphqlDocument.trim().length === 0) { - graphqlDocument = `query ExampleQuery { + if (graphqlDocument.trim().length === 0) { + graphqlDocument = `query ExampleQuery { __typename }` - } + } - const netlifyToken = await command.authenticate() + const netlifyToken = await command.authenticate() - await ensureAppForSite(netlifyToken, siteId) + await ensureAppForSite(netlifyToken, siteId) - let oneGraphSessionId = loadCLISession(state) - if (!oneGraphSessionId) { - const oneGraphSession = await createCLISession(netlifyToken, site.id, "testing") - state.set('oneGraphSessionId', oneGraphSession.id) - oneGraphSessionId = state.get('oneGraphSessionId') - } + let oneGraphSessionId = loadCLISession(state) + if (!oneGraphSessionId) { + const oneGraphSession = await createCLISession(netlifyToken, site.id, 'testing') + state.set('oneGraphSessionId', oneGraphSession.id) + oneGraphSessionId = state.get('oneGraphSessionId') + } - const persistedDoc = await createPersistedQuery(netlifyToken, { - appId: siteId, - description: "Temporary snapshot of local queries", - document: graphqlDocument, - tags: ["netlify-cli", `session:${oneGraphSessionId}`, `git-branch:${branch}`], - }) + const persistedDoc = await createPersistedQuery(netlifyToken, { + appId: siteId, + description: 'Temporary snapshot of local queries', + document: graphqlDocument, + tags: ['netlify-cli', `session:${oneGraphSessionId}`, `git-branch:${branch}`], + }) - const url = `http://localhost:8080/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` - await openBrowser({ url }) - console.timeEnd("graph:edit") + const url = `http://localhost:8080/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` + await openBrowser({ url }) + console.timeEnd('graph:edit') } /** @@ -64,12 +69,11 @@ const graphEdit = async (options, command) => { * @returns */ const createGraphEditCommand = (program) => - program - .command('graph:edit') - .description('Launch the browser to edit your local graph functions from Netlify') - .action(async (options, command) => { - await graphEdit(options, command) - }) - + program + .command('graph:edit') + .description('Launch the browser to edit your local graph functions from Netlify') + .action(async (options, command) => { + await graphEdit(options, command) + }) module.exports = { createGraphEditCommand } diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index c664ab087e3..60e884116a9 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -3,9 +3,13 @@ const process = require('process') const { parse, printSchema } = require('graphql') - const { ensureAppForSite, fetchEnabledServices, fetchOneGraphSchema } = require('../../lib/oneGraph/client') -const { extractFunctionsFromOperationDoc, generateFunctionsFile, netligraphPath, readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +const { + extractFunctionsFromOperationDoc, + generateFunctionsFile, + netligraphPath, + readGraphQLOperationsSourceFile, +} = require('../../lib/oneGraph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { @@ -26,7 +30,7 @@ const graphPull = async (options, command) => { await ensureAppForSite(netlifyToken, siteId) const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - const enabledServices = enabledServicesInfo.map(service => service.service) + const enabledServices = enabledServicesInfo.map((service) => service.service) const schema = await fetchOneGraphSchema(siteId, enabledServices) let operationsDoc = readGraphQLOperationsSourceFile(netligraphPath) @@ -57,5 +61,4 @@ const createGraphPullCommand = (program) => await graphPull(options, command) }) - module.exports = { createGraphPullCommand } diff --git a/src/commands/graph/graph.js b/src/commands/graph/graph.js index 146a8929863..0a11a1f967c 100644 --- a/src/commands/graph/graph.js +++ b/src/commands/graph/graph.js @@ -8,7 +8,7 @@ const { createGraphPullCommand } = require('./graph-pull') * @param {import('../base-command').BaseCommand} command */ const graph = (options, command) => { - command.help() + command.help() } /** @@ -17,17 +17,14 @@ const graph = (options, command) => { * @returns */ const createGraphCommand = (program) => { - createGraphEditCommand(program) - createGraphPullCommand(program) + createGraphEditCommand(program) + createGraphPullCommand(program) - return program - .command('graph') - .description('(Beta) Control the Netligraph functions for the current site') - .addExamples([ - 'netlify graph:pull', - 'netlify graph:edit', - ]) - .action(graph) + return program + .command('graph') + .description('(Beta) Control the Netligraph functions for the current site') + .addExamples(['netlify graph:pull', 'netlify graph:edit']) + .action(graph) } module.exports = { createGraphCommand } diff --git a/src/commands/graph/index.js b/src/commands/graph/index.js index 46b2e983551..4cdf3fa0f8c 100644 --- a/src/commands/graph/index.js +++ b/src/commands/graph/index.js @@ -1,5 +1,5 @@ const { createGraphCommand } = require('./graph') module.exports = { - createGraphCommand, + createGraphCommand, } diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index a5096d25aaa..1c7cc6dba80 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -3,16 +3,24 @@ const { buildClientSchema } = require('graphql') const fetch = require('node-fetch') -const { extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, netligraphPath, readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile } = require("./netligraph") +const { + extractFunctionsFromOperationDoc, + generateFunctionsFile, + generateHandler, + netligraphPath, + readAndParseGraphQLOperationsSourceFile, + readGraphQLOperationsSourceFile, + writeGraphQLOperationsSourceFile, +} = require('./netligraph') const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' // We mock out onegraph-auth to provide just enough functionality to work with server-side auth tokens const makeAuth = (appId, authToken) => ({ appId, - authHeaders: () => ({ "Authorization": `Bearer ${authToken}` }), + authHeaders: () => ({ Authorization: `Bearer ${authToken}` }), accessToken: () => ({ accessToken: authToken }), -}); +}) const httpOkLow = 200 const httpOkHigh = 299 @@ -34,16 +42,14 @@ const basicPost = async (url, options) => { headers, timeout: timeoutMilliseconds, compress: true, - body: reqBody + body: reqBody, }) const respBody = await resp.text() if (resp.status < httpOkLow || resp.status > httpOkHigh) { - console.warn("Response:", respBody) - throw (new Error( - `Netlify OneGraph return non - OK HTTP status code: ${resp.status}`, - )) + console.warn('Response:', respBody) + throw new Error(`Netlify OneGraph return non - OK HTTP status code: ${resp.status}`) } return respBody @@ -57,18 +63,18 @@ const fetchOneGraphSchemaJson = async (appId, enabledServices) => { const response = await basicPost(url, { method: 'GET', headers, - body: null + body: null, }) return JSON.parse(response) } catch (error) { - console.error("Error fetching schema:", error) + console.error('Error fetching schema:', error) } } const fetchOneGraphSchema = async (appId, enabledServices) => { - const result = await fetchOneGraphSchemaJson(appId, enabledServices); - const schema = buildClientSchema(result.data); + const result = await fetchOneGraphSchemaJson(appId, enabledServices) + const schema = buildClientSchema(result.data) return schema } @@ -77,7 +83,7 @@ const fetchOneGraph = async ( appId, query, operationName, - variables + variables, // eslint-disable-next-line max-params ) => { const payload = { @@ -86,23 +92,20 @@ const fetchOneGraph = async ( operationName, } - const body = JSON.stringify(payload); + const body = JSON.stringify(payload) - const result = await basicPost( - `https://serve.onegraph.com/graphql?app_id=${appId}`, - { - method: 'POST', - headers: { - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body, - } - ) + const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body, + }) // @ts-ignore const value = JSON.parse(result) if (value.errors) { - console.log("fetchOneGraph errors", JSON.stringify(value, null, 2)) + console.log('fetchOneGraph errors', JSON.stringify(value, null, 2)) } return value } @@ -112,7 +115,7 @@ const fetchOneGraphPersisted = async ( accessToken, docId, operationName, - variables + variables, // eslint-disable-next-line max-params ) => { const payload = { @@ -121,16 +124,13 @@ const fetchOneGraphPersisted = async ( operationName, } - const result = await basicPost( - `https://serve.onegraph.com/graphql?app_id=${appId}`, - { - method: 'POST', - headers: { - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body: JSON.stringify(payload), - } - ) + const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body: JSON.stringify(payload), + }) return JSON.parse(result) } @@ -449,37 +449,19 @@ mutation CreateNewSchemaMutation( } }` -const fetchPersistedQuery = async ( - authToken, - appId, - docId, -) => { - const response = await fetchOneGraph( - authToken, - ONEDASH_APP_ID, - operationsDoc, - 'PersistedQueryQuery', - { - nfToken: authToken, - appId, - id: docId, - }, - ) +const fetchPersistedQuery = async (authToken, appId, docId) => { + const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'PersistedQueryQuery', { + nfToken: authToken, + appId, + id: docId, + }) - const persistedQuery = - response.data - && response.data.oneGraph - && response.data.oneGraph.persistedQuery + const persistedQuery = response.data && response.data.oneGraph && response.data.oneGraph.persistedQuery return persistedQuery } -const monitorCLISessionEvents = ( - appId, - authToken, - sessionId, - { onClose, onError, onEvents, } -) => { +const monitorCLISessionEvents = (appId, authToken, sessionId, { onClose, onError, onEvents }) => { const frequency = 5000 let shouldClose = false @@ -496,42 +478,27 @@ const monitorCLISessionEvents = ( } const first = 1000 - const next = await fetchOneGraph( - authToken, - appId, - operationsDoc, - 'CLISessionEventsQuery', - { - nfToken: authToken, - sessionId, - first, - }, - ) + const next = await fetchOneGraph(authToken, appId, operationsDoc, 'CLISessionEventsQuery', { + nfToken: authToken, + sessionId, + first, + }) if (next.errors) { - next.errors.forEach(error => { + next.errors.forEach((error) => { onError(error) }) } - const events = - next.data - && next.data.oneGraph - && next.data.oneGraph.netlifyCliEvents || [] + const events = (next.data && next.data.oneGraph && next.data.oneGraph.netlifyCliEvents) || [] if (events.length !== 0) { const ackIds = onEvents(events) - await fetchOneGraph( - authToken, - appId, - operationsDoc, - 'AckCLISessionEventMutation', - { - nfToken: authToken, - sessionId, - eventIds: ackIds, - }, - ) + await fetchOneGraph(authToken, appId, operationsDoc, 'AckCLISessionEventMutation', { + nfToken: authToken, + sessionId, + eventIds: ackIds, + }) } handle = setTimeout(helper, frequency) @@ -543,121 +510,70 @@ const monitorCLISessionEvents = ( return close } -const createCLISession = async ( - netlifyToken, - appId, - name, -) => { - const result = await fetchOneGraph( - null, +const createCLISession = async (netlifyToken, appId, name) => { + const result = await fetchOneGraph(null, appId, operationsDoc, 'CreateCLISessionMutation', { + nfToken: netlifyToken, appId, - operationsDoc, - 'CreateCLISessionMutation', - { - nfToken: netlifyToken, - appId, - name, - }, - ) + name, + }) - const session = result.data - && result.data.oneGraph - && result.data.oneGraph.createNetlifyCliSession - && result.data.oneGraph.createNetlifyCliSession.session + const session = + result.data && + result.data.oneGraph && + result.data.oneGraph.createNetlifyCliSession && + result.data.oneGraph.createNetlifyCliSession.session return session } -const fetchCLISessionEvents = async ( - netlifyToken, - appId, - sessionId, - first, -) => { - const result = await fetchOneGraph( - null, - appId, - operationsDoc, - 'CLISessionEventsQuery', - { - nfToken: netlifyToken, - sessionId, - first, - }, - ) +const fetchCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { + const result = await fetchOneGraph(null, appId, operationsDoc, 'CLISessionEventsQuery', { + nfToken: netlifyToken, + sessionId, + first, + }) - const events = - result.data - && result.data.oneGraph - && result.data.oneGraph.netlifyCliEvents + const events = result.data && result.data.oneGraph && result.data.oneGraph.netlifyCliEvents return events } +const ackCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { + const result = await fetchOneGraph(null, appId, operationsDoc, 'AckCLISessionEventMutation', { + nfToken: netlifyToken, + sessionId, + first, + }) -const ackCLISessionEvents = async ( - netlifyToken, - appId, - sessionId, - first, -) => { - const result = await fetchOneGraph( - null, - appId, - operationsDoc, - 'AckCLISessionEventMutation', - { - nfToken: netlifyToken, - sessionId, - first, - }, - ) - - const events = - result.data - && result.data.oneGraph - && result.data.oneGraph.ackNetlifyCliEvents + const events = result.data && result.data.oneGraph && result.data.oneGraph.ackNetlifyCliEvents return events } -const createPersistedQuery = async ( - netlifyToken, - { appId, - description, - document, - tags } -) => { - const result = await fetchOneGraph( - null, +const createPersistedQuery = async (netlifyToken, { appId, description, document, tags }) => { + const result = await fetchOneGraph(null, appId, operationsDoc, 'CreatePersistedQueryMutation', { + nfToken: netlifyToken, appId, - operationsDoc, - 'CreatePersistedQueryMutation', - { - nfToken: netlifyToken, - appId, - query: document, - tags, - description - }, - ) + query: document, + tags, + description, + }) const persistedQuery = - result.data - && result.data.oneGraph - && result.data.oneGraph.createPersistedQuery - && result.data.oneGraph.createPersistedQuery.persistedQuery + result.data && + result.data.oneGraph && + result.data.oneGraph.createPersistedQuery && + result.data.oneGraph.createPersistedQuery.persistedQuery return persistedQuery } -const loadCLISession = (state) => - state.get('oneGraphSessionId') +const loadCLISession = (state) => state.get('oneGraphSessionId') const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { - const oneGraphSession = await createCLISession(netlifyToken, site.id, "testing") + const oneGraphSession = await createCLISession(netlifyToken, site.id, 'testing') state.set('oneGraphSessionId', oneGraphSession.id) oneGraphSessionId = state.get('oneGraphSessionId') } @@ -668,7 +584,7 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { const updateGraphQLOperationsFile = async (docId) => { const persistedDoc = await fetchPersistedQuery(netlifyToken, site.id, docId) if (!persistedDoc) { - console.warn("No persisted doc found for:", docId) + console.warn('No persisted doc found for:', docId) return } @@ -685,64 +601,53 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { switch (__typename) { case 'OneGraphNetlifyCliSessionTestEvent': handleEvent(payload) - break; + break case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': generateHandler(netligraphPath, schema, payload.operationId, payload) - break; + break case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': updateGraphQLOperationsFile(payload.docId) - break; + break default: { - console.log("Unrecognized event received", __typename, payload) + console.log('Unrecognized event received', __typename, payload) break } } } - monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, - { - onEvents: (events) => { - console.time("events:process") - events.forEach(handleEvent) - console.timeEnd("events:process") - return events.map(event => event.id) - }, - onError: (error) => { - console.error(`OneGraph: ${error}`) - }, - onClose: () => { - console.log("OneGraph: closed") - } - }) + monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, { + onEvents: (events) => { + console.time('events:process') + events.forEach(handleEvent) + console.timeEnd('events:process') + return events.map((event) => event.id) + }, + onError: (error) => { + console.error(`OneGraph: ${error}`) + }, + onClose: () => { + console.log('OneGraph: closed') + }, + }) } -const fetchAppSchema = async ( - authToken, - siteId -) => { - const result = await fetchOneGraph(authToken, siteId, operationsDoc, 'AppSchemaQuery', - { - nfToken: authToken, - appId: siteId, - }, - ); +const fetchAppSchema = async (authToken, siteId) => { + const result = await fetchOneGraph(authToken, siteId, operationsDoc, 'AppSchemaQuery', { + nfToken: authToken, + appId: siteId, + }) return result.data?.oneGraph?.app?.graphQLSchema -}; +} -const upsertAppForSite = async ( - authToken, - siteId -) => { - const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'UpsertAppForSiteMutation', - { - nfToken: authToken, - siteId, - }, - ); +const upsertAppForSite = async (authToken, siteId) => { + const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'UpsertAppForSiteMutation', { + nfToken: authToken, + siteId, + }) return result.data?.oneGraph?.upsertAppForNetlifySite?.app -}; +} // export type CreateNewGraphQLSchemaInput = { // /* Whether to set this schema as the default for the app. Defaults to false. */ @@ -754,31 +659,24 @@ const upsertAppForSite = async ( // parentId: string | undefined; // }; -const createNewAppSchema = async ( - nfToken, - input -) => { - const result = await fetchOneGraph(null, input.appId, operationsDoc, 'CreateNewSchemaMutation', - { - nfToken, input - }); +const createNewAppSchema = async (nfToken, input) => { + const result = await fetchOneGraph(null, input.appId, operationsDoc, 'CreateNewSchemaMutation', { + nfToken, + input, + }) return result.data?.oneGraph?.createGraphQLSchema?.graphqlSchema -}; - +} -const ensureAppForSite = async ( - authToken, - siteId -) => { +const ensureAppForSite = async (authToken, siteId) => { const app = await upsertAppForSite(authToken, siteId) const schema = await fetchAppSchema(authToken, app.id) if (!schema) { - console.log("Creating new empty default GraphQL schema for site....") + console.log('Creating new empty default GraphQL schema for site....') await createNewAppSchema(authToken, { appId: siteId, enabledServices: ['ONEGRAPH'], - setAsDefaultForApp: true + setAsDefaultForApp: true, }) } } @@ -788,7 +686,6 @@ const fetchEnabledServices = async (authToken, appId) => { return appSchema?.services || [] } - module.exports = { ackCLISessionEvents, createCLISession, @@ -802,5 +699,5 @@ module.exports = { loadCLISession, monitorCLISessionEvents, startOneGraphCLISession, - upsertAppForSite -} \ No newline at end of file + upsertAppForSite, +} diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index c8d5b2633f0..e269d47dadb 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -1,490 +1,490 @@ -const { TypeInfo, getNamedType, isEnumType, isInputObjectType, isInterfaceType, isListType, isNonNullType, isObjectType, isUnionType, isWrappingType, parseType, print, typeFromAST, visit, visitWithTypeInfo, } = require('graphql'); - -const capitalizeFirstLetter = (string) => - string.charAt(0).toUpperCase() + string.slice(1); +/* eslint-disable unicorn/no-nested-ternary */ +/* eslint-disable no-nested-ternary */ +const { + TypeInfo, + getNamedType, + isEnumType, + isInputObjectType, + isInterfaceType, + isListType, + isNonNullType, + isObjectType, + isUnionType, + isWrappingType, + parseType, + print, + typeFromAST, + visit, + visitWithTypeInfo, +} = require('graphql') +const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const gatherAllReferencedTypes = (schema, query) => { - const types = new Set([]); - const typeInfo = new TypeInfo(schema); - visit(query, visitWithTypeInfo(typeInfo, { - enter: () => { - const fullType = typeInfo.getType(); - if (fullType) { - const typ = getNamedType(fullType); - if (typ) - types.add(typ.name.toLocaleLowerCase().replace('oneme', '')); - } - }, - })); - const result = [...types]; - return result; + const types = new Set([]) + const typeInfo = new TypeInfo(schema) + visit( + query, + visitWithTypeInfo(typeInfo, { + enter: () => { + const fullType = typeInfo.getType() + if (fullType) { + const typ = getNamedType(fullType) + if (typ) types.add(typ.name.toLocaleLowerCase().replace('oneme', '')) + } + }, + }), + ) + const result = [...types] + return result } -const gatherVariableDefinitions = (definition) => { - const extract = (varDef) => [ - varDef.variable.name.value, - print(varDef.type), - ]; - return (definition?.variableDefinitions?.map(extract) || []).sort(([a], [b]) => a.localeCompare(b)); -} +const extractVariableNameStringPair = (varDef) => [varDef.variable.name.value, print(varDef.type)] + +const gatherVariableDefinitions = (definition) => + (definition?.variableDefinitions?.map(extractVariableNameStringPair) || []).sort(([left], [right]) => + left.localeCompare(right), + ) const typeScriptForGraphQLType = (schema, gqlType) => { - const scalarMap = { - String: 'string', - ID: 'string', - Int: 'number', - Float: 'number', - Boolean: 'boolean', - }; - if (isListType(gqlType)) { - const subType = typeScriptForGraphQLType(schema, gqlType.ofType); - return `Array<${subType}>`; - } - if (isObjectType(gqlType) || isInputObjectType(gqlType)) { - const fields = Object.values(gqlType.getFields()).map((field) => { - const nullable = !isNonNullType(field.type); - const type = typeScriptForGraphQLType(schema, field.type); - const description = field.description - ? `/** + const scalarMap = { + String: 'string', + ID: 'string', + Int: 'number', + Float: 'number', + Boolean: 'boolean', + } + if (isListType(gqlType)) { + const subType = typeScriptForGraphQLType(schema, gqlType.ofType) + return `Array<${subType}>` + } + if (isObjectType(gqlType) || isInputObjectType(gqlType)) { + const fields = Object.values(gqlType.getFields()).map((field) => { + const nullable = !isNonNullType(field.type) + const type = typeScriptForGraphQLType(schema, field.type) + const description = field.description + ? `/** * ${field.description} */ ` - : ''; - return `${description}"${field.name}"${nullable ? '?' : ''}: ${type}`; - }); - return `{${fields.join(', ')}}`; - } - if (isWrappingType(gqlType)) { - return typeScriptForGraphQLType(schema, gqlType.ofType); - } - if (isEnumType(gqlType)) { - const values = gqlType.getValues(); - const enums = values.map((enumValue) => `"${enumValue.value}"`); - return enums.join(' | '); - } + : '' + return `${description}"${field.name}"${nullable ? '?' : ''}: ${type}` + }) + return `{${fields.join(', ')}}` + } + if (isWrappingType(gqlType)) { + return typeScriptForGraphQLType(schema, gqlType.ofType) + } + if (isEnumType(gqlType)) { + const values = gqlType.getValues() + const enums = values.map((enumValue) => `"${enumValue.value}"`) + return enums.join(' | ') + } - const namedType = getNamedType(gqlType); - // @ts-ignore metaprogramming - const basicType = scalarMap[namedType?.name] || 'any'; - return basicType; + const namedType = getNamedType(gqlType) + // @ts-ignore metaprogramming + const basicType = scalarMap[namedType?.name] || 'any' + return basicType +} +const typeScriptSignatureForOperationVariablesHelper = (variableDefinition) => { + const variableName = variableDefinition.variable.name.value + const result = [variableName, variableDefinition] + return result } const typeScriptSignatureForOperationVariables = (variableNames, schema, operationDefinition) => { - const helper = (variableDefinition) => { - const variableName = variableDefinition.variable.name.value; - const result = [ - variableName, - variableDefinition, - ]; - return result; - }; - const variables = (operationDefinition.variableDefinitions || []) - .map(helper) - .filter(([variableName]) => variableNames.includes(variableName)); - const typesObject = variables.map(([varName, varDef]) => { - const printedType = print(varDef.type); - const parsedType = parseType(printedType); - // @ts-ignore - const gqlType = typeFromAST(schema, parsedType); - // @ts-ignore - const tsType = typeScriptForGraphQLType(schema, gqlType); - return [varName, tsType]; - }); - const typeFields = typesObject - .map(([name, tsType]) => `"${name}": ${tsType}`) - .join(', '); - const types = `{${typeFields}}`; - return types === '' ? 'null' : types; + const variables = (operationDefinition.variableDefinitions || []) + .map(typeScriptSignatureForOperationVariablesHelper) + .filter(([variableName]) => variableNames.includes(variableName)) + const typesObject = variables.map(([varName, varDef]) => { + const printedType = print(varDef.type) + const parsedType = parseType(printedType) + // @ts-ignore + const gqlType = typeFromAST(schema, parsedType) + // @ts-ignore + const tsType = typeScriptForGraphQLType(schema, gqlType) + return [varName, tsType] + }) + const typeFields = typesObject.map(([name, tsType]) => `"${name}": ${tsType}`).join(', ') + const types = `{${typeFields}}` + return types === '' ? 'null' : types } -// @ts-ignore const listCount = (gqlType) => { - let inspectedType = gqlType; - let listCount = 0; - let totalCount = 0; - while (isWrappingType(inspectedType)) { - if (isListType(inspectedType)) { - listCount += 1; - } - totalCount += 1; - if (totalCount > 30) { - console.warn('Bailing on potential infinite recursion'); - return -99; - } - inspectedType = inspectedType.ofType; + let inspectedType = gqlType + let innerListCount = 0 + let totalCount = 0 + const maximumDepth = 30 + // TODO: Clean this up and do things properly + const errorSigil = -99 + // eslint-disable-next-line fp/no-loops + while (isWrappingType(inspectedType)) { + if (isListType(inspectedType)) { + innerListCount += 1 } - return listCount; + totalCount += 1 + if (totalCount > maximumDepth) { + console.warn('Bailing on potential infinite recursion') + return errorSigil + } + inspectedType = inspectedType.ofType + } + return innerListCount } -const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fragmentDefinitions, shouldLog = true) => { - const scalarMap = { - String: 'string', - ID: 'string', - Int: 'number', - Float: 'number', - Boolean: 'boolean', - GitHubGitObjectID: 'string', - // JSON: "JSON", - }; +const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fragmentDefinitions) => { + const scalarMap = { + String: 'string', + ID: 'string', + Int: 'number', + Float: 'number', + Boolean: 'boolean', + GitHubGitObjectID: 'string', + // JSON: "JSON", + } + // @ts-ignore + const helper = (parentGqlType, selection) => { + if (!parentGqlType) { + return + } + const parentNamedType = + // @ts-ignore + getNamedType(parentGqlType) || getNamedType(parentGqlType.type) + const alias = selection.alias?.value + const name = selection?.name?.value + const displayedName = alias || name // @ts-ignore - const helper = (parentGqlType, selection) => { - if (!parentGqlType) { - return; - } - const parentNamedType = - // @ts-ignore - getNamedType(parentGqlType) || getNamedType(parentGqlType.type); - const alias = selection.alias?.value; - const name = selection?.name?.value; - const displayedName = alias || name; - // @ts-ignore - const field = parentNamedType.getFields()[name]; - const gqlType = field?.type; - if (name.startsWith('__')) { - return [ - displayedName, - { type: 'any', description: 'Internal GraphQL field' }, - ]; + const field = parentNamedType.getFields()[name] + const gqlType = field?.type + if (name.startsWith('__')) { + return [displayedName, { type: 'any', description: 'Internal GraphQL field' }] + } + const namedType = getNamedType(gqlType) + const isNullable = !isNonNullType(gqlType) + const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) + const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) + const sub = selection.selectionSet?.selections + // @ts-ignore + .map(function innerHelper(innerSelection) { + if (innerSelection.kind === 'Field') { + return helper(namedType, innerSelection) } - const namedType = getNamedType(gqlType); - const isNullable = !isNonNullType(gqlType); - const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)); - const isObjectLike = isObjectType(namedType) || - isUnionType(namedType) || - isInterfaceType(namedType); - const sub = selection.selectionSet?.selections - // @ts-ignore - .map(function innerHelper(selection) { - if (selection.kind === 'Field') { - return helper(namedType, selection); - } - if (selection.kind === 'InlineFragment') { - const fragmentGqlType = typeFromAST(schema, selection.typeCondition); - if (!fragmentGqlType) { - return null; - } - const fragmentSelections = selection.selectionSet.selections.map( - // @ts-ignore - (subSelection) => { - const subSel = helper(fragmentGqlType, subSelection); - return subSel; - }); - return fragmentSelections; - } - if (selection.kind === 'FragmentSpread') { - const fragmentName = [selection.name.value]; - // @ts-ignore - const fragment = fragmentDefinitions[fragmentName]; - if (fragment) { - const fragmentGqlType = typeFromAST(schema, fragment.typeCondition); - if (!fragmentGqlType) { - return null; - } - const fragmentSelections = fragment.selectionSet.selections.map(innerHelper); - return fragmentSelections; - } - } - return null; - }) - .filter(Boolean) + if (innerSelection.kind === 'InlineFragment') { + const fragmentGqlType = typeFromAST(schema, innerSelection.typeCondition) + if (!fragmentGqlType) { + return null + } + const fragmentSelections = innerSelection.selectionSet.selections.map( // @ts-ignore - .reduce((acc, next) => { - if (Array.isArray(next[0])) { - return acc.concat(next); - } - - return [...acc, next]; - - }, []); - const nestingLevel = isList ? listCount(gqlType) : 0; - const isEnum = isEnumType(namedType); - const basicType = isEnum - ? // @ts-ignore - new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) - : // @ts-ignore - scalarMap[namedType?.name || 'any']; - let returnType; - if (isObjectLike) { - returnType = sub ? Object.fromEntries(sub) : null; - } - else if (basicType) { - returnType = basicType; - } - else { - returnType = 'any'; + (subSelection) => { + const subSel = helper(fragmentGqlType, subSelection) + return subSel + }, + ) + return fragmentSelections } - if (returnType) { - let finalType = returnType; - for (let i = 0; i < nestingLevel; i++) { - finalType = [finalType]; + if (innerSelection.kind === 'FragmentSpread') { + const fragmentName = [innerSelection.name.value] + // @ts-ignore + const fragment = fragmentDefinitions[fragmentName] + if (fragment) { + const fragmentGqlType = typeFromAST(schema, fragment.typeCondition) + if (!fragmentGqlType) { + return null } - const entry = [ - displayedName, - { type: finalType, description: field?.description }, - ]; - return entry; + const fragmentSelections = fragment.selectionSet.selections.map(innerHelper) + return fragmentSelections + } + } + return null + }) + .filter(Boolean) + // @ts-ignore + .reduce((acc, next) => { + if (Array.isArray(next[0])) { + return [...acc, ...next] } - // @ts-ignore - console.warn('No returnType!', basicType, namedType.name, selection); - }; - const baseGqlType = operationDefinition.kind === 'OperationDefinition' - ? (operationDefinition.operation === 'query' - ? schema.getQueryType() - : operationDefinition.operation === 'mutation' - ? schema.getMutationType() - : operationDefinition.operation === 'subscription' - ? schema.getSubscriptionType() - : null) - : (operationDefinition.kind === 'FragmentDefinition' - ? // @ts-ignore - schema.getType(operationDefinition.typeCondition.name.value) - : null); - const selections = operationDefinition.selectionSet?.selections; - const sub = selections?.map((selection) => helper(baseGqlType, selection)); - if (sub) { - // @ts-ignore - const object = Object.fromEntries(sub); - const result = { - data: { - type: object, - description: 'Any data retrieved by the const function be returned here', - }, - errors: { - type: ['any'], - description: 'Any errors in the function will be returned here', - }, - }; - return result; - } - return { - data: { - // @ts-ignore - type: 'any', - description: 'Any data retrieved by the const function be returned here', - }, - errors: { - type: ['any'], - description: 'Any errors in the function will be returned here', - }, - }; + return [...acc, next] + }, []) + const nestingLevel = isList ? listCount(gqlType) : 0 + const isEnum = isEnumType(namedType) + const basicType = isEnum + ? new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) + : scalarMap[namedType?.name || 'any'] + let returnType + if (isObjectLike) { + returnType = sub ? Object.fromEntries(sub) : null + } else if (basicType) { + returnType = basicType + } else { + returnType = 'any' + } + if (returnType) { + let finalType = returnType + // eslint-disable-next-line fp/no-loops + for (let idx = 0; idx < nestingLevel; idx++) { + finalType = [finalType] + } + const entry = [displayedName, { type: finalType, description: field?.description }] + return entry + } + // @ts-ignore + console.warn('No returnType!', basicType, namedType.name, selection) + } + const baseGqlType = + operationDefinition.kind === 'OperationDefinition' + ? operationDefinition.operation === 'query' + ? schema.getQueryType() + : operationDefinition.operation === 'mutation' + ? schema.getMutationType() + : operationDefinition.operation === 'subscription' + ? schema.getSubscriptionType() + : null + : operationDefinition.kind === 'FragmentDefinition' + ? schema.getType(operationDefinition.typeCondition.name.value) + : null + const selections = operationDefinition.selectionSet?.selections + const sub = selections?.map((selection) => helper(baseGqlType, selection)) + if (sub) { + // @ts-ignore + const object = Object.fromEntries(sub) + const result = { + data: { + type: object, + description: 'Any data retrieved by the const function be returned here', + }, + errors: { + type: ['any'], + description: 'Any errors in the function will be returned here', + }, + } + return result + } + return { + data: { + // @ts-ignore + type: 'any', + description: 'Any data retrieved by the const function be returned here', + }, + errors: { + type: ['any'], + description: 'Any errors in the function will be returned here', + }, + } } const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions) => { - const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions); - const valueHelper = (value) => { - if (value?.type && typeof value.type === 'string') { - return value.type; - } - if (Array.isArray(value.type)) { - const subType = valueHelper({ type: value.type[0] }); - return `Array<${subType}>`; - } - if (value.type instanceof Set) { - // @ts-ignore - const enums = [...value.type.values()] - .map((value) => `"${value}"`) - .join(' | '); - return enums; - } - if (typeof value.type === 'object') { - const fields = objectHelper(value.type); - return `{ + const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions) + const valueHelper = (value) => { + if (value?.type && typeof value.type === 'string') { + return value.type + } + if (Array.isArray(value.type)) { + const subType = valueHelper({ type: value.type[0] }) + return `Array<${subType}>` + } + if (value.type instanceof Set) { + // @ts-ignore + const enums = [...value.type.values()].map((innerValue) => `"${innerValue}"`).join(' | ') + return enums + } + if (typeof value.type === 'object') { + const fields = objectHelper(value.type) + return `{ ${fields.join(', ')} - }`; - } - }; - // @ts-ignore - function objectHelper(obj) { - return Object.entries(obj).map(([name, value]) => { - // @ts-ignore - const { description, type } = value; - // @ts-ignore - const tsType = valueHelper(value); - const doc = description - ? `/** + }` + } + } + + const objectHelper = (obj) => + Object.entries(obj).map(([name, value]) => { + const { description } = value + const tsType = valueHelper(value) + const doc = description + ? `/** * ${description} */ ` - : ''; - return `${doc}"${name}": ${tsType}`; - }); - } - const fields = objectHelper(typeMap).join(', '); - return `{${fields}}`; + : '' + return `${doc}"${name}": ${tsType}` + }) + + const fields = objectHelper(typeMap).join(', ') + return `{${fields}}` } const typeScriptTypeNameForOperation = (name) => `${capitalizeFirstLetter(name)}Payload` const typeScriptSignatureForOperation = (schema, operationDefinition, fragmentDefinitions) => { - const types = typeScriptForOperation(schema, operationDefinition, fragmentDefinitions); - const name = operationDefinition.name?.value || 'unknown'; - return `${types}`; + const types = typeScriptForOperation(schema, operationDefinition, fragmentDefinitions) + return `${types}` } /** * Doesn't patch e.g. fragments */ -const patchSubscriptionWebhookField = ({ definition, schema, }) => { - if (definition.operation !== 'subscription') { - return definition; - } - const subscriptionType = schema.getSubscriptionType(); - if (!subscriptionType) { - return definition; +const patchSubscriptionWebhookField = ({ definition, schema }) => { + if (definition.operation !== 'subscription') { + return definition + } + const subscriptionType = schema.getSubscriptionType() + if (!subscriptionType) { + return definition + } + const newSelections = definition.selectionSet.selections.map((selection) => { + if (selection.kind !== 'Field') return selection + const field = subscriptionType.getFields()[selection.name.value] + const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') + const selectionHasWebhookUrlArg = selection.arguments?.some((arg) => arg.name.value === 'webhookUrl') + if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { + return { + ...selection, + arguments: [ + ...(selection.arguments || []), + { + kind: 'Argument', + name: { + kind: 'Name', + value: 'webhookUrl', + }, + value: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ], + } } - const newSelections = definition.selectionSet.selections.map((selection) => { - if (selection.kind !== 'Field') - return selection; - const field = subscriptionType.getFields()[selection.name.value]; - const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl'); - const selectionHasWebhookUrlArg = selection.arguments?.some((arg) => arg.name.value === 'webhookUrl'); - if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { - return { - ...selection, - arguments: [ - ...(selection.arguments || []), - { - kind: 'Argument', - name: { - kind: 'Name', - value: 'webhookUrl', - }, - value: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ], - }; - } - return selection; - }); - const hasWebhookVariableDefinition = definition.variableDefinitions?.find((varDef) => varDef.variable.name.value === 'netligraphWebhookUrl'); - const variableDefinitions = hasWebhookVariableDefinition - ? definition.variableDefinitions - : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'String', - }, - }, - }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, + return selection + }) + const hasWebhookVariableDefinition = definition.variableDefinitions?.find( + (varDef) => varDef.variable.name.value === 'netligraphWebhookUrl', + ) + const variableDefinitions = hasWebhookVariableDefinition + ? definition.variableDefinitions + : [ + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'String', + }, + }, + }, + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', }, - ]; - return { - ...definition, - // @ts-ignore: Handle edge cases later - variableDefinitions, - // @ts-ignore: Handle edge cases later - selectionSet: { ...definition.selectionSet, selections: newSelections }, - }; + }, + }, + ] + return { + ...definition, + // @ts-ignore: Handle edge cases later + variableDefinitions, + // @ts-ignore: Handle edge cases later + selectionSet: { ...definition.selectionSet, selections: newSelections }, + } } -const patchSubscriptionWebhookSecretField = ({ definition, schema, }) => { - if (definition.operation !== 'subscription') { - return definition; - } - const subscriptionType = schema.getSubscriptionType(); - if (!subscriptionType) { - return definition; +const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { + if (definition.operation !== 'subscription') { + return definition + } + const subscriptionType = schema.getSubscriptionType() + if (!subscriptionType) { + return definition + } + const newSelections = definition.selectionSet.selections.map((selection) => { + if (selection.kind !== 'Field') return selection + const field = subscriptionType.getFields()[selection.name.value] + const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') + const selectionHasWebhookSecretArg = selection.arguments?.some((arg) => arg.name.value === 'secret') + if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { + return { + ...selection, + arguments: [ + ...(selection.arguments || []), + { + kind: 'Argument', + name: { + kind: 'Name', + value: 'secret', + }, + value: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ], + } } - const newSelections = definition.selectionSet.selections.map((selection) => { - if (selection.kind !== 'Field') - return selection; - const field = subscriptionType.getFields()[selection.name.value]; - const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret'); - const selectionHasWebhookSecretArg = selection.arguments?.some((arg) => arg.name.value === 'secret'); - if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { - return { - ...selection, - arguments: [ - ...(selection.arguments || []), - { - kind: 'Argument', - name: { - kind: 'Name', - value: 'secret', - }, - value: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ], - }; - } - return selection; - }); - const hasWebhookVariableDefinition = definition.variableDefinitions?.find((varDef) => varDef.variable.name.value === 'netligraphWebhookSecret'); - const variableDefinitions = hasWebhookVariableDefinition - ? definition.variableDefinitions - : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', - }, - }, - }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, + return selection + }) + const hasWebhookVariableDefinition = definition.variableDefinitions?.find( + (varDef) => varDef.variable.name.value === 'netligraphWebhookSecret', + ) + const variableDefinitions = hasWebhookVariableDefinition + ? definition.variableDefinitions + : [ + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'OneGraphSubscriptionSecretInput', + }, + }, + }, + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', }, - ]; - return { - ...definition, - // @ts-ignore: Handle edge cases later - variableDefinitions, - // @ts-ignore: Handle edge cases later - selectionSet: { ...definition.selectionSet, selections: newSelections }, - }; + }, + }, + ] + return { + ...definition, + // @ts-ignore: Handle edge cases later + variableDefinitions, + // @ts-ignore: Handle edge cases later + selectionSet: { ...definition.selectionSet, selections: newSelections }, + } } module.exports = { - capitalizeFirstLetter, - gatherAllReferencedTypes, - gatherVariableDefinitions, - typeScriptForGraphQLType, - typeScriptSignatureForOperationVariables, - listCount, - typeScriptDefinitionObjectForOperation, - typeScriptForOperation, - typeScriptTypeNameForOperation, - typeScriptSignatureForOperation, - patchSubscriptionWebhookField, - patchSubscriptionWebhookSecretField, -} \ No newline at end of file + capitalizeFirstLetter, + gatherAllReferencedTypes, + gatherVariableDefinitions, + typeScriptForGraphQLType, + typeScriptSignatureForOperationVariables, + listCount, + typeScriptDefinitionObjectForOperation, + typeScriptForOperation, + typeScriptTypeNameForOperation, + typeScriptSignatureForOperation, + patchSubscriptionWebhookField, + patchSubscriptionWebhookSecretField, +} diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index e155670bea3..6487ea64925 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,145 +1,95 @@ -/* eslint-disable no-unused-vars */ const { parse, print } = require('graphql') -let operationNodesMemo = [null, null]; +let operationNodesMemo = [null, null] -const getOperationNodes = ( - query, -) => { +const getOperationNodes = (query) => { if (operationNodesMemo[0] === query && operationNodesMemo[1]) { - return operationNodesMemo[1]; + return operationNodesMemo[1] } - const operationDefinitions = []; + const operationDefinitions = [] try { - parse(query).definitions.forEach(def => { - if ( - def.kind === 'FragmentDefinition' || - def.kind === 'OperationDefinition' - ) { - operationDefinitions.push(def); + parse(query).definitions.forEach((def) => { + if (def.kind === 'FragmentDefinition' || def.kind === 'OperationDefinition') { + operationDefinitions.push(def) } }) } catch (error) { // ignore } - operationNodesMemo = [query, operationDefinitions]; - return operationDefinitions; + operationNodesMemo = [query, operationDefinitions] + return operationDefinitions } -const getOperationName = ( - operationDefinition -) => - operationDefinition.name - ? operationDefinition.name.value - : operationDefinition.operation; +const getOperationName = (operationDefinition) => + operationDefinition.name ? operationDefinition.name.value : operationDefinition.operation const getOperationDisplayName = (operationDefinition) => - operationDefinition.name - ? operationDefinition.name.value - : ``; + operationDefinition.name ? operationDefinition.name.value : `` const formatVariableName = (name) => { - const uppercasePattern = /[A-Z]/g; - - return ( - name.charAt(0).toUpperCase() + - name - .slice(1) - .replace(uppercasePattern, '_$&') - .toUpperCase() - ); -} + const uppercasePattern = /[A-Z]/g -const getUsedVariables = ( - variables, - operationDefinition, -) => - (operationDefinition.variableDefinitions || []).reduce( - (usedVariables, variable) => { - const variableName = variable.variable.name.value; - if (variables[variableName]) { - usedVariables[variableName] = variables[variableName]; - } - - return usedVariables; - }, - {}, - ); + return name.charAt(0).toUpperCase() + name.slice(1).replace(uppercasePattern, '_$&').toUpperCase() +} +const getUsedVariables = (variables, operationDefinition) => + (operationDefinition.variableDefinitions || []).reduce((usedVariables, variable) => { + const variableName = variable.variable.name.value + if (variables[variableName]) { + usedVariables[variableName] = variables[variableName] + } -const findFragmentDependencies = ( - operationDefinitions, - definition, -) => { - const fragmentByName = (name) => - operationDefinitions.find(def => def.name.value === name); + return usedVariables + }, {}) +const findFragmentDependencies = (operationDefinitions, definition) => { + const fragmentByName = (name) => operationDefinitions.find((def) => def.name.value === name) - const findReferencedFragments = ( - selectionSet, - ) => { - const { selections } = selectionSet; + const findReferencedFragments = (selectionSet) => { + const { selections } = selectionSet const namedFragments = selections - .map(selection => { + .map((selection) => { if (selection.kind === 'FragmentSpread') { - return fragmentByName(selection.name.value); + return fragmentByName(selection.name.value) } - return null; - + return null }) - .filter(Boolean); - - const nestedNamedFragments = selections.reduce( - (acc, selection) => { - if ( - (selection.kind === 'Field' || - selection.kind === 'SelectionNode' || - selection.kind === 'InlineFragment') && - selection.selectionSet !== undefined - ) { - return [...acc, ...findReferencedFragments(selection.selectionSet)]; - } - return acc; - - }, - [], - ); + .filter(Boolean) - return [...namedFragments, ...nestedNamedFragments]; - }; - - const { selectionSet } = definition; + const nestedNamedFragments = selections.reduce((acc, selection) => { + if ( + (selection.kind === 'Field' || selection.kind === 'SelectionNode' || selection.kind === 'InlineFragment') && + selection.selectionSet !== undefined + ) { + return [...acc, ...findReferencedFragments(selection.selectionSet)] + } + return acc + }, []) - return findReferencedFragments(selectionSet); -}; + return [...namedFragments, ...nestedNamedFragments] + } + const { selectionSet } = definition -const operationDataByName = (graph, name) => graph.find(operationData => operationData.name === name); + return findReferencedFragments(selectionSet) +} +const operationDataByName = (graph, name) => graph.find((operationData) => operationData.name === name) -const topologicalSortHelper = ( - { graph, - node, - temp, - visited }, - result, -) => { - temp[node.name] = true; - const neighbors = node.fragmentDependencies; - neighbors.forEach(fragmentDependency => { - const fragmentOperationData = operationDataByName( - graph, - fragmentDependency.name.value, - ); +const topologicalSortHelper = ({ graph, node, temp, visited }, result) => { + temp[node.name] = true + const neighbors = node.fragmentDependencies + neighbors.forEach((fragmentDependency) => { + const fragmentOperationData = operationDataByName(graph, fragmentDependency.name.value) if (!fragmentOperationData) { - return; + return } if (temp[fragmentOperationData.name]) { - console.error('The operation graph has a cycle'); - return; + console.error('The operation graph has a cycle') + return } if (!visited[fragmentOperationData.name]) { topologicalSortHelper( @@ -147,90 +97,79 @@ const topologicalSortHelper = ( node: fragmentOperationData, visited, temp, - graph + graph, }, result, - ); + ) } }) - temp[node.name] = false; - visited[node.name] = true; - result.push(node); + temp[node.name] = false + visited[node.name] = true + result.push(node) } const toposort = (graph) => { - const result = []; - const visited = {}; - const temp = {}; - graph.forEach(node => { + const result = [] + const visited = {} + const temp = {} + graph.forEach((node) => { if (!visited[node.name] && !temp[node.name]) { - topologicalSortHelper({ node, visited, temp, graph }, result); + topologicalSortHelper({ node, visited, temp, graph }, result) } }) - return result; + return result } -const computeOperationDataList = ({ - query, - variables, -}) => { - const operationDefinitions = getOperationNodes(query); +const computeOperationDataList = ({ query, variables }) => { + const operationDefinitions = getOperationNodes(query) - const fragmentDefinitions = []; + const fragmentDefinitions = [] - operationDefinitions.forEach(operationDefinition => { + operationDefinitions.forEach((operationDefinition) => { if (operationDefinition.kind === 'FragmentDefinition') { - fragmentDefinitions.push(operationDefinition); + fragmentDefinitions.push(operationDefinition) } }) - const rawOperationDataList = operationDefinitions.map( - ( - operationDefinition - ) => ({ - query: print(operationDefinition), - name: getOperationName(operationDefinition), - displayName: getOperationDisplayName(operationDefinition), - // $FlowFixMe: Come back for this - type: operationDefinition.operation || 'fragment', - variableName: formatVariableName(getOperationName(operationDefinition)), - variables: getUsedVariables(variables, operationDefinition), - operationDefinition, - fragmentDependencies: findFragmentDependencies( - fragmentDefinitions, - operationDefinition, - ), - }), - ); + const rawOperationDataList = operationDefinitions.map((operationDefinition) => ({ + query: print(operationDefinition), + name: getOperationName(operationDefinition), + displayName: getOperationDisplayName(operationDefinition), + // $FlowFixMe: Come back for this + type: operationDefinition.operation || 'fragment', + variableName: formatVariableName(getOperationName(operationDefinition)), + variables: getUsedVariables(variables, operationDefinition), + operationDefinition, + fragmentDependencies: findFragmentDependencies(fragmentDefinitions, operationDefinition), + })) - const operationDataList = toposort(rawOperationDataList); + const operationDataList = toposort(rawOperationDataList) return { operationDefinitions, fragmentDefinitions, rawOperationDataList, operationDataList, - }; -}; + } +} const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) -const unnamedSymbols = new Set(['query', 'mutation', 'subscription']); +const unnamedSymbols = new Set(['query', 'mutation', 'subscription']) const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) const addLeftWhitespace = (string, padding) => { - const paddingString = ' '.repeat(padding); + const paddingString = ' '.repeat(padding) return string .split('\n') - .map(line => paddingString + line) - .join('\n'); + .map((line) => paddingString + line) + .join('\n') } const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') - const snippetOptions = [ { id: 'postHttpMethod', @@ -244,7 +183,6 @@ const snippetOptions = [ }, ] - const operationFunctionName = (operationData) => { const { type } = operationData @@ -252,15 +190,15 @@ const operationFunctionName = (operationData) => { switch (type) { case 'query': prefix = 'fetch' - break; + break case 'mutation': prefix = 'execute' - break; + break case 'subscription': prefix = 'subscribeTo' - break; + break default: - break; + break } const fnName = prefix + (prefix.length === 0 ? operationData.name : capitalizeFirstLetter(operationData.name)) @@ -344,8 +282,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { ${requiredVariableCount > 0 ? variableValidation : ''} - const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name - }Data } = + const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name}Data } = await Netligraph.${operationFunctionName(namedOperationData)}({ ${params.join(', ')} }, accessToken); if (${namedOperationData.name}Errors) { @@ -359,15 +296,11 @@ ${requiredVariableCount > 0 ? variableValidation : ''} return invocations } -const clientSideInvocations = ( - operationDataList, - pluckerStyle, - useClientAuth, -) => { +const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) => { const invocations = operationDataList .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) .map((namedOperationData) => { - const whitespace = 8; + const whitespace = 8 const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( (def) => def.variable.name.value, @@ -396,13 +329,20 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${ + useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map(param => `${param}=\${${param}}`).join('&')}` : ''}\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ + pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, - body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}`} + method: "${pluckerStyle.toLocaleUpperCase()}"${ + pluckerStyle === 'get' + ? '' + : `, + body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` + } }); const text = await resp.text(); @@ -416,6 +356,7 @@ ${variables} } const subscriptionHandler = ({ + // eslint-disable-next-line no-unused-vars filename, operationData, }) => `import { getSecrets } from "@netlify/functions"; @@ -486,8 +427,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData @@ -533,7 +474,7 @@ ${operationData.name}Data: ${operationData.name}Data`, options.useClientAuth, ) - const whitespace = 6; + const whitespace = 6 const snippet = `import { getSecrets } from "@netlify/functions"; import Netligraph from "../netligraphFunctions"; @@ -580,4 +521,4 @@ ${clientSideCalls} }, } -module.exports = { computeOperationDataList, netlifyFunctionSnippet } \ No newline at end of file +module.exports = { computeOperationDataList, netlifyFunctionSnippet } diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 57ba4930315..5da128ae54a 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -8,13 +8,12 @@ const { patchSubscriptionWebhookSecretField, typeScriptSignatureForOperation, typeScriptSignatureForOperationVariables, -} = require('./graphql-helpers'); -const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets'); +} = require('./graphql-helpers') +const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets') -const netligraphPath = `${process.cwd()}/netlify`; +const netligraphPath = `${process.cwd()}/netlify` -const capitalizeFirstLetter = (string) => - string.charAt(0).toUpperCase() + string.slice(1) +const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const generatedOneGraphClient = ` const fetch = (appId, options) => { @@ -127,32 +126,14 @@ const subscriptionParserName = (fn) => `parseAndVerify${fn.operationName}Event` const subscriptionFunctionName = (fn) => `subscribeTo${fn.operationName}` +const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { + const parsingFunctionReturnSignature = typeScriptSignatureForOperation(schema, fn.parsedOperation, fragments) -const generateSubscriptionFunctionTypeDefinition = ( - schema, - fn, - fragments, -) => { - const parsingFunctionReturnSignature = typeScriptSignatureForOperation( - schema, - fn.parsedOperation, - fragments - ) + const variableNames = (fn.parsedOperation.variableDefinitions || []).map((varDef) => varDef.variable.name.value) - const variableNames = (fn.parsedOperation.variableDefinitions || []).map( - (varDef) => varDef.variable.name.value - ) - - const variableSignature = typeScriptSignatureForOperationVariables( - variableNames, - schema, - fn.parsedOperation - ) + const variableSignature = typeScriptSignatureForOperationVariables(variableNames, schema, fn.parsedOperation) - const jsDoc = (fn.description || '') - .replaceAll('*/', '!') - .split('\n') - .join('\n* ') + const jsDoc = (fn.description || '').replaceAll('*/', '!').split('\n').join('\n* ') return `/** * ${jsDoc} @@ -172,16 +153,13 @@ const generateSubscriptionFunctionTypeDefinition = ( * Verify the ${fn.operationName} event body is signed securely, and then parse the result. */ export function ${subscriptionParserName( - fn - )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} + fn, + )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} ` } // TODO: Handle fragments -const generateSubscriptionFunction = ( - schema, - fn, -) => { +const generateSubscriptionFunction = (schema, fn) => { const patchedWithWebhookUrl = patchSubscriptionWebhookField({ schema, definition: fn.parsedOperation, @@ -193,7 +171,7 @@ const generateSubscriptionFunction = ( }) // TODO: Don't allow unnamed operations as subscription - const filename = patched.name && patched.name.value || 'Unknown' + const filename = (patched.name && patched.name.value) || 'Unknown' const body = print(patched) const safeBody = body.replaceAll('${', '\\${') @@ -226,9 +204,7 @@ const generateSubscriptionFunction = ( } -const ${subscriptionParserName( - fn - )} = (event) => { +const ${subscriptionParserName(fn)} = (event) => { if (!verifyRequestSignature({ event: event })) { console.warn("Unable to verify signature for ${filename}") return null @@ -253,19 +229,15 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { const basicFn = { id: persistedQuery.id, definition: persistedQuery.query, - description: persistedQuery.description + description: persistedQuery.description, } const body = basicFn.definition const safeBody = body.replaceAll('${', '\\${') const parsed = parse(body) - const operations = parsed.definitions.filter( - (def) => def.kind === 'OperationDefinition' - ) - const fragments = parsed.definitions.filter( - (def) => def.kind === 'FragmentDefinition' - ) + const operations = parsed.definitions.filter((def) => def.kind === 'OperationDefinition') + const fragments = parsed.definitions.filter((def) => def.kind === 'FragmentDefinition') if (!operations) { throw new Error(`Operation definition is required in ${basicFn.id}`) @@ -273,21 +245,11 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { const [operation] = operations - const returnSignature = typeScriptSignatureForOperation( - fullSchema, - operation, - fragments - ) + const returnSignature = typeScriptSignatureForOperation(fullSchema, operation, fragments) - const variableNames = (operation.variableDefinitions || []).map( - (varDef) => varDef.variable.name.value - ) + const variableNames = (operation.variableDefinitions || []).map((varDef) => varDef.variable.name.value) - const variableSignature = typeScriptSignatureForOperationVariables( - variableNames, - fullSchema, - operation - ) + const variableSignature = typeScriptSignatureForOperationVariables(variableNames, fullSchema, operation) const operationName = operation.name && operation.name.value @@ -303,25 +265,20 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { variableSignature, returnSignature, operationName, - parsedOperation: operation + parsedOperation: operation, } return fn } -const generateJavaScriptClient = ( - schema, - operationsDoc, - enabledFunctions -) => { - const safeOperationsDoc = operationsDoc.replaceAll('${', '\\${').replaceAll('`', '\\`'); +const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { + const safeOperationsDoc = operationsDoc.replaceAll('${', '\\${').replaceAll('`', '\\`') const functionDecls = enabledFunctions.map((fn) => { if (fn.kind === 'subscription') { const fragments = [] return generateSubscriptionFunction(schema, fn, fragments) } - const dynamicFunction = `const ${fn.fnName} = ( variables, accessToken, @@ -355,10 +312,7 @@ const generateJavaScriptClient = ( const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = (fn.description || '') - .replaceAll('*/', '') - .split('\n') - .join('\n* ') + const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') return `/** * ${jsDoc} @@ -369,16 +323,12 @@ const generateJavaScriptClient = ( */ ${parserFnName}:${parserFnName}` } - const jsDoc = (fn.description || '') - .replaceAll('*/', '') - .split('\n') - .join('\n* ') + const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') return `/** * ${jsDoc} */ ${fn.fnName}:${fn.fnName}` - }) .join(',\n ') @@ -471,10 +421,7 @@ export const verifyRequestSignature = (request) => { return source } -const generateTypeScriptDefinitions = ( - schema, - enabledFunctions -) => { +const generateTypeScriptDefinitions = (schema, enabledFunctions) => { const functionDecls = enabledFunctions.map((fn) => { const isSubscription = fn.kind === 'subscription' @@ -487,10 +434,7 @@ const generateTypeScriptDefinitions = ( const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = (fn.description || '') - .replaceAll('*/', '') - .split('\n') - .join('\n* ') + const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') return `/** * ${jsDoc} @@ -501,16 +445,12 @@ const generateTypeScriptDefinitions = ( */ ${parserFnName}:${parserFnName}` } - const jsDoc = (fn.description || ``) - .replaceAll('*/', '') - .split('\n') - .join('\n* ') + const jsDoc = (fn.description || ``).replaceAll('*/', '').split('\n').join('\n* ') return `/** * ${jsDoc} */ export function ${fn.fnName}(variables: ${fn.variableSignature}, accessToken?: string): Promise<${fn.returnSignature}>;` - }) const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! @@ -529,28 +469,22 @@ const generateFunctionsFile = (basePath, schema, operationsDoc, queries) => { fs.writeFileSync(`${basePath}/netligraphFunctions.d.ts`, typeDefinitionsSource, 'utf8') } -const extractFunctionsFromOperationDoc = ( - parsedDoc -) => { +const extractFunctionsFromOperationDoc = (parsedDoc) => { const fns = parsedDoc.definitions .map((next) => { if (next.kind !== 'OperationDefinition') { - return null; + return null } - const key = next.name?.value; + const key = next.name?.value - const directive = next.directives?.find( - (localDirective) => localDirective.name.value === 'netligraph' - ); - const docArg = - directive && - directive.arguments?.find((arg) => arg.name.value === 'doc'); + const directive = next.directives?.find((localDirective) => localDirective.name.value === 'netligraph') + const docArg = directive && directive.arguments?.find((arg) => arg.name.value === 'doc') - const docString = docArg?.value?.value; + const docString = docArg?.value?.value if (!key || !docString) { - return null; + return null } const operation = { @@ -558,14 +492,14 @@ const extractFunctionsFromOperationDoc = ( description: docString, operation: next.operation, query: print(next), - }; + } - return operation; + return operation }) - .filter(Boolean); + .filter(Boolean) - return fns; -}; + return fns +} const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' @@ -601,19 +535,18 @@ const writeGraphQLOperationsSourceFile = (basePath, operationDocString) => { const generateHandler = (basePath, schema, operationId, handlerOptions) => { const [doc] = readAndParseGraphQLOperationsSourceFile(basePath) - const operation = doc.definitions.find(op => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) + const operation = doc.definitions.find((op) => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) if (!operation) { console.warn(`Operation ${operationId} not found in graphql.`) } - - const odl = computeOperationDataList(({ query: print(operation), variables: [] })) + const odl = computeOperationDataList({ query: print(operation), variables: [] }) const source = netlifyFunctionSnippet.generate({ operationDataList: odl.operationDataList, schema, - options: handlerOptions + options: handlerOptions, }) const newFunction = { @@ -625,7 +558,6 @@ const generateHandler = (basePath, schema, operationId, handlerOptions) => { fs.writeFileSync(filename, source) } - module.exports = { extractFunctionsFromOperationDoc, generateFunctionsFile, @@ -633,5 +565,5 @@ module.exports = { netligraphPath, readGraphQLOperationsSourceFile, readAndParseGraphQLOperationsSourceFile, - writeGraphQLOperationsSourceFile -} \ No newline at end of file + writeGraphQLOperationsSourceFile, +} From 419ffccc3a04ad2a190be40fee3488c6990bf09c Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 23 Dec 2021 09:13:29 -0800 Subject: [PATCH 05/58] chore: add netlify app host option --- src/commands/graph/graph-edit.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index b0a77477f6f..4d91955e0c8 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -58,7 +58,9 @@ const graphEdit = async (options, command) => { tags: ['netlify-cli', `session:${oneGraphSessionId}`, `git-branch:${branch}`], }) - const url = `http://localhost:8080/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` + const host = process.env.NETLIFY_APP_HOST || `localhost:8080` + + const url = `http://${host}/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` await openBrowser({ url }) console.timeEnd('graph:edit') } From a5577b0e48b4e7cfed6cef3ed908dc6bfd194ce8 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 18:16:41 -0800 Subject: [PATCH 06/58] feat: refactor names, common usage, and automatically re-pull schema on graph changes --- src/commands/dev/dev.js | 14 ++- src/commands/graph/graph-edit.js | 2 +- src/commands/graph/graph-pull.js | 33 +----- src/lib/oneGraph/client.js | 76 +++++++++++-- src/lib/oneGraph/netligraph.js | 181 +++++++++++++++++-------------- 5 files changed, 179 insertions(+), 127 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index e15a768ef98..3a2887543f7 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -106,12 +106,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -292,7 +292,9 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - if (site.id) { + const startNetligraphWatcher = !!site.id; + + if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() await ensureAppForSite(netlifyToken, site.id) startOneGraphCLISession({ netlifyToken, site, state }) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 4d91955e0c8..048fd55f816 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -60,7 +60,7 @@ const graphEdit = async (options, command) => { const host = process.env.NETLIFY_APP_HOST || `localhost:8080` - const url = `http://${host}/sites/${siteData.name}/graph/explorer?sessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` + const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` await openBrowser({ url }) console.timeEnd('graph:edit') } diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 60e884116a9..619bc76684b 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,20 +1,10 @@ -const fs = require('fs') const process = require('process') -const { parse, printSchema } = require('graphql') - -const { ensureAppForSite, fetchEnabledServices, fetchOneGraphSchema } = require('../../lib/oneGraph/client') -const { - extractFunctionsFromOperationDoc, - generateFunctionsFile, - netligraphPath, - readGraphQLOperationsSourceFile, -} = require('../../lib/oneGraph/netligraph') +const { refetchAndGenerateFromOneGraph } = require('../../lib/oneGraph/client') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { const { site } = command.netlify - const siteId = site.id if (!site.id) { console.error( @@ -26,26 +16,7 @@ const graphPull = async (options, command) => { } const netlifyToken = await command.authenticate() - - await ensureAppForSite(netlifyToken, siteId) - - const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - const enabledServices = enabledServicesInfo.map((service) => service.service) - const schema = await fetchOneGraphSchema(siteId, enabledServices) - let operationsDoc = readGraphQLOperationsSourceFile(netligraphPath) - - if (operationsDoc.trim().length === 0) { - operationsDoc = `query ExampleQuery { -__typename -}` - } - - const parsedDoc = parse(operationsDoc) - - const operations = extractFunctionsFromOperationDoc(parsedDoc) - - generateFunctionsFile(netligraphPath, schema, operationsDoc, operations) - fs.writeFileSync(`${netligraphPath}/netligraphSchema.graphql`, printSchema(schema)) + refetchAndGenerateFromOneGraph(state, netlifyToken, site.id) } /** diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 1c7cc6dba80..f5a2294a6f0 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,8 +1,10 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable no-unused-vars */ -const { buildClientSchema } = require('graphql') +const { buildClientSchema, parse, printSchema } = require('graphql') const fetch = require('node-fetch') +const fs = require('fs') +const { NETLIFYDEVLOG, chalk, log } = require('../../utils') const { extractFunctionsFromOperationDoc, generateFunctionsFile, @@ -449,6 +451,7 @@ mutation CreateNewSchemaMutation( } }` + const fetchPersistedQuery = async (authToken, appId, docId) => { const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'PersistedQueryQuery', { nfToken: authToken, @@ -461,10 +464,22 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } -const monitorCLISessionEvents = (appId, authToken, sessionId, { onClose, onError, onEvents }) => { +const monitorCLISessionEvents = (appId, authToken, sessionId, state, { onClose, onError, onEvents }) => { const frequency = 5000 let shouldClose = false + const enabledServiceWatcher = async (authToken, appId) => { + let enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] + const enabledServicesInfo = await fetchEnabledServices(authToken, appId) + const newEnabledServices = enabledServicesInfo.map((service) => service.service) + + if (enabledServices.sort().join(",") !== newEnabledServices.sort().join(',')) { + log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema...`) + await refetchAndGenerateFromOneGraph(state, authToken, appId) + log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) + } + } + const close = () => { shouldClose = true } @@ -501,6 +516,8 @@ const monitorCLISessionEvents = (appId, authToken, sessionId, { onClose, onError }) } + await enabledServiceWatcher(authToken, appId) + handle = setTimeout(helper, frequency) } @@ -568,6 +585,30 @@ const createPersistedQuery = async (netlifyToken, { appId, description, document return persistedQuery } +const refetchAndGenerateFromOneGraph = async (state, netlifyToken, siteId) => { + await ensureAppForSite(netlifyToken, siteId) + + const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) + const enabledServices = enabledServicesInfo.map((service) => service.service).sort((a, b) => a.localeCompare(b)) + const schema = await fetchOneGraphSchema(siteId, enabledServices) + let operationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + + if (operationsDoc.trim().length === 0) { + operationsDoc = `query ExampleQuery { +__typename +}` + } + + const parsedDoc = parse(operationsDoc) + + const operations = extractFunctionsFromOperationDoc(parsedDoc) + + state.set('oneGraphEnabledServices', enabledServices) + + generateFunctionsFile(netligraphPath, schema, operationsDoc, operations) + fs.writeFileSync(`${netligraphPath}/netligraphSchema.graphql`, printSchema(schema)) +} + const loadCLISession = (state) => state.get('oneGraphSessionId') const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { @@ -578,7 +619,8 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { oneGraphSessionId = state.get('oneGraphSessionId') } - const enabledServices = ['npm', 'github', 'rss'] + + const enabledServices = [] const schema = await fetchOneGraphSchema(site.id, enabledServices) const updateGraphQLOperationsFile = async (docId) => { @@ -596,6 +638,22 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { generateFunctionsFile(netligraphPath, schema, appOperationsDoc, operations) } + const friendlyEventName = (event) => { + const { __typename, payload } = event + switch (__typename) { + case 'OneGraphNetlifyCliSessionTestEvent': + return friendlyEventName(payload) + break + case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': + return "Generate handler as Netlify function " + case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': + return "Sync Netligraph operations library" + default: { + return `Unrecognized event (${__typename})` + } + } + } + const handleEvent = async (event) => { const { __typename, payload } = await event switch (__typename) { @@ -615,11 +673,14 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { } } - monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, { + monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, state, { onEvents: (events) => { - console.time('events:process') - events.forEach(handleEvent) - console.timeEnd('events:process') + events.forEach((event) => { + const eventName = friendlyEventName(event) + log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netligraph event: ${eventName}...`) + handleEvent(event) + log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netligraph event: ${eventName}...`) + }) return events.map((event) => event.id) }, onError: (error) => { @@ -698,6 +759,7 @@ module.exports = { fetchPersistedQuery, loadCLISession, monitorCLISessionEvents, + refetchAndGenerateFromOneGraph, startOneGraphCLISession, upsertAppForSite, } diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 5da128ae54a..d6d8d08d251 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -15,6 +15,11 @@ const netligraphPath = `${process.cwd()}/netlify` const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) +const replaceAll = (target, search, replace) => { + const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string + return target.replace(new RegExp(simpleString, 'g'), replace); +}; + const generatedOneGraphClient = ` const fetch = (appId, options) => { var reqBody = options.body || null @@ -133,28 +138,28 @@ const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { const variableSignature = typeScriptSignatureForOperationVariables(variableNames, schema, fn.parsedOperation) - const jsDoc = (fn.description || '').replaceAll('*/', '!').split('\n').join('\n* ') + const jsDoc = replaceAll((fn.description || ''), '*/', '!').split('\n').join('\n* ') return `/** - * ${jsDoc} - */ - export function ${subscriptionFunctionName(fn)} ( - /** - * This will be available in your webhook handler as a query parameter. - * Use this to keep track of which subscription you're receiving - * events for. - */ - netligraphWebhookId: string, - variables: ${variableSignature}, - accessToken?: string | null - ) : void - - /** - * Verify the ${fn.operationName} event body is signed securely, and then parse the result. - */ - export function ${subscriptionParserName( - fn, - )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} +* ${jsDoc} +*/ +export function ${subscriptionFunctionName(fn)} ( + /** + * This will be available in your webhook handler as a query parameter. + * Use this to keep track of which subscription you're receiving + * events for. + */ + netligraphWebhookId: string, + variables: ${variableSignature}, + accessToken?: string | null + ) : void + +/** + * Verify the ${fn.operationName} event body is signed securely, and then parse the result. + */ +export function ${subscriptionParserName( + fn, + )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} ` } @@ -174,35 +179,34 @@ const generateSubscriptionFunction = (schema, fn) => { const filename = (patched.name && patched.name.value) || 'Unknown' const body = print(patched) - const safeBody = body.replaceAll('${', '\\${') + const safeBody = replaceAll(body, '${', '\\${') return `const ${subscriptionFunctionName(fn)} = async ( - /** - * This will be available in your webhook handler as a query parameter. - * Use this to keep track of which subscription you're receiving - * events for. - */ - netligraphWebhookId, - variables, - accessToken, - ) => { - const netligraphWebhookUrl = \`\${process.env.DEPLOY_URL}/.netlify/functions/${filename}?netligraphWebhookId=\${netligraphWebhookId}\` - const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET - const fullVariables = {...variables, netligraphWebhookUrl: netligraphWebhookUrl, netligraphWebhookSecret: { hmacSha256Key: secret }} - - const persistedInput = { - doc_id: "${fn.id}", - oeprationName: "${fn.operationName}", - variables: fullVariables, - accessToken: accessToken - } - - const subscriptionOperationDoc = \`${safeBody}\`; + /** + * This will be available in your webhook handler as a query parameter. + * Use this to keep track of which subscription you're receiving + * events for. + */ + netligraphWebhookId, + variables, + accessToken, + ) => { + const netligraphWebhookUrl = \`\${process.env.DEPLOY_URL}/.netlify/functions/${filename}?netligraphWebhookId=\${netligraphWebhookId}\` + const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET + const fullVariables = {...variables, netligraphWebhookUrl: netligraphWebhookUrl, netligraphWebhookSecret: { hmacSha256Key: secret }} + + const persistedInput = { + doc_id: "${fn.id}", + oeprationName: "${fn.operationName}", + variables: fullVariables, + accessToken: accessToken + } - const result = await // fetchOneGraphPersisted(persistedInput) - fetchOneGraph(accessToken, subscriptionOperationDoc, "${fn.operationName}", fullVariables) + const subscriptionOperationDoc = \`${safeBody}\`; - } + // const result = await fetchOneGraphPersisted(persistedInput) + const result = await fetchOneGraph(accessToken, subscriptionOperationDoc, "${fn.operationName}", fullVariables) +} const ${subscriptionParserName(fn)} = (event) => { if (!verifyRequestSignature({ event: event })) { @@ -233,7 +237,7 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { } const body = basicFn.definition - const safeBody = body.replaceAll('${', '\\${') + const safeBody = replaceAll(body, '${', '\\${') const parsed = parse(body) const operations = parsed.definitions.filter((def) => def.kind === 'OperationDefinition') @@ -272,7 +276,8 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { } const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { - const safeOperationsDoc = operationsDoc.replaceAll('${', '\\${').replaceAll('`', '\\`') + const operationsWithoutTemplateDollar = replaceAll(operationsDoc, '${', '\\${') + const safeOperationsDoc = replaceAll(operationsWithoutTemplateDollar, '`', '\\`') const functionDecls = enabledFunctions.map((fn) => { if (fn.kind === 'subscription') { const fragments = [] @@ -295,8 +300,8 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { const staticFunction = `const ${fn.fnName} = ( variables, accessToken, - ) => { -// return fetchOneGraphPersisted(accessToken, "${fn.id}", "${fn.operationName}", variables) +) => { + // return fetchOneGraphPersisted(accessToken, "${fn.id}", "${fn.operationName}", variables) return fetchOneGraph(accessToken, operationsDoc, "${fn.operationName}", variables) } @@ -312,23 +317,23 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') return `/** - * ${jsDoc} - */ - ${subscriptionFnName}:${subscriptionFnName}, - /** - * Verify the event body is signed securely, and then parse the result. - */ - ${parserFnName}:${parserFnName}` + * ${jsDoc} + */ + ${subscriptionFnName}:${subscriptionFnName}, + /** + * Verify the event body is signed securely, and then parse the result. + */ + ${parserFnName}: ${parserFnName}` } - const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') return `/** - * ${jsDoc} - */ - ${fn.fnName}:${fn.fnName}` + * ${jsDoc} + */ + ${fn.fnName}: ${fn.fnName}` }) .join(',\n ') @@ -402,13 +407,16 @@ export const verifyRequestSignature = (request) => { return verifySignature({ secret, signature, body: body || '' }) } - ${functionDecls.join('\n\n')} +${functionDecls.join('\n\n')} - const functions = { - ${exportedFunctionsObjectProperties} - } - - export default functions +/** + * The generated Netligraph library with your operations + */ +const functions = { + ${exportedFunctionsObjectProperties} +} + +export default functions ` // const formatted = Prettier.format(source, { @@ -434,23 +442,28 @@ const generateTypeScriptDefinitions = (schema, enabledFunctions) => { const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = (fn.description || '').replaceAll('*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') return `/** - * ${jsDoc} - */ - ${subscriptionFnName}:${subscriptionFnName}, - /** - * Verify the event body is signed securely, and then parse the result. - */ - ${parserFnName}:${parserFnName}` + * ${jsDoc} + */ + ${subscriptionFnName}: ${subscriptionFnName}, + /** + * Verify the event body is signed securely, and then parse the result. + */ + ${parserFnName}: ${parserFnName}` } - const jsDoc = (fn.description || ``).replaceAll('*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll((fn.description || ``), '*/', '').split('\n').join('\n* ') return `/** - * ${jsDoc} - */ - export function ${fn.fnName}(variables: ${fn.variableSignature}, accessToken?: string): Promise<${fn.returnSignature}>;` + * ${jsDoc} + */ +export function ${fn.fnName}( + variables: ${fn.variableSignature}, + accessToken?: string +): Promise< + ${fn.returnSignature} +>;` }) const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! @@ -481,12 +494,16 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { const directive = next.directives?.find((localDirective) => localDirective.name.value === 'netligraph') const docArg = directive && directive.arguments?.find((arg) => arg.name.value === 'doc') - const docString = docArg?.value?.value + let docString = docArg?.value?.value - if (!key || !docString) { + if (!key) { return null } + if (!docString) { + docString = '' + } + const operation = { id: key, description: docString, @@ -553,7 +570,7 @@ const generateHandler = (basePath, schema, operationId, handlerOptions) => { functionName: operationId, } - const filename = `netlify/functions/${newFunction.functionName}.ts` + const filename = `netlify/functions/${newFunction.functionName}.js` fs.writeFileSync(filename, source) } From 07ec111ce37d3c0a2e7563e8a4279f649b037445 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 18:41:26 -0800 Subject: [PATCH 07/58] chore: update docs --- README.md | 62 +++++++++++++++++++++--------------- docs/README.md | 10 ++++++ docs/commands/graph.md | 72 ++++++++++++++++++++++++++++++++++++++++++ docs/commands/index.md | 10 ++++++ 4 files changed, 129 insertions(+), 25 deletions(-) create mode 100644 docs/commands/graph.md diff --git a/README.md b/README.md index e2bb3c66c22..de88c7901a6 100644 --- a/README.md +++ b/README.md @@ -13,31 +13,33 @@ See the [CLI command line reference](https://cli.netlify.com/commands/) to get s
Click to expand -- [Installation](#installation) -- [Usage](#usage) -- [Documentation](#documentation) -- [Commands](#commands) - - [addons](#addons) - - [api](#api) - - [build](#build) - - [completion](#completion) - - [deploy](#deploy) - - [dev](#dev) - - [env](#env) - - [functions](#functions) - - [init](#init) - - [link](#link) - - [lm](#lm) - - [login](#login) - - [open](#open) - - [sites](#sites) - - [status](#status) - - [switch](#switch) - - [unlink](#unlink) - - [watch](#watch) -- [Contributing](#contributing) -- [Development](#development) -- [License](#license) +- [*](#) + - [Installation](#installation) + - [Usage](#usage) + - [Documentation](#documentation) + - [Commands](#commands) + - [addons](#addons) + - [api](#api) + - [build](#build) + - [completion](#completion) + - [deploy](#deploy) + - [dev](#dev) + - [env](#env) + - [functions](#functions) + - [graph](#graph) + - [init](#init) + - [link](#link) + - [lm](#lm) + - [login](#login) + - [open](#open) + - [sites](#sites) + - [status](#status) + - [switch](#switch) + - [unlink](#unlink) + - [watch](#watch) + - [Contributing](#contributing) + - [Development](#development) + - [License](#license)
@@ -151,6 +153,16 @@ Manage netlify functions | [`functions:serve`](/docs/commands/functions.md#functionsserve) | (Beta) Serve functions locally | +### [graph](/docs/commands/graph.md) + +(Beta) Control the Netligraph functions for the current site + +| Subcommand | description | +|:--------------------------- |:-----| +| [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | + + ### [init](/docs/commands/init.md) Configure continuous deployment for a new or existing site. To create a new site without continuous deployment, use `netlify sites:create` diff --git a/docs/README.md b/docs/README.md index b41f79de20f..77a64efe5c6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -109,6 +109,16 @@ Manage netlify functions | [`functions:serve`](/docs/commands/functions.md#functionsserve) | (Beta) Serve functions locally | +### [graph](/docs/commands/graph.md) + +(Beta) Control the Netligraph functions for the current site + +| Subcommand | description | +|:--------------------------- |:-----| +| [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | + + ### [init](/docs/commands/init.md) Configure continuous deployment for a new or existing site. To create a new site without continuous deployment, use `netlify sites:create` diff --git a/docs/commands/graph.md b/docs/commands/graph.md new file mode 100644 index 00000000000..a0cb855a02e --- /dev/null +++ b/docs/commands/graph.md @@ -0,0 +1,72 @@ +--- +title: Netlify CLI graph command +description: Sync and edit your Netligraph library +--- + +# `graph` + + +(Beta) Control the Netligraph functions for the current site + +**Usage** + +```bash +netlify graph +``` + +**Flags** + +- `debug` (*boolean*) - Print debugging information +- `httpProxy` (*string*) - Proxy server address to route requests through. +- `httpProxyCertificateFilename` (*string*) - Certificate file to use when connecting using a proxy server + +| Subcommand | description | +|:--------------------------- |:-----| +| [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | + + +**Examples** + +```bash +netlify graph:pull +netlify graph:edit +``` + +--- +## `graph:edit` + +Launch the browser to edit your local graph functions from Netlify + +**Usage** + +```bash +netlify graph:edit +``` + +**Flags** + +- `debug` (*boolean*) - Print debugging information +- `httpProxy` (*string*) - Proxy server address to route requests through. +- `httpProxyCertificateFilename` (*string*) - Certificate file to use when connecting using a proxy server + +--- +## `graph:pull` + +Pull down your local Netligraph schema and regenerate your local functions + +**Usage** + +```bash +netlify graph:pull +``` + +**Flags** + +- `debug` (*boolean*) - Print debugging information +- `httpProxy` (*string*) - Proxy server address to route requests through. +- `httpProxyCertificateFilename` (*string*) - Certificate file to use when connecting using a proxy server + +--- + + diff --git a/docs/commands/index.md b/docs/commands/index.md index 05a728d77f4..a4cac5f06d8 100644 --- a/docs/commands/index.md +++ b/docs/commands/index.md @@ -90,6 +90,16 @@ Manage netlify functions | [`functions:serve`](/docs/commands/functions.md#functionsserve) | (Beta) Serve functions locally | +### [graph](/docs/commands/graph.md) + +(Beta) Control the Netligraph functions for the current site + +| Subcommand | description | +|:--------------------------- |:-----| +| [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | + + ### [init](/docs/commands/init.md) Configure continuous deployment for a new or existing site. To create a new site without continuous deployment, use `netlify sites:create` From f2c5e3b50e6ee3125e5e64a3c73a6c12f547702b Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 21:23:30 -0800 Subject: [PATCH 08/58] chore: fix eslint issues --- src/commands/dev/dev.js | 2 +- src/commands/graph/TODO | 2 + src/commands/graph/graph-pull.js | 2 +- src/lib/oneGraph/client.js | 58 ++++++---------- src/lib/oneGraph/graphql-helpers.js | 100 +++++++++++++++------------- src/lib/oneGraph/netligraph.js | 2 +- 6 files changed, 79 insertions(+), 87 deletions(-) create mode 100644 src/commands/graph/TODO diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 3a2887543f7..eda11f76d33 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -292,7 +292,7 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const startNetligraphWatcher = !!site.id; + const startNetligraphWatcher = Boolean(site.id); if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() diff --git a/src/commands/graph/TODO b/src/commands/graph/TODO new file mode 100644 index 00000000000..15705e348d0 --- /dev/null +++ b/src/commands/graph/TODO @@ -0,0 +1,2 @@ +Don't use replaceAll, it's not available in node 14 +End files in .js not .ts \ No newline at end of file diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 619bc76684b..442c8cbe999 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -4,7 +4,7 @@ const { refetchAndGenerateFromOneGraph } = require('../../lib/oneGraph/client') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { - const { site } = command.netlify + const { site, state } = command.netlify if (!site.id) { console.error( diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index f5a2294a6f0..93df9e990b4 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,10 +1,10 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable no-unused-vars */ +const fs = require('fs') + const { buildClientSchema, parse, printSchema } = require('graphql') const fetch = require('node-fetch') -const fs = require('fs') const { NETLIFYDEVLOG, chalk, log } = require('../../utils') + const { extractFunctionsFromOperationDoc, generateFunctionsFile, @@ -17,13 +17,6 @@ const { const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' -// We mock out onegraph-auth to provide just enough functionality to work with server-side auth tokens -const makeAuth = (appId, authToken) => ({ - appId, - authHeaders: () => ({ Authorization: `Bearer ${authToken}` }), - accessToken: () => ({ accessToken: authToken }), -}) - const httpOkLow = 200 const httpOkHigh = 299 @@ -464,18 +457,18 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } -const monitorCLISessionEvents = (appId, authToken, sessionId, state, { onClose, onError, onEvents }) => { +const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, sessionId, state }) => { const frequency = 5000 let shouldClose = false - const enabledServiceWatcher = async (authToken, appId) => { - let enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] - const enabledServicesInfo = await fetchEnabledServices(authToken, appId) + const enabledServiceWatcher = async (netlifyToken, siteId) => { + const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] + const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) const newEnabledServices = enabledServicesInfo.map((service) => service.service) if (enabledServices.sort().join(",") !== newEnabledServices.sort().join(',')) { log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema...`) - await refetchAndGenerateFromOneGraph(state, authToken, appId) + await refetchAndGenerateFromOneGraph(state, netlifyToken, siteId) log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) } } @@ -493,11 +486,7 @@ const monitorCLISessionEvents = (appId, authToken, sessionId, state, { onClose, } const first = 1000 - const next = await fetchOneGraph(authToken, appId, operationsDoc, 'CLISessionEventsQuery', { - nfToken: authToken, - sessionId, - first, - }) + const next = await fetchCLISessionEvents(authToken, appId, sessionId, first) if (next.errors) { next.errors.forEach((error) => { @@ -589,23 +578,23 @@ const refetchAndGenerateFromOneGraph = async (state, netlifyToken, siteId) => { await ensureAppForSite(netlifyToken, siteId) const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - const enabledServices = enabledServicesInfo.map((service) => service.service).sort((a, b) => a.localeCompare(b)) + const enabledServices = enabledServicesInfo.map((service) => service.service).sort((aString, bString) => aString.localeCompare(bString)) const schema = await fetchOneGraphSchema(siteId, enabledServices) - let operationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) - if (operationsDoc.trim().length === 0) { - operationsDoc = `query ExampleQuery { + if (currentOperationsDoc.trim().length === 0) { + currentOperationsDoc = `query ExampleQuery { __typename }` } - const parsedDoc = parse(operationsDoc) + const parsedDoc = parse(currentOperationsDoc) const operations = extractFunctionsFromOperationDoc(parsedDoc) state.set('oneGraphEnabledServices', enabledServices) - generateFunctionsFile(netligraphPath, schema, operationsDoc, operations) + generateFunctionsFile(netligraphPath, schema, currentOperationsDoc, operations) fs.writeFileSync(`${netligraphPath}/netligraphSchema.graphql`, printSchema(schema)) } @@ -643,7 +632,6 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { switch (__typename) { case 'OneGraphNetlifyCliSessionTestEvent': return friendlyEventName(payload) - break case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': return "Generate handler as Netlify function " case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': @@ -673,7 +661,11 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { } } - monitorCLISessionEvents(site.id, netlifyToken, oneGraphSessionId, state, { + monitorCLISessionEvents({ + appId: site.id, + authToken: netlifyToken, + sessionId: oneGraphSessionId, + state, onEvents: (events) => { events.forEach((event) => { const eventName = friendlyEventName(event) @@ -710,16 +702,6 @@ const upsertAppForSite = async (authToken, siteId) => { return result.data?.oneGraph?.upsertAppForNetlifySite?.app } -// export type CreateNewGraphQLSchemaInput = { -// /* Whether to set this schema as the default for the app. Defaults to false. */ -// setAsDefaultForApp: boolean; -// /* The list of services that this schema should use. Leave blank if you want to add support for all supported services. */ -// enabledServices: string[]; -// /* The id of the app that the schema should belong to. */ -// appId: string; -// parentId: string | undefined; -// }; - const createNewAppSchema = async (nfToken, input) => { const result = await fetchOneGraph(null, input.appId, operationsDoc, 'CreateNewSchemaMutation', { nfToken, diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index e269d47dadb..a6210b02998 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -1,5 +1,3 @@ -/* eslint-disable unicorn/no-nested-ternary */ -/* eslint-disable no-nested-ternary */ const { TypeInfo, getNamedType, @@ -233,18 +231,28 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra // @ts-ignore console.warn('No returnType!', basicType, namedType.name, selection) } - const baseGqlType = - operationDefinition.kind === 'OperationDefinition' - ? operationDefinition.operation === 'query' - ? schema.getQueryType() - : operationDefinition.operation === 'mutation' - ? schema.getMutationType() - : operationDefinition.operation === 'subscription' - ? schema.getSubscriptionType() - : null - : operationDefinition.kind === 'FragmentDefinition' - ? schema.getType(operationDefinition.typeCondition.name.value) - : null + + let baseGqlType = null + + if (operationDefinition.kind === 'OperationDefinition') { + switch (operationDefinition.operation) { + case 'query': + baseGqlType = schema.getQueryType() + break + case 'mutation': + baseGqlType = schema.getMutationType() + break + case 'subscription': + baseGqlType = schema.getSubscriptionType() + break + default: + break + } + } else if (operationDefinition.kind === 'FragmentDefinition') { + const typeName = operationDefinition.typeCondition.name.value + baseGqlType = schema.getType(typeName) + }; + const selections = operationDefinition.selectionSet?.selections const sub = selections?.map((selection) => helper(baseGqlType, selection)) if (sub) { @@ -369,28 +377,28 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'String', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookUrl', + value: 'String', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -443,28 +451,28 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookSecret', + value: 'OneGraphSubscriptionSecretInput', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index d6d8d08d251..ad2d71f7505 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -16,7 +16,7 @@ const netligraphPath = `${process.cwd()}/netlify` const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const replaceAll = (target, search, replace) => { - const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string + const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); return target.replace(new RegExp(simpleString, 'g'), replace); }; From e9756d94f1386aa4122bb9fefdf91722223d27b4 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 21:45:03 -0800 Subject: [PATCH 09/58] chore: remote optional chaining --- src/commands/graph/TODO | 2 - src/lib/oneGraph/client.js | 9 +++-- src/lib/oneGraph/graphql-helpers.js | 35 +++++++++-------- .../netligraph-code-exporter-snippets.js | 39 ++++++++----------- src/lib/oneGraph/netligraph.js | 8 ++-- 5 files changed, 44 insertions(+), 49 deletions(-) delete mode 100644 src/commands/graph/TODO diff --git a/src/commands/graph/TODO b/src/commands/graph/TODO deleted file mode 100644 index 15705e348d0..00000000000 --- a/src/commands/graph/TODO +++ /dev/null @@ -1,2 +0,0 @@ -Don't use replaceAll, it's not available in node 14 -End files in .js not .ts \ No newline at end of file diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 93df9e990b4..ea7889f66be 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,6 +1,7 @@ const fs = require('fs') const { buildClientSchema, parse, printSchema } = require('graphql') +const _ = require("lodash"); const fetch = require('node-fetch') const { NETLIFYDEVLOG, chalk, log } = require('../../utils') @@ -690,7 +691,7 @@ const fetchAppSchema = async (authToken, siteId) => { appId: siteId, }) - return result.data?.oneGraph?.app?.graphQLSchema + return _.get(result, ['data', 'oneGraph', 'app', 'graphQLSchema']) } const upsertAppForSite = async (authToken, siteId) => { @@ -699,7 +700,7 @@ const upsertAppForSite = async (authToken, siteId) => { siteId, }) - return result.data?.oneGraph?.upsertAppForNetlifySite?.app + return _.get(result, ['data', 'oneGraph', 'upsertAppForNetlifySite', 'app']) } const createNewAppSchema = async (nfToken, input) => { @@ -708,7 +709,7 @@ const createNewAppSchema = async (nfToken, input) => { input, }) - return result.data?.oneGraph?.createGraphQLSchema?.graphqlSchema + return _.get(result, ['data', 'oneGraph', 'createGraphQLSchema', 'graphqlSchema']) } const ensureAppForSite = async (authToken, siteId) => { @@ -726,7 +727,7 @@ const ensureAppForSite = async (authToken, siteId) => { const fetchEnabledServices = async (authToken, appId) => { const appSchema = await fetchAppSchema(authToken, appId) - return appSchema?.services || [] + return _.get(appSchema, ['services']) || [] } module.exports = { diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index a6210b02998..0a15939f1db 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -39,11 +39,12 @@ const gatherAllReferencedTypes = (schema, query) => { const extractVariableNameStringPair = (varDef) => [varDef.variable.name.value, print(varDef.type)] -const gatherVariableDefinitions = (definition) => - (definition?.variableDefinitions?.map(extractVariableNameStringPair) || []).sort(([left], [right]) => +const gatherVariableDefinitions = (definition) => { + const varDefs = _.get(definition, ['variableDefinitions', '']) || []; + return varDefs.map(extractVariableNameStringPair).sort(([left], [right]) => left.localeCompare(right), ) - +} const typeScriptForGraphQLType = (schema, gqlType) => { const scalarMap = { String: 'string', @@ -81,7 +82,7 @@ const typeScriptForGraphQLType = (schema, gqlType) => { const namedType = getNamedType(gqlType) // @ts-ignore metaprogramming - const basicType = scalarMap[namedType?.name] || 'any' + const basicType = scalarMap[namedType && namedType.name] || 'any' return basicType } @@ -149,12 +150,12 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const parentNamedType = // @ts-ignore getNamedType(parentGqlType) || getNamedType(parentGqlType.type) - const alias = selection.alias?.value - const name = selection?.name?.value + const alias = _.get(selection, ['alias', 'value']) + const name = _.get(selection, ['name', 'value']) const displayedName = alias || name // @ts-ignore const field = parentNamedType.getFields()[name] - const gqlType = field?.type + const gqlType = _.get(field, ['type']) if (name.startsWith('__')) { return [displayedName, { type: 'any', description: 'Internal GraphQL field' }] } @@ -162,7 +163,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const isNullable = !isNonNullType(gqlType) const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) - const sub = selection.selectionSet?.selections + const sub = _.get(selection, ['selectionSet', 'selections']) // @ts-ignore .map(function innerHelper(innerSelection) { if (innerSelection.kind === 'Field') { @@ -210,7 +211,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const isEnum = isEnumType(namedType) const basicType = isEnum ? new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) - : scalarMap[namedType?.name || 'any'] + : scalarMap[namedType && namedType.name || 'any'] let returnType if (isObjectLike) { returnType = sub ? Object.fromEntries(sub) : null @@ -225,7 +226,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra for (let idx = 0; idx < nestingLevel; idx++) { finalType = [finalType] } - const entry = [displayedName, { type: finalType, description: field?.description }] + const entry = [displayedName, { type: finalType, description: field && field.description }] return entry } // @ts-ignore @@ -253,8 +254,8 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra baseGqlType = schema.getType(typeName) }; - const selections = operationDefinition.selectionSet?.selections - const sub = selections?.map((selection) => helper(baseGqlType, selection)) + const selections = _.get(operationDefinition, ['selectionSet', 'selections']) + const sub = selections && selections.map((selection) => helper(baseGqlType, selection)) if (sub) { // @ts-ignore const object = Object.fromEntries(sub) @@ -287,7 +288,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions) => { const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions) const valueHelper = (value) => { - if (value?.type && typeof value.type === 'string') { + if (typeof _.get(value, ['type']) === 'string') { return value.type } if (Array.isArray(value.type)) { @@ -346,7 +347,7 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') - const selectionHasWebhookUrlArg = selection.arguments?.some((arg) => arg.name.value === 'webhookUrl') + const selectionHasWebhookUrlArg = _.get(selection, ['arguments'], []).some((arg) => arg.name.value === 'webhookUrl') if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { return { ...selection, @@ -371,7 +372,7 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { } return selection }) - const hasWebhookVariableDefinition = definition.variableDefinitions?.find( + const hasWebhookVariableDefinition = definition.variableDefinitions && definition.variableDefinitions.find( (varDef) => varDef.variable.name.value === 'netligraphWebhookUrl', ) const variableDefinitions = hasWebhookVariableDefinition @@ -420,7 +421,7 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') - const selectionHasWebhookSecretArg = selection.arguments?.some((arg) => arg.name.value === 'secret') + const selectionHasWebhookSecretArg = _.get(selection, ['arguments'], []).some((arg) => arg.name.value === 'secret') if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { return { ...selection, @@ -445,7 +446,7 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { } return selection }) - const hasWebhookVariableDefinition = definition.variableDefinitions?.find( + const hasWebhookVariableDefinition = _.get(definition, ['variableDefinitions'], []).find( (varDef) => varDef.variable.name.value === 'netligraphWebhookSecret', ) const variableDefinitions = hasWebhookVariableDefinition diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 6487ea64925..1262b2214c0 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -233,16 +233,16 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { const pluckers = { get: - namedOperationData.operationDefinition.variableDefinitions - ?.map((def) => { + _.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []) + .map((def) => { const name = def.variable.name.value const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) return `const ${name} = ${withCoercer};` }) - ?.join('\n ') || '', + .join('\n ') || '', post: - namedOperationData.operationDefinition.variableDefinitions - ?.map((def) => { + _.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []) + .map((def) => { const name = def.variable.name.value return `const ${name} = eventBodyJson?.${name};` }) @@ -254,8 +254,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { let requiredVariableCount = 0 if ( - Boolean(namedOperationData.operationDefinition.variableDefinitions) && - (namedOperationData.operationDefinition.variableDefinitions?.length || 0) > 0 + (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length || 0) > 0 ) { const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) @@ -308,8 +307,7 @@ const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) = let bodyPayload = '' if ( - Boolean(namedOperationData.operationDefinition.variableDefinitions) && - (namedOperationData.operationDefinition.variableDefinitions?.length || 0) > 0 + (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length || 0) > 0 ) { const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( (def) => def.variable.name.value, @@ -329,20 +327,17 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${ - useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ - pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${ - pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -427,8 +422,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData @@ -457,7 +452,7 @@ ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + const fetcherInvocation = asyncFetcherInvocation( operationDataList, - options?.postHttpMethod === true ? 'post' : 'get', + _.get(options, ['postHttpMethod']) === true ? 'post' : 'get', ) const passThroughResults = operationDataList @@ -470,7 +465,7 @@ ${operationData.name}Data: ${operationData.name}Data`, const clientSideCalls = clientSideInvocations( operationDataList, - options?.postHttpMethod === true ? 'post' : 'get', + _.get(options, ['postHttpMethod']) === true ? 'post' : 'get', options.useClientAuth, ) diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index ad2d71f7505..b9253c7ffc8 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -489,12 +489,12 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { return null } - const key = next.name?.value + const key = _.get(next, ['name', 'value']) - const directive = next.directives?.find((localDirective) => localDirective.name.value === 'netligraph') - const docArg = directive && directive.arguments?.find((arg) => arg.name.value === 'doc') + const directive = _.get(next, ['directives'], []).find((localDirective) => localDirective.name.value === 'netligraph') + const docArg = _.get(directive, ['arguments']).find((arg) => arg.name.value === 'doc') - let docString = docArg?.value?.value + let docString = _.get(docArg, ['value', 'value']) if (!key) { return null From d06e358b7650e66ac760917f0da61d32e9a4c29d Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 21:52:49 -0800 Subject: [PATCH 10/58] chore: remove graph:create command --- src/commands/graph/graph-create.js | 47 ------------------------------ 1 file changed, 47 deletions(-) delete mode 100644 src/commands/graph/graph-create.js diff --git a/src/commands/graph/graph-create.js b/src/commands/graph/graph-create.js deleted file mode 100644 index 7c175d24afa..00000000000 --- a/src/commands/graph/graph-create.js +++ /dev/null @@ -1,47 +0,0 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable no-unused-vars */ -const fs = require('fs') - -const { printSchema } = require('graphql') - -const { fetchOneGraphSchema } = require('../../lib/oneGraph/client') -const { - extractFunctionsFromOperationDoc, - generateFunctionsFile, - netligraphPath, - readAndParseGraphQLOperationsSourceFile, - readGraphQLOperationsSourceFile, - writeGraphQLOperationsSourceFile, -} = require('../../lib/oneGraph/netligraph') - -const graphCreate = async (options, command) => { - const { site } = command.netlify - const siteId = site.id - - // TODO: Get this from the app on OneGraph - const defaultEnabledServices = ['github', 'npm'] - - const basePath = netligraphPath() - const schema = await fetchOneGraphSchema(siteId, defaultEnabledServices) - const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(basePath) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - const operationsDoc = readGraphQLOperationsSourceFile(basePath) - - generateFunctionsFile(basePath, schema, operationsDoc, operations) - fs.writeFileSync(`${basePath}/netligraphSchema.graphql`, printSchema(schema)) -} - -/** - * Creates the `netlify graph:create` command - * @param {import('../base-command').BaseCommand} program - * @returns - */ -const createGraphCreateCommand = (program) => - program - .command('graph:create') - .description('Create down your local Netligraph schema and regenerate your local functions') - .action(async (options, command) => { - await graphCreate(options, command) - }) - -module.exports = { createGraphCreateCommand } From 84738cefa23bd8b73a8c56b254d86e0cc8451b3c Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 22:03:32 -0800 Subject: [PATCH 11/58] chore: add netlify back in --- npm-shrinkwrap.json | 1434 ++++++++++++++++++++++++++++++++++++++++--- package.json | 11 +- 2 files changed, 1368 insertions(+), 77 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index fd093a6e407..eda38202277 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,12 +1,12 @@ { - "name": "netlify-cli", - "version": "8.1.7", + "name": "@sgrove/netlify-cli", + "version": "8.1.8-beta.3", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "netlify-cli", - "version": "8.1.7", + "name": "@sgrove/netlify-cli", + "version": "8.1.8-beta.3", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -74,10 +74,12 @@ "lodash": "^4.17.20", "log-symbols": "^4.0.0", "make-dir": "^3.0.0", + "markdown-magic": "^2.5.2", "memoize-one": "^6.0.0", "minimist": "^1.2.5", "mock-require": "^3.0.3", "multiparty": "^4.2.1", + "netlify": "^10.1.0", "netlify-headers-parser": "^6.0.0", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", @@ -3457,9 +3459,9 @@ } }, "node_modules/@netlify/open-api": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.6.0.tgz", - "integrity": "sha512-VfYLiEXJIVIn25wrwNB/O+QkM3xPgCVcGSKZxM/i+oPCOgBK+4PEieRtfqhF4vXXwwOi68VaRWU7P3aRnb3nIA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.7.0.tgz", + "integrity": "sha512-WzedpLK6XFs67naFDX1K3QWk3GKlUQVCuIlMuXb0dWvJvfB71R/Njk1bq0FqVllIWw2RRCQMkCIywEABbnB2Yg==" }, "node_modules/@netlify/plugin-edge-handlers": { "version": "3.0.0", @@ -4031,6 +4033,50 @@ "node": ">=10" } }, + "node_modules/@technote-space/anchor-markdown-header": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@technote-space/anchor-markdown-header/-/anchor-markdown-header-1.1.31.tgz", + "integrity": "sha512-yIZ8SZ8PQp+RfKcIp3L8emoiqBAPaGliQ3DdGuoyhW0hOSMcAEWDFCBFP/ar+qNB7Rp6bLtr88VG6eEsnX+Lyg==", + "dependencies": { + "emoji-regex": "^10.0.0" + } + }, + "node_modules/@technote-space/anchor-markdown-header/node_modules/emoji-regex": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.0.0.tgz", + "integrity": "sha512-KmJa8l6uHi1HrBI34udwlzZY1jOEuID/ft4d8BSSEdRyap7PwBEt910453PJa5MuGvxkLqlt4Uvhu7tttFHViw==" + }, + "node_modules/@technote-space/doctoc": { + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/@technote-space/doctoc/-/doctoc-2.4.18.tgz", + "integrity": "sha512-rFkbX/syIwkCzn5WJelpPcvRHd6ulXGjCrnhy374i/raq8ny1C7vViP0HCxZVDMF8f+b4F6st9Y1XOFDF4SfKg==", + "dependencies": { + "@technote-space/anchor-markdown-header": "^1.1.30", + "@textlint/markdown-to-ast": "^12.1.0", + "htmlparser2": "^7.2.0", + "update-section": "^0.3.3" + } + }, + "node_modules/@textlint/ast-node-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", + "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==" + }, + "node_modules/@textlint/markdown-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", + "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", + "dependencies": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3", + "remark-footnotes": "^3.0.0", + "remark-frontmatter": "^3.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "traverse": "^0.6.6", + "unified": "^9.2.2" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -4062,6 +4108,14 @@ "@types/responselike": "*" } }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/decompress": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", @@ -4085,6 +4139,14 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -4160,7 +4222,6 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, "dependencies": { "@types/unist": "*" } @@ -4214,6 +4275,11 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -4238,8 +4304,7 @@ "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/@types/yargs": { "version": "15.0.14", @@ -5076,6 +5141,11 @@ "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "node_modules/ascii-table": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", @@ -5290,6 +5360,15 @@ "node": ">= 0.6" } }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5779,6 +5858,20 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5839,7 +5932,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5849,7 +5941,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5859,7 +5950,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6323,6 +6413,42 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/concordance": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", @@ -7824,7 +7950,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -7838,7 +7963,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -7847,7 +7971,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, "funding": [ { "type": "github", @@ -7859,7 +7982,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, "dependencies": { "domelementtype": "^2.2.0" }, @@ -7874,7 +7996,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -8249,7 +8370,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true, "engines": { "node": ">=0.12" }, @@ -9686,6 +9806,11 @@ "node": ">=4" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -9813,6 +9938,18 @@ "reusify": "^1.0.4" } }, + "node_modules/fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -10421,6 +10558,14 @@ "node": ">= 6" } }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "engines": { + "node": ">=0.4.x" + } + }, "node_modules/formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", @@ -11173,7 +11318,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -11188,6 +11332,20 @@ "entities": "^3.0.1" } }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -11249,6 +11407,19 @@ "node": ">=8.0.0" } }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + }, "node_modules/http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -11810,7 +11981,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11820,7 +11990,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -11955,7 +12124,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12047,7 +12215,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12090,6 +12257,11 @@ "node": ">=8" } }, + "node_modules/is-local-path": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-local-path/-/is-local-path-0.1.6.tgz", + "integrity": "sha1-gV0USxTVac7L6tTVaTCX8Aqb9sU=" + }, "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -13585,6 +13757,15 @@ "triple-beam": "^1.3.0" } }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -13712,6 +13893,63 @@ "node": ">=0.10.0" } }, + "node_modules/markdown-magic": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/markdown-magic/-/markdown-magic-2.5.2.tgz", + "integrity": "sha512-bIiV0CKmwHDlvJRPGVZCJfWlt6ORlTidMJrvWallycaknGOdobnHEId1bBbaWcKFnj/CHC8QArsp/2wEABK8NA==", + "dependencies": { + "@technote-space/doctoc": "^2.4.7", + "commander": "^7.2.0", + "deepmerge": "^4.2.2", + "find-up": "^5.0.0", + "globby": "^10.0.2", + "is-local-path": "^0.1.6", + "mkdirp": "^1.0.4", + "sync-request": "^6.1.0" + }, + "bin": { + "markdown": "cli.js", + "md-magic": "cli.js" + } + }, + "node_modules/markdown-magic/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/markdown-magic/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -13799,11 +14037,37 @@ "node": ">=8" } }, + "node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-footnote": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", + "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0", + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-from-markdown": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -13816,11 +14080,106 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdast-util-frontmatter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", + "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "dependencies": { + "micromark-extension-frontmatter": "^0.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -13966,7 +14325,6 @@ "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, "funding": [ { "type": "GitHub Sponsors", @@ -13982,6 +14340,104 @@ "parse-entities": "^2.0.0" } }, + "node_modules/micromark-extension-footnote": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", + "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "dependencies": { + "fault": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -14379,11 +14835,11 @@ "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "node_modules/netlify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/netlify/-/netlify-10.0.0.tgz", - "integrity": "sha512-8oLcxWZPbzJy9naA2oH86NyaIFmDuRyQONjPAD4hn6JmnZPq+s6Ukh//qjWXNXE/9H8l8J/vDzY4ehHxYfP32w==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/netlify/-/netlify-10.1.0.tgz", + "integrity": "sha512-c6ljxmQKc6CHXVlkAvxQc+YrI7vqnm2rHocucGflycRIm981sWkEM/GzMirF4ykgPAeMGltLBhFdjOO7OTI2Hw==", "dependencies": { - "@netlify/open-api": "^2.6.0", + "@netlify/open-api": "^2.7.0", "lodash.camelcase": "^4.3.0", "micro-api-client": "^3.3.0", "node-fetch": "^2.6.1", @@ -16472,11 +16928,15 @@ "node": ">=6" } }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -16993,6 +17453,14 @@ "node": ">=0.4.0" } }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dependencies": { + "asap": "~2.0.6" + } + }, "node_modules/prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -17572,6 +18040,57 @@ "node": ">=4" } }, + "node_modules/remark-footnotes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", + "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", + "dependencies": { + "mdast-util-footnote": "^0.1.0", + "micromark-extension-footnote": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-frontmatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", + "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "dependencies": { + "mdast-util-frontmatter": "^0.2.0", + "micromark-extension-frontmatter": "^0.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -19199,6 +19718,35 @@ "node": ">=0.10.0" } }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/sync-rpc/node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "engines": { + "node": ">=4" + } + }, "node_modules/table": { "version": "6.7.5", "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", @@ -19437,6 +19985,45 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -19676,6 +20263,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -19727,6 +20319,15 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/ts-node": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", @@ -19864,6 +20465,11 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -19955,6 +20561,53 @@ "node": ">=4" } }, + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -19993,11 +20646,19 @@ "node": ">=8" } }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, "dependencies": { "@types/unist": "^2.0.2" }, @@ -20006,6 +20667,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -20145,6 +20819,11 @@ "is-ci": "bin.js" } }, + "node_modules/update-section": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", + "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -20238,6 +20917,56 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, "node_modules/wait-port": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", @@ -20683,6 +21412,15 @@ "node": ">= 10" } }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "tools/eslint-rules": { "name": "eslint-plugin-local-rules", "version": "0.0.1", @@ -23037,9 +23775,9 @@ "optional": true }, "@netlify/open-api": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.6.0.tgz", - "integrity": "sha512-VfYLiEXJIVIn25wrwNB/O+QkM3xPgCVcGSKZxM/i+oPCOgBK+4PEieRtfqhF4vXXwwOi68VaRWU7P3aRnb3nIA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.7.0.tgz", + "integrity": "sha512-WzedpLK6XFs67naFDX1K3QWk3GKlUQVCuIlMuXb0dWvJvfB71R/Njk1bq0FqVllIWw2RRCQMkCIywEABbnB2Yg==" }, "@netlify/plugin-edge-handlers": { "version": "3.0.0", @@ -23479,6 +24217,52 @@ "defer-to-connect": "^2.0.0" } }, + "@technote-space/anchor-markdown-header": { + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@technote-space/anchor-markdown-header/-/anchor-markdown-header-1.1.31.tgz", + "integrity": "sha512-yIZ8SZ8PQp+RfKcIp3L8emoiqBAPaGliQ3DdGuoyhW0hOSMcAEWDFCBFP/ar+qNB7Rp6bLtr88VG6eEsnX+Lyg==", + "requires": { + "emoji-regex": "^10.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.0.0.tgz", + "integrity": "sha512-KmJa8l6uHi1HrBI34udwlzZY1jOEuID/ft4d8BSSEdRyap7PwBEt910453PJa5MuGvxkLqlt4Uvhu7tttFHViw==" + } + } + }, + "@technote-space/doctoc": { + "version": "2.4.18", + "resolved": "https://registry.npmjs.org/@technote-space/doctoc/-/doctoc-2.4.18.tgz", + "integrity": "sha512-rFkbX/syIwkCzn5WJelpPcvRHd6ulXGjCrnhy374i/raq8ny1C7vViP0HCxZVDMF8f+b4F6st9Y1XOFDF4SfKg==", + "requires": { + "@technote-space/anchor-markdown-header": "^1.1.30", + "@textlint/markdown-to-ast": "^12.1.0", + "htmlparser2": "^7.2.0", + "update-section": "^0.3.3" + } + }, + "@textlint/ast-node-types": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-12.1.0.tgz", + "integrity": "sha512-UlxqemrV/EnGTCl26OU7JhtFJpH7NZdgXvnsuII604orcIkvywUA1GGlg51grfbfqi+ar4zRsOb6fVbcbMZnKA==" + }, + "@textlint/markdown-to-ast": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-12.1.0.tgz", + "integrity": "sha512-22FRiXRxTrNVe1gbE18V8TxAtrWb9rKUb1+2mt5vXdgByZ+rHUJuEc4UonAiye/8+0eTrJ4brjPNXgYsJGeMKg==", + "requires": { + "@textlint/ast-node-types": "^12.1.0", + "debug": "^4.3.3", + "remark-footnotes": "^3.0.0", + "remark-frontmatter": "^3.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "traverse": "^0.6.6", + "unified": "^9.2.2" + } + }, "@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -23510,6 +24294,14 @@ "@types/responselike": "*" } }, + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "requires": { + "@types/node": "*" + } + }, "@types/decompress": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", @@ -23533,6 +24325,14 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "requires": { + "@types/node": "*" + } + }, "@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", @@ -23608,7 +24408,6 @@ "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dev": true, "requires": { "@types/unist": "*" } @@ -23661,6 +24460,11 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, "@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -23685,8 +24489,7 @@ "@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "@types/yargs": { "version": "15.0.14", @@ -24282,6 +25085,11 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, "ascii-table": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", @@ -24461,6 +25269,11 @@ "precond": "0.2" } }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -24822,6 +25635,16 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001287.tgz", "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -24865,20 +25688,17 @@ "character-entities": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" }, "character-entities-legacy": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" }, "character-reference-invalid": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" }, "chardet": { "version": "0.7.0", @@ -25244,6 +26064,41 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "concordance": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", @@ -26405,7 +27260,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -26415,22 +27269,19 @@ "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" } } }, "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, "requires": { "domelementtype": "^2.2.0" } @@ -26439,7 +27290,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -26735,8 +27585,7 @@ "entities": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "dev": true + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" }, "env-paths": { "version": "2.2.1", @@ -27809,6 +28658,11 @@ "sort-keys-length": "^1.0.0" } }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -27917,6 +28771,14 @@ "reusify": "^1.0.4" } }, + "fault": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", + "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", + "requires": { + "format": "^0.2.0" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -28369,6 +29231,11 @@ "mime-types": "^2.1.12" } }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=" + }, "formidable": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz", @@ -28931,7 +29798,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", - "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.2", @@ -28939,6 +29805,17 @@ "entities": "^3.0.1" } }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", @@ -28990,6 +29867,21 @@ "micromatch": "^4.0.2" } }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + } + } + }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -29390,14 +30282,12 @@ "is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" }, "is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -29491,8 +30381,7 @@ "is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, "is-descriptor": { "version": "1.0.2", @@ -29554,8 +30443,7 @@ "is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" }, "is-installed-globally": { "version": "0.4.0", @@ -29581,6 +30469,11 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, + "is-local-path": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-local-path/-/is-local-path-0.1.6.tgz", + "integrity": "sha1-gV0USxTVac7L6tTVaTCX8Aqb9sU=" + }, "is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", @@ -30735,6 +31628,11 @@ "triple-beam": "^1.3.0" } }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -30822,6 +31720,51 @@ "object-visit": "^1.0.0" } }, + "markdown-magic": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/markdown-magic/-/markdown-magic-2.5.2.tgz", + "integrity": "sha512-bIiV0CKmwHDlvJRPGVZCJfWlt6ORlTidMJrvWallycaknGOdobnHEId1bBbaWcKFnj/CHC8QArsp/2wEABK8NA==", + "requires": { + "@technote-space/doctoc": "^2.4.7", + "commander": "^7.2.0", + "deepmerge": "^4.2.2", + "find-up": "^5.0.0", + "globby": "^10.0.2", + "is-local-path": "^0.1.6", + "mkdirp": "^1.0.4", + "sync-request": "^6.1.0" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } + } + } + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "requires": { + "repeat-string": "^1.0.0" + } + }, "matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", @@ -30905,11 +31848,29 @@ "blueimp-md5": "^2.10.0" } }, + "mdast-util-find-and-replace": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz", + "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==", + "requires": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "mdast-util-footnote": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/mdast-util-footnote/-/mdast-util-footnote-0.1.7.tgz", + "integrity": "sha512-QxNdO8qSxqbO2e3m09KwDKfWiLgqyCurdWTQ198NpbZ2hxntdc+VKS4fDJCmNWbAroUdYnSthu+XbZ8ovh8C3w==", + "requires": { + "mdast-util-to-markdown": "^0.6.0", + "micromark": "~2.11.0" + } + }, "mdast-util-from-markdown": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, "requires": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -30918,11 +31879,78 @@ "unist-util-stringify-position": "^2.0.0" } }, + "mdast-util-frontmatter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-0.2.0.tgz", + "integrity": "sha512-FHKL4w4S5fdt1KjJCwB0178WJ0evnyyQr5kXTM3wrOVpytD0hrkvd+AOOjU9Td8onOejCkmZ+HQRT3CZ3coHHQ==", + "requires": { + "micromark-extension-frontmatter": "^0.2.0" + } + }, + "mdast-util-gfm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz", + "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==", + "requires": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz", + "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==", + "requires": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz", + "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==", + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "mdast-util-gfm-table": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz", + "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==", + "requires": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz", + "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==", + "requires": { + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, "mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" }, "media-typer": { "version": "0.3.0", @@ -31032,12 +32060,77 @@ "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, "requires": { "debug": "^4.0.0", "parse-entities": "^2.0.0" } }, + "micromark-extension-footnote": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/micromark-extension-footnote/-/micromark-extension-footnote-0.3.2.tgz", + "integrity": "sha512-gr/BeIxbIWQoUm02cIfK7mdMZ/fbroRpLsck4kvFtjbzP4yi+OPVbnukTc/zy0i7spC2xYE/dbX1Sur8BEDJsQ==", + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-frontmatter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-0.2.2.tgz", + "integrity": "sha512-q6nPLFCMTLtfsctAuS0Xh4vaolxSFUWUWR6PZSrXXiRy+SANGllpcqdXFv2z07l0Xz/6Hl40hK0ffNCJPH2n1A==", + "requires": { + "fault": "^1.0.0" + } + }, + "micromark-extension-gfm": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz", + "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==", + "requires": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz", + "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==", + "requires": { + "micromark": "~2.11.3" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz", + "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==", + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-table": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz", + "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==", + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz", + "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==" + }, + "micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz", + "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==", + "requires": { + "micromark": "~2.11.0" + } + }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", @@ -31327,11 +32420,11 @@ "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "netlify": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/netlify/-/netlify-10.0.0.tgz", - "integrity": "sha512-8oLcxWZPbzJy9naA2oH86NyaIFmDuRyQONjPAD4hn6JmnZPq+s6Ukh//qjWXNXE/9H8l8J/vDzY4ehHxYfP32w==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/netlify/-/netlify-10.1.0.tgz", + "integrity": "sha512-c6ljxmQKc6CHXVlkAvxQc+YrI7vqnm2rHocucGflycRIm981sWkEM/GzMirF4ykgPAeMGltLBhFdjOO7OTI2Hw==", "requires": { - "@netlify/open-api": "^2.6.0", + "@netlify/open-api": "^2.7.0", "lodash.camelcase": "^4.3.0", "micro-api-client": "^3.3.0", "node-fetch": "^2.6.1", @@ -32947,11 +34040,15 @@ "callsites": "^3.0.0" } }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, "parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, "requires": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -33313,6 +34410,14 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, "prop-types": { "version": "15.7.2", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", @@ -33750,6 +34855,41 @@ "es6-error": "^4.0.1" } }, + "remark-footnotes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-3.0.0.tgz", + "integrity": "sha512-ZssAvH9FjGYlJ/PBVKdSmfyPc3Cz4rTWgZLI4iE/SX8Nt5l3o3oEjv3wwG5VD7xOjktzdwp5coac+kJV9l4jgg==", + "requires": { + "mdast-util-footnote": "^0.1.0", + "micromark-extension-footnote": "^0.3.0" + } + }, + "remark-frontmatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-3.0.0.tgz", + "integrity": "sha512-mSuDd3svCHs+2PyO29h7iijIZx4plX0fheacJcAoYAASfgzgVIcXGYSq9GFyYocFLftQs8IOmmkgtOovs6d4oA==", + "requires": { + "mdast-util-frontmatter": "^0.2.0", + "micromark-extension-frontmatter": "^0.2.0" + } + }, + "remark-gfm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz", + "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==", + "requires": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + } + }, + "remark-parse": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -35038,6 +36178,31 @@ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, + "sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "requires": { + "get-port": "^3.1.0" + }, + "dependencies": { + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" + } + } + }, "table": { "version": "6.7.5", "resolved": "https://registry.npmjs.org/table/-/table-6.7.5.tgz", @@ -35216,6 +36381,41 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" + }, + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -35432,6 +36632,11 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, "tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", @@ -35470,6 +36675,11 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, "ts-node": { "version": "9.1.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", @@ -35571,6 +36781,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -35637,6 +36852,31 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" }, + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + } + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -35668,15 +36908,28 @@ "crypto-random-string": "^2.0.0" } }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + }, "unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, "requires": { "@types/unist": "^2.0.2" } }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, "universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -35788,6 +37041,11 @@ } } }, + "update-section": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", + "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=" + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -35862,6 +37120,33 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + } + } + }, + "vfile-message": { + "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" + } + }, "wait-port": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", @@ -36197,6 +37482,11 @@ "compress-commons": "^4.1.0", "readable-stream": "^3.6.0" } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" } } } diff --git a/package.json b/package.json index fb8c59fc281..0983a6489a0 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,15 @@ { - "name": "netlify-cli", + "name": "@sgrove/netlify-cli", "description": "Netlify command line tool", - "version": "8.1.7", + "version": "8.1.8-beta.3", "author": "Netlify Inc.", "contributors": [ "Mathias Biilmann (https://twitter.com/biilmann)", "David Calavera (https://twitter.com/calavera)", "David Wells (https://davidwells.io/)", "Raees Iqbal (https://raeesbhatti.com/)", - "Bret Comnes (https://bret.io)" + "Bret Comnes (https://bret.io)", + "Sean Grove (https://twitter.com/sgrove)" ], "engines": { "node": "^12.20.0 || ^14.14.0 || >=16.0.0" @@ -42,8 +43,6 @@ "url": "https://github.com/netlify/cli/issues" }, "scripts": { - "prepublishOnly": "run-s prepublishOnly:*", - "prepublishOnly:test": "run-local \"npm test\"", "start": "node ./bin/run", "test": "run-s format test:dev", "format": "run-s format:check-fix:*", @@ -142,10 +141,12 @@ "lodash": "^4.17.20", "log-symbols": "^4.0.0", "make-dir": "^3.0.0", + "markdown-magic": "^2.5.2", "memoize-one": "^6.0.0", "minimist": "^1.2.5", "mock-require": "^3.0.3", "multiparty": "^4.2.1", + "netlify": "^10.1.0", "netlify-headers-parser": "^6.0.0", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", From 7aedc0fe222f005d9e4d06cdac670b8010718dbb Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 22:17:44 -0800 Subject: [PATCH 12/58] chore: disable eslint rule --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index a169e1cdc57..45d3476c126 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -19,6 +19,7 @@ module.exports = { 'node/no-sync': 0, 'sort-destructure-keys/sort-destructure-keys': 2, 'unicorn/consistent-destructuring': 0, + 'you-dont-need-lodash-underscore/get': 0, // TODO: harmonize with filename snake_case in other Netlify Dev projects 'unicorn/filename-case': [2, { case: 'kebabCase' }], }, From 4782623980a0757961768d0f3d5ed95ef5d4a852 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 22:20:40 -0800 Subject: [PATCH 13/58] chore: add lodash back in --- src/lib/oneGraph/graphql-helpers.js | 1 + src/lib/oneGraph/netligraph-code-exporter-snippets.js | 1 + src/lib/oneGraph/netligraph.js | 1 + 3 files changed, 3 insertions(+) diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index 0a15939f1db..20f8f16b718 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -15,6 +15,7 @@ const { visit, visitWithTypeInfo, } = require('graphql') +const _ = require("lodash"); const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 1262b2214c0..fce454a30fa 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,4 +1,5 @@ const { parse, print } = require('graphql') +const _ = require("lodash"); let operationNodesMemo = [null, null] diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index b9253c7ffc8..237892979bb 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -2,6 +2,7 @@ const fs = require('fs') const process = require('process') const { Kind, parse, print } = require('graphql') +const _ = require("lodash"); const { patchSubscriptionWebhookField, From 8d8332235601590a884a1b5a209878317d44af3f Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 22:21:43 -0800 Subject: [PATCH 14/58] chore: fix eslint rule --- src/lib/oneGraph/netligraph-code-exporter-snippets.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index fce454a30fa..858c4b3413c 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -255,7 +255,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { let requiredVariableCount = 0 if ( - (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length || 0) > 0 + (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0 ) { const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) @@ -308,7 +308,7 @@ const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) = let bodyPayload = '' if ( - (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length || 0) > 0 + (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0 ) { const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( (def) => def.variable.name.value, From 1ca4c24736a1030532bd337092ace4dfd40b175c Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 29 Dec 2021 22:30:16 -0800 Subject: [PATCH 15/58] chore: run prettier --- src/commands/dev/dev.js | 12 +-- src/lib/oneGraph/client.js | 14 ++-- src/lib/oneGraph/graphql-helpers.js | 82 +++++++++---------- .../netligraph-code-exporter-snippets.js | 29 ++++--- src/lib/oneGraph/netligraph.js | 32 +++++--- 5 files changed, 89 insertions(+), 80 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index eda11f76d33..cdd2192d766 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -106,12 +106,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } @@ -292,7 +292,7 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const startNetligraphWatcher = Boolean(site.id); + const startNetligraphWatcher = Boolean(site.id) if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index ea7889f66be..9e8067a6e46 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,7 +1,7 @@ const fs = require('fs') const { buildClientSchema, parse, printSchema } = require('graphql') -const _ = require("lodash"); +const _ = require('lodash') const fetch = require('node-fetch') const { NETLIFYDEVLOG, chalk, log } = require('../../utils') @@ -445,7 +445,6 @@ mutation CreateNewSchemaMutation( } }` - const fetchPersistedQuery = async (authToken, appId, docId) => { const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'PersistedQueryQuery', { nfToken: authToken, @@ -467,7 +466,7 @@ const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) const newEnabledServices = enabledServicesInfo.map((service) => service.service) - if (enabledServices.sort().join(",") !== newEnabledServices.sort().join(',')) { + if (enabledServices.sort().join(',') !== newEnabledServices.sort().join(',')) { log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema...`) await refetchAndGenerateFromOneGraph(state, netlifyToken, siteId) log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) @@ -579,7 +578,9 @@ const refetchAndGenerateFromOneGraph = async (state, netlifyToken, siteId) => { await ensureAppForSite(netlifyToken, siteId) const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - const enabledServices = enabledServicesInfo.map((service) => service.service).sort((aString, bString) => aString.localeCompare(bString)) + const enabledServices = enabledServicesInfo + .map((service) => service.service) + .sort((aString, bString) => aString.localeCompare(bString)) const schema = await fetchOneGraphSchema(siteId, enabledServices) let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) @@ -609,7 +610,6 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { oneGraphSessionId = state.get('oneGraphSessionId') } - const enabledServices = [] const schema = await fetchOneGraphSchema(site.id, enabledServices) @@ -634,9 +634,9 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { case 'OneGraphNetlifyCliSessionTestEvent': return friendlyEventName(payload) case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - return "Generate handler as Netlify function " + return 'Generate handler as Netlify function ' case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - return "Sync Netligraph operations library" + return 'Sync Netligraph operations library' default: { return `Unrecognized event (${__typename})` } diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index 20f8f16b718..f5dcc0d3cbf 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -15,7 +15,7 @@ const { visit, visitWithTypeInfo, } = require('graphql') -const _ = require("lodash"); +const _ = require('lodash') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -41,10 +41,8 @@ const gatherAllReferencedTypes = (schema, query) => { const extractVariableNameStringPair = (varDef) => [varDef.variable.name.value, print(varDef.type)] const gatherVariableDefinitions = (definition) => { - const varDefs = _.get(definition, ['variableDefinitions', '']) || []; - return varDefs.map(extractVariableNameStringPair).sort(([left], [right]) => - left.localeCompare(right), - ) + const varDefs = _.get(definition, ['variableDefinitions', '']) || [] + return varDefs.map(extractVariableNameStringPair).sort(([left], [right]) => left.localeCompare(right)) } const typeScriptForGraphQLType = (schema, gqlType) => { const scalarMap = { @@ -212,7 +210,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const isEnum = isEnumType(namedType) const basicType = isEnum ? new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) - : scalarMap[namedType && namedType.name || 'any'] + : scalarMap[(namedType && namedType.name) || 'any'] let returnType if (isObjectLike) { returnType = sub ? Object.fromEntries(sub) : null @@ -253,7 +251,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra } else if (operationDefinition.kind === 'FragmentDefinition') { const typeName = operationDefinition.typeCondition.name.value baseGqlType = schema.getType(typeName) - }; + } const selections = _.get(operationDefinition, ['selectionSet', 'selections']) const sub = selections && selections.map((selection) => helper(baseGqlType, selection)) @@ -373,34 +371,34 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { } return selection }) - const hasWebhookVariableDefinition = definition.variableDefinitions && definition.variableDefinitions.find( - (varDef) => varDef.variable.name.value === 'netligraphWebhookUrl', - ) + const hasWebhookVariableDefinition = + definition.variableDefinitions && + definition.variableDefinitions.find((varDef) => varDef.variable.name.value === 'netligraphWebhookUrl') const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'String', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'String', + value: 'netligraphWebhookUrl', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -453,28 +451,28 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'OneGraphSubscriptionSecretInput', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', + value: 'netligraphWebhookSecret', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 858c4b3413c..14ffcc58c1f 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,5 +1,5 @@ const { parse, print } = require('graphql') -const _ = require("lodash"); +const _ = require('lodash') let operationNodesMemo = [null, null] @@ -254,9 +254,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { let requiredVariableCount = 0 - if ( - (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0 - ) { + if ((_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0) { const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) .filter(Boolean) @@ -307,9 +305,7 @@ const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) = ) let bodyPayload = '' - if ( - (_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0 - ) { + if ((_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0) { const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( (def) => def.variable.name.value, ) @@ -328,17 +324,20 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${ + useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ + pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${ + pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -423,8 +422,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 237892979bb..08412750098 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -2,7 +2,7 @@ const fs = require('fs') const process = require('process') const { Kind, parse, print } = require('graphql') -const _ = require("lodash"); +const _ = require('lodash') const { patchSubscriptionWebhookField, @@ -17,9 +17,9 @@ const netligraphPath = `${process.cwd()}/netlify` const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const replaceAll = (target, search, replace) => { - const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - return target.replace(new RegExp(simpleString, 'g'), replace); -}; + const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + return target.replace(new RegExp(simpleString, 'g'), replace) +} const generatedOneGraphClient = ` const fetch = (appId, options) => { @@ -139,7 +139,9 @@ const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { const variableSignature = typeScriptSignatureForOperationVariables(variableNames, schema, fn.parsedOperation) - const jsDoc = replaceAll((fn.description || ''), '*/', '!').split('\n').join('\n* ') + const jsDoc = replaceAll(fn.description || '', '*/', '!') + .split('\n') + .join('\n* ') return `/** * ${jsDoc} @@ -318,7 +320,9 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll(fn.description || '', '*/', '') + .split('\n') + .join('\n* ') return `/** * ${jsDoc} @@ -329,7 +333,9 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { */ ${parserFnName}: ${parserFnName}` } - const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll(fn.description || '', '*/', '') + .split('\n') + .join('\n* ') return `/** * ${jsDoc} @@ -443,7 +449,9 @@ const generateTypeScriptDefinitions = (schema, enabledFunctions) => { const subscriptionFnName = subscriptionFunctionName(fn) const parserFnName = subscriptionParserName(fn) - const jsDoc = replaceAll((fn.description || ''), '*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll(fn.description || '', '*/', '') + .split('\n') + .join('\n* ') return `/** * ${jsDoc} @@ -454,7 +462,9 @@ const generateTypeScriptDefinitions = (schema, enabledFunctions) => { */ ${parserFnName}: ${parserFnName}` } - const jsDoc = replaceAll((fn.description || ``), '*/', '').split('\n').join('\n* ') + const jsDoc = replaceAll(fn.description || ``, '*/', '') + .split('\n') + .join('\n* ') return `/** * ${jsDoc} @@ -492,7 +502,9 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { const key = _.get(next, ['name', 'value']) - const directive = _.get(next, ['directives'], []).find((localDirective) => localDirective.name.value === 'netligraph') + const directive = _.get(next, ['directives'], []).find( + (localDirective) => localDirective.name.value === 'netligraph', + ) const docArg = _.get(directive, ['arguments']).find((arg) => arg.name.value === 'doc') let docString = _.get(docArg, ['value', 'value']) From abf1932095279492c754e647baf26d6bb1842890 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 30 Dec 2021 10:20:19 -0800 Subject: [PATCH 16/58] chore: move to dotProp over lodash.get --- .eslintrc.js | 1 - src/lib/oneGraph/client.js | 10 +-- src/lib/oneGraph/graphql-helpers.js | 86 +++++++++---------- .../netligraph-code-exporter-snippets.js | 33 ++++--- src/lib/oneGraph/netligraph.js | 10 +-- 5 files changed, 68 insertions(+), 72 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 45d3476c126..a169e1cdc57 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -19,7 +19,6 @@ module.exports = { 'node/no-sync': 0, 'sort-destructure-keys/sort-destructure-keys': 2, 'unicorn/consistent-destructuring': 0, - 'you-dont-need-lodash-underscore/get': 0, // TODO: harmonize with filename snake_case in other Netlify Dev projects 'unicorn/filename-case': [2, { case: 'kebabCase' }], }, diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 9e8067a6e46..d3531fe5420 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,7 +1,7 @@ const fs = require('fs') +const dotProp = require('dot-prop') const { buildClientSchema, parse, printSchema } = require('graphql') -const _ = require('lodash') const fetch = require('node-fetch') const { NETLIFYDEVLOG, chalk, log } = require('../../utils') @@ -691,7 +691,7 @@ const fetchAppSchema = async (authToken, siteId) => { appId: siteId, }) - return _.get(result, ['data', 'oneGraph', 'app', 'graphQLSchema']) + return dotProp.get(result, 'data.oneGraph.app.graphQLSchema') } const upsertAppForSite = async (authToken, siteId) => { @@ -700,7 +700,7 @@ const upsertAppForSite = async (authToken, siteId) => { siteId, }) - return _.get(result, ['data', 'oneGraph', 'upsertAppForNetlifySite', 'app']) + return dotProp.get(result, 'data.oneGraph.upsertAppForNetlifySite.app') } const createNewAppSchema = async (nfToken, input) => { @@ -709,7 +709,7 @@ const createNewAppSchema = async (nfToken, input) => { input, }) - return _.get(result, ['data', 'oneGraph', 'createGraphQLSchema', 'graphqlSchema']) + return dotProp.get(result, 'data.oneGraph.createGraphQLSchema.graphqlSchema') } const ensureAppForSite = async (authToken, siteId) => { @@ -727,7 +727,7 @@ const ensureAppForSite = async (authToken, siteId) => { const fetchEnabledServices = async (authToken, appId) => { const appSchema = await fetchAppSchema(authToken, appId) - return _.get(appSchema, ['services']) || [] + return dotProp.get(appSchema, 'services') || [] } module.exports = { diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index f5dcc0d3cbf..5ec6ae8d0c4 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -1,3 +1,4 @@ +const dotProp = require('dot-prop') const { TypeInfo, getNamedType, @@ -15,7 +16,6 @@ const { visit, visitWithTypeInfo, } = require('graphql') -const _ = require('lodash') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -41,7 +41,7 @@ const gatherAllReferencedTypes = (schema, query) => { const extractVariableNameStringPair = (varDef) => [varDef.variable.name.value, print(varDef.type)] const gatherVariableDefinitions = (definition) => { - const varDefs = _.get(definition, ['variableDefinitions', '']) || [] + const varDefs = dotProp.get(definition, 'variableDefinitions.') || [] return varDefs.map(extractVariableNameStringPair).sort(([left], [right]) => left.localeCompare(right)) } const typeScriptForGraphQLType = (schema, gqlType) => { @@ -149,12 +149,12 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const parentNamedType = // @ts-ignore getNamedType(parentGqlType) || getNamedType(parentGqlType.type) - const alias = _.get(selection, ['alias', 'value']) - const name = _.get(selection, ['name', 'value']) + const alias = dotProp.get(selection, 'alias.value') + const name = dotProp.get(selection, 'name.value') const displayedName = alias || name // @ts-ignore const field = parentNamedType.getFields()[name] - const gqlType = _.get(field, ['type']) + const gqlType = dotProp.get(field, 'type') if (name.startsWith('__')) { return [displayedName, { type: 'any', description: 'Internal GraphQL field' }] } @@ -162,7 +162,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const isNullable = !isNonNullType(gqlType) const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) - const sub = _.get(selection, ['selectionSet', 'selections']) + const sub = dotProp.get(selection, 'selectionSet.selections') // @ts-ignore .map(function innerHelper(innerSelection) { if (innerSelection.kind === 'Field') { @@ -253,7 +253,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra baseGqlType = schema.getType(typeName) } - const selections = _.get(operationDefinition, ['selectionSet', 'selections']) + const selections = dotProp.get(operationDefinition, 'selectionSet.selections') const sub = selections && selections.map((selection) => helper(baseGqlType, selection)) if (sub) { // @ts-ignore @@ -287,7 +287,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions) => { const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions) const valueHelper = (value) => { - if (typeof _.get(value, ['type']) === 'string') { + if (typeof dotProp.get(value, 'type') === 'string') { return value.type } if (Array.isArray(value.type)) { @@ -346,7 +346,7 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') - const selectionHasWebhookUrlArg = _.get(selection, ['arguments'], []).some((arg) => arg.name.value === 'webhookUrl') + const selectionHasWebhookUrlArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'webhookUrl') if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { return { ...selection, @@ -377,28 +377,28 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'String', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookUrl', + value: 'String', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -420,7 +420,7 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') - const selectionHasWebhookSecretArg = _.get(selection, ['arguments'], []).some((arg) => arg.name.value === 'secret') + const selectionHasWebhookSecretArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'secret') if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { return { ...selection, @@ -445,34 +445,34 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { } return selection }) - const hasWebhookVariableDefinition = _.get(definition, ['variableDefinitions'], []).find( + const hasWebhookVariableDefinition = dotProp.get(definition, 'variableDefinitions', []).find( (varDef) => varDef.variable.name.value === 'netligraphWebhookSecret', ) const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookSecret', + value: 'OneGraphSubscriptionSecretInput', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 14ffcc58c1f..0c8cd5e70c8 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,5 +1,5 @@ +const dotProp = require('dot-prop') const { parse, print } = require('graphql') -const _ = require('lodash') let operationNodesMemo = [null, null] @@ -234,7 +234,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { const pluckers = { get: - _.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []) + dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) @@ -242,7 +242,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { }) .join('\n ') || '', post: - _.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []) + dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value return `const ${name} = eventBodyJson?.${name};` @@ -254,7 +254,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { let requiredVariableCount = 0 - if ((_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0) { + if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) .filter(Boolean) @@ -305,7 +305,7 @@ const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) = ) let bodyPayload = '' - if ((_.get(namedOperationData, ['operationDefinition', 'variableDefinitions'], []).length !== 0 || 0) > 0) { + if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( (def) => def.variable.name.value, ) @@ -324,20 +324,17 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${ - useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ - pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${ - pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -422,8 +419,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData @@ -452,7 +449,7 @@ ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + const fetcherInvocation = asyncFetcherInvocation( operationDataList, - _.get(options, ['postHttpMethod']) === true ? 'post' : 'get', + dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', ) const passThroughResults = operationDataList @@ -465,7 +462,7 @@ ${operationData.name}Data: ${operationData.name}Data`, const clientSideCalls = clientSideInvocations( operationDataList, - _.get(options, ['postHttpMethod']) === true ? 'post' : 'get', + dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', options.useClientAuth, ) diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 08412750098..b5f7aa87d3e 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -1,8 +1,8 @@ const fs = require('fs') const process = require('process') +const dotProp = require('dot-prop') const { Kind, parse, print } = require('graphql') -const _ = require('lodash') const { patchSubscriptionWebhookField, @@ -500,14 +500,14 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { return null } - const key = _.get(next, ['name', 'value']) + const key = dotProp.get(next, 'name.value') - const directive = _.get(next, ['directives'], []).find( + const directive = dotProp.get(next, 'directives', []).find( (localDirective) => localDirective.name.value === 'netligraph', ) - const docArg = _.get(directive, ['arguments']).find((arg) => arg.name.value === 'doc') + const docArg = dotProp.get(directive, 'arguments').find((arg) => arg.name.value === 'doc') - let docString = _.get(docArg, ['value', 'value']) + let docString = dotProp.get(docArg, 'value.value') if (!key) { return null From ec7dd258d04daaa740b878d1da58126374021a42 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 31 Dec 2021 12:16:57 -0800 Subject: [PATCH 17/58] feat: support configuration, better error handling, improved codegen --- src/commands/dev/dev.js | 36 +++- src/commands/graph/graph-edit.js | 13 +- src/commands/graph/graph-pull.js | 5 +- src/lib/oneGraph/client.js | 145 ++++++------- src/lib/oneGraph/graphql-helpers.js | 47 +++-- .../netligraph-code-exporter-snippets.js | 37 +++- src/lib/oneGraph/netligraph.js | 195 ++++++++++++------ 7 files changed, 296 insertions(+), 182 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index cdd2192d766..b666c28df36 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -12,6 +12,7 @@ const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/oneGraph/client') +const { getNetligraphConfig } = require('../../lib/oneGraph/netligraph') const { NETLIFYDEV, NETLIFYDEVERR, @@ -106,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -292,18 +293,25 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const startNetligraphWatcher = Boolean(site.id) + const startNetligraphWatcher = Boolean(options.netligraph) - if (startNetligraphWatcher) { - const netlifyToken = await command.authenticate() - await ensureAppForSite(netlifyToken, site.id) - startOneGraphCLISession({ netlifyToken, site, state }) - } else { + if (startNetligraphWatcher && options.offline) { + console.warn( + `${NETLIFYDEVERR} Warning: unable to start Netligraph in offline mode`, + ) + } else if (startNetligraphWatcher && !(site.id)) { console.warn( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) + } else if (startNetligraphWatcher) { + const netlifyToken = await command.authenticate() + await ensureAppForSite(netlifyToken, site.id) + const netligraphConfig = getNetligraphConfig({ command, options }) + startOneGraphCLISession({ netligraphConfig, netlifyToken, site, state }) + } else { + console.log("Skipping netligraph....") } printBanner({ url }) @@ -349,6 +357,12 @@ const createDevCommand = (program) => { 'specify the path to a local GeoIP location database in MMDB format', ).hideHelp(), ) + .addOption( + new Option( + '--netligraph', + 'enable netligraph support', + ).hideHelp(), + ) .addExamples(['netlify dev', 'netlify dev -d public', 'netlify dev -c "hugo server -w" --targetPort 1313']) .action(dev) } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 048fd55f816..24a1e9d71f6 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -8,7 +8,7 @@ const { ensureAppForSite, loadCLISession, } = require('../../lib/oneGraph/client') -const { readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +const { defaultExampleOperationsDoc, getNetligraphConfig, readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') @@ -29,15 +29,14 @@ const graphEdit = async (options, command) => { const siteData = await api.getSite({ siteId }) + const netligraphConfig = getNetligraphConfig({ command, options }) + const { branch } = gitRepoInfo() - const cwd = process.cwd() - const base = cwd - let graphqlDocument = readGraphQLOperationsSourceFile(`${base}/netlify`) + + let graphqlDocument = readGraphQLOperationsSourceFile(netligraphConfig) if (graphqlDocument.trim().length === 0) { - graphqlDocument = `query ExampleQuery { - __typename -}` + graphqlDocument = defaultExampleOperationsDoc } const netlifyToken = await command.authenticate() diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 442c8cbe999..0d7a3cdf9e9 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,6 +1,7 @@ const process = require('process') const { refetchAndGenerateFromOneGraph } = require('../../lib/oneGraph/client') +const { getNetligraphConfig } = require('../../lib/oneGraph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { @@ -15,8 +16,10 @@ const graphPull = async (options, command) => { process.exit(1) } + const netligraphConfig = getNetligraphConfig({ command, options }) const netlifyToken = await command.authenticate() - refetchAndGenerateFromOneGraph(state, netlifyToken, site.id) + const siteId = site.id + await refetchAndGenerateFromOneGraph({ netligraphConfig, netlifyToken, state, siteId }) } /** diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index d3531fe5420..5e23a46c3f4 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,19 +1,17 @@ -const fs = require('fs') - const dotProp = require('dot-prop') -const { buildClientSchema, parse, printSchema } = require('graphql') +const { buildClientSchema, parse } = require('graphql') const fetch = require('node-fetch') const { NETLIFYDEVLOG, chalk, log } = require('../../utils') const { + defaultExampleOperationsDoc, extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, - netligraphPath, - readAndParseGraphQLOperationsSourceFile, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, + writeGraphQLSchemaFile } = require('./netligraph') const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' @@ -89,21 +87,24 @@ const fetchOneGraph = async ( } const body = JSON.stringify(payload) + try { + const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body, + }) - const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { - method: 'POST', - headers: { - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body, - }) - - // @ts-ignore - const value = JSON.parse(result) - if (value.errors) { - console.log('fetchOneGraph errors', JSON.stringify(value, null, 2)) + // @ts-ignore + const value = JSON.parse(result) + if (value.errors) { + console.log('fetchOneGraph errors', JSON.stringify(value, null, 2)) + } + return value + } catch (error) { + return {} } - return value } const fetchOneGraphPersisted = async ( @@ -119,19 +120,22 @@ const fetchOneGraphPersisted = async ( variables, operationName, } + try { + const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { + method: 'POST', + headers: { + Authorization: accessToken ? `Bearer ${accessToken}` : '', + }, + body: JSON.stringify(payload), + }) - const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { - method: 'POST', - headers: { - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body: JSON.stringify(payload), - }) - - return JSON.parse(result) + return JSON.parse(result) + } catch (error) { + return {} + } } -const operationsDoc = `mutation CreatePersistedQueryMutation( +const internalOperationsDoc = `mutation CreatePersistedQueryMutation( $nfToken: String! $appId: String! $query: String! @@ -446,7 +450,7 @@ mutation CreateNewSchemaMutation( }` const fetchPersistedQuery = async (authToken, appId, docId) => { - const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'PersistedQueryQuery', { + const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, internalOperationsDoc, 'PersistedQueryQuery', { nfToken: authToken, appId, id: docId, @@ -457,18 +461,24 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } -const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, sessionId, state }) => { +const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, onError, onEvents, sessionId, state }) => { const frequency = 5000 let shouldClose = false const enabledServiceWatcher = async (netlifyToken, siteId) => { const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) + if (!enabledServicesInfo) { + console.warn("Unable to fetch enabled services for site for code generation") + return + } const newEnabledServices = enabledServicesInfo.map((service) => service.service) + const enabledServicesCompareKey = enabledServices.sort().join(',') + const newEnabledServicesCompareKey = newEnabledServices.sort().join(',') - if (enabledServices.sort().join(',') !== newEnabledServices.sort().join(',')) { - log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema...`) - await refetchAndGenerateFromOneGraph(state, netlifyToken, siteId) + if (enabledServicesCompareKey !== newEnabledServicesCompareKey) { + log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`) + await refetchAndGenerateFromOneGraph({ netligraphConfig, state, netlifyToken, siteId }) log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) } } @@ -486,7 +496,11 @@ const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, } const first = 1000 - const next = await fetchCLISessionEvents(authToken, appId, sessionId, first) + const next = await fetchOneGraph(null, appId, internalOperationsDoc, 'CLISessionEventsQuery', { + nfToken: authToken, + sessionId, + first, + }) if (next.errors) { next.errors.forEach((error) => { @@ -498,7 +512,7 @@ const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, if (events.length !== 0) { const ackIds = onEvents(events) - await fetchOneGraph(authToken, appId, operationsDoc, 'AckCLISessionEventMutation', { + await fetchOneGraph(authToken, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { nfToken: authToken, sessionId, eventIds: ackIds, @@ -517,7 +531,7 @@ const monitorCLISessionEvents = ({ appId, authToken, onClose, onError, onEvents, } const createCLISession = async (netlifyToken, appId, name) => { - const result = await fetchOneGraph(null, appId, operationsDoc, 'CreateCLISessionMutation', { + const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', { nfToken: netlifyToken, appId, name, @@ -532,20 +546,8 @@ const createCLISession = async (netlifyToken, appId, name) => { return session } -const fetchCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { - const result = await fetchOneGraph(null, appId, operationsDoc, 'CLISessionEventsQuery', { - nfToken: netlifyToken, - sessionId, - first, - }) - - const events = result.data && result.data.oneGraph && result.data.oneGraph.netlifyCliEvents - - return events -} - const ackCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { - const result = await fetchOneGraph(null, appId, operationsDoc, 'AckCLISessionEventMutation', { + const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { nfToken: netlifyToken, sessionId, first, @@ -557,7 +559,7 @@ const ackCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { } const createPersistedQuery = async (netlifyToken, { appId, description, document, tags }) => { - const result = await fetchOneGraph(null, appId, operationsDoc, 'CreatePersistedQueryMutation', { + const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreatePersistedQueryMutation', { nfToken: netlifyToken, appId, query: document, @@ -574,35 +576,36 @@ const createPersistedQuery = async (netlifyToken, { appId, description, document return persistedQuery } -const refetchAndGenerateFromOneGraph = async (state, netlifyToken, siteId) => { +const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, siteId, state }) => { await ensureAppForSite(netlifyToken, siteId) const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) + if (!enabledServicesInfo) { + console.warn("Unable to fetch enabled services for site for code generation") + return + } + const enabledServices = enabledServicesInfo .map((service) => service.service) .sort((aString, bString) => aString.localeCompare(bString)) const schema = await fetchOneGraphSchema(siteId, enabledServices) - let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) if (currentOperationsDoc.trim().length === 0) { - currentOperationsDoc = `query ExampleQuery { -__typename -}` + currentOperationsDoc = defaultExampleOperationsDoc } const parsedDoc = parse(currentOperationsDoc) - const operations = extractFunctionsFromOperationDoc(parsedDoc) + generateFunctionsFile(netligraphConfig, schema, currentOperationsDoc, operations) + writeGraphQLSchemaFile(netligraphConfig, schema) state.set('oneGraphEnabledServices', enabledServices) - - generateFunctionsFile(netligraphPath, schema, currentOperationsDoc, operations) - fs.writeFileSync(`${netligraphPath}/netligraphSchema.graphql`, printSchema(schema)) } const loadCLISession = (state) => state.get('oneGraphSessionId') -const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { +const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, state }) => { let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { const oneGraphSession = await createCLISession(netlifyToken, site.id, 'testing') @@ -621,11 +624,13 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { } const doc = persistedDoc.query - writeGraphQLOperationsSourceFile(netligraphPath, doc) - const [parsedDoc] = readAndParseGraphQLOperationsSourceFile(netligraphPath) - const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphPath) + writeGraphQLOperationsSourceFile(netligraphConfig, doc) + const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) + const parsedDoc = parse(appOperationsDoc, { + noLocation: true, + }) const operations = extractFunctionsFromOperationDoc(parsedDoc) - generateFunctionsFile(netligraphPath, schema, appOperationsDoc, operations) + generateFunctionsFile(netligraphConfig, schema, appOperationsDoc, operations) } const friendlyEventName = (event) => { @@ -650,7 +655,7 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { handleEvent(payload) break case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - generateHandler(netligraphPath, schema, payload.operationId, payload) + generateHandler(netligraphConfig, schema, payload.operationId, payload) break case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': updateGraphQLOperationsFile(payload.docId) @@ -665,6 +670,7 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { monitorCLISessionEvents({ appId: site.id, authToken: netlifyToken, + netligraphConfig, sessionId: oneGraphSessionId, state, onEvents: (events) => { @@ -686,7 +692,7 @@ const startOneGraphCLISession = async ({ netlifyToken, site, state }) => { } const fetchAppSchema = async (authToken, siteId) => { - const result = await fetchOneGraph(authToken, siteId, operationsDoc, 'AppSchemaQuery', { + const result = await fetchOneGraph(authToken, siteId, internalOperationsDoc, 'AppSchemaQuery', { nfToken: authToken, appId: siteId, }) @@ -695,7 +701,7 @@ const fetchAppSchema = async (authToken, siteId) => { } const upsertAppForSite = async (authToken, siteId) => { - const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, operationsDoc, 'UpsertAppForSiteMutation', { + const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, internalOperationsDoc, 'UpsertAppForSiteMutation', { nfToken: authToken, siteId, }) @@ -704,7 +710,7 @@ const upsertAppForSite = async (authToken, siteId) => { } const createNewAppSchema = async (nfToken, input) => { - const result = await fetchOneGraph(null, input.appId, operationsDoc, 'CreateNewSchemaMutation', { + const result = await fetchOneGraph(null, input.appId, internalOperationsDoc, 'CreateNewSchemaMutation', { nfToken, input, }) @@ -727,7 +733,7 @@ const ensureAppForSite = async (authToken, siteId) => { const fetchEnabledServices = async (authToken, appId) => { const appSchema = await fetchAppSchema(authToken, appId) - return dotProp.get(appSchema, 'services') || [] + return dotProp.get(appSchema, 'services') } module.exports = { @@ -735,7 +741,6 @@ module.exports = { createCLISession, createPersistedQuery, ensureAppForSite, - fetchEnabledServices, fetchOneGraphPersisted, fetchOneGraphSchemaJson, fetchOneGraphSchema, diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index 5ec6ae8d0c4..33e42e26a1e 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -66,9 +66,12 @@ const typeScriptForGraphQLType = (schema, gqlType) => { */ ` : '' - return `${description}"${field.name}"${nullable ? '?' : ''}: ${type}` + return ` +${description} ${field.name}${nullable ? '?' : ''}: ${type}` }) - return `{${fields.join(', ')}}` + return `{ + ${fields.join('; ')} +}` } if (isWrappingType(gqlType)) { return typeScriptForGraphQLType(schema, gqlType.ofType) @@ -98,14 +101,14 @@ const typeScriptSignatureForOperationVariables = (variableNames, schema, operati const typesObject = variables.map(([varName, varDef]) => { const printedType = print(varDef.type) const parsedType = parseType(printedType) - // @ts-ignore const gqlType = typeFromAST(schema, parsedType) - // @ts-ignore const tsType = typeScriptForGraphQLType(schema, gqlType) return [varName, tsType] }) - const typeFields = typesObject.map(([name, tsType]) => `"${name}": ${tsType}`).join(', ') - const types = `{${typeFields}}` + const typeFields = typesObject.map(([name, tsType]) => `${name}: ${tsType}`).join(', ') + const types = `{ + ${typeFields} +}` return types === '' ? 'null' : types } @@ -156,13 +159,15 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const field = parentNamedType.getFields()[name] const gqlType = dotProp.get(field, 'type') if (name.startsWith('__')) { - return [displayedName, { type: 'any', description: 'Internal GraphQL field' }] + return [displayedName, { + type: 'any', description: 'Internal GraphQL field', nullable: true, + }] } const namedType = getNamedType(gqlType) const isNullable = !isNonNullType(gqlType) const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) - const sub = dotProp.get(selection, 'selectionSet.selections') + const sub = dotProp.get(selection, 'selectionSet.selections', []) // @ts-ignore .map(function innerHelper(innerSelection) { if (innerSelection.kind === 'Field') { @@ -225,7 +230,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra for (let idx = 0; idx < nestingLevel; idx++) { finalType = [finalType] } - const entry = [displayedName, { type: finalType, description: field && field.description }] + const entry = [displayedName, { type: finalType, description: field && field.description, nullable: isNullable }] return entry } // @ts-ignore @@ -261,10 +266,12 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const result = { data: { type: object, - description: 'Any data retrieved by the const function be returned here', + nullable: true, + description: 'Any data retrieved by the function be returned here', }, errors: { type: ['any'], + nullable: true, description: 'Any errors in the function will be returned here', }, } @@ -275,10 +282,12 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra data: { // @ts-ignore type: 'any', - description: 'Any data retrieved by the const function be returned here', + nullable: true, + description: 'Any data retrieved by the function be returned here', }, errors: { type: ['any'], + nullable: true, description: 'Any errors in the function will be returned here', }, } @@ -302,7 +311,7 @@ const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions if (typeof value.type === 'object') { const fields = objectHelper(value.type) return `{ - ${fields.join(', ')} + ${fields.join('; ')} }` } } @@ -311,16 +320,18 @@ const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions Object.entries(obj).map(([name, value]) => { const { description } = value const tsType = valueHelper(value) + const { nullable } = value; const doc = description ? `/** * ${description} */ ` : '' - return `${doc}"${name}": ${tsType}` + return ` +${doc} ${name}${nullable ? '?' : ''}: ${tsType}` }) - const fields = objectHelper(typeMap).join(', ') + const fields = objectHelper(typeMap).join('; ') return `{${fields}}` } @@ -345,6 +356,10 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const newSelections = definition.selectionSet.selections.map((selection) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] + if (!field) { + console.warn("Unable to subscription, you may need to enable additional services. Missing field:", selection.name.value) + return selection + } const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') const selectionHasWebhookUrlArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'webhookUrl') if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { @@ -419,6 +434,10 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { const newSelections = definition.selectionSet.selections.map((selection) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] + if (!field) { + console.warn("Unable to subscription, you may need to enable additional services. Missing field:", selection.name.value) + return selection + } const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') const selectionHasWebhookSecretArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'secret') if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 0c8cd5e70c8..d848e3ba2c7 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -348,13 +348,12 @@ ${variables} } const subscriptionHandler = ({ - // eslint-disable-next-line no-unused-vars - filename, + netligraphConfig, operationData, -}) => `import { getSecrets } from "@netlify/functions"; -import Netligraph from "../netligraphFunctions"; +}) => `${imp(netligraphConfig, "{ getSecrets }", "@netlify/functions")} +${imp(netligraphConfig, "Netligraph", "./netligraph")} -export const handler = async (event, context) => { +${exp(netligraphConfig, "handler")} = async (event, context) => { let secrets = await getSecrets(event); const payload = Netligraph.parseAndVerify${operationData.name}Event(event); @@ -402,6 +401,22 @@ export const handler = async (event, context) => { }; ` +const imp = (netligraphConfig, name, package) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `const ${name} = require("${package}")` + } + + return `import ${name} from "${package}"` +} + +const exp = (netligraphConfig, name) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `exports.${name}` + } + + return `export const ${name}` +} + // Snippet generation! const netlifyFunctionSnippet = { language: 'JavaScript', @@ -409,7 +424,7 @@ const netlifyFunctionSnippet = { name: 'Netlify Function', options: snippetOptions, generate: (opts) => { - const { options } = opts + const { netligraphConfig, options } = opts const operationDataList = opts.operationDataList.map((operationData, idx) => { if (!isOperationNamed(operationData)) { @@ -434,13 +449,13 @@ ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + return '// No operation found' } - const filename = `${firstOperation.name}.js` + const filename = `${firstOperation.name}.${netligraphConfig.extension}` const isSubscription = firstOperation.type === 'subscription' if (isSubscription) { const result = subscriptionHandler({ - filename, + netligraphConfig, operationData: firstOperation, }) @@ -468,10 +483,10 @@ ${operationData.name}Data: ${operationData.name}Data`, const whitespace = 6 - const snippet = `import { getSecrets } from "@netlify/functions"; -import Netligraph from "../netligraphFunctions"; + const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@netlify/functions')}; +${imp(netligraphConfig, "Netligraph", "./netligraph")} -export const handler = async (event, context) => { +${exp(netligraphConfig, "handler")} = async (event, context) => { // By default, all API calls use no authentication let accessToken = null; diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index b5f7aa87d3e..3291a7ad326 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -1,8 +1,10 @@ const fs = require('fs') -const process = require('process') const dotProp = require('dot-prop') -const { Kind, parse, print } = require('graphql') +const { Kind, parse, print, printSchema } = require('graphql') +const makeDir = require('make-dir'); + +const { getFunctionsDir } = require('../../utils') const { patchSubscriptionWebhookField, @@ -12,8 +14,6 @@ const { } = require('./graphql-helpers') const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets') -const netligraphPath = `${process.cwd()}/netlify` - const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const replaceAll = (target, search, replace) => { @@ -21,7 +21,62 @@ const replaceAll = (target, search, replace) => { return target.replace(new RegExp(simpleString, 'g'), replace) } -const generatedOneGraphClient = ` +const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' + +const defaultNetligraphConfig = { + extension: "mjs", + netligraphPath: "netlify", + moduleType: "commonjs" +} + +/** + * Return a full Netligraph config with any defaults overridden by netlify.toml + * @param {import('../base-command').BaseCommand} command + */ +const getNetligraphConfig = ({ command, options }) => { + const { config } = command.netlify + const userSpecifiedConfig = config && config.netligraph + const functionsPath = getFunctionsDir({ config, options }) + const netligraphPath = `${functionsPath}/netligraph` + const baseConfig = { ...defaultNetligraphConfig, ...userSpecifiedConfig, netligraphPath } + const netligraphImplementationFilename = `${baseConfig.netligraphPath}/index.${baseConfig.extension}` + const netligraphTypeDefinitionsFilename = `${baseConfig.netligraphPath}/index.d.ts` + const graphQLOperationsSourceFilename = `${baseConfig.netligraphPath}/${sourceOperationsFilename}` + const graphQLSchemaFilename = 'netligraphSchema.graphql' + const fullConfig = { + functionsPath, + netligraphImplementationFilename, + netligraphTypeDefinitionsFilename, + graphQLOperationsSourceFilename, + graphQLSchemaFilename, + ...baseConfig + } + + return fullConfig +} + +const ensureNetligraphPath = (netligraphConfig) => { + makeDir.sync(netligraphConfig.netligraphPath) +} + +const ensureFunctionsPath = (netligraphConfig) => { + makeDir.sync(netligraphConfig.functionsPath) +} + +const defaultExampleOperationsDoc = `query ExampleQuery @netligraph(doc: "An example query to start with.") { + __typename +}` + +const generatedOneGraphClient = (netligraphConfig) => { + const exp = (name) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `exports.${name}` + } + + return `export const ${name}` + } + + return ` const fetch = (appId, options) => { var reqBody = options.body || null const userHeaders = options.headers || {} @@ -73,7 +128,7 @@ const fetch = (appId, options) => { }) } -export async function fetchOneGraphPersisted( +${exp("fetchOneGraphPersisted")} = async function fetchOneGraphPersisted( accessToken, docId, operationName, @@ -100,7 +155,7 @@ export async function fetchOneGraphPersisted( return JSON.parse(result) } -export async function fetchOneGraph( +${exp("fetchOneGraph")} = async function fetchOneGraph( accessToken, query, operationName, @@ -126,7 +181,7 @@ export async function fetchOneGraph( // @ts-ignore return JSON.parse(result) } -` +`} const subscriptionParserName = (fn) => `parseAndVerify${fn.operationName}Event` @@ -278,7 +333,7 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { return fn } -const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { +const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabledFunctions) => { const operationsWithoutTemplateDollar = replaceAll(operationsDoc, '${', '\\${') const safeOperationsDoc = replaceAll(operationsWithoutTemplateDollar, '`', '\\`') const functionDecls = enabledFunctions.map((fn) => { @@ -312,6 +367,14 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { return fn.id ? staticFunction : dynamicFunction }) + const exp = (name) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `exports.${name}` + } + + return `export const ${name}` + } + const exportedFunctionsObjectProperties = enabledFunctions .map((fn) => { const isSubscription = fn.kind === 'subscription' @@ -344,11 +407,29 @@ const generateJavaScriptClient = (schema, operationsDoc, enabledFunctions) => { }) .join(',\n ') + const dummyHandler = `${exp("handler")} = async (event, context) => { + // return a 401 json response + return { + statusCode: 401, + body: JSON.stringify({ + message: 'Unauthorized', + }), + } +}` + + const imp = (name, package) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `const ${name} = require("${package}")` + } + + return `import ${name} from "${package}"` + } + const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! -import https from 'https' -import crypto from 'crypto' +${imp("https", "https")} +${imp("crypto", "crypto")} -export const verifySignature = (input) => { +${exp("verifySignature")} = (input) => { const secret = input.secret const body = input.body const signature = input.signature @@ -396,9 +477,9 @@ export const verifySignature = (input) => { const operationsDoc = \`${safeOperationsDoc}\` -${generatedOneGraphClient} +${generatedOneGraphClient(netligraphConfig)} -export const verifyRequestSignature = (request) => { +${exp("verifyRequestSignature")} = (request) => { const event = request.event const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET const signature = event.headers['x-onegraph-signature'] @@ -423,20 +504,14 @@ const functions = { ${exportedFunctionsObjectProperties} } -export default functions - ` +${netligraphConfig.moduleType === 'commonjs' ? 'exports.default = functions' : "export default functions"} - // const formatted = Prettier.format(source, { - // tabWidth: 2, - // semi: false, - // singleQuote: true, - // parser: 'babel-ts', - // }) +${dummyHandler}` return source } -const generateTypeScriptDefinitions = (schema, enabledFunctions) => { +const generateTypeScriptDefinitions = (netligraphConfig, schema, enabledFunctions) => { const functionDecls = enabledFunctions.map((fn) => { const isSubscription = fn.kind === 'subscription' @@ -445,23 +520,6 @@ const generateTypeScriptDefinitions = (schema, enabledFunctions) => { return generateSubscriptionFunctionTypeDefinition(schema, fn, fragments) } - if (isSubscription) { - const subscriptionFnName = subscriptionFunctionName(fn) - const parserFnName = subscriptionParserName(fn) - - const jsDoc = replaceAll(fn.description || '', '*/', '') - .split('\n') - .join('\n* ') - - return `/** - * ${jsDoc} - */ - ${subscriptionFnName}: ${subscriptionFnName}, - /** - * Verify the event body is signed securely, and then parse the result. - */ - ${parserFnName}: ${parserFnName}` - } const jsDoc = replaceAll(fn.description || ``, '*/', '') .split('\n') .join('\n* ') @@ -484,13 +542,14 @@ ${functionDecls.join('\n\n')} return source } -const generateFunctionsFile = (basePath, schema, operationsDoc, queries) => { +const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { const functionDefinitions = queries.map((query) => queryToFunctionDefinition(schema, query)) - const clientSource = generateJavaScriptClient(schema, operationsDoc, functionDefinitions) - const typeDefinitionsSource = generateTypeScriptDefinitions(schema, functionDefinitions) + const clientSource = generateJavaScriptClient(netligraphConfig, schema, operationsDoc, functionDefinitions) + const typeDefinitionsSource = generateTypeScriptDefinitions(netligraphConfig, schema, functionDefinitions) - fs.writeFileSync(`${basePath}/netligraphFunctions.mjs`, clientSource, 'utf8') - fs.writeFileSync(`${basePath}/netligraphFunctions.d.ts`, typeDefinitionsSource, 'utf8') + ensureNetligraphPath(netligraphConfig) + fs.writeFileSync(netligraphConfig.netligraphImplementationFilename, clientSource, 'utf8') + fs.writeFileSync(netligraphConfig.netligraphTypeDefinitionsFilename, typeDefinitionsSource, 'utf8') } const extractFunctionsFromOperationDoc = (parsedDoc) => { @@ -505,7 +564,7 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { const directive = dotProp.get(next, 'directives', []).find( (localDirective) => localDirective.name.value === 'netligraph', ) - const docArg = dotProp.get(directive, 'arguments').find((arg) => arg.name.value === 'doc') + const docArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === 'doc') let docString = dotProp.get(docArg, 'value.value') @@ -531,11 +590,13 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { return fns } -const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' -const readGraphQLOperationsSourceFile = (basePath) => { - const fullFilename = `${basePath}/${sourceOperationsFilename}` +const readGraphQLOperationsSourceFile = (netligraphConfig) => { + ensureNetligraphPath(netligraphConfig) + + const fullFilename = netligraphConfig.graphQLOperationsSourceFilename if (!fs.existsSync(fullFilename)) { + fs.writeFileSync(fullFilename, '') fs.closeSync(fs.openSync(fullFilename, 'w')) } const source = fs.readFileSync(fullFilename, 'utf8') @@ -543,28 +604,23 @@ const readGraphQLOperationsSourceFile = (basePath) => { return source } -const readAndParseGraphQLOperationsSourceFile = (basePath) => { - const source = readGraphQLOperationsSourceFile(basePath) - - try { - const parsedGraphQLDoc = parse(source, { - noLocation: true, - }) +const writeGraphQLOperationsSourceFile = (netligraphConfig, operationDocString) => { + const graphqlSource = operationDocString - return [parsedGraphQLDoc] - } catch (error) { - return [] - } + ensureNetligraphPath(netligraphConfig) + fs.writeFileSync(netligraphConfig.graphQLOperationsSourceFilename, graphqlSource, 'utf8') } -const writeGraphQLOperationsSourceFile = (basePath, operationDocString) => { - const graphqlSource = operationDocString +const writeGraphQLSchemaFile = (netligraphConfig, schema) => { + const graphqlSource = printSchema(schema) - fs.writeFileSync(`${basePath}/${sourceOperationsFilename}`, graphqlSource, 'utf8') + ensureNetligraphPath(netligraphConfig) + fs.writeFileSync(netligraphConfig.graphQLSchemaFilename, graphqlSource, 'utf8') } -const generateHandler = (basePath, schema, operationId, handlerOptions) => { - const [doc] = readAndParseGraphQLOperationsSourceFile(basePath) +const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { + const operationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) + const doc = parse(operationsDoc) const operation = doc.definitions.find((op) => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) if (!operation) { @@ -574,6 +630,7 @@ const generateHandler = (basePath, schema, operationId, handlerOptions) => { const odl = computeOperationDataList({ query: print(operation), variables: [] }) const source = netlifyFunctionSnippet.generate({ + netligraphConfig, operationDataList: odl.operationDataList, schema, options: handlerOptions, @@ -583,17 +640,19 @@ const generateHandler = (basePath, schema, operationId, handlerOptions) => { functionName: operationId, } - const filename = `netlify/functions/${newFunction.functionName}.js` + const filename = `${netligraphConfig.functionsPath}/${newFunction.functionName}.${netligraphConfig.extension}` + ensureFunctionsPath(netligraphConfig) fs.writeFileSync(filename, source) } module.exports = { + defaultExampleOperationsDoc, extractFunctionsFromOperationDoc, generateFunctionsFile, generateHandler, - netligraphPath, + getNetligraphConfig, readGraphQLOperationsSourceFile, - readAndParseGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, + writeGraphQLSchemaFile } From df5bfb3030a7db96240ba7d156ebce48abcc3af3 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 31 Dec 2021 18:18:15 -0800 Subject: [PATCH 18/58] feat: refactor, handle inputs better, handle commonjs vs module in code generation --- src/commands/dev/dev.js | 1 + src/lib/oneGraph/client.js | 4 +- src/lib/oneGraph/graphql-helpers.js | 4 +- .../netligraph-code-exporter-snippets.js | 6 +- src/lib/oneGraph/netligraph.js | 82 +++++++++---------- 5 files changed, 48 insertions(+), 49 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index b666c28df36..2fb9d8c09aa 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -305,6 +305,7 @@ const dev = async (options, command) => { 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) + process.exit(1) } else if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() await ensureAppForSite(netlifyToken, site.id) diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 5e23a46c3f4..6d06e99f338 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -674,10 +674,10 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s sessionId: oneGraphSessionId, state, onEvents: (events) => { - events.forEach((event) => { + events.forEach(async (event) => { const eventName = friendlyEventName(event) log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netligraph event: ${eventName}...`) - handleEvent(event) + await handleEvent(event) log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netligraph event: ${eventName}...`) }) return events.map((event) => event.id) diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/oneGraph/graphql-helpers.js index 33e42e26a1e..dffeea9f932 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/oneGraph/graphql-helpers.js @@ -357,7 +357,7 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn("Unable to subscription, you may need to enable additional services. Missing field:", selection.name.value) + console.warn("Unable to find subscription service field, you may need to enable additional services. Missing field:", selection.name.value) return selection } const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') @@ -435,7 +435,7 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn("Unable to subscription, you may need to enable additional services. Missing field:", selection.name.value) + console.warn("Unable to find subscription service field, you may need to enable additional services. Missing field:", selection.name.value) return selection } const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index d848e3ba2c7..8fdab8d056a 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -350,7 +350,7 @@ ${variables} const subscriptionHandler = ({ netligraphConfig, operationData, -}) => `${imp(netligraphConfig, "{ getSecrets }", "@netlify/functions")} +}) => `${imp(netligraphConfig, "{ getSecrets }", "@sgrove/netlify-functions")} ${imp(netligraphConfig, "Netligraph", "./netligraph")} ${exp(netligraphConfig, "handler")} = async (event, context) => { @@ -483,7 +483,7 @@ ${operationData.name}Data: ${operationData.name}Data`, const whitespace = 6 - const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@netlify/functions')}; + const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@sgrove/netlify-functions')}; ${imp(netligraphConfig, "Netligraph", "./netligraph")} ${exp(netligraphConfig, "handler")} = async (event, context) => { @@ -494,7 +494,7 @@ ${exp(netligraphConfig, "handler")} = async (event, context) => { // accessToken = event.headers["authorization"]?.split(" ")[1] //// If you want to use the API with your own access token: - // accessToken = (await getSecrets(event))?.personalOmniAccessToken + // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken; const eventBodyJson = JSON.parse(event.body || "{}"); diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 3291a7ad326..62aeb100bac 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -67,16 +67,8 @@ const defaultExampleOperationsDoc = `query ExampleQuery @netligraph(doc: "An exa __typename }` -const generatedOneGraphClient = (netligraphConfig) => { - const exp = (name) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `exports.${name}` - } - - return `export const ${name}` - } - - return ` +const generatedOneGraphClient = () => + ` const fetch = (appId, options) => { var reqBody = options.body || null const userHeaders = options.headers || {} @@ -128,7 +120,7 @@ const fetch = (appId, options) => { }) } -${exp("fetchOneGraphPersisted")} = async function fetchOneGraphPersisted( +const fetchOneGraphPersisted = async function fetchOneGraphPersisted( accessToken, docId, operationName, @@ -155,7 +147,7 @@ ${exp("fetchOneGraphPersisted")} = async function fetchOneGraphPersisted( return JSON.parse(result) } -${exp("fetchOneGraph")} = async function fetchOneGraph( +const fetchOneGraph = async function fetchOneGraph( accessToken, query, operationName, @@ -181,12 +173,28 @@ ${exp("fetchOneGraph")} = async function fetchOneGraph( // @ts-ignore return JSON.parse(result) } -`} +` const subscriptionParserName = (fn) => `parseAndVerify${fn.operationName}Event` const subscriptionFunctionName = (fn) => `subscribeTo${fn.operationName}` +const exp = (netligraphConfig, name) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `exports.${name}` + } + + return `export const ${name}` +} + +const imp = (netligraphConfig, name, package) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `const ${name} = require("${package}")` + } + + return `import ${name} from "${package}"` +} + const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { const parsingFunctionReturnSignature = typeScriptSignatureForOperation(schema, fn.parsedOperation, fragments) @@ -201,7 +209,7 @@ const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { return `/** * ${jsDoc} */ -export function ${subscriptionFunctionName(fn)} ( +export function ${subscriptionFunctionName(fn)}( /** * This will be available in your webhook handler as a query parameter. * Use this to keep track of which subscription you're receiving @@ -342,7 +350,7 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl return generateSubscriptionFunction(schema, fn, fragments) } - const dynamicFunction = `const ${fn.fnName} = ( + const dynamicFunction = `${exp(netligraphConfig, fn.fnName)} = ( variables, accessToken, ) => { @@ -355,7 +363,7 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl ` - const staticFunction = `const ${fn.fnName} = ( + const staticFunction = `${exp(netligraphConfig, fn.fnName)} = ( variables, accessToken, ) => { @@ -367,14 +375,6 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl return fn.id ? staticFunction : dynamicFunction }) - const exp = (name) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `exports.${name}` - } - - return `export const ${name}` - } - const exportedFunctionsObjectProperties = enabledFunctions .map((fn) => { const isSubscription = fn.kind === 'subscription' @@ -396,6 +396,7 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl */ ${parserFnName}: ${parserFnName}` } + const jsDoc = replaceAll(fn.description || '', '*/', '') .split('\n') .join('\n* ') @@ -403,11 +404,11 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl return `/** * ${jsDoc} */ - ${fn.fnName}: ${fn.fnName}` + ${fn.fnName}: ${netligraphConfig.moduleType === "commonjs" ? "exports." : ""}${fn.fnName}` }) .join(',\n ') - const dummyHandler = `${exp("handler")} = async (event, context) => { + const dummyHandler = `${exp(netligraphConfig, "handler")} = async (event, context) => { // return a 401 json response return { statusCode: 401, @@ -417,19 +418,11 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl } }` - const imp = (name, package) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `const ${name} = require("${package}")` - } - - return `import ${name} from "${package}"` - } - const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! -${imp("https", "https")} -${imp("crypto", "crypto")} +${imp(netligraphConfig, "https", "https")} +${imp(netligraphConfig, "crypto", "crypto")} -${exp("verifySignature")} = (input) => { +${exp(netligraphConfig, "verifySignature")} = (input) => { const secret = input.secret const body = input.body const signature = input.signature @@ -477,9 +470,9 @@ ${exp("verifySignature")} = (input) => { const operationsDoc = \`${safeOperationsDoc}\` -${generatedOneGraphClient(netligraphConfig)} +${generatedOneGraphClient()} -${exp("verifyRequestSignature")} = (request) => { +${exp(netligraphConfig, "verifyRequestSignature")} = (request) => { const event = request.event const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET const signature = event.headers['x-onegraph-signature'] @@ -615,12 +608,17 @@ const writeGraphQLSchemaFile = (netligraphConfig, schema) => { const graphqlSource = printSchema(schema) ensureNetligraphPath(netligraphConfig) - fs.writeFileSync(netligraphConfig.graphQLSchemaFilename, graphqlSource, 'utf8') + fs.writeFileSync(`${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, graphqlSource, 'utf8') } const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { - const operationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - const doc = parse(operationsDoc) + let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) + + if (currentOperationsDoc.trim().length === 0) { + currentOperationsDoc = defaultExampleOperationsDoc + } + + const doc = parse(currentOperationsDoc) const operation = doc.definitions.find((op) => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) if (!operation) { From 886cdbfb4f0b7c580656335fba05fcdce351ffe0 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 5 Jan 2022 13:00:04 -0800 Subject: [PATCH 19/58] feat: update session metadata with current docId when graph:edit --- src/commands/graph/graph-edit.js | 5 +++- src/lib/oneGraph/client.js | 43 ++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 24a1e9d71f6..eb627a12033 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -7,6 +7,7 @@ const { createPersistedQuery, ensureAppForSite, loadCLISession, + updateCLISessionMetadata, } = require('../../lib/oneGraph/client') const { defaultExampleOperationsDoc, getNetligraphConfig, readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') @@ -57,9 +58,11 @@ const graphEdit = async (options, command) => { tags: ['netlify-cli', `session:${oneGraphSessionId}`, `git-branch:${branch}`], }) + await updateCLISessionMetadata(netlifyToken, siteId, oneGraphSessionId, { docId: persistedDoc.id }) + const host = process.env.NETLIFY_APP_HOST || `localhost:8080` - const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}&docId=${persistedDoc.id}` + const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}` await openBrowser({ url }) console.timeEnd('graph:edit') } diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index 6d06e99f338..ac0b423b6a1 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -278,12 +278,13 @@ query ListPersistedQueries( $nfToken: String! $appId: String! $name: String! + $metadata: JSON ) { oneGraph( auths: { netlifyAuth: { oauthToken: $nfToken } } ) { createNetlifyCliSession( - input: { appId: $appId, name: $name } + input: { appId: $appId, name: $name, metadata: metadata } ) { session { id @@ -295,6 +296,26 @@ query ListPersistedQueries( } } + mutation UpdateCLISessionMetadataMutation( + $nfToken: String! + $sessionId: String! + $metadata: JSON! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + updateNetlifyCliSession( + input: { id: $sessionId, metadata: $metadata } + ) { + session { + id + name + metadata + } + } + } + } + mutation CreateCLISessionEventMutation( $nfToken: String! $sessionId: String! @@ -530,11 +551,12 @@ const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, return close } -const createCLISession = async (netlifyToken, appId, name) => { +const createCLISession = async (netlifyToken, appId, name, metadata) => { const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', { nfToken: netlifyToken, appId, name, + metadata }) const session = @@ -546,6 +568,22 @@ const createCLISession = async (netlifyToken, appId, name) => { return session } +const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata) => { + const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'UpdateCLISessionMetadataMutation', { + nfToken: netlifyToken, + sessionId, + metadata + }) + + const session = + result.data && + result.data.oneGraph && + result.data.oneGraph.updateNetlifyCliSession && + result.data.oneGraph.updateNetlifyCliSession.session + + return session +} + const ackCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { nfToken: netlifyToken, @@ -749,5 +787,6 @@ module.exports = { monitorCLISessionEvents, refetchAndGenerateFromOneGraph, startOneGraphCLISession, + updateCLISessionMetadata, upsertAppForSite, } From 39156daab29e9dba1dd2de65f6802ff6b06aca34 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 5 Jan 2022 22:47:49 -0800 Subject: [PATCH 20/58] feat: improve stability and fingerprinting --- src/commands/graph/graph-edit.js | 4 ++- src/lib/oneGraph/client.js | 32 +++++++++++++----- src/lib/oneGraph/netligraph.js | 57 ++++++++++++++++++++------------ 3 files changed, 63 insertions(+), 30 deletions(-) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index eb627a12033..21986633733 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -6,6 +6,7 @@ const { createCLISession, createPersistedQuery, ensureAppForSite, + generateSessionName, loadCLISession, updateCLISessionMetadata, } = require('../../lib/oneGraph/client') @@ -46,7 +47,8 @@ const graphEdit = async (options, command) => { let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { - const oneGraphSession = await createCLISession(netlifyToken, site.id, 'testing') + const sessionName = generateSessionName() + const oneGraphSession = await createCLISession(netlifyToken, site.id, sessionName) state.set('oneGraphSessionId', oneGraphSession.id) oneGraphSessionId = state.get('oneGraphSessionId') } diff --git a/src/lib/oneGraph/client.js b/src/lib/oneGraph/client.js index ac0b423b6a1..21d1380cc78 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/oneGraph/client.js @@ -1,3 +1,5 @@ +const os = require('os') + const dotProp = require('dot-prop') const { buildClientSchema, parse } = require('graphql') const fetch = require('node-fetch') @@ -88,9 +90,11 @@ const fetchOneGraph = async ( const body = JSON.stringify(payload) try { - const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { + const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}&show_metrics=false`, { method: 'POST', headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', Authorization: accessToken ? `Bearer ${accessToken}` : '', }, body, @@ -552,12 +556,14 @@ const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, } const createCLISession = async (netlifyToken, appId, name, metadata) => { - const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', { + const payload = { nfToken: netlifyToken, appId, name, metadata - }) + } + + const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', payload) const session = result.data && @@ -646,7 +652,8 @@ const loadCLISession = (state) => state.get('oneGraphSessionId') const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, state }) => { let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { - const oneGraphSession = await createCLISession(netlifyToken, site.id, 'testing') + const sessionName = generateSessionName() + const oneGraphSession = await createCLISession(netlifyToken, site.id, sessionName) state.set('oneGraphSessionId', oneGraphSession.id) oneGraphSessionId = state.get('oneGraphSessionId') } @@ -662,6 +669,7 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s } const doc = persistedDoc.query + writeGraphQLOperationsSourceFile(netligraphConfig, doc) const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) const parsedDoc = parse(appOperationsDoc, { @@ -679,7 +687,7 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': return 'Generate handler as Netlify function ' case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - return 'Sync Netligraph operations library' + return `Sync Netligraph operations library` default: { return `Unrecognized event (${__typename})` } @@ -690,13 +698,13 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s const { __typename, payload } = await event switch (__typename) { case 'OneGraphNetlifyCliSessionTestEvent': - handleEvent(payload) + await handleEvent(payload) break case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - generateHandler(netligraphConfig, schema, payload.operationId, payload) + await generateHandler(netligraphConfig, schema, payload.operationId, payload) break case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - updateGraphQLOperationsFile(payload.docId) + await updateGraphQLOperationsFile(payload.docId) break default: { console.log('Unrecognized event received', __typename, payload) @@ -774,6 +782,13 @@ const fetchEnabledServices = async (authToken, appId) => { return dotProp.get(appSchema, 'services') } +const generateSessionName = () => { + const userInfo = os.userInfo('utf-8') + const sessionName = `${userInfo.username}-${Date.now()}` + console.log(`${NETLIFYDEVLOG} Generated netligraph session name: ${sessionName}`) + return sessionName +} + module.exports = { ackCLISessionEvents, createCLISession, @@ -783,6 +798,7 @@ module.exports = { fetchOneGraphSchemaJson, fetchOneGraphSchema, fetchPersistedQuery, + generateSessionName, loadCLISession, monitorCLISessionEvents, refetchAndGenerateFromOneGraph, diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index 62aeb100bac..ffffe468f3f 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -1,7 +1,8 @@ +const { randomUUID } = require('crypto'); const fs = require('fs') const dotProp = require('dot-prop') -const { Kind, parse, print, printSchema } = require('graphql') +const { parse, print, printSchema } = require('graphql') const makeDir = require('make-dir'); const { getFunctionsDir } = require('../../utils') @@ -12,7 +13,7 @@ const { typeScriptSignatureForOperation, typeScriptSignatureForOperationVariables, } = require('./graphql-helpers') -const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets') +const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets'); const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -536,7 +537,7 @@ ${functionDecls.join('\n\n')} } const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { - const functionDefinitions = queries.map((query) => queryToFunctionDefinition(schema, query)) + const functionDefinitions = Object.values(queries).map((query) => queryToFunctionDefinition(schema, query)) const clientSource = generateJavaScriptClient(netligraphConfig, schema, operationsDoc, functionDefinitions) const typeDefinitionsSource = generateTypeScriptDefinitions(netligraphConfig, schema, functionDefinitions) @@ -545,8 +546,24 @@ const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) fs.writeFileSync(netligraphConfig.netligraphTypeDefinitionsFilename, typeDefinitionsSource, 'utf8') } +const pluckDirectiveArgValue = ( + directive, + argName, +) => { + const targetArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === argName); + if (!targetArg?.value) { + return null; + } + + if (targetArg.value.kind === 'StringValue') { + return targetArg.value.value; + } + + return null; +}; + const extractFunctionsFromOperationDoc = (parsedDoc) => { - const fns = parsedDoc.definitions + const functionEntries = parsedDoc.definitions .map((next) => { if (next.kind !== 'OperationDefinition') { return null @@ -557,30 +574,31 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { const directive = dotProp.get(next, 'directives', []).find( (localDirective) => localDirective.name.value === 'netligraph', ) - const docArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === 'doc') - - let docString = dotProp.get(docArg, 'value.value') - if (!key) { + if (!directive) { return null } - if (!docString) { - docString = '' + const docString = pluckDirectiveArgValue(directive, 'doc') || '' + let id = pluckDirectiveArgValue(directive, 'id') + + if (!id) { + id = randomUUID() } const operation = { - id: key, + id, + name: key, description: docString, operation: next.operation, query: print(next), } - return operation + return [id, operation]; }) .filter(Boolean) - return fns + return Object.fromEntries(functionEntries); } @@ -618,14 +636,15 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) currentOperationsDoc = defaultExampleOperationsDoc } - const doc = parse(currentOperationsDoc) - const operation = doc.definitions.find((op) => op.kind === Kind.OPERATION_DEFINITION && op.name.value === operationId) + const parsedDoc = parse(currentOperationsDoc) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const operation = operations[operationId] if (!operation) { console.warn(`Operation ${operationId} not found in graphql.`) } - const odl = computeOperationDataList({ query: print(operation), variables: [] }) + const odl = computeOperationDataList({ query: operation.query, variables: [] }) const source = netlifyFunctionSnippet.generate({ netligraphConfig, @@ -634,11 +653,7 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) options: handlerOptions, }) - const newFunction = { - functionName: operationId, - } - - const filename = `${netligraphConfig.functionsPath}/${newFunction.functionName}.${netligraphConfig.extension}` + const filename = `${netligraphConfig.functionsPath}/${operation.name}.${netligraphConfig.extension}` ensureFunctionsPath(netligraphConfig) fs.writeFileSync(filename, source) From e8d17aabc177a8a91e608b9dd1a869cab4997c7f Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 6 Jan 2022 09:39:19 -0800 Subject: [PATCH 21/58] feat: handle reserved keywords when generating handlers --- src/lib/oneGraph/codegen-helpers.js | 82 +++++++++++++++++++ .../netligraph-code-exporter-snippets.js | 12 ++- 2 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/lib/oneGraph/codegen-helpers.js diff --git a/src/lib/oneGraph/codegen-helpers.js b/src/lib/oneGraph/codegen-helpers.js new file mode 100644 index 00000000000..f87f007023e --- /dev/null +++ b/src/lib/oneGraph/codegen-helpers.js @@ -0,0 +1,82 @@ +/** + * Keywords in both Javascript and TypeScript + */ +const reservedKewords = new Set([ + 'abstract', + 'any', + 'as', + 'async', + 'await', + 'boolean', + 'break', + 'case', + 'catch', + 'class', + 'const', + 'constructor', + 'continue', + 'debugger', + 'declare', + 'default', + 'delete', + 'do', + 'else', + 'enum', + 'export', + 'extends', + 'false', + 'finally', + 'for', + 'from', + 'function', + 'get', + 'if', + 'implements', + 'import', + 'in', + 'instanceof', + 'interface', + 'is', + 'let', + 'module', + 'namespace', + 'new', + 'null', + 'number', + 'of', + 'package', + 'private', + 'protected', + 'public', + 'require', + 'return', + 'set', + 'static', + 'string', + 'super', + 'switch', + 'symbol', + 'this', + 'throw', + 'true', + 'try', + 'type', + 'typeof', + 'var', + 'void', + 'while', + 'with', + 'yield']); + +const isReservedKeyword = (keyword) => reservedKewords.has(keyword); + +const munge = (name) => { + if (isReservedKeyword(name)) { + return `_${name}`; + } + return name; +}; + +module.exports = { + munge +} \ No newline at end of file diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/oneGraph/netligraph-code-exporter-snippets.js index 8fdab8d056a..aee684e68f2 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/oneGraph/netligraph-code-exporter-snippets.js @@ -1,6 +1,8 @@ const dotProp = require('dot-prop') const { parse, print } = require('graphql') +const { munge } = require("./codegen-helpers") + let operationNodesMemo = [null, null] const getOperationNodes = (query) => { @@ -232,20 +234,22 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { (def) => def.variable.name.value, ) + const invocationParams = params.map((param) => `${param}: ${munge(param)}`) + const pluckers = { get: dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) - return `const ${name} = ${withCoercer};` + return `const ${munge(name)} = ${withCoercer};` }) .join('\n ') || '', post: dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value - return `const ${name} = eventBodyJson?.${name};` + return `const ${munge(name)} = eventBodyJson?.${name};` }) .join('\n ') || '', } @@ -262,7 +266,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { requiredVariableCount = requiredVariableNames.length // TODO: Filter nullable variables - const condition = requiredVariableNames.map((name) => `${name} === undefined || ${name} === null`).join(' || ') + const condition = requiredVariableNames.map((name) => `${munge(name)} === undefined || ${munge(name)} === null`).join(' || ') const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') @@ -281,7 +285,7 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { ${requiredVariableCount > 0 ? variableValidation : ''} const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name}Data } = - await Netligraph.${operationFunctionName(namedOperationData)}({ ${params.join(', ')} }, accessToken); + await Netligraph.${operationFunctionName(namedOperationData)}({ ${invocationParams.join(', ')} }, accessToken); if (${namedOperationData.name}Errors) { console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); From 3217921bd0a7185d3012cafca196dbe318f307e6 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 7 Jan 2022 08:57:28 -0800 Subject: [PATCH 22/58] fix: don't try to generate a operation data list if we don't have an operation --- src/lib/oneGraph/netligraph.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/oneGraph/netligraph.js index ffffe468f3f..8c49e5ea151 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/oneGraph/netligraph.js @@ -642,6 +642,7 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) if (!operation) { console.warn(`Operation ${operationId} not found in graphql.`) + return } const odl = computeOperationDataList({ query: operation.query, variables: [] }) From 42d8f09b189a81f0678e93e9961e82c578d4f016 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 09:31:42 -0800 Subject: [PATCH 23/58] chore: fix tests --- README.md | 53 +++++---- src/commands/dev/dev.js | 29 ++--- src/commands/graph/graph-edit.js | 8 +- src/commands/graph/graph-pull.js | 4 +- src/lib/{oneGraph => one-graph}/client.js | 29 +++-- src/lib/one-graph/codegen-helpers.js | 83 ++++++++++++++ .../graphql-helpers.js | 104 ++++++++++-------- .../netligraph-code-exporter-snippets.js | 46 ++++---- src/lib/{oneGraph => one-graph}/netligraph.js | 62 +++++------ src/lib/oneGraph/codegen-helpers.js | 82 -------------- 10 files changed, 266 insertions(+), 234 deletions(-) rename src/lib/{oneGraph => one-graph}/client.js (97%) create mode 100644 src/lib/one-graph/codegen-helpers.js rename src/lib/{oneGraph => one-graph}/graphql-helpers.js (88%) rename src/lib/{oneGraph => one-graph}/netligraph-code-exporter-snippets.js (92%) rename src/lib/{oneGraph => one-graph}/netligraph.js (93%) delete mode 100644 src/lib/oneGraph/codegen-helpers.js diff --git a/README.md b/README.md index 49fe5d7b784..b046c8f8e54 100644 --- a/README.md +++ b/README.md @@ -13,33 +13,32 @@ See the [CLI command line reference](https://cli.netlify.com/commands/) to get s
Click to expand -- [*](#) - - [Installation](#installation) - - [Usage](#usage) - - [Documentation](#documentation) - - [Commands](#commands) - - [addons](#addons) - - [api](#api) - - [build](#build) - - [completion](#completion) - - [deploy](#deploy) - - [dev](#dev) - - [env](#env) - - [functions](#functions) - - [graph](#graph) - - [init](#init) - - [link](#link) - - [lm](#lm) - - [login](#login) - - [open](#open) - - [sites](#sites) - - [status](#status) - - [switch](#switch) - - [unlink](#unlink) - - [watch](#watch) - - [Contributing](#contributing) - - [Development](#development) - - [License](#license) +- [Installation](#installation) +- [Usage](#usage) +- [Documentation](#documentation) +- [Commands](#commands) + - [addons](#addons) + - [api](#api) + - [build](#build) + - [completion](#completion) + - [deploy](#deploy) + - [dev](#dev) + - [env](#env) + - [functions](#functions) + - [graph](#graph) + - [init](#init) + - [link](#link) + - [lm](#lm) + - [login](#login) + - [open](#open) + - [sites](#sites) + - [status](#status) + - [switch](#switch) + - [unlink](#unlink) + - [watch](#watch) +- [Contributing](#contributing) +- [Development](#development) +- [License](#license)
diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 2fb9d8c09aa..de433258358 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -11,8 +11,8 @@ const stripAnsiCc = require('strip-ansi-control-characters') const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') -const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/oneGraph/client') -const { getNetligraphConfig } = require('../../lib/oneGraph/netligraph') +const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/one-graph/client') +const { getNetligraphConfig } = require('../../lib/one-graph/netligraph') const { NETLIFYDEV, NETLIFYDEVERR, @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } @@ -296,10 +296,8 @@ const dev = async (options, command) => { const startNetligraphWatcher = Boolean(options.netligraph) if (startNetligraphWatcher && options.offline) { - console.warn( - `${NETLIFYDEVERR} Warning: unable to start Netligraph in offline mode`, - ) - } else if (startNetligraphWatcher && !(site.id)) { + console.warn(`${NETLIFYDEVERR} Warning: unable to start Netligraph in offline mode`) + } else if (startNetligraphWatcher && !site.id) { console.warn( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( 'netlify init', @@ -311,8 +309,6 @@ const dev = async (options, command) => { await ensureAppForSite(netlifyToken, site.id) const netligraphConfig = getNetligraphConfig({ command, options }) startOneGraphCLISession({ netligraphConfig, netlifyToken, site, state }) - } else { - console.log("Skipping netligraph....") } printBanner({ url }) @@ -358,12 +354,7 @@ const createDevCommand = (program) => { 'specify the path to a local GeoIP location database in MMDB format', ).hideHelp(), ) - .addOption( - new Option( - '--netligraph', - 'enable netligraph support', - ).hideHelp(), - ) + .addOption(new Option('--netligraph', 'enable netligraph support').hideHelp()) .addExamples(['netlify dev', 'netlify dev -d public', 'netlify dev -c "hugo server -w" --targetPort 1313']) .action(dev) } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 21986633733..40cc4f601a6 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -9,8 +9,12 @@ const { generateSessionName, loadCLISession, updateCLISessionMetadata, -} = require('../../lib/oneGraph/client') -const { defaultExampleOperationsDoc, getNetligraphConfig, readGraphQLOperationsSourceFile } = require('../../lib/oneGraph/netligraph') +} = require('../../lib/one-graph/client') +const { + defaultExampleOperationsDoc, + getNetligraphConfig, + readGraphQLOperationsSourceFile, +} = require('../../lib/one-graph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 0d7a3cdf9e9..f37dee058c2 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,7 +1,7 @@ const process = require('process') -const { refetchAndGenerateFromOneGraph } = require('../../lib/oneGraph/client') -const { getNetligraphConfig } = require('../../lib/oneGraph/netligraph') +const { refetchAndGenerateFromOneGraph } = require('../../lib/one-graph/client') +const { getNetligraphConfig } = require('../../lib/one-graph/netligraph') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { diff --git a/src/lib/oneGraph/client.js b/src/lib/one-graph/client.js similarity index 97% rename from src/lib/oneGraph/client.js rename to src/lib/one-graph/client.js index 21d1380cc78..76d065081da 100644 --- a/src/lib/oneGraph/client.js +++ b/src/lib/one-graph/client.js @@ -13,7 +13,7 @@ const { generateHandler, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, - writeGraphQLSchemaFile + writeGraphQLSchemaFile, } = require('./netligraph') const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' @@ -94,7 +94,7 @@ const fetchOneGraph = async ( method: 'POST', headers: { 'Content-Type': 'application/json', - 'Accept': 'application/json', + Accept: 'application/json', Authorization: accessToken ? `Bearer ${accessToken}` : '', }, body, @@ -486,7 +486,16 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } -const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, onError, onEvents, sessionId, state }) => { +const monitorCLISessionEvents = ({ + appId, + authToken, + netligraphConfig, + onClose, + onError, + onEvents, + sessionId, + state, +}) => { const frequency = 5000 let shouldClose = false @@ -494,7 +503,7 @@ const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) if (!enabledServicesInfo) { - console.warn("Unable to fetch enabled services for site for code generation") + console.warn('Unable to fetch enabled services for site for code generation') return } const newEnabledServices = enabledServicesInfo.map((service) => service.service) @@ -502,7 +511,11 @@ const monitorCLISessionEvents = ({ appId, authToken, netligraphConfig, onClose, const newEnabledServicesCompareKey = newEnabledServices.sort().join(',') if (enabledServicesCompareKey !== newEnabledServicesCompareKey) { - log(`${NETLIFYDEVLOG} ${chalk.magenta('Reloading')} Netligraph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`) + log( + `${NETLIFYDEVLOG} ${chalk.magenta( + 'Reloading', + )} Netligraph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, + ) await refetchAndGenerateFromOneGraph({ netligraphConfig, state, netlifyToken, siteId }) log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) } @@ -560,7 +573,7 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { nfToken: netlifyToken, appId, name, - metadata + metadata, } const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', payload) @@ -578,7 +591,7 @@ const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'UpdateCLISessionMetadataMutation', { nfToken: netlifyToken, sessionId, - metadata + metadata, }) const session = @@ -625,7 +638,7 @@ const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) if (!enabledServicesInfo) { - console.warn("Unable to fetch enabled services for site for code generation") + console.warn('Unable to fetch enabled services for site for code generation') return } diff --git a/src/lib/one-graph/codegen-helpers.js b/src/lib/one-graph/codegen-helpers.js new file mode 100644 index 00000000000..1bd7002e8a0 --- /dev/null +++ b/src/lib/one-graph/codegen-helpers.js @@ -0,0 +1,83 @@ +/** + * Keywords in both Javascript and TypeScript + */ +const reservedKewords = new Set([ + 'abstract', + 'any', + 'as', + 'async', + 'await', + 'boolean', + 'break', + 'case', + 'catch', + 'class', + 'const', + 'constructor', + 'continue', + 'debugger', + 'declare', + 'default', + 'delete', + 'do', + 'else', + 'enum', + 'export', + 'extends', + 'false', + 'finally', + 'for', + 'from', + 'function', + 'get', + 'if', + 'implements', + 'import', + 'in', + 'instanceof', + 'interface', + 'is', + 'let', + 'module', + 'namespace', + 'new', + 'null', + 'number', + 'of', + 'package', + 'private', + 'protected', + 'public', + 'require', + 'return', + 'set', + 'static', + 'string', + 'super', + 'switch', + 'symbol', + 'this', + 'throw', + 'true', + 'try', + 'type', + 'typeof', + 'var', + 'void', + 'while', + 'with', + 'yield', +]) + +const isReservedKeyword = (keyword) => reservedKewords.has(keyword) + +const munge = (name) => { + if (isReservedKeyword(name)) { + return `_${name}` + } + return name +} + +module.exports = { + munge, +} diff --git a/src/lib/oneGraph/graphql-helpers.js b/src/lib/one-graph/graphql-helpers.js similarity index 88% rename from src/lib/oneGraph/graphql-helpers.js rename to src/lib/one-graph/graphql-helpers.js index dffeea9f932..189e47dadb6 100644 --- a/src/lib/oneGraph/graphql-helpers.js +++ b/src/lib/one-graph/graphql-helpers.js @@ -159,15 +159,21 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra const field = parentNamedType.getFields()[name] const gqlType = dotProp.get(field, 'type') if (name.startsWith('__')) { - return [displayedName, { - type: 'any', description: 'Internal GraphQL field', nullable: true, - }] + return [ + displayedName, + { + type: 'any', + description: 'Internal GraphQL field', + nullable: true, + }, + ] } const namedType = getNamedType(gqlType) const isNullable = !isNonNullType(gqlType) const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) - const sub = dotProp.get(selection, 'selectionSet.selections', []) + const sub = dotProp + .get(selection, 'selectionSet.selections', []) // @ts-ignore .map(function innerHelper(innerSelection) { if (innerSelection.kind === 'Field') { @@ -320,7 +326,7 @@ const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions Object.entries(obj).map(([name, value]) => { const { description } = value const tsType = valueHelper(value) - const { nullable } = value; + const { nullable } = value const doc = description ? `/** * ${description} @@ -357,11 +363,16 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn("Unable to find subscription service field, you may need to enable additional services. Missing field:", selection.name.value) + console.warn( + 'Unable to find subscription service field, you may need to enable additional services. Missing field:', + selection.name.value, + ) return selection } const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') - const selectionHasWebhookUrlArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'webhookUrl') + const selectionHasWebhookUrlArg = dotProp + .get(selection, 'arguments', []) + .some((arg) => arg.name.value === 'webhookUrl') if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { return { ...selection, @@ -392,28 +403,28 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'String', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'String', + value: 'netligraphWebhookUrl', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -435,11 +446,16 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn("Unable to find subscription service field, you may need to enable additional services. Missing field:", selection.name.value) + console.warn( + 'Unable to find subscription service field, you may need to enable additional services. Missing field:', + selection.name.value, + ) return selection } const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') - const selectionHasWebhookSecretArg = dotProp.get(selection, 'arguments', []).some((arg) => arg.name.value === 'secret') + const selectionHasWebhookSecretArg = dotProp + .get(selection, 'arguments', []) + .some((arg) => arg.name.value === 'secret') if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { return { ...selection, @@ -464,34 +480,34 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { } return selection }) - const hasWebhookVariableDefinition = dotProp.get(definition, 'variableDefinitions', []).find( - (varDef) => varDef.variable.name.value === 'netligraphWebhookSecret', - ) + const hasWebhookVariableDefinition = dotProp + .get(definition, 'variableDefinitions', []) + .find((varDef) => varDef.variable.name.value === 'netligraphWebhookSecret') const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'OneGraphSubscriptionSecretInput', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', + value: 'netligraphWebhookSecret', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/oneGraph/netligraph-code-exporter-snippets.js b/src/lib/one-graph/netligraph-code-exporter-snippets.js similarity index 92% rename from src/lib/oneGraph/netligraph-code-exporter-snippets.js rename to src/lib/one-graph/netligraph-code-exporter-snippets.js index aee684e68f2..772c8c8dab0 100644 --- a/src/lib/oneGraph/netligraph-code-exporter-snippets.js +++ b/src/lib/one-graph/netligraph-code-exporter-snippets.js @@ -1,7 +1,7 @@ const dotProp = require('dot-prop') const { parse, print } = require('graphql') -const { munge } = require("./codegen-helpers") +const { munge } = require('./codegen-helpers') let operationNodesMemo = [null, null] @@ -238,7 +238,8 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { const pluckers = { get: - dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) + dotProp + .get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) @@ -246,7 +247,8 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { }) .join('\n ') || '', post: - dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []) + dotProp + .get(namedOperationData, 'operationDefinition.variableDefinitions', []) .map((def) => { const name = def.variable.name.value return `const ${munge(name)} = eventBodyJson?.${name};` @@ -266,7 +268,9 @@ const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { requiredVariableCount = requiredVariableNames.length // TODO: Filter nullable variables - const condition = requiredVariableNames.map((name) => `${munge(name)} === undefined || ${munge(name)} === null`).join(' || ') + const condition = requiredVariableNames + .map((name) => `${munge(name)} === undefined || ${munge(name)} === null`) + .join(' || ') const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') @@ -328,17 +332,20 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${ + useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ + pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${ + pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -351,13 +358,14 @@ ${variables} return invocations } -const subscriptionHandler = ({ +const subscriptionHandler = ({ netligraphConfig, operationData }) => `${imp( netligraphConfig, - operationData, -}) => `${imp(netligraphConfig, "{ getSecrets }", "@sgrove/netlify-functions")} -${imp(netligraphConfig, "Netligraph", "./netligraph")} + '{ getSecrets }', + '@sgrove/netlify-functions', +)} +${imp(netligraphConfig, 'Netligraph', './netligraph')} -${exp(netligraphConfig, "handler")} = async (event, context) => { +${exp(netligraphConfig, 'handler')} = async (event, context) => { let secrets = await getSecrets(event); const payload = Netligraph.parseAndVerify${operationData.name}Event(event); @@ -438,8 +446,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData @@ -488,9 +496,9 @@ ${operationData.name}Data: ${operationData.name}Data`, const whitespace = 6 const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@sgrove/netlify-functions')}; -${imp(netligraphConfig, "Netligraph", "./netligraph")} +${imp(netligraphConfig, 'Netligraph', './netligraph')} -${exp(netligraphConfig, "handler")} = async (event, context) => { +${exp(netligraphConfig, 'handler')} = async (event, context) => { // By default, all API calls use no authentication let accessToken = null; diff --git a/src/lib/oneGraph/netligraph.js b/src/lib/one-graph/netligraph.js similarity index 93% rename from src/lib/oneGraph/netligraph.js rename to src/lib/one-graph/netligraph.js index 8c49e5ea151..5348beccd79 100644 --- a/src/lib/oneGraph/netligraph.js +++ b/src/lib/one-graph/netligraph.js @@ -1,9 +1,9 @@ -const { randomUUID } = require('crypto'); +const { randomUUID } = require('crypto') const fs = require('fs') const dotProp = require('dot-prop') const { parse, print, printSchema } = require('graphql') -const makeDir = require('make-dir'); +const makeDir = require('make-dir') const { getFunctionsDir } = require('../../utils') @@ -13,7 +13,7 @@ const { typeScriptSignatureForOperation, typeScriptSignatureForOperationVariables, } = require('./graphql-helpers') -const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets'); +const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -25,9 +25,9 @@ const replaceAll = (target, search, replace) => { const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' const defaultNetligraphConfig = { - extension: "mjs", - netligraphPath: "netlify", - moduleType: "commonjs" + extension: 'mjs', + netligraphPath: 'netlify', + moduleType: 'commonjs', } /** @@ -50,7 +50,7 @@ const getNetligraphConfig = ({ command, options }) => { netligraphTypeDefinitionsFilename, graphQLOperationsSourceFilename, graphQLSchemaFilename, - ...baseConfig + ...baseConfig, } return fullConfig @@ -405,11 +405,11 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl return `/** * ${jsDoc} */ - ${fn.fnName}: ${netligraphConfig.moduleType === "commonjs" ? "exports." : ""}${fn.fnName}` + ${fn.fnName}: ${netligraphConfig.moduleType === 'commonjs' ? 'exports.' : ''}${fn.fnName}` }) .join(',\n ') - const dummyHandler = `${exp(netligraphConfig, "handler")} = async (event, context) => { + const dummyHandler = `${exp(netligraphConfig, 'handler')} = async (event, context) => { // return a 401 json response return { statusCode: 401, @@ -420,10 +420,10 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl }` const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! -${imp(netligraphConfig, "https", "https")} -${imp(netligraphConfig, "crypto", "crypto")} +${imp(netligraphConfig, 'https', 'https')} +${imp(netligraphConfig, 'crypto', 'crypto')} -${exp(netligraphConfig, "verifySignature")} = (input) => { +${exp(netligraphConfig, 'verifySignature')} = (input) => { const secret = input.secret const body = input.body const signature = input.signature @@ -473,7 +473,7 @@ const operationsDoc = \`${safeOperationsDoc}\` ${generatedOneGraphClient()} -${exp(netligraphConfig, "verifyRequestSignature")} = (request) => { +${exp(netligraphConfig, 'verifyRequestSignature')} = (request) => { const event = request.event const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET const signature = event.headers['x-onegraph-signature'] @@ -498,7 +498,7 @@ const functions = { ${exportedFunctionsObjectProperties} } -${netligraphConfig.moduleType === 'commonjs' ? 'exports.default = functions' : "export default functions"} +${netligraphConfig.moduleType === 'commonjs' ? 'exports.default = functions' : 'export default functions'} ${dummyHandler}` @@ -546,21 +546,18 @@ const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) fs.writeFileSync(netligraphConfig.netligraphTypeDefinitionsFilename, typeDefinitionsSource, 'utf8') } -const pluckDirectiveArgValue = ( - directive, - argName, -) => { - const targetArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === argName); +const pluckDirectiveArgValue = (directive, argName) => { + const targetArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === argName) if (!targetArg?.value) { - return null; + return null } if (targetArg.value.kind === 'StringValue') { - return targetArg.value.value; + return targetArg.value.value } - return null; -}; + return null +} const extractFunctionsFromOperationDoc = (parsedDoc) => { const functionEntries = parsedDoc.definitions @@ -571,9 +568,9 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { const key = dotProp.get(next, 'name.value') - const directive = dotProp.get(next, 'directives', []).find( - (localDirective) => localDirective.name.value === 'netligraph', - ) + const directive = dotProp + .get(next, 'directives', []) + .find((localDirective) => localDirective.name.value === 'netligraph') if (!directive) { return null @@ -594,14 +591,13 @@ const extractFunctionsFromOperationDoc = (parsedDoc) => { query: print(next), } - return [id, operation]; + return [id, operation] }) .filter(Boolean) - return Object.fromEntries(functionEntries); + return Object.fromEntries(functionEntries) } - const readGraphQLOperationsSourceFile = (netligraphConfig) => { ensureNetligraphPath(netligraphConfig) @@ -626,7 +622,11 @@ const writeGraphQLSchemaFile = (netligraphConfig, schema) => { const graphqlSource = printSchema(schema) ensureNetligraphPath(netligraphConfig) - fs.writeFileSync(`${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, graphqlSource, 'utf8') + fs.writeFileSync( + `${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, + graphqlSource, + 'utf8', + ) } const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { @@ -668,5 +668,5 @@ module.exports = { getNetligraphConfig, readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, - writeGraphQLSchemaFile + writeGraphQLSchemaFile, } diff --git a/src/lib/oneGraph/codegen-helpers.js b/src/lib/oneGraph/codegen-helpers.js deleted file mode 100644 index f87f007023e..00000000000 --- a/src/lib/oneGraph/codegen-helpers.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Keywords in both Javascript and TypeScript - */ -const reservedKewords = new Set([ - 'abstract', - 'any', - 'as', - 'async', - 'await', - 'boolean', - 'break', - 'case', - 'catch', - 'class', - 'const', - 'constructor', - 'continue', - 'debugger', - 'declare', - 'default', - 'delete', - 'do', - 'else', - 'enum', - 'export', - 'extends', - 'false', - 'finally', - 'for', - 'from', - 'function', - 'get', - 'if', - 'implements', - 'import', - 'in', - 'instanceof', - 'interface', - 'is', - 'let', - 'module', - 'namespace', - 'new', - 'null', - 'number', - 'of', - 'package', - 'private', - 'protected', - 'public', - 'require', - 'return', - 'set', - 'static', - 'string', - 'super', - 'switch', - 'symbol', - 'this', - 'throw', - 'true', - 'try', - 'type', - 'typeof', - 'var', - 'void', - 'while', - 'with', - 'yield']); - -const isReservedKeyword = (keyword) => reservedKewords.has(keyword); - -const munge = (name) => { - if (isReservedKeyword(name)) { - return `_${name}`; - } - return name; -}; - -module.exports = { - munge -} \ No newline at end of file From 64b3da8ee929d9f1ed313a31fc7f412455c389fb Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 09:53:10 -0800 Subject: [PATCH 24/58] chore: move away from make-dir --- src/lib/one-graph/client.js | 6 +++--- src/lib/one-graph/netligraph-code-exporter-snippets.js | 2 +- src/lib/one-graph/netligraph.js | 5 ++--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 76d065081da..873d97f856d 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -31,7 +31,7 @@ const basicPost = async (url, options) => { 'Content-Length': reqBody.length, } - const timeoutMilliseconds = 30000 + const timeoutMilliseconds = 30_000 const resp = await fetch(url, { method: 'POST', @@ -106,7 +106,7 @@ const fetchOneGraph = async ( console.log('fetchOneGraph errors', JSON.stringify(value, null, 2)) } return value - } catch (error) { + } catch { return {} } } @@ -134,7 +134,7 @@ const fetchOneGraphPersisted = async ( }) return JSON.parse(result) - } catch (error) { + } catch { return {} } } diff --git a/src/lib/one-graph/netligraph-code-exporter-snippets.js b/src/lib/one-graph/netligraph-code-exporter-snippets.js index 772c8c8dab0..9f11b240cc4 100644 --- a/src/lib/one-graph/netligraph-code-exporter-snippets.js +++ b/src/lib/one-graph/netligraph-code-exporter-snippets.js @@ -16,7 +16,7 @@ const getOperationNodes = (query) => { operationDefinitions.push(def) } }) - } catch (error) { + } catch { // ignore } operationNodesMemo = [query, operationDefinitions] diff --git a/src/lib/one-graph/netligraph.js b/src/lib/one-graph/netligraph.js index 5348beccd79..68bc2d62135 100644 --- a/src/lib/one-graph/netligraph.js +++ b/src/lib/one-graph/netligraph.js @@ -3,7 +3,6 @@ const fs = require('fs') const dotProp = require('dot-prop') const { parse, print, printSchema } = require('graphql') -const makeDir = require('make-dir') const { getFunctionsDir } = require('../../utils') @@ -57,11 +56,11 @@ const getNetligraphConfig = ({ command, options }) => { } const ensureNetligraphPath = (netligraphConfig) => { - makeDir.sync(netligraphConfig.netligraphPath) + fs.mkdirSync(netligraphConfig.netligraphPath, { recursive: true }) } const ensureFunctionsPath = (netligraphConfig) => { - makeDir.sync(netligraphConfig.functionsPath) + fs.mkdirSync(netligraphConfig.functionsPath, { recursive: true }) } const defaultExampleOperationsDoc = `query ExampleQuery @netligraph(doc: "An example query to start with.") { From e8dc667e95fc25b539e3d860452d06f6fc38e48a Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 10:01:21 -0800 Subject: [PATCH 25/58] chore: remove optional accessor --- src/lib/one-graph/netligraph.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/one-graph/netligraph.js b/src/lib/one-graph/netligraph.js index 68bc2d62135..bb7be7da44d 100644 --- a/src/lib/one-graph/netligraph.js +++ b/src/lib/one-graph/netligraph.js @@ -547,7 +547,7 @@ const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) const pluckDirectiveArgValue = (directive, argName) => { const targetArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === argName) - if (!targetArg?.value) { + if (!(targetArg && targetArg.value)) { return null } From 691f153a31b348fd6c73e7afe4373219f48ded2b Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 10:25:51 -0800 Subject: [PATCH 26/58] chore: update snapshot --- tests/snapshots/command.help.test.js.md | 1 + tests/snapshots/command.help.test.js.snap | Bin 927 -> 938 bytes 2 files changed, 1 insertion(+) diff --git a/tests/snapshots/command.help.test.js.md b/tests/snapshots/command.help.test.js.md index 498a23d75d9..ec1a061b0ef 100644 --- a/tests/snapshots/command.help.test.js.md +++ b/tests/snapshots/command.help.test.js.md @@ -23,6 +23,7 @@ Generated by [AVA](https://avajs.dev). $ dev Local dev server␊ $ env (Beta) Control environment variables for the current site␊ $ functions Manage netlify functions␊ + $ graph (Beta) Control the Netligraph functions for the current site␊ $ init Configure continuous deployment for a new or existing site. To␊ create a new site without continuous deployment, use \`netlify␊ sites:create\`␊ diff --git a/tests/snapshots/command.help.test.js.snap b/tests/snapshots/command.help.test.js.snap index 497c1fdc633e5a1aa291d5994fe6b43b13ee9b0d..756aaaf73833200d9e1f3ead62f3bfcd23bb0ff4 100644 GIT binary patch literal 938 zcmV;b16BM%RzVPk4(Of>KZ%&^OCLfCk00000000Ax zRXcAaMGzhvStm_)B1erx0OHn{o5;7f7)xGzw0`ubC4v-ZgTYZ*YmgE{pRYT{O#fQ zKY#e^PD0P)y(IbT)XrY=aF^|UIy+w; zpPiq#cXV+YnvR$#2qiiL%?@n7j2x|1}$SRNkD(DuE~nq5xM=JUhTr&np( zzAeK!&vUITi_iN{!0`{*oGV@eJ8ex5^L&Ds2yX=IpL4GmSL*?|IA%4tO6LK4?S;(Q zCiRoBht99HH%#h`OIGu&5(vozarcgwd)- zYPRA=@M{Sc=}o-U8$%~nxEN^RRYoy{)VB%mYSo_wWNCO)-E%2XhwMktKzi@JLJ8N0 zfHZ|Dy@^Q?%4=`ie1$lOB__H@b9=w-AeL0kf7Q7Xafku;;jnQ8~=GwY4r%|DsuA}<4uR860z)R}U!6#hh za_EH{u$OUJ*AzAiylDZUXkPj{J_Mr35nrE5zDhd{@do(+vg#|}W4#f-JQpk`K z)wrG`*@i6La+d^1xsLH}`e_|^zB5=DLF$NGLgCGIfJP)%FYBbYjEfKtN0qJM&ak{1 z)#xHFx*D}L37yD$>t32Se7KE$78aC=5JTIL%m~ zhveDf8IE6?k(25Xn@o_e*;37|Cl|Jne9Z!uTu15}3qmB59Ik!&UkrUk0=gv0ZWaX{ zajsby{Q^fi&Ta$NUfsh(m^i#xi=_M+Y)8O$`O4#G19vLiD69QV?kN~23Xx$dKNb=c zuYp|__!jRP9W&Y`UTWo=3T2F~uCN2icW>#JQ&aZ7r0LVya(aFo@|(twh^vI{l0{q= z0OPjK_|Z5E$_sVfPt)1whx5hBYf+%AH(O_rNMc!{~wD800000000Ax zRX=YOM-*Q>Af)Y3`e=|SKyXg)ROUF0C7*rr;Utn}iSh2++kx4cW&WIfDIz4k2cn7u z5(P!dl&R7spCDf#Qkqmzl=o(K_x5~7FonG{@AuyOy}!4eB*|v7`|l6qFK@j$J)Zq` z^W87^e%(mu{CO=&{`v8%zyFxN{Q1LAZ(slS&0p^~!mGWJBwr*q0&3%Wa&zjrZ$R%pe-Mcepa=^R=~njTMgc1NgtyVYhV!^81-=iuRK znl@k4Am@3mm1XhVc>s>zWn-@R4A?=Vx|8Pv#6);4Sa*)RVq7hjz{wt~z?C`=*fTF= z&Q?u72yaM!p}k>JXI!$1XQfaObTVDl5*&rs>Fk06!yPbNf|PxT&5WpBP|Ts0deJx= z8X!E!=+9e8VRXe@38=3eC}){25K(BEgK136m$B^!YV>5m%o_x#9-?74L~}+*K%5I?6#IiQ}8Dy@h1algDYLz~I6hjg*vh~%=&fh~m$IhpELzSn3WOPA1c8~ZL?C=(%uX6!Hv1$MA4)0GAHYV&i4`-)xG1D)tP;p7P}OxkLL@;)03 z&|baPHJ45Giuq@q976H>WR@8xP)=r8nE{C zBX$TA*9~isls|*x2skb;JT7{CDe+-eZmrrLf^nh{8K&})kf3-4?4-c2=&L7Y^h$PV zl+R0SV;psb6G+^>rN5kpvg4Ab4@cAC(O$@J8rQxng>92Xwk!a~ZJqJWR- Date: Wed, 12 Jan 2022 10:59:53 -0800 Subject: [PATCH 27/58] chore: rename Netligraph to Netlify Graph --- README.md | 4 ++-- docs/README.md | 4 ++-- docs/commands/graph.md | 6 +++--- docs/commands/index.md | 4 ++-- src/commands/dev/dev.js | 12 ++++++------ src/commands/graph/graph-edit.js | 2 +- src/commands/graph/graph-pull.js | 4 ++-- src/commands/graph/graph.js | 2 +- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index b046c8f8e54..390520bbd88 100644 --- a/README.md +++ b/README.md @@ -155,12 +155,12 @@ Manage netlify functions ### [graph](/docs/commands/graph.md) -(Beta) Control the Netligraph functions for the current site +(Beta) Control the Netlify Graph functions for the current site | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | ### [init](/docs/commands/init.md) diff --git a/docs/README.md b/docs/README.md index a7a0cbff532..63e908c9a2d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -112,12 +112,12 @@ Manage netlify functions ### [graph](/docs/commands/graph.md) -(Beta) Control the Netligraph functions for the current site +(Beta) Control the Netlify Graph functions for the current site | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | ### [init](/docs/commands/init.md) diff --git a/docs/commands/graph.md b/docs/commands/graph.md index a0cb855a02e..a262a65f87a 100644 --- a/docs/commands/graph.md +++ b/docs/commands/graph.md @@ -6,7 +6,7 @@ description: Sync and edit your Netligraph library # `graph` -(Beta) Control the Netligraph functions for the current site +(Beta) Control the Netlify Graph functions for the current site **Usage** @@ -23,7 +23,7 @@ netlify graph | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | **Examples** @@ -53,7 +53,7 @@ netlify graph:edit --- ## `graph:pull` -Pull down your local Netligraph schema and regenerate your local functions +Pull down your local Netlify Graph schema and regenerate your local functions **Usage** diff --git a/docs/commands/index.md b/docs/commands/index.md index 5435d931cff..ea6cd56f0f6 100644 --- a/docs/commands/index.md +++ b/docs/commands/index.md @@ -93,12 +93,12 @@ Manage netlify functions ### [graph](/docs/commands/graph.md) -(Beta) Control the Netligraph functions for the current site +(Beta) Control the Netlify Graph functions for the current site | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netligraph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | ### [init](/docs/commands/init.md) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index de433258358..06ab39d3ca0 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -354,7 +354,7 @@ const createDevCommand = (program) => { 'specify the path to a local GeoIP location database in MMDB format', ).hideHelp(), ) - .addOption(new Option('--netligraph', 'enable netligraph support').hideHelp()) + .addOption(new Option('--graph', 'enable Netlify Graph support').hideHelp()) .addExamples(['netlify dev', 'netlify dev -d public', 'netlify dev -c "hugo server -w" --targetPort 1313']) .action(dev) } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 40cc4f601a6..20738fe2e8f 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -24,7 +24,7 @@ const graphEdit = async (options, command) => { if (!site.id) { console.error( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index f37dee058c2..c89e4c3e24d 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -9,7 +9,7 @@ const graphPull = async (options, command) => { if (!site.id) { console.error( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) @@ -30,7 +30,7 @@ const graphPull = async (options, command) => { const createGraphPullCommand = (program) => program .command('graph:pull') - .description('Pull down your local Netligraph schema and regenerate your local functions') + .description('Pull down your local Netlify Graph schema and regenerate your local functions') .action(async (options, command) => { await graphPull(options, command) }) diff --git a/src/commands/graph/graph.js b/src/commands/graph/graph.js index 0a11a1f967c..9c928b7e770 100644 --- a/src/commands/graph/graph.js +++ b/src/commands/graph/graph.js @@ -22,7 +22,7 @@ const createGraphCommand = (program) => { return program .command('graph') - .description('(Beta) Control the Netligraph functions for the current site') + .description('(Beta) Control the Netlify Graph functions for the current site') .addExamples(['netlify graph:pull', 'netlify graph:edit']) .action(graph) } From 3fbab5fb9c7bce5505d8d0b0f4b6d66c6da883cb Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 11:00:45 -0800 Subject: [PATCH 28/58] chore: rename Netligraph to Netlify Graph --- src/commands/dev/dev.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 06ab39d3ca0..b7dcd8daee2 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } From 7898fbd83579b4a68a78f511b92d99c933f6c36a Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 11:33:31 -0800 Subject: [PATCH 29/58] chore: update snapshots --- tests/snapshots/command.help.test.js.md | 3 ++- tests/snapshots/command.help.test.js.snap | Bin 938 -> 944 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/snapshots/command.help.test.js.md b/tests/snapshots/command.help.test.js.md index ec1a061b0ef..bfdc8989c5b 100644 --- a/tests/snapshots/command.help.test.js.md +++ b/tests/snapshots/command.help.test.js.md @@ -23,7 +23,8 @@ Generated by [AVA](https://avajs.dev). $ dev Local dev server␊ $ env (Beta) Control environment variables for the current site␊ $ functions Manage netlify functions␊ - $ graph (Beta) Control the Netligraph functions for the current site␊ + $ graph (Beta) Control the Netlify Graph functions for the current␊ + site␊ $ init Configure continuous deployment for a new or existing site. To␊ create a new site without continuous deployment, use \`netlify␊ sites:create\`␊ diff --git a/tests/snapshots/command.help.test.js.snap b/tests/snapshots/command.help.test.js.snap index 756aaaf73833200d9e1f3ead62f3bfcd23bb0ff4..4cecc3cc7ab63d693cfe5d08e78cf3340aea012a 100644 GIT binary patch literal 944 zcmV;h15f-xRzVhzTF*|ompmP&p8T&#Q%Y) zkP;~c1tld_$|(OvBpRwH;=P&ux(^GsxZ9cez2E!#&D(=0igu%;cRx%&_~_TGi~QBS z7k_^C*G@#wcrS|n`SHWQU(bK~z?ykF|L+9aCXc}aD`4i_PQ1_ zWvkQ={2m6s)U{z!CtR|UCxuYpZ4zBp5*(%1*&Kla!yPbNfRsasO^m3VH%y_Ddf7M| z8z4N#>~GqW%;=K20?=MLP|h-)AtKW<1=CP0`rJ-@XtZU)EE)u;0iua+jC4jzIuk~# z5~X>AOhSm8pVS*;Sv!I!=%c-yP)%p-HdtKt@?MBP^Z$m4q6HPP+Od3561>*0pVF=yN05P*{9{XTl;T_gwqzk>2!@40}N^b|X+CwcE~r zpVb!F)20;LgSH2O^r??t3iVyzHd^pTSOzLhQC3EO3yEub&74Nnu7-|^+;nx?#eh!A z!NJ#DrLr&l2{+ihDWrlkU6E9~-btMc)k}&N=-q3-wdP5pYZXL{)*YIi(ZYhGAp36m zXenh#iE5~=fs}of*1{!GQmsS2t8rS#UELbYj3A|kEuqkJ>7fCM-Ah_I&cnjz!%=n% z*qT)MnA(bkMrDswO6Er=fb1Bz8fSZ8rJ!oZQHx<-}QW?kq SZ(|yQivIPk4(Of>KZ%&^OCLfCk00000000Ax zRXcAaMGzhvStm_)B1erx0OHn{o5;7f7)xGzw0`ubC4v-ZgTYZ*YmgE{pRYT{O#fQ zKY#e^PD0P)y(IbT)XrY=aF^|UIy+w; zpPiq#cXV+YnvR$#2qiiL%?@n7j2x|1}$SRNkD(DuE~nq5xM=JUhTr&np( zzAeK!&vUITi_iN{!0`{*oGV@eJ8ex5^L&Ds2yX=IpL4GmSL*?|IA%4tO6LK4?S;(Q zCiRoBht99HH%#h`OIGu&5(vozarcgwd)- zYPRA=@M{Sc=}o-U8$%~nxEN^RRYoy{)VB%mYSo_wWNCO)-E%2XhwMktKzi@JLJ8N0 zfHZ|Dy@^Q?%4=`ie1$lOB__H@b9=w-AeL0kf7Q7Xafku;;jnQ8~=GwY4r%|DsuA}<4uR860z)R}U!6#hh za_EH{u$OUJ*AzAiylDZUXkPj{J_Mr35nrE5zDhd{@do(+vg#|}W4#f-JQpk`K z)wrG`*@i6La+d^1xsLH}`e_|^zB5=DLF$NGLgCGIfJP)%FYBbYjEfKtN0qJM&ak{1 z)#xHFx*D}L37yD$>t32Se7KE$78aC=5JTIL%m~ zhveDf8IE6?k(25Xn@o_e*;37|Cl|Jne9Z!uTu15}3qmB59Ik!&UkrUk0=gv0ZWaX{ zajsby{Q^fi&Ta$NUfsh(m^i#xi=_M+Y)8O$`O4#G19vLiD69QV?kN~23Xx$dKNb=c zuYp|__!jRP9W&Y`UTWo=3T2F~uCN2icW>#JQ&aZ7r0LVya(aFo@|(twh^vI{l0{q= z0OPjK_|Z5E$_sVfPt)1whx5hBY Date: Wed, 12 Jan 2022 13:31:03 -0800 Subject: [PATCH 30/58] chore: rename more Netligraph references --- docs/commands/graph.md | 2 +- src/commands/dev/dev.js | 14 +++++++------- src/lib/one-graph/client.js | 14 +++++++------- ...> netlify-graph-code-exporter-snippets.js} | 19 ++++++++----------- .../{netligraph.js => netlify-graph.js} | 2 +- 5 files changed, 24 insertions(+), 27 deletions(-) rename src/lib/one-graph/{netligraph-code-exporter-snippets.js => netlify-graph-code-exporter-snippets.js} (97%) rename src/lib/one-graph/{netligraph.js => netlify-graph.js} (99%) diff --git a/docs/commands/graph.md b/docs/commands/graph.md index a262a65f87a..7b8cbfd7ef8 100644 --- a/docs/commands/graph.md +++ b/docs/commands/graph.md @@ -1,6 +1,6 @@ --- title: Netlify CLI graph command -description: Sync and edit your Netligraph library +description: Sync and edit your Netlify Graph library --- # `graph` diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index b7dcd8daee2..1122fcc4408 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -296,10 +296,10 @@ const dev = async (options, command) => { const startNetligraphWatcher = Boolean(options.netligraph) if (startNetligraphWatcher && options.offline) { - console.warn(`${NETLIFYDEVERR} Warning: unable to start Netligraph in offline mode`) + console.warn(`${NETLIFYDEVERR} Warning: unable to start Netlify Graph in offline mode`) } else if (startNetligraphWatcher && !site.id) { console.warn( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netligraph. To enable, run ${chalk.yellow( + `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 873d97f856d..f3f674c898f 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -14,7 +14,7 @@ const { readGraphQLOperationsSourceFile, writeGraphQLOperationsSourceFile, writeGraphQLSchemaFile, -} = require('./netligraph') +} = require('./netlify-graph') const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' @@ -514,10 +514,10 @@ const monitorCLISessionEvents = ({ log( `${NETLIFYDEVLOG} ${chalk.magenta( 'Reloading', - )} Netligraph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, + )} Netlify Graph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, ) await refetchAndGenerateFromOneGraph({ netligraphConfig, state, netlifyToken, siteId }) - log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netligraph schema and regenerated functions`) + log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) } } @@ -700,7 +700,7 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': return 'Generate handler as Netlify function ' case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - return `Sync Netligraph operations library` + return `Sync Netlify Graph operations library` default: { return `Unrecognized event (${__typename})` } @@ -735,9 +735,9 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s onEvents: (events) => { events.forEach(async (event) => { const eventName = friendlyEventName(event) - log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netligraph event: ${eventName}...`) + log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) await handleEvent(event) - log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netligraph event: ${eventName}...`) + log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) }) return events.map((event) => event.id) }, @@ -798,7 +798,7 @@ const fetchEnabledServices = async (authToken, appId) => { const generateSessionName = () => { const userInfo = os.userInfo('utf-8') const sessionName = `${userInfo.username}-${Date.now()}` - console.log(`${NETLIFYDEVLOG} Generated netligraph session name: ${sessionName}`) + console.log(`${NETLIFYDEVLOG} Generated Netlify Graph session name: ${sessionName}`) return sessionName } diff --git a/src/lib/one-graph/netligraph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js similarity index 97% rename from src/lib/one-graph/netligraph-code-exporter-snippets.js rename to src/lib/one-graph/netlify-graph-code-exporter-snippets.js index 9f11b240cc4..94b44e957ba 100644 --- a/src/lib/one-graph/netligraph-code-exporter-snippets.js +++ b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js @@ -332,20 +332,17 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${ - useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ - pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${ - pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -446,8 +443,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData diff --git a/src/lib/one-graph/netligraph.js b/src/lib/one-graph/netlify-graph.js similarity index 99% rename from src/lib/one-graph/netligraph.js rename to src/lib/one-graph/netlify-graph.js index bb7be7da44d..206fb6c8fd9 100644 --- a/src/lib/one-graph/netligraph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -12,7 +12,7 @@ const { typeScriptSignatureForOperation, typeScriptSignatureForOperationVariables, } = require('./graphql-helpers') -const { computeOperationDataList, netlifyFunctionSnippet } = require('./netligraph-code-exporter-snippets') +const { computeOperationDataList, netlifyFunctionSnippet } = require('./netlify-graph-code-exporter-snippets') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) From 9f2c525a10367c5c32c433d027862923058f29fd Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 13:31:46 -0800 Subject: [PATCH 31/58] chore: rename more Netligraph references --- src/commands/dev/dev.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 1122fcc4408..0ff3b5b56cf 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -12,7 +12,7 @@ const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/one-graph/client') -const { getNetligraphConfig } = require('../../lib/one-graph/netligraph') +const { getNetligraphConfig } = require('../../lib/one-graph/netlify-graph') const { NETLIFYDEV, NETLIFYDEVERR, From b98fa8b7aa92d90de4034ad7323b31ba8d946eae Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 13:32:39 -0800 Subject: [PATCH 32/58] chore: fix formatting --- src/commands/dev/dev.js | 10 +++++----- .../netlify-graph-code-exporter-snippets.js | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 0ff3b5b56cf..d4fcf87460b 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } diff --git a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js index 94b44e957ba..9f11b240cc4 100644 --- a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js +++ b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js @@ -332,17 +332,20 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${ + useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ + pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${ + pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -443,8 +446,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData From 32e186f7dad598a3abb7c6f2de0c8cb9f163e7e5 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 13:44:06 -0800 Subject: [PATCH 33/58] chore: rename more Netligraph references --- src/commands/graph/graph-edit.js | 2 +- src/commands/graph/graph-pull.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 20738fe2e8f..d161bb17b49 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -14,7 +14,7 @@ const { defaultExampleOperationsDoc, getNetligraphConfig, readGraphQLOperationsSourceFile, -} = require('../../lib/one-graph/netligraph') +} = require('../../lib/one-graph/netlify-graph') const { NETLIFYDEVERR, chalk } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index c89e4c3e24d..34b344e52e0 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,7 +1,7 @@ const process = require('process') const { refetchAndGenerateFromOneGraph } = require('../../lib/one-graph/client') -const { getNetligraphConfig } = require('../../lib/one-graph/netligraph') +const { getNetligraphConfig } = require('../../lib/one-graph/netlify-graph') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { From b8e2026534f02e4701b6039c0a533f82c5b556e0 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 17:52:35 -0800 Subject: [PATCH 34/58] chore: refactor and add tests --- src/commands/dev/dev.js | 12 +- src/commands/graph/graph-pull.js | 48 +- src/lib/one-graph/client.js | 156 +- src/lib/one-graph/netlify-graph.js | 43 +- .../netligraphOperationsLibrary.graphql | 11 + tests/assets/netligraphSchema.graphql | 5999 +++++++++++++++++ tests/command.graph.test.js | 14 + tests/graph-codegen.test.js | 54 + tests/snapshots/command.graph.test.js.md | 53 + tests/snapshots/command.graph.test.js.snap | Bin 0 -> 500 bytes tests/snapshots/graph-codegen.test.js.md | 17 + tests/snapshots/graph-codegen.test.js.snap | Bin 0 -> 3339 bytes 12 files changed, 6320 insertions(+), 87 deletions(-) create mode 100644 tests/assets/netligraphOperationsLibrary.graphql create mode 100644 tests/assets/netligraphSchema.graphql create mode 100644 tests/command.graph.test.js create mode 100644 tests/graph-codegen.test.js create mode 100644 tests/snapshots/command.graph.test.js.md create mode 100644 tests/snapshots/command.graph.test.js.snap create mode 100644 tests/snapshots/graph-codegen.test.js.md create mode 100644 tests/snapshots/graph-codegen.test.js.snap diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index d4fcf87460b..4ef6b8665ee 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -293,7 +293,7 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const startNetligraphWatcher = Boolean(options.netligraph) + const startNetligraphWatcher = Boolean(options.graph) if (startNetligraphWatcher && options.offline) { console.warn(`${NETLIFYDEVERR} Warning: unable to start Netlify Graph in offline mode`) diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 34b344e52e0..a501ac51e05 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,7 +1,9 @@ const process = require('process') -const { refetchAndGenerateFromOneGraph } = require('../../lib/one-graph/client') -const { getNetligraphConfig } = require('../../lib/one-graph/netlify-graph') +const { buildSchema } = require('graphql') + +const { ackCLISessionEvents, fetchCliSessionEvents, handleCliSessionEvent, loadCLISession, refetchAndGenerateFromOneGraph } = require('../../lib/one-graph/client') +const { getNetligraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/netlify-graph') const { NETLIFYDEVERR, chalk } = require('../../utils') const graphPull = async (options, command) => { @@ -20,6 +22,48 @@ const graphPull = async (options, command) => { const netlifyToken = await command.authenticate() const siteId = site.id await refetchAndGenerateFromOneGraph({ netligraphConfig, netlifyToken, state, siteId }) + + const oneGraphSessionId = loadCLISession(state) + + if (!oneGraphSessionId) { + console.warn("No local Netlify Graph session found, skipping command queue drain") + return + } + + const schemaString = readGraphQLSchemaFile(netligraphConfig) + + let schema; + + try { + schema = buildSchema(schemaString) + } catch (error) { + console.error(`${NETLIFYDEVERR} Error parsing schema: ${error.message}`) + process.exit(1) + } + + if (!schema) { + console.error(`${NETLIFYDEVERR} Failed to fetch and update Netlify GraphQL schem`) + process.exit(1) + } + + const next = await fetchCliSessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId }) + + if (next.errors) { + console.error(`${NETLIFYDEVERR} Failed to fetch Netlify Graph cli session events`, next.errors) + process.exit(1) + } + + if (next.events) { + const ackIds = [] + const handled = next.events.map(async (event) => { + await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) + ackIds.push(event.id) + }) + + await Promise.all(handled) + + await ackCLISessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId, eventIds: ackIds }) + } } /** diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index f3f674c898f..ac2ab5b31ee 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -4,7 +4,7 @@ const dotProp = require('dot-prop') const { buildClientSchema, parse } = require('graphql') const fetch = require('node-fetch') -const { NETLIFYDEVLOG, chalk, log } = require('../../utils') +const { NETLIFYDEVLOG, NETLIFYDEVWARN, chalk, log } = require('../../utils') const { defaultExampleOperationsDoc, @@ -103,7 +103,7 @@ const fetchOneGraph = async ( // @ts-ignore const value = JSON.parse(result) if (value.errors) { - console.log('fetchOneGraph errors', JSON.stringify(value, null, 2)) + console.warn(`${NETLIFYDEVWARN} fetchOneGraph errors`, operationName, JSON.stringify(value, null, 2)) } return value } catch { @@ -486,6 +486,24 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } +const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { + const first = 1000 + const next = await fetchOneGraph(null, appId, internalOperationsDoc, 'CLISessionEventsQuery', { + nfToken: authToken, + sessionId, + first, + }) + + if (next.errors) { + return next + } + + const events = (next.data && next.data.oneGraph && next.data.oneGraph.netlifyCliEvents) || [] + + + return { events } +} + const monitorCLISessionEvents = ({ appId, authToken, @@ -533,12 +551,7 @@ const monitorCLISessionEvents = ({ onClose() } - const first = 1000 - const next = await fetchOneGraph(null, appId, internalOperationsDoc, 'CLISessionEventsQuery', { - nfToken: authToken, - sessionId, - first, - }) + const next = await fetchCliSessionEvents({ appId, authToken, sessionId }) if (next.errors) { next.errors.forEach((error) => { @@ -546,15 +559,11 @@ const monitorCLISessionEvents = ({ }) } - const events = (next.data && next.data.oneGraph && next.data.oneGraph.netlifyCliEvents) || [] + const { events } = next if (events.length !== 0) { const ackIds = onEvents(events) - await fetchOneGraph(authToken, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { - nfToken: authToken, - sessionId, - eventIds: ackIds, - }) + await ackCLISessionEvents({ appId, authToken, sessionId, eventIds: ackIds }) } await enabledServiceWatcher(authToken, appId) @@ -603,11 +612,11 @@ const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata return session } -const ackCLISessionEvents = async (netlifyToken, appId, sessionId, first) => { +const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => { const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { - nfToken: netlifyToken, + nfToken: authToken, sessionId, - first, + eventIds, }) const events = result.data && result.data.oneGraph && result.data.oneGraph.ackNetlifyCliEvents @@ -660,6 +669,59 @@ const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, state.set('oneGraphEnabledServices', enabledServices) } +const updateGraphQLOperationsFile = async ({ authToken, docId, netligraphConfig, schema, siteId }) => { + const persistedDoc = await fetchPersistedQuery(authToken, siteId, docId) + if (!persistedDoc) { + console.warn('No persisted doc found for:', docId) + return + } + + const doc = persistedDoc.query + + writeGraphQLOperationsSourceFile(netligraphConfig, doc) + const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) + const parsedDoc = parse(appOperationsDoc, { + noLocation: true, + }) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + generateFunctionsFile(netligraphConfig, schema, appOperationsDoc, operations) +} + +const friendlyEventName = (event) => { + const { __typename, payload } = event + switch (__typename) { + case 'OneGraphNetlifyCliSessionTestEvent': + return friendlyEventName(payload) + case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': + return 'Generate handler as Netlify function ' + case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': + return `Sync Netlify Graph operations library` + default: { + return `Unrecognized event (${__typename})` + } + } +} + +const handleCliSessionEvent = async ({ authToken, event, netligraphConfig, schema, siteId }) => { + const { __typename, payload } = await event + switch (__typename) { + case 'OneGraphNetlifyCliSessionTestEvent': + await handleCliSessionEvent({ authToken, event: payload, netligraphConfig, schema, siteId }) + break + case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': + await generateHandler(netligraphConfig, schema, payload.operationId, payload) + break + case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': + await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netligraphConfig, schema, siteId }) + break + default: { + console.warn(`${NETLIFYDEVWARN} Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) + break + } + } +} + + const loadCLISession = (state) => state.get('oneGraphSessionId') const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, state }) => { @@ -674,58 +736,6 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s const enabledServices = [] const schema = await fetchOneGraphSchema(site.id, enabledServices) - const updateGraphQLOperationsFile = async (docId) => { - const persistedDoc = await fetchPersistedQuery(netlifyToken, site.id, docId) - if (!persistedDoc) { - console.warn('No persisted doc found for:', docId) - return - } - - const doc = persistedDoc.query - - writeGraphQLOperationsSourceFile(netligraphConfig, doc) - const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - const parsedDoc = parse(appOperationsDoc, { - noLocation: true, - }) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - generateFunctionsFile(netligraphConfig, schema, appOperationsDoc, operations) - } - - const friendlyEventName = (event) => { - const { __typename, payload } = event - switch (__typename) { - case 'OneGraphNetlifyCliSessionTestEvent': - return friendlyEventName(payload) - case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - return 'Generate handler as Netlify function ' - case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - return `Sync Netlify Graph operations library` - default: { - return `Unrecognized event (${__typename})` - } - } - } - - const handleEvent = async (event) => { - const { __typename, payload } = await event - switch (__typename) { - case 'OneGraphNetlifyCliSessionTestEvent': - await handleEvent(payload) - break - case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - await generateHandler(netligraphConfig, schema, payload.operationId, payload) - break - case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - await updateGraphQLOperationsFile(payload.docId) - break - default: { - console.log('Unrecognized event received', __typename, payload) - break - } - } - } - monitorCLISessionEvents({ appId: site.id, authToken: netlifyToken, @@ -736,7 +746,7 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s events.forEach(async (event) => { const eventName = friendlyEventName(event) log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) - await handleEvent(event) + await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) }) return events.map((event) => event.id) @@ -745,7 +755,7 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s console.error(`OneGraph: ${error}`) }, onClose: () => { - console.log('OneGraph: closed') + console.debug('OneGraph: closed') }, }) } @@ -781,7 +791,7 @@ const ensureAppForSite = async (authToken, siteId) => { const app = await upsertAppForSite(authToken, siteId) const schema = await fetchAppSchema(authToken, app.id) if (!schema) { - console.log('Creating new empty default GraphQL schema for site....') + console.log(`${NETLIFYDEVLOG} Creating new empty default GraphQL schema for site....`) await createNewAppSchema(authToken, { appId: siteId, enabledServices: ['ONEGRAPH'], @@ -807,10 +817,12 @@ module.exports = { createCLISession, createPersistedQuery, ensureAppForSite, + fetchCliSessionEvents, fetchOneGraphPersisted, fetchOneGraphSchemaJson, fetchOneGraphSchema, fetchPersistedQuery, + handleCliSessionEvent, generateSessionName, loadCLISession, monitorCLISessionEvents, diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js index 206fb6c8fd9..613a6ff0d58 100644 --- a/src/lib/one-graph/netlify-graph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -535,11 +535,22 @@ ${functionDecls.join('\n\n')} return source } -const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { +const generateFunctionsSource = (netligraphConfig, schema, operationsDoc, queries) => { const functionDefinitions = Object.values(queries).map((query) => queryToFunctionDefinition(schema, query)) const clientSource = generateJavaScriptClient(netligraphConfig, schema, operationsDoc, functionDefinitions) const typeDefinitionsSource = generateTypeScriptDefinitions(netligraphConfig, schema, functionDefinitions) + return { + clientSource, + typeDefinitionsSource, + functionDefinitions + } +} + + +const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { + const { clientSource, typeDefinitionsSource } = generateFunctionsSource(netligraphConfig, schema, operationsDoc, queries) + ensureNetligraphPath(netligraphConfig) fs.writeFileSync(netligraphConfig.netligraphImplementationFilename, clientSource, 'utf8') fs.writeFileSync(netligraphConfig.netligraphTypeDefinitionsFilename, typeDefinitionsSource, 'utf8') @@ -628,14 +639,17 @@ const writeGraphQLSchemaFile = (netligraphConfig, schema) => { ) } -const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { - let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - if (currentOperationsDoc.trim().length === 0) { - currentOperationsDoc = defaultExampleOperationsDoc - } +const readGraphQLSchemaFile = (netligraphConfig) => { + ensureNetligraphPath(netligraphConfig) + return fs.readFileSync( + `${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, + 'utf8', + ) +} - const parsedDoc = parse(currentOperationsDoc) +const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, operationsDoc, schema }) => { + const parsedDoc = parse(operationsDoc) const operations = extractFunctionsFromOperationDoc(parsedDoc) const operation = operations[operationId] @@ -653,6 +667,18 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) options: handlerOptions, }) + return { source, operation } +} + + +const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { + let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) + if (currentOperationsDoc.trim().length === 0) { + currentOperationsDoc = defaultExampleOperationsDoc + } + + const { operation, source } = generateHandlerSource({ netligraphConfig, schema, operationsDoc: currentOperationsDoc, operationId, handlerOptions }) + const filename = `${netligraphConfig.functionsPath}/${operation.name}.${netligraphConfig.extension}` ensureFunctionsPath(netligraphConfig) @@ -662,10 +688,13 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) module.exports = { defaultExampleOperationsDoc, extractFunctionsFromOperationDoc, + generateFunctionsSource, generateFunctionsFile, generateHandler, + generateHandlerSource, getNetligraphConfig, readGraphQLOperationsSourceFile, + readGraphQLSchemaFile, writeGraphQLOperationsSourceFile, writeGraphQLSchemaFile, } diff --git a/tests/assets/netligraphOperationsLibrary.graphql b/tests/assets/netligraphOperationsLibrary.graphql new file mode 100644 index 00000000000..40880927deb --- /dev/null +++ b/tests/assets/netligraphOperationsLibrary.graphql @@ -0,0 +1,11 @@ +query ExampleQuery($package: String!) @netligraph(id: "d86699fb-ddfc-4833-9d9a-f3497cb7c992", doc: "A test query to snapshot") { + npm { + package(name: $package) { + id + readme + license { + url + } + } + } +} \ No newline at end of file diff --git a/tests/assets/netligraphSchema.graphql b/tests/assets/netligraphSchema.graphql new file mode 100644 index 00000000000..7e4126c008e --- /dev/null +++ b/tests/assets/netligraphSchema.graphql @@ -0,0 +1,5999 @@ +input OneGraphSubscriptionPollScheduleRepeatInput { + """How many minutes to wait before re-running the underlying query""" + minutes: Int! +} + +input OneGraphSubscriptionPollScheduleInput { + """""" + every: OneGraphSubscriptionPollScheduleRepeatInput! +} + +type OneGraphSubscriptionPollingQueryDiffPrevious { + payload: JSON + createdAt: String +} + +type OneGraphSubscriptionPollingQueryDiff { + previous: OneGraphSubscriptionPollingQueryDiffPrevious +} + +type PollingQuery { + query: Query! + diff: OneGraphSubscriptionPollingQueryDiff! +} + +""" +Whether to include information about the API requests that OneGraph made to fulfill the query in the `extensions` field. +""" +enum OneGraphSubscriptionShowMetricsEnum { + """Don't include any info""" + NONE + + """Include summary info.""" + SUMMARY + + """Include summary metrics and full requests.""" + FULL_REQUESTS +} + +"\nOptional authentication for making requests to the Gmail API if you want\nto use a custom gmail app instead of OneGraph's built-in app.\n\nSubscriptions are long-lived, so a refresh token must also be provided.\n\nIf you use this arg, make sure you've updated OneGraph to use your OAuth credentials in the dashboard.\n" +input OneGraphSubscriptionGmailAuthArg { + refreshToken: String! + accessToken: String! +} + +"""Optional auth arg if not using OneGraph's built-in authentication""" +input OneGraphSubscriptionAuthArg { + twilio: OneGraphTwilioAuth + + "\nOptional authentication for making requests to the Gmail API if you want\nto use a custom gmail app instead of OneGraph's built-in app.\n\nSubscriptions are long-lived, so a refresh token must also be provided.\n\nIf you use this arg, make sure you've updated OneGraph to use your OAuth credentials in the dashboard.\n" + gmail: OneGraphSubscriptionGmailAuthArg +} + +input NpmPackagePublishedArg { + """ + The names of packages to be notified about when published, e.g. ["graphql", "express", "fela"] + """ + names: [String!]! +} + +type NpmNewPackagePublishedSubscriptionPayload { + """Package being published""" + package: NpmPackage! +} + +"""Namespace for npm subscriptions.""" +type NpmSubscriptionRoot { + """Get notified when *any* package is published or updated on npm""" + allPublishActivity: NpmNewPackagePublishedSubscriptionPayload + + """Get notified when a package is published or updated on npm""" + packagePublished(input: NpmPackagePublishedArg!): NpmNewPackagePublishedSubscriptionPayload +} + +type Subscription { + npm( + """ + Whether to include information about the API requests that OneGraph made to fulfill the query in the `extensions` field. + """ + showMetrics: OneGraphSubscriptionShowMetricsEnum + secret: OneGraphSubscriptionSecretInput + auth: OneGraphSubscriptionAuthArg + + """ + Set to true when creating a subscription over a websocket that should only be retained and not sent over the websocket or a webhook. If set to true, `retainPayloads` must not be set to false. + """ + retainedOnly: Boolean + + """ + Set to true to have OneGraph store payloads for this subscription. They payloads are available on the OneGraph dashboard from the app's `Subscription` page. + """ + retainPayloads: Boolean + + """ + Webhook URL that will receive a POST request every time there is new data for the subscription. The endpoint should return a 200 within 30 seconds to be considered successful. If the request does not succeed, it will be retried. + """ + webhookUrl: String + ): NpmSubscriptionRoot! + poll( + """ + Whether to include information about the API requests that OneGraph made to fulfill the query in the `extensions` field. + """ + showMetrics: OneGraphSubscriptionShowMetricsEnum + + """ + When set, OneGraph will run the query on the specified schedule, but will only deliver new payloads when the underlying query result has changed from the previous result. Use this when you only want to react to changes. + + When unset, OneGraph will run the query on the specified schedule, and will deliver a new payload regardless of whether it has changed from the previous runs. Use this when you want to reliably drive a process at a regular interval or monitor a value over time. + """ + onlyTriggerWhenPayloadChanged: Boolean = true + schedule: OneGraphSubscriptionPollScheduleInput! + secret: OneGraphSubscriptionSecretInput + auth: OneGraphSubscriptionAuthArg + + """ + Set to true to have OneGraph store payloads for this subscription. They payloads are available on the OneGraph dashboard from the app's `Subscription` page. Use this field when creating a subscription over a websocket that should only be retained and not sent over the websocket or a webhook. + """ + retainedOnly: Boolean + retainPayloads: Boolean + + """ + Webhook URL that will receive a POST request every time there is new data for the subscription. The endpoint should return a 200 within 30 seconds to be considered successful. If the request does not succeed, it will be retried. + """ + webhookUrl: String + ): PollingQuery! +} + +input SignoutServicesData { + services: [OneGraphServiceEnum!]! +} + +input OneGraphSignoutServiceUserInput { + """ + Foreign user id for the user you want to sign out. You can find the foreignUser id through me.serviceMetadata.loggedInServices + """ + foreignUserId: String! + + """Service that you want to sign out of.""" + service: OneGraphServiceEnum! +} + +type SignoutServicesResponsePayload { + me: Viewer! +} + +input OneGraphCreateNetlifyTestEventDataInput { + payload: JSON! +} + +input OneGraphCreateNetlifyTestEvent { + data: OneGraphCreateNetlifyTestEventDataInput! + sessionId: String! +} + +type OneGraphCreateNetlifyTestResponsePayload { + event: OneGraphNetlifyCliSessionEvent! +} + +input OneGraphCreateNetlifyLogEventDataInput { + message: String! +} + +input OneGraphCreateNetlifyLogEvent { + data: OneGraphCreateNetlifyLogEventDataInput! + sessionId: String! +} + +type OneGraphCreateNetlifyLogResponsePayload { + event: OneGraphNetlifyCliSessionEvent! +} + +input OneGraphDeleteNetlifyCliSessionInput { + """The id of the session.""" + sessionId: String! +} + +type OneGraphDeleteNetlifyCliSessionResponsePayload { + """The session that was deleted.""" + session: OneGraphNetlifyCliSession! +} + +input OneGraphUpdateNetlifyCliSessionInput { + """Optional metadata for the session""" + metadata: JSON + + """An optional name for the session""" + name: String + + """The id of the session""" + id: String! +} + +type OneGraphUpdateNetlifyCliSessionResponsePayload { + """The session that was updated.""" + session: OneGraphNetlifyCliSession! +} + +input OneGraphCreateNetlifyCliSessionInput { + """Optional metadata for the session""" + metadata: JSON + + """An optional name for the session""" + name: String + appId: String! +} + +type OneGraphCreateNetlifyCliSessionResponsePayload { + """The session that was created.""" + session: OneGraphNetlifyCliSession! +} + +input OneGraphAckNetlifyCliEventsInput { + eventIds: [String!]! + sessionId: String! +} + +type OneGraphAckNetlifyCliEventsResponsePayload { + """The list of events that were acknowledged""" + events: [OneGraphNetlifyCliSessionEvent!]! +} + +input OneGraphModifySchemaTokenInput { + """Id for the app that you want to modify the schema for.""" + appId: String! +} + +type OneGraphCreateModifySchemaTokenResponsePayload { + """The access token that can be used to modify the app's schema.""" + accessToken: OneGraphAccessToken! +} + +input OneGraphGraphQLSchemaExternalGraphQLSchemaInput { + """The id of the external GraphQL schema.""" + externalGraphQLSchemaId: String! +} + +input OneGraphCreateGraphQLSchemaInput { + """ + Whether to set this schema as the default for the app. Defaults to false. + """ + setAsDefaultForApp: Boolean = false + + """External GraphQL schemas to add""" + externalGraphQLSchemas: [OneGraphGraphQLSchemaExternalGraphQLSchemaInput!] + + """Optional id of a Salesforce schema to attach to the app.""" + salesforceSchemaId: String + + """The optional id of the GraphQL schema that this was derived from.""" + parentId: String + + """ + The list of services that this schema should use. Leave blank if you want to add support for all supported services. + """ + enabledServices: [OneGraphServiceEnumArg!] + + """The id of the app that the schema should belong to.""" + appId: String! +} + +type OneGraphCreateGraphQLSchemaResponsePayload { + graphqlSchema: OneGraphGraphQLSchema! + app: OneGraphApp! +} + +input OneGraphCreatePersonalTokenWithNetlifySiteAnchorInput { + name: String! + netlifySiteId: String! +} + +type OneGraphCreatePersonalTokenWithNetlifySiteAnchorResponsePayload { + """Personal access token that was created by this mutation""" + accessToken: OneGraphAccessToken! +} + +input OneGraphUpsertAppForNetlifySiteInput { + netlifySiteId: String! +} + +type OneGraphUpsertAppForNetlifySiteResponsePayload { + """The app that is associated with the Netlify site.""" + app: OneGraphApp! + + """The app that is associated with the Netlify account.""" + org: OneGraphOrg! +} + +input OneGraphCreateEmptyAccessTokenInput { + """ + Number of seconds until the token should expire. Providing a value that is over two weeks of seconds will cause the request to be rejected + """ + expiresIn: Int = 1209600 +} + +type OneGraphCreateEmptyAccessTokenPayload { + """Access token that was created by this mutation""" + accessToken: OneGraphAccessToken! +} + +input OneGraphRemoveExternalHoneycombConfigInput { + """Id of the app that the external Honeycomb config belongs to.""" + appId: String! +} + +type OneGraphRemoveExternalHoneycombConfigPayload { + """App that the external schema was removed from.""" + app: OneGraphApp +} + +input OneGraphUpdateExternalHoneycombConfigInput { + """ + If `true`, OneGraph will send events to Honeycomb. Set to `false` to stop sending metrics. + """ + active: Boolean + + """Metrics to subscribe to, with preferred dataset name.""" + datasets: [OneGraphAddExternalHoneycombConfigDatasetInput!] + + """Honeycomb token with the ability to create datasets and send events.""" + token: String + + """App to add the honeycomb config to.""" + appId: String! +} + +type OneGraphUpdateExternalHoneycombConfigPayload { + """App that the Honeycomb config belongs to.""" + app: OneGraphApp + + """The Honeycomb config that was updated.""" + externalHoneycombConfig: OneGraphExternalHoneycombConfig! +} + +input OneGraphAddExternalHoneycombConfigDatasetInput { + """ + The name of the dataset that the events will be pushed to in Honeycomb. + """ + datasetName: String! + metricType: OneGraphExternalHoneycombConfigDatasetMetricTypeEnum! +} + +input OneGraphAddExternalHoneycombConfigInput { + """Metrics to subscribe to, with preferred dataset name.""" + datasets: [OneGraphAddExternalHoneycombConfigDatasetInput!]! + + """Honeycomb token with the ability to create datasets and send events.""" + token: String! + + """App to add the honeycomb config to.""" + appId: String! +} + +type OneGraphAddExternalHoneycombConfigPayload { + """App that the Honeycomb config was added to.""" + app: OneGraphApp + + """The Honeycomb config that was added.""" + externalHoneycombConfig: OneGraphExternalHoneycombConfig! +} + +input OneGraphRemoveSlackEventWebhookInput { + """Unique onegraph id of the slack event webhook.""" + id: String! +} + +type OneGraphRemoveSlackEventWebhookPayload { + """App that the slack event webhook belongs to.""" + app: OneGraphApp + + """The slack event webhook that was removed.""" + slackEventWebhook: OneGraphSlackEventWebhook! + + """Custom OAuth client that the slack event webhook belonged to.""" + serviceAuth: OneGraphServiceAuth! +} + +input OneGraphSetSlackEventWebhookSigningSecretInput { + """Slack app-level token with the authorizations:read scope.""" + signingSecret: String! + + """Unique onegraph id of the slack event webhook.""" + id: String! +} + +type OneGraphSetSlackEventWebhookSigningSecretPayload { + """App that the slack event webhook belongs to.""" + app: OneGraphApp + + """The slack event webhook that was mofified.""" + slackEventWebhook: OneGraphSlackEventWebhook! + + """Custom OAuth client that the slack event webhook belongs to.""" + serviceAuth: OneGraphServiceAuth! +} + +input OneGraphSetSlackEventWebhookAppTokenInput { + """Slack app-level token with the authorizations:read scope.""" + appToken: String! + + """Unique onegraph id of the slack event webhook.""" + id: String! +} + +type OneGraphSetSlackEventWebhookAppTokenPayload { + """App that the slack event webhook belongs to.""" + app: OneGraphApp + + """The slack event webhook that was mofified.""" + slackEventWebhook: OneGraphSlackEventWebhook! + + """Custom OAuth client that the slack event webhook belongs to.""" + serviceAuth: OneGraphServiceAuth! +} + +input OneGraphAddSlackEventWebhookInput { + """Slack app-level token with the authorizations:read scope.""" + appToken: String! + + """Slack event subscription webhook signing secret.""" + signingSecret: String! + + """Unique id for the app's Slack custom OAuth credentials.""" + serviceAuthId: String! + + """App to add the slack event webhook to.""" + appId: String! +} + +type OneGraphAddSlackEventWebhookPayload { + """App that the slack event webhook was added to.""" + app: OneGraphApp + + """The slack event webhook that was added.""" + slackEventWebhook: OneGraphSlackEventWebhook! + + """Custom OAuth client that the slack event webhook was added to.""" + serviceAuth: OneGraphServiceAuth! +} + +input OneGraphRemoveGoogleSiteVerificationInput { + """Id of the app to remove the Google Site Verification from.""" + appId: String! +} + +type OneGraphRemoveGoogleSiteVerificationPayload { + """App that the google site verification is being removed from.""" + app: OneGraphApp +} + +input OneGraphAddGoogleSiteVerificationInput { + """The body that Google will expect at the endpoint""" + body: String! + + """The path that Google will crawl to check the site verification""" + path: String! + + """App to add the external schema to.""" + appId: String! +} + +type OneGraphAddGoogleSiteVerificationPayload { + """App that the external schema was added to.""" + app: OneGraphApp + + """The google site verification that was added.""" + googleSiteVerification: OneGraphGoogleSiteVerification! +} + +type OneGraphAddPreviewSalesforceSchemaForSalesforceViewerPayload { + """The preview salesforce schema that was created.""" + salesforceSchema: OneGraphSalesforceSchema! +} + +input OneGraphRemoveSalesforceSchemaInput { + """Id of the Salesforce schema to update.""" + id: String! +} + +type OneGraphRemoveSalesforceSchemaPayload { + """App that the Salesforce schema was removed from.""" + app: OneGraphApp + + """The Salesforce schema that was removed.""" + salesforceSchema: OneGraphSalesforceSchema! +} + +input OneGraphUpdateSalesforceSchemaInput { + """Id of the Salesforce schema to update.""" + id: String! +} + +type OneGraphUpdateSalesforceSchemaPayload { + """App that the Salesforce schema was added to.""" + app: OneGraphApp + + """The Salesforce schema that was added.""" + salesforceSchema: OneGraphSalesforceSchema! +} + +input OneGraphAddSalesforceSchemaInput { + """App to add the salesforce schema to.""" + appId: String! +} + +type OneGraphAddSalesforceSchemaPayload { + """App that the salesforce schema was added to.""" + app: OneGraphApp + + """The salesforce schema that was added.""" + salesforceSchema: OneGraphSalesforceSchema! +} + +input OneGraphPromotePreviewSalesforceSchemaInput { + """The id of the salesforce schema to promote.""" + salesforceSchemaId: String! + + """App to add the preview salesforce schema to.""" + appId: String! +} + +type OneGraphPromotePreviewSalesforceSchemaPayload { + """App that the salesforce schema was added to.""" + app: OneGraphApp + + """The salesforce schema that was promoted.""" + salesforceSchema: OneGraphSalesforceSchema! +} + +input OneGraphAddPreviewSalesforceSchemaInput { + """App to add the preview salesforce schema to.""" + appId: String! +} + +type OneGraphAddPreviewSalesforceSchemaPayload { + """App that the salesforce schema was added to.""" + app: OneGraphApp + + """The preview salesforce schema that was added.""" + salesforceSchema: OneGraphSalesforceSchema! + + """The GraphQL schema for the app after the preview schema is applied.""" + previewSchema: JSON! + + """The current GraphQL schema for the app.""" + currentSchema: JSON! +} + +input OneGraphRemoveExternalGraphQLSchemaInput { + """Id of the external schema to update.""" + id: String! +} + +type OneGraphRemoveExternalGraphQLSchemaPayload { + """App that the external schema was removed from.""" + app: OneGraphApp + + """The external schema that was removed.""" + externalGraphQLSchema: OneGraphExternalGraphQLSchema! +} + +input OneGraphUpdateExternalGraphQLSchemaInput { + """Endpoint to make GraphQL queries against.""" + endpoint: String! + + """Id of the external schema to update.""" + id: String! +} + +type OneGraphUpdateExternalGraphQLSchemaPayload { + """App that the external schema was added to.""" + app: OneGraphApp + + """The external schema that was added.""" + externalGraphQLSchema: OneGraphExternalGraphQLSchema! +} + +input OneGraphAddExternalGraphQLSchemaInput { + """Endpoint to make GraphQL queries against.""" + service: OneGraphSupportedExternalGraphQLService! + + """Endpoint to make GraphQL queries against.""" + endpoint: String! + + """App to add the external schema to.""" + appId: String! +} + +type OneGraphAddExternalGraphQLSchemaPayload { + """App that the external schema was added to.""" + app: OneGraphApp + + """The external schema that was added.""" + externalGraphQLSchema: OneGraphExternalGraphQLSchema! +} + +input OneGraphEnableGitHubAppWebhookInput { + serviceAuthId: String! +} + +type OneGraphEnableGitHubAppWebhookResponsePayload { + """Custom OAuth Client that was updated""" + serviceAuth: OneGraphServiceAuth! + + """GitHub app webhook that was created""" + gitHubAppWebhook: OneGraphGitHubAppWebhook! +} + +type OneGraphSignoutResponsePayload { + me: Viewer! +} + +"""A OneGraph SignIn result""" +type OneGraphSignInResult { + """ + The accessToken that can be used to make requests on behalf of the OneGraph user + """ + accessToken: OneGraphAccessToken +} + +input OneGraphDisableAuthGuardianSlackIntegrationInput { + appId: String! +} + +type OneGraphDisableAuthGuardianSlackIntegrationResponsePayload { + app: OneGraphApp +} + +input OneGraphEnableAuthGuardianSlackIntegrationInput { + authToken: String! + channel: String! + appId: String! +} + +type OneGraphEnableAuthGuardianSlackIntegrationResponsePayload { + app: OneGraphApp +} + +input OneGraphDisableGithubRepositorySubscriptionDelegationByIdInput { + """The id of the delegation.""" + id: String! +} + +type OneGraphDisableGithubRepositorySubscriptionDelegationByIdResult { + """The App that delegation was disabled for.""" + app: OneGraphApp! +} + +input OneGraphDisableGithubRepositorySubscriptionDelegationInput { + """ + The name of the repo, e.g. `graphiql-explorer` in `onegraph/graphiql-explorer`. + """ + repoName: String! + + """ + The owner of the repo, e.g. `onegraph` in `onegraph/graphiql-explorer`. + """ + repoOwner: String! +} + +type OneGraphDisableGithubRepositorySubscriptionDelegationResult { + """The GitHub repository name of app that delegation was enabled for.""" + repoName: String! + + """The GitHub repository owner of app that delegation was enabled for.""" + repoOwner: String! +} + +input OneGraphEnableGithubRepositorySubscriptionDelegationInput { + """ + The name of the repo, e.g. `graphiql-explorer` in `onegraph/graphiql-explorer`. + """ + repoName: String! + + """ + The owner of the repo, e.g. `onegraph` in `onegraph/graphiql-explorer`. + """ + repoOwner: String! +} + +type OneGraphEnableGithubRepositorySubscriptionDelegationResult { + """The GitHub repository name of app that delegation was disabled for.""" + repoName: String! + + """The GitHub repository owner of app that delegation was disabled for.""" + repoOwner: String! +} + +input OneGraphEvictCachedPersistedQueryResultsInput { + """The operationName of the cached result.""" + operationName: String + + """ + Variables values that must match. Note that this specifies the *minimum* of the match: even if there are *additional* variables in the cached query that weren't provided here, if the cached query successfully matches *at least* the variables provided here, the result will be removed from the cache. + """ + variables: JSON + + """The id of the persisted query.""" + docId: String! + + """Id for the app that the query was persisted on.""" + appId: String! +} + +type OneGraphEvictCachedResultsResponsePayload { + docId: String! +} + +input OneGraphDeletePersistedQueryInput { + id: String! + appId: String! +} + +type OneGraphDeletePersistedQueryResponsePayload { + app: OneGraphApp! +} + +input OneGraphPersistedQueryTokenInput { + """Id for the app that you want to persist queries on.""" + appId: String! +} + +type OneGraphCreatePersitQueryTokenResponsePayload { + """The access token that can be used to persist queries""" + accessToken: OneGraphAccessToken! +} + +input OneGraphUpdatePersistedQueryInput { + """Replace the current tags on the query with the provided tags.""" + replaceTags: [String!] + + """Tags to remove from the query""" + removeTags: [String!] + + """Tags to add to the query.""" + addTags: [String!] + + """A new description for the query.""" + description: String + accessToken: String + + """The id of the app that the persisted query belongs to.""" + appId: String! + + """The id of the persisted query.""" + id: String! +} + +type OneGraphUpdatedPersistedQueryResponsePayload { + persistedQuery: OneGraphPersistedQuery! +} + +input OneGraphCreatePersistedQueryParentInput { + """ + An optional list of tags to remove from the parent query. If any of the provided tags aren't present on the parent, the mutation will fail. No persisted queries will be created and no tags will be removed from the parent. + """ + removeTags: [String!] + + """The id of the parent""" + id: String! +} + +input OneGraphPersistedQueryCacheStrategyArg { + """Number of seconds to cache the query result for.""" + timeToLiveSeconds: Float! +} + +input OneGraphCreatePersistedQueryInput { + """ + The parent persisted query. It can be used to track lineage of the query. + """ + parent: OneGraphCreatePersistedQueryParentInput + + """ + A description for the persisted query. Maximum length is 2096 characters. + """ + description: String + + """ + List of tags to add to the persisted query. Tags are free-form text that can be used to categorize persisted queries. Each tag must be under 256 characters and there can be a maximum of 10 tags on a single persisted query. + """ + tags: [String!] + accessToken: String + + """ + If set to true, and there was a successful execution of the query in the last 30 days, then the last successful result will be returned if we encounter any error when executing the query. If we do not have a previous successful result, then the response with the error will be returned. + + Note that the fallback result will be returned even in the case of partial success. + + This parameter is useful when you expect that your queries might be rate-limited by the underlying service. + + The query must provide a cache strategy in order to use `fallbackOnError`. + """ + fallbackOnError: Boolean + cacheStrategy: OneGraphPersistedQueryCacheStrategyArg + + """ + Operation names to allow. If not provided, then all operations in the document are allowed. + """ + allowedOperationNames: [String!] + fixedVariables: JSON + freeVariables: [String!] + query: String! + appId: String! +} + +type OneGraphPersistedQueryResponsePayload { + persistedQuery: OneGraphPersistedQuery! +} + +enum OneGraphDataVitualizationSupportedServiceArg { + GMAIL +} + +input OneGraphStartDataVirtualizationInput { + """ + Account ID to enable the service for. Must match the currently logged in account id + """ + accountId: String! + + """Service to enable data virtualization for""" + service: OneGraphDataVitualizationSupportedServiceArg! +} + +""" +Information about data virtualization that has been enabled for a service +""" +type OneGraphDataVirtualizationDetails { + accountId: String! + graphQLEndpoint: String! + service: String! +} + +type OneGraphStartDataVirtualizationPayload { + """Organization that was updated by this mutation""" + dataVirutalizationDetails: OneGraphDataVirtualizationDetails! +} + +input OneGraphUpdateAppByIdPatch { + """New name for the app""" + name: String! +} + +input OneGraphUpdateAppByIdInput { + """New fields for the app""" + patch: OneGraphUpdateAppByIdPatch! + + """Id of the app""" + id: String! +} + +type OneGraphUpdateAppByIdResponsePayload { + """App that was updated by this mutation""" + app: OneGraphApp! +} + +input OneGraphUpdateOrgByIdPatch { + """New name for the organization""" + name: String! +} + +input OneGraphUpdateOrgByIdInput { + """New fields for the organization""" + patch: OneGraphUpdateOrgByIdPatch! + + """Id of the organization""" + id: String! +} + +type OneGraphUpdateOrgByIdResponsePayload { + """Organization that was updated by this mutation""" + org: OneGraphOrg! +} + +input OneGraphCreateOrgInput { + """Name for the organization""" + name: String! +} + +type OneGraphCreateOrgResponsePayload { + """Organization that was created by this mutation""" + org: OneGraphOrg! +} + +input OneGraphCreateShortenedUrlInput { + operation: String + description: String + name: String + variables: String + query: String! +} + +type OneGraphShortenUrlResponsePayload { + shortenedUrl: OneGraphShortenedQuery! +} + +input OneGraphPersistAuthsInput { + """ + Optional OneGraph accessToken to add the auths to. If not provided, OneGraph will look for a Bearer token in the Authorization header. + """ + accessToken: String + auths: OneGraphServiceAuths! +} + +type OneGraphPersistAuthsResponsePayload { + me: Viewer! +} + +input OneGraphAddAuthsToPersonalTokenInput { + """ + Auths to establish the anchor. Note that these auths won't be added to the personal token. + """ + anchorAuth: OneGraphServiceAuths + appId: String! + + """ + Token that will be destroyed and have its auths moved to the personal token. + """ + sacrificialToken: String! + personalToken: String! +} + +type OneGraphAddAuthsToPersonalTokenResponsePayload { + """Personal access token that was updated by this mutation""" + accessToken: OneGraphAccessToken! + + """OneGraph user""" + oneUser: OneGraphUser +} + +input OneGraphDeletePersonalTokenInput { + appId: String! + accessToken: String! +} + +type OneGraphDeletePersonalTokenResponsePayload { + """OneGraph user""" + oneUser: OneGraphUser! +} + +input OneGraphCreatePersonalTokenInput { + anchor: OneGraphAccessTokenAnchorEnum = ONEGRAPH_USER + appId: String! + accessToken: String! + name: String! +} + +type OneGraphCreatePersonalTokenResponsePayload { + """Personal access token that was created by this mutation""" + accessToken: OneGraphAccessToken! + + """OneGraph user""" + oneUser: OneGraphUser +} + +"""Fields to change on a subscription.""" +input OneGraphGraphQLSubscriptionUpdateInputPatch { + """The new variables to replace the existing query variables.""" + variables: JSON + + """The new query to replace the existing subscription query.""" + query: String! +} + +input OneGraphSubscriptionSecretInput { + """ + A hex-encoded key that will be used to sign all webhooks sent from this subscription. + + You can use the signature to validate that the subscription was sent from OneGraph. + + The signature will be sent in the `X-OneGraph-Signature` header of the webhook. The header will contain two parts, a signature and a timestamp (in seconds since the epoch), in the following format: + + ``` + X-OneGraph-Signature: t=1582852002,hmac_sha256=7d797ecd431e1a98aaba2f387f2c43241a13c1f093fd9d7e661758963744549a + ``` + + To verify the signature: + 1. Extract the timestamp (1582852002 above) + 2. Extract the signature (7d797ecd431e1a98aaba2f387f2c43241a13c1f093fd9d7e661758963744549a above) + 3. Concatenate the timestamp and the request body, separeted by a period (e.g. `t + '.' + requestBody`) + 4. Compute the hmac_sha256 hash of (3) + 5. Compare the hash with the provided signature using a constant-time comparison function (e.g. crypto.timingSafeEqual in Node) + 6. Reject the request if the hash you computed does not match the provided signature or if the timestamp is too far in the past (typically, 5 minutes) + + Example for validating the body in Node.js: + + ```js + const SECRET = 'your hmacSha256Key'; + const signature = res.get('X-OneGraph-Signature'); + if (!signature) { + throw new Error('Missing signature'); + } + + const sig = {}; + for (const pair of signature.split(',')) { + const [k, v] = pair.split('='); + sig[k] = v; + } + + if (!sig.t || !sig.hmac_sha256) { + throw new Error('Invalid signature header'); + } + + const hash = crypto + .createHmac('sha256', SECRET) + .update(sig.t) + .update('.') + .update(res.body) + .digest('hex'); + + if ( + !crypto.timingSafeEqual( + Buffer.from(hash, 'hex'), + Buffer.from(sig.hmac_sha256, 'hex'), + ) + ) { + throw new Error('Invalid signature'); + } + + if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) { + throw new Error('Request is too old'); + } + + // Signature is valid + ``` + + Examples for creating the key: + + Cli: + ```cli + $ openssl rand -hex 32 + ``` + + Node: + ```js + require('crypto').randomBytes(32).toString('hex'); + ``` + + Ruby: + ```ruby + ruby -rsecurerandom -e 'puts SecureRandom.hex(32)' + ``` + """ + hmacSha256Key: String +} + +input OneGraphGraphQLSubscriptionUpdateInput { + """The fields of the subscription to update.""" + patch: OneGraphGraphQLSubscriptionUpdateInputPatch! + + """ + The signing secret that the subscription was created with. Note that this will not update the existing secret. + """ + secret: OneGraphSubscriptionSecretInput + subscriptionId: String! +} + +type OneGraphGraphQLSubscriptionUpdateResponsePayload { + """GraphQL Subscription that was modified by this mutation""" + subscription: OneGraphAppSubscription! +} + +input OneGraphGraphQLSubscriptionUnsubscribeInput { + subscriptionId: String! +} + +type OneGraphGraphQLSubscriptionUnsubscribeResponsePayload { + """GraphQL Subscription that was modified by this mutation""" + subscription: OneGraphAppSubscription! +} + +input OneGraphDestroyServiceAuthInput { + serviceAuthId: String! + appId: String! +} + +type OneGraphDestroyServiceAuthResponsePayload { + """Service auth that was destroyed by this mutation""" + serviceAuth: OneGraphServiceAuth! + app: OneGraphApp! +} + +""" +Services OneGraph supports providing a custom clientId/clientSecret for. +""" +enum OneGraphCustomServiceAuthServiceEnum { + ADROLL + ASANA + BOX + CONTENTFUL + DEV_TO + DOCUSIGN + DRIBBBLE + DROPBOX + EGGHEADIO + EVENTIL + FACEBOOK + FIREBASE + GITHUB + GMAIL + GOOGLE + GOOGLE_ADS + GOOGLE_ANALYTICS + GOOGLE_CALENDAR + GOOGLE_COMPUTE + GOOGLE_DOCS + GOOGLE_SEARCH_CONSOLE + GOOGLE_TRANSLATE + HUBSPOT + INTERCOM + MAILCHIMP + MEETUP + NETLIFY + NOTION + PRODUCT_HUNT + QUICKBOOKS + SALESFORCE + SLACK + SPOTIFY + STRIPE + TRELLO + TWILIO + TWITTER + TWITCH_TV + YNAB + YOUTUBE + ZEIT + ZENDESK +} + +input OneGraphCreateServiceAuthInput { + """Custom cname for the custom OAuth client.""" + cname: String + + """Custom redirect URI.""" + customRedirectUri: String + + """ + Whether the user who created the token should be able to fetch it from OneGraph. Defaults to false. + """ + revealTokens: Boolean = false + + """Optional list of scopes to use for your app.""" + scopes: [String!] + + """App name for trello. Required to use custom Trello credentials.""" + trelloAppName: String + + """ + Developer token for the Google Ads api. This param is required for using custom OAuth credentials for Google Ads. + + A developer token from Google allows your app to connect to the Google Ads API. To retrieve your developer token, sign in to your Manager Account. You must be signed-in to a Google Ads Manager Account before continuing. + + Navigate to TOOLS & SETTINGS > SETUP > API Center. The API Center option will appear only for Google Ads Manager Accounts. + + If your developer token is pending approval, you can start developing immediately with the pending token you received during sign up, using a test manager account. + + Your pending developer token must be approved before using it with production Google Ads accounts. + """ + googleDeveloperToken: String + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + clientSecret: String! + clientId: String! + service: OneGraphCustomServiceAuthServiceEnum! + appId: String! +} + +type OneGraphCreateServiceAuthResponsePayload { + """Service auth that was created by this mutation""" + serviceAuth: OneGraphServiceAuth! + app: OneGraphApp! +} + +input OneGraphRemoveNetlifySiteFromAppCORSOriginsInput { + netlifySite: String! + appId: String! +} + +type OneGraphRemoveNetlifySiteFromAppCORSOriginsResponsePayload { + app: OneGraphApp! +} + +input OneGraphAddNetlifySiteToAppCORSOriginsInput { + netlifySite: String! + appId: String! +} + +type OneGraphAddNetlifySiteToAppCORSOriginsResponsePayload { + app: OneGraphApp! +} + +input OneGraphRemoveCustomCorsOriginFromAppInput { + customCorsOrigin: String! + appId: String! +} + +type OneGraphRemoveCustomCorsOriginFromAppResponsePayload { + app: OneGraphApp! +} + +input OneGraphRemoveCORSOriginFromAppInput { + corsOrigin: String! + appId: String! +} + +type OneGraphRemoveCORSOriginFromAppResponsePayload { + app: OneGraphApp! +} + +input OneGraphAddCORSOriginToAppInput { + corsOrigin: String! + appId: String! +} + +type OneGraphAddCORSOriginToAppResponsePayload { + app: OneGraphApp! +} + +input SetAppCORSOriginsData { + corsOrigins: [String!]! + appId: String! +} + +type SetAppCORSOriginsResponsePayload { + app: OneGraphApp! +} + +enum OneGraphQueryChainIfMissingEnum { + ERROR + ALLOW + SKIP +} + +enum OneGraphQueryChainIfListEnum { + FIRST + LAST + ALL + EACH +} + +input OneGraphQueryChainArgumentDependencyInput { + functionFromScript: String! + maxRecur: Int = 1 + ifMissing: OneGraphQueryChainIfMissingEnum + ifList: OneGraphQueryChainIfListEnum + fromRequestIds: [String!]! + name: String! +} + +input OneGraphQueryChainVariableInput { + value: JSON + name: String! +} + +input OneGraphQueryChainRequestInput { + argumentDependencies: [OneGraphQueryChainArgumentDependencyInput!] = [] + variables: [OneGraphQueryChainVariableInput!] = [] + + """The query to run. Must provide one of `query` or `operationName`.""" + query: String + + """ + The operationName of the query in the document to run. Must provide one of `query` or `operationName`. + """ + operationName: String + + """ + The id of the query. If you provide a script in the argument dependencies for a request that depends on this query, the data from this query will be provided as `{"$ID": query-result}`. This will typically be the same as the operation name, but could be different if your chain needs to use the same query in multiple requests. + """ + id: String! +} + +""" +Dependencies from npm. Only allows packages that don't have any dependencies of their own. Packages that rely on filesystem APIs may not work. Must provide the exact version string. +""" +input OneGraphQueryChainScriptDependencyInput { + """ + The package's version string, e.g. `4.17.21`. Only accepts exact version strings. + """ + version: String! + + """The name of the package, e.g. `lodash`.""" + name: String! +} + +input OneGraphQueryChainInput { + """ + If true, will copy errors from the `OneGraphQueryChainMutationResult.result` field to the top-level `errors` field. Defaults to true. + """ + liftErrors: Boolean = true + requests: [OneGraphQueryChainRequestInput!]! + scriptDependencies: [OneGraphQueryChainScriptDependencyInput!] + script: String +} + +type OneGraphQueryChainMutationArgumentDependencyError { + """The name of the error""" + name: String + + """The error message""" + message: String + + """The error stack, as a string""" + stackString: String +} + +type OneGraphQueryChainMutationArgumentDependencyConsoleLog { + """The log level, `debug`, `info`, `warn`, or `error`""" + level: String! + + """The log body.""" + body: [JSON!]! +} + +type OneGraphQueryChainMutationArgumentDependencyResult { + """The name of the argument dependency""" + name: String! + + """The return values of the argument dependency script.""" + returnValues: [JSON!] + + """Logs captured by calling `console.log` in the script.""" + logs: [OneGraphQueryChainMutationArgumentDependencyConsoleLog!]! + + """Error, if there was an error evaluating the script.""" + error: OneGraphQueryChainMutationArgumentDependencyError +} + +type OneGraphQueryChainRequest { + """The id of the request""" + id: String! +} + +type OneGraphQueryChainMutationResult { + """The request.""" + request: OneGraphQueryChainRequest! + + """Debug information for the argument dependencies""" + argumentDependencies: [OneGraphQueryChainMutationArgumentDependencyResult!]! + + """The result of the query""" + result: [JSON]! +} + +type OneGraphQueryChainMutationPayload { + results: [OneGraphQueryChainMutationResult!]! +} + +"""Tours for exploring OneGraph""" +enum OneGraphTourEnum { + DASHBOARD + QUERYCHAIN + AUTHGUARDIAN +} + +input OneGraphCompleteTourData { + tour: OneGraphTourEnum! +} + +type OneGraphCompleteTourResponsePayload { + me: Viewer! +} + +input OneGraphUnLinkOneGraphNodesInput { + """The `oneGraphId` for the end node""" + endNodeOneGraphId: String! + + """The `oneGraphId` for the start node""" + startNodeOneGraphId: String! +} + +type OneGraphUnLinkOneGraphNodesResponsePayload { + startNode: OneGraphNode + endNode: OneGraphNode +} + +input OneGraphLinkOneGraphNodesInput { + """The `oneGraphId` for the end node""" + endNodeOneGraphId: String! + + """The `oneGraphId` for the start node""" + startNodeOneGraphId: String! +} + +type OneGraphLinkOneGraphNodesResponsePayload { + startNode: OneGraphNode + endNode: OneGraphNode +} + +"""GraphQL types that support linking""" +enum OneGraphServiceLinkGraphQLTypeEnum { + GitHubIssue + GitHubIssueComment + GitHubUser + HubspotContact + IntercomUser + SalesforceAccount + SalesforceCase + SalesforceCaseComment + SalesforceContact + SalesforceFeedComment + SalesforceFeedItem + SalesforceLead + SalesforceUser + StripeCustomer + StripeRefund + ZendeskUser +} + +input OneGraphServiceLinkNodeArg { + id: String! + type: OneGraphServiceLinkGraphQLTypeEnum! +} + +input OneGraphCreateServiceLinkArg { + endNode: OneGraphServiceLinkNodeArg! + startNode: OneGraphServiceLinkNodeArg! +} + +type OneGraphServiceLinkNode { + type: String! + id: String! +} + +type OneGraphCreateServiceLinkResponsePayload { + startNode: OneGraphServiceLinkNode! + endNode: OneGraphServiceLinkNode! +} + +input OneGraphDangerouslySignJwtPayloadInput { + expiresInSeconds: Int = 300 + includeBaseFields: Boolean = true + payload: JSON! +} + +type OneGraphDangerouslySignJwtPayloadResponsePayload { + encoded: String! +} + +input OneGraphSetAppNetlifySiteNamesInput { + netlifySiteNames: [String!]! +} + +type OneGraphSetAppNetlifySiteNamesResponsePayload { + app: OneGraphApp! +} + +input OneGraphSetAuthGuardianActiveInput { + active: Boolean! +} + +type OneGraphSetAuthGuardianActiveResponsePayload { + app: OneGraphApp +} + +"""Signing algorithm for JWTs generated by Onegraph""" +enum OneGraphJwtSigningAlgorithmEnumArg { + HMAC_256 + RSA_256 +} + +input OneGraphSetJwtSigningAlgorithmAndSecretInput { + """ + When using symmetric (HMAC) algorithms, this is the shared secret OneGraph will use to sign the generated JSON web tokens. + """ + sharedSecret: String + + """ + When generating a JWT for SSO, OneGraph can sign the JSON tokens with either a shared-secret (symmetric) key (HMAC) or a public/private (asymmetric) key pair (RSA) + """ + signingAlgorithm: OneGraphJwtSigningAlgorithmEnumArg! +} + +type OneGraphSetJwtSigningAlgorithmAndSecretPayload { + app: OneGraphApp! +} + +input OneGraphSetJwtPreflightQueryAndWebhookUrlInput { + """ + An optional GraphQL query to run after a user has signed into any service. The result will be included in the body for the preflight webhook. You may want to use this to retrieve a user's Google subId, or a list of GitHub organization names a user belongs. + """ + preflightQuery: String + + """ + When generating a JWT for SSO using OneGraph to authenticate + with third-parties, you can run an optional GraphQL query and + send the result to a webhook for preprocessing before OneGraph + signs the final token and passes it to the client + """ + webhookUrl: String +} + +type OneGraphSetAppJwtPreflightQueryResponsePayload { + app: OneGraphApp! +} + +"""Mutations related to apps""" +type OneGraphAppMutations { + setCORSOrigins(corsOrigins: [String!]!): OneGraphApp! + setJwtPreflightQueryAndWebhookUrl(input: OneGraphSetJwtPreflightQueryAndWebhookUrlInput!): OneGraphSetAppJwtPreflightQueryResponsePayload + setJwtSigningAlgorithmAndSecret(input: OneGraphSetJwtSigningAlgorithmAndSecretInput!): OneGraphSetJwtSigningAlgorithmAndSecretPayload + setAuthGuardianActive(input: OneGraphSetAuthGuardianActiveInput!): OneGraphSetAuthGuardianActiveResponsePayload + setAuthGuardian(input: OneGraphSetAuthGuardianInput!): OneGraphSetAuthGuardianResponsePayload + setNetlifySiteNames(input: OneGraphSetAppNetlifySiteNamesInput!): OneGraphSetAppNetlifySiteNamesResponsePayload! + + """ + Use this when you need to generate a JWT (JSON web token) with a valid signature based on the JWT algorithm settings for your app. For example, you might want to test out a token within the Hasura console, on your Netlify site, or against your own GraphQL server without going through a full auth flow manually. + + By default these tokens will only be valid for 5 minutes (300 seconds). + + Note that these tokens will be signed and valid, and will be accepted *anywhere* you have configured. **Treat them as secure tokens and guard them!** + """ + dangerouslySignJwtPayload(input: OneGraphDangerouslySignJwtPayloadInput!): OneGraphDangerouslySignJwtPayloadResponsePayload +} + +"""Mutations for the currently authed user""" +type OneGraphMutation { + app(id: String!): OneGraphAppMutations @deprecated(reason: "Use setAppCORSOrigins") + createServiceLink(data: OneGraphCreateServiceLinkArg!): OneGraphCreateServiceLinkResponsePayload! + linkOneGraphNodes(input: OneGraphLinkOneGraphNodesInput!): OneGraphLinkOneGraphNodesResponsePayload! + unLinkOneGraphNodes(input: OneGraphUnLinkOneGraphNodesInput!): OneGraphUnLinkOneGraphNodesResponsePayload! + completeTour(data: OneGraphCompleteTourData!): OneGraphCompleteTourResponsePayload! + createApp( + """`id` of the organization that this app should belong to""" + orgId: String! + corsOrigins: [String!]! + description: String + name: String! + ): OneGraphApp! + executeChain(input: OneGraphQueryChainInput!): OneGraphQueryChainMutationPayload! + setAppCORSOrigins(data: SetAppCORSOriginsData!): SetAppCORSOriginsResponsePayload! + addCORSOriginToApp(input: OneGraphAddCORSOriginToAppInput!): OneGraphAddCORSOriginToAppResponsePayload! + removeCORSOriginFromApp(input: OneGraphRemoveCORSOriginFromAppInput!): OneGraphRemoveCORSOriginFromAppResponsePayload! + removeCustomCorsOriginFromApp(input: OneGraphRemoveCustomCorsOriginFromAppInput!): OneGraphRemoveCustomCorsOriginFromAppResponsePayload! + addNetlifySiteToAppCORSOrigins(input: OneGraphAddNetlifySiteToAppCORSOriginsInput!): OneGraphAddNetlifySiteToAppCORSOriginsResponsePayload! + removeNetlifySiteFromAppCORSOrigins(input: OneGraphRemoveNetlifySiteFromAppCORSOriginsInput!): OneGraphRemoveNetlifySiteFromAppCORSOriginsResponsePayload! + createServiceAuth(data: OneGraphCreateServiceAuthInput!): OneGraphCreateServiceAuthResponsePayload! + destroyServiceAuth(data: OneGraphDestroyServiceAuthInput!): OneGraphDestroyServiceAuthResponsePayload! + subscriptionUnsubscribe(data: OneGraphGraphQLSubscriptionUnsubscribeInput!): OneGraphGraphQLSubscriptionUnsubscribeResponsePayload! + updateSubscription(input: OneGraphGraphQLSubscriptionUpdateInput!): OneGraphGraphQLSubscriptionUpdateResponsePayload! + createPersonalToken(input: OneGraphCreatePersonalTokenInput!): OneGraphCreatePersonalTokenResponsePayload! + deletePersonalToken(input: OneGraphDeletePersonalTokenInput!): OneGraphDeletePersonalTokenResponsePayload! + addAuthsToPersonalToken(input: OneGraphAddAuthsToPersonalTokenInput!): OneGraphAddAuthsToPersonalTokenResponsePayload! + persistAuths(input: OneGraphPersistAuthsInput!): OneGraphPersistAuthsResponsePayload! + createShortenedUrl(input: OneGraphCreateShortenedUrlInput!): OneGraphShortenUrlResponsePayload! + createOrg(input: OneGraphCreateOrgInput!): OneGraphCreateOrgResponsePayload! + updateOrgById(input: OneGraphUpdateOrgByIdInput!): OneGraphUpdateOrgByIdResponsePayload! + updateAppById(input: OneGraphUpdateAppByIdInput!): OneGraphUpdateAppByIdResponsePayload! + enableDataVirtualization(input: OneGraphStartDataVirtualizationInput!): OneGraphStartDataVirtualizationPayload! + createPersistedQuery(input: OneGraphCreatePersistedQueryInput!): OneGraphPersistedQueryResponsePayload! + updatePersistedQuery(input: OneGraphUpdatePersistedQueryInput!): OneGraphUpdatedPersistedQueryResponsePayload! + createPersitQueryToken(input: OneGraphPersistedQueryTokenInput!): OneGraphCreatePersitQueryTokenResponsePayload! + deletePersistedQuery(input: OneGraphDeletePersistedQueryInput!): OneGraphDeletePersistedQueryResponsePayload! + evictCachedPersistedQueryResults(input: OneGraphEvictCachedPersistedQueryResultsInput!): OneGraphEvictCachedResultsResponsePayload! + + """ + Allows non-admin users to subscribe to GitHub events on OneGraph for the given repo and app. + """ + enableGitHubRepositorySubscriptionDelegation(input: OneGraphEnableGithubRepositorySubscriptionDelegationInput!): OneGraphEnableGithubRepositorySubscriptionDelegationResult! + + """ + Remove ability for non-admin users to subscribe to GitHub events on OneGraph for the given repo and app. + """ + disableGitHubRepositorySubscriptionDelegation(input: OneGraphDisableGithubRepositorySubscriptionDelegationInput!): OneGraphDisableGithubRepositorySubscriptionDelegationResult! + + """ + Remove ability for non-admin users to subscribe to GitHub events on OneGraph. Allows the owner of the app on OneGraph to remove delegation for a repo. + """ + disableGitHubRepositorySubscriptionDelegationById(input: OneGraphDisableGithubRepositorySubscriptionDelegationByIdInput!): OneGraphDisableGithubRepositorySubscriptionDelegationByIdResult! + enableAuthGuardianSlackIntegration(input: OneGraphEnableAuthGuardianSlackIntegrationInput!): OneGraphEnableAuthGuardianSlackIntegrationResponsePayload + disableAuthGuardianSlackIntegration(input: OneGraphDisableAuthGuardianSlackIntegrationInput!): OneGraphDisableAuthGuardianSlackIntegrationResponsePayload + destroyApp(id: String!): OneGraphApp + saveQuery(public: Boolean, enabled: Boolean, tags: [String!]!, description: String, name: String!, body: String!): OneGraphQuery! + updateQuery(public: Boolean, enabled: Boolean, tags: [String!], name: String, id: String!): OneGraphQuery + destroyQuery(version: String!, name: String!): OneGraphQuery! + signUp(agreeToTOS: Boolean!, passwordConfirm: String!, password: String!, email: String!, fullName: String!): OneGraphSignInResult! + signIn(rememberMe: Boolean!, password: String!, email: String!): OneGraphSignInResult! + agreeToTos(userAgreesToTheOneGraphTermsOfService: Boolean!): OneGraphUser! + signOut: OneGraphSignoutResponsePayload! + + """ + Revokes a OneGraph access token, refresh token, or JWT. After a token is destroyed, it can no longer be used to authenticate with OneGraph. + + If you destroy a JWT, external services that rely on the claims embedded in the JWT may still accept the JWT and you will also have to revoke the JWT though the external service's revocation process. + """ + destroyToken( + """Any OneGraph access token, refresh token, or JWT""" + token: String! + ): Boolean! + exchangeGitHubContextForOneGraphAccessToken: OneGraphSignInResult! + exchangeNetlifyContextForOneGraphAccessToken: OneGraphSignInResult! + exchangeZeitContextForOneGraphAccessToken: OneGraphSignInResult! + associateOneGraphUserWithGitHubAccount: OneGraphUser! + associateOneGraphUserWithNetlifyAccount: OneGraphUser! + requestPasswordReset(email: String!): String! + resetPassword(passwordConfirm: String!, password: String!, token: String!): Boolean! + enableGitHubAppWebhook(input: OneGraphEnableGitHubAppWebhookInput!): OneGraphEnableGitHubAppWebhookResponsePayload! + addExternalGraphQLSchema(input: OneGraphAddExternalGraphQLSchemaInput!): OneGraphAddExternalGraphQLSchemaPayload! + updateExternalGraphQLSchema(input: OneGraphUpdateExternalGraphQLSchemaInput!): OneGraphUpdateExternalGraphQLSchemaPayload! + removeExternalGraphQLSchema(input: OneGraphRemoveExternalGraphQLSchemaInput!): OneGraphRemoveExternalGraphQLSchemaPayload! + addPreviewSalesforceSchema(input: OneGraphAddPreviewSalesforceSchemaInput!): OneGraphAddPreviewSalesforceSchemaPayload! + promotePreviewSalesforceSchema(input: OneGraphPromotePreviewSalesforceSchemaInput!): OneGraphPromotePreviewSalesforceSchemaPayload! + addSalesforceSchema(input: OneGraphAddSalesforceSchemaInput!): OneGraphAddSalesforceSchemaPayload! + updateSalesforceSchema(input: OneGraphUpdateSalesforceSchemaInput!): OneGraphUpdateSalesforceSchemaPayload! + removeSalesforceSchema(input: OneGraphRemoveSalesforceSchemaInput!): OneGraphRemoveSalesforceSchemaPayload! + addPreviewSalesforceSchemaForSalesforceViewer: OneGraphAddPreviewSalesforceSchemaForSalesforceViewerPayload! + addGoogleSiteVerification(input: OneGraphAddGoogleSiteVerificationInput!): OneGraphAddGoogleSiteVerificationPayload! + removeGoogleSiteVerification(input: OneGraphRemoveGoogleSiteVerificationInput!): OneGraphRemoveGoogleSiteVerificationPayload! + addSlackEventWebhook(input: OneGraphAddSlackEventWebhookInput!): OneGraphAddSlackEventWebhookPayload! + setSlackEventWebhookAppToken(input: OneGraphSetSlackEventWebhookAppTokenInput!): OneGraphSetSlackEventWebhookAppTokenPayload! + setSlackEventWebhookSigningSecret(input: OneGraphSetSlackEventWebhookSigningSecretInput!): OneGraphSetSlackEventWebhookSigningSecretPayload! + removeSlackEventWebhook(input: OneGraphRemoveSlackEventWebhookInput!): OneGraphRemoveSlackEventWebhookPayload! + addExternalHoneycombConfig(input: OneGraphAddExternalHoneycombConfigInput!): OneGraphAddExternalHoneycombConfigPayload! + updateExternalHoneycombConfig(input: OneGraphUpdateExternalHoneycombConfigInput!): OneGraphUpdateExternalHoneycombConfigPayload! + removeExternalHoneycombConfig(input: OneGraphRemoveExternalHoneycombConfigInput!): OneGraphRemoveExternalHoneycombConfigPayload! + createEmptyAccessToken(input: OneGraphCreateEmptyAccessTokenInput!): OneGraphCreateEmptyAccessTokenPayload! + upsertAppForNetlifySite(input: OneGraphUpsertAppForNetlifySiteInput!): OneGraphUpsertAppForNetlifySiteResponsePayload! + + """Creates an empty personal token with a Netlify site anchor""" + createPersonalTokenWithNetlifySiteAnchor(input: OneGraphCreatePersonalTokenWithNetlifySiteAnchorInput!): OneGraphCreatePersonalTokenWithNetlifySiteAnchorResponsePayload! + createGraphQLSchema(input: OneGraphCreateGraphQLSchemaInput!): OneGraphCreateGraphQLSchemaResponsePayload! + createModifySchemaToken(input: OneGraphModifySchemaTokenInput!): OneGraphCreateModifySchemaTokenResponsePayload! + + """ + Acknowledge a set of netlify CLI events for a session. All events must be for the same session. + """ + ackNetlifyCliEvents(input: OneGraphAckNetlifyCliEventsInput!): OneGraphAckNetlifyCliEventsResponsePayload! + + """Create a new CLI session.""" + createNetlifyCliSession(input: OneGraphCreateNetlifyCliSessionInput!): OneGraphCreateNetlifyCliSessionResponsePayload! + + """Update a CLI session.""" + updateNetlifyCliSession(input: OneGraphUpdateNetlifyCliSessionInput!): OneGraphUpdateNetlifyCliSessionResponsePayload! + + """Delete a CLI session.""" + deleteNetlifyCliSession(input: OneGraphDeleteNetlifyCliSessionInput!): OneGraphDeleteNetlifyCliSessionResponsePayload! + createNetlifyCliLogEvent(input: OneGraphCreateNetlifyLogEvent!): OneGraphCreateNetlifyLogResponsePayload! + createNetlifyCliTestEvent(input: OneGraphCreateNetlifyTestEvent!): OneGraphCreateNetlifyTestResponsePayload! +} + +enum NpmPublishPackagAccessEnumArg { + """ + The package will only be visible to users with appropriate permissions (as decided by the registry). + """ + PRIVATE + + """The package will be publicly visible and installable by anyone.""" + PUBLIC +} + +enum NpmPublishPackageRegistryEnumArg { + """Publish to the npm registry""" + NPM + + """ + Publish to your GitHub package registry. Set your scope to the GitHub repository owner, and the name to repository name. For more info, see [GitHub's Package Repository](https://github.com/features/packages). + """ + GITHUB +} + +input OneGraphNpmPublishPackageFileArg { + contents: String! + path: String! +} + +input NpmPublishPackageInputArg { + """Whether the package is public or private.""" + access: NpmPublishPackagAccessEnumArg! + + """ + Which registry to publish to: npm, or a GitHub repository package repository. + """ + registry: NpmPublishPackageRegistryEnumArg + + """The list of files to include in the package""" + files: [OneGraphNpmPublishPackageFileArg!]! + + """ + package.json of your package. Must include `name` and `version` as strings fields at a minimum. + """ + packageJson: JSON! +} + +"""Results from running the publishPackage mutation""" +type NpmPublishPackageResult { + """ + Whether the package was successfully uploaded to npm. Note that due to the delay between uploading and indexing, you maybe have to wait until npm reflects the new version.OneGraphNpmPackage + + You can also use the `packagePublished` npm subscription to be notified when the new version of your package has been published. + """ + successfullyUploaded: Boolean +} + +"""The root for Npm mutations.""" +type NpmMutation { + """Publish a package to npm or GitHub package registry""" + publishPackage( + """Input for package publishing""" + input: NpmPublishPackageInputArg! + ): NpmPublishPackageResult +} + +type Mutation { + """The root for npm mutations""" + npm( + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): NpmMutation! + oneGraph( + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): OneGraphMutation! + testMutate(query: String!): Boolean! + signoutServiceUser(input: OneGraphSignoutServiceUserInput!): SignoutServicesResponsePayload! + signoutServices(data: SignoutServicesData!): SignoutServicesResponsePayload! +} + +type OneGraphNetlifyCliSession { + id: String! + appId: String! + netlifyUserId: String! + name: String + events( + """The number of events to fetch, maximum of 1000.""" + first: Int = 1000 + ): [OneGraphNetlifyCliSessionEvent!]! + createdAt: String! + lastEventAt: String + metadata: JSON +} + +type OneGraphNetlifyCliSessionLogEvent implements OneGraphNetlifyCliSessionEvent { + id: String! + sessionId: String! + createdAt: String! + message: String! +} + +type OneGraphNetlifyCliSessionTestEvent implements OneGraphNetlifyCliSessionEvent { + id: String! + sessionId: String! + createdAt: String! + payload: JSON! +} + +interface OneGraphNetlifyCliSessionEvent { + id: String! + sessionId: String! + createdAt: String! +} + +input OneGraphSetAuthGuardianRuleEffectHasuraSetSessionVariableInput { + value: OneGraphSetAuthGuardianRuleEffectJsonValueInput! + name: String! +} + +""" +Commonly used values for use in JWT generation, like GitHub email address or the current time. +""" +enum OneGraphAuthGuardianBuiltInValue { + CONTENTFUL_AVATAR_URL + CONTENTFUL_USER_ID + CONTENTFUL_EMAIL + EGGHEADIO_AVATAR_URL + EGGHEADIO_USER_ID + EGGHEADIO_EMAIL + EGGHEADIO_IS_PRO + EGGHEADIO_IS_INSTRUCTOR + EGGHEADIO_IS_COMMUNITY_MEMBER + GITHUB_AVATAR_URL + GITHUB_EMAIL + GITHUB_LOGIN + GITHUB_NAME + GITHUB_USER_ID + GITHUB_FULL_EMAILS + GMAIL_EMAIL + GMAIL_EMAIL_VERIFIED + GMAIL_USER_ID + LOGGED_IN_SERVICES + NETLIFY_AVATAR_URL + NETLIFY_EMAIL + NETLIFY_FULL_NAME + NETLIFY_USER_ID + NOW_SECONDS + NOW_MILLISECONDS + NOW_TIMESTAMP + SALESFORCE_EMAIL + SALESFORCE_USER_ID + SPOTIFY_EMAIL + SPOTIFY_USER_ID + STRIPE_ACCOUNT_ID + STRIPE_ACCOUNT_PRIMARY_EMAIL + TWITCH_TV_EMAIL + TWITCH_TV_DISPLAY_NAME + TWITCH_TV_LOGO_URL + TWITCH_TV_USER_ID + TWITTER_IS_VERIFIED + TWITTER_EMAIL + TWITTER_NAME + TWITTER_PROFILE_IMAGE_URL + TWITTER_SCREEN_NAME + TWITTER_USER_ID + VERCEL_AVATAR_URL + VERCEL_EMAIL + VERCEL_NAME + VERCEL_USER_ID +} + +input OneGraphSetAuthGuardianRuleEffectJsonValueInput { + json: String + builtInValue: OneGraphAuthGuardianBuiltInValue +} + +input OneGraphSetAuthGuardianRuleEffectSetValueInput { + value: OneGraphSetAuthGuardianRuleEffectJsonValueInput! + path: String! +} + +input OneGraphSetAuthGuardianRuleEffectInput { + onExpressJsAddPermissions: [String!] + onApolloServerAddRoles: [String!] + onNetlifyAddUserRoles: [String!] + onHasuraSetUserId: OneGraphSetAuthGuardianRuleEffectJsonValueInput + onHasuraSetDefaultRole: String + onHasuraSetSessionVariable: OneGraphSetAuthGuardianRuleEffectHasuraSetSessionVariableInput + onHasuraAddRoles: [String!] + inTheJsonAddToListAtPath: OneGraphSetAuthGuardianRuleEffectSetValueInput + inTheJsonRemoveValueAtPath: String + inTheJsonSetValueAtPath: OneGraphSetAuthGuardianRuleEffectSetValueInput +} + +input OneGraphSetAuthGuardianRuleConditionZeitInput { + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionTwitterInput { + hasTwitterVerifiedStatus: Boolean + screenName: OneGraphSetAuthGuardianRuleStringConditionInput + loginStatus: Boolean +} + +input OneGraphSetAuthGuardianRuleConditionTwitchTvInput { + loginStatus: Boolean + hasVerifiedEmail: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionStripeInput { + loginStatus: Boolean + hasAPrimaryAccountEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput + hasAnAccountIdThat: OneGraphSetAuthGuardianRuleStringConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionSpotifyInput { + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionSalesforceInput { + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionNetlifyInput { + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionGmailInput { + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionGitHubInput { + isCollaboratorOnRepositoryWhereFullName: String + isMemberOfOrganizationNamed: String + hasStarredARepositoryWithAFullNameOf: String + hasCommittedToRepositoryWithAFullNameOf: String + login: OneGraphSetAuthGuardianRuleStringConditionInput + loginStatus: Boolean + hasAnEmailThat: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionEggheadioInput { + isCommunityMember: Boolean + isInstructor: Boolean + isPro: Boolean + loggedIn: Boolean + email: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleStringConditionInput { + isEqualToCaseInsensitively: String + containsCaseInsensitively: String + endsWithCaseInsensitively: String + startsWithCaseInsensitively: String + isEqualTo: String + contains: String + endsWith: String + startsWith: String +} + +input OneGraphSetAuthGuardianRuleEmailConditionInput { + isEqualTo: String + hasADomainThat: OneGraphSetAuthGuardianRuleStringConditionInput + endsWith: String + startsWith: String +} + +input OneGraphSetAuthGuardianRuleConditionContentfulInput { + confirmed: Boolean + activated: Boolean + loggedIn: Boolean + email: OneGraphSetAuthGuardianRuleEmailConditionInput +} + +input OneGraphSetAuthGuardianRuleConditionInput { + vercel: OneGraphSetAuthGuardianRuleConditionZeitInput + twitter: OneGraphSetAuthGuardianRuleConditionTwitterInput + twitch: OneGraphSetAuthGuardianRuleConditionTwitchTvInput + stripe: OneGraphSetAuthGuardianRuleConditionStripeInput + spotify: OneGraphSetAuthGuardianRuleConditionSpotifyInput + salesforce: OneGraphSetAuthGuardianRuleConditionSalesforceInput + netlify: OneGraphSetAuthGuardianRuleConditionNetlifyInput + gmail: OneGraphSetAuthGuardianRuleConditionGmailInput + gitHub: OneGraphSetAuthGuardianRuleConditionGitHubInput + eggheadio: OneGraphSetAuthGuardianRuleConditionEggheadioInput + contentful: OneGraphSetAuthGuardianRuleConditionContentfulInput + always: Boolean +} + +input OneGraphSetAuthGuardianRuleInput { + effects: [OneGraphSetAuthGuardianRuleEffectInput!]! + conditions: [OneGraphSetAuthGuardianRuleConditionInput!]! +} + +input OneGraphSetAuthGuardianInput { + rules: [OneGraphSetAuthGuardianRuleInput!]! +} + +type OneGraphSetAuthGuardianResponsePayload { + javascript: String + graphQL: String + jwt: String + rules: JSON +} + +"""A OneGraph Server Info""" +type OneGraphServerInfo { + """""" + sha: String! + + """""" + buildNumber: Int! +} + +"""Customizations to a OneGraph schema.""" +type OneGraphGraphQLSchema { + id: String! + appId: String! + parentGraphQLSchemaId: String + parentGraphQLSchema: OneGraphGraphQLSchema + services: [OneGraphServiceInfo!]! + salesforceSchema: OneGraphSalesforceSchema + + """External GraphQL schemas for the schema.""" + externalGraphQLSchemas: OneGraphExternalGraphQLSchemaConnection! + createdAt: String! + updatedAt: String! +} + +enum OneGraphExternalHoneycombConfigDatasetMetricTypeEnum { + API_CALL + SUBSCRIPTION_DELIVERY +} + +type OneGraphExternalHoneycombConfigDataset { + """The metric type.""" + metricType: OneGraphExternalHoneycombConfigDatasetMetricTypeEnum! + + """The name of the dataset in Honeycomb.""" + datasetName: String! +} + +type OneGraphExternalHoneycombConfig { + """Id of the app that the external Honeycomb config belongs to.""" + appId: String! + + """The datetime that the Honecomb config was added, in rfc3339 format.""" + createdAt: String! + + """ + The datetime that the Honeycomb config was last updated, in rfc3339 format. + """ + updatedAt: String! + + """The Honeycomb API token that OneGraph will use to send events.""" + obfuscatedToken: String! + + """If `true`, OneGraph will send events to Honeycomb.""" + active: Boolean! + + """The last error we received while sending events to the Honeycomb API.""" + lastError: String + + """User-provided dataset names""" + datasets: [OneGraphExternalHoneycombConfigDataset!]! +} + +type OneGraphGoogleSiteVerification { + """The root path that this will be served at.""" + path: String! + + """The content that will be served at the path.""" + body: String! +} + +type OneGraphSalesforceSchema { + """Id of the salesforce schema""" + id: String! + + """The id of the OneGraph app that the salesforce schema belongs to.""" + appId: String! + + """The datetime that the schema was added, in rfc3339 format.""" + createdAt: String! + + """The datetime that the schema was last updated, in rfc3339 format.""" + updatedAt: String! + + """Salesforce instanceUrl""" + instanceUrl: String! + + """Salesforce Organization ID""" + salesforceOrgId: String + + """Whether this is a preview of a change to a Salesforce schema.""" + isPreview: Boolean! + + """The previous salesforce schema, if there was one.""" + previousSalesforceSchema: OneGraphSalesforceSchema +} + +enum OneGraphSupportedExternalGraphQLService { + GRAPHCMS + WORDPRESS +} + +type OneGraphExternalGraphQLSchema { + """Id of the external graphql schema""" + id: String! + + """The datetime that the schema was added, in rfc3339 format.""" + createdAt: String! + + """The datetime that the schema was last updated, in rfc3339 format.""" + updatedAt: String! + + """Service of the external graphql schema""" + service: OneGraphSupportedExternalGraphQLService! + + """GraphQL endpoint of the external graphql schema""" + endpoint: String! +} + +type OneGraphExternalGraphQLSchemaConnection { + nodes: [OneGraphExternalGraphQLSchema!]! +} + +type OneGraphGithubRepositorySubscriptionDelegate { + id: String! + + """Name with owner (e.g. onegraph/graphiql-exporer) of the GitHub repo.""" + nameWithOwner: String! + + """ + Datetime that the repo was set up to allow non-admin subscriptions (rfc3339 encoded) + """ + createdAt: String! +} + +type OneGraphGithubRepositorySubscriptionDelegateConnection { + nodes: [OneGraphGithubRepositorySubscriptionDelegate!]! +} + +"""Persisted query""" +type OneGraphPersistedQuery { + """The persisted query's id.""" + id: String! + + """The persisted query's query string.""" + query: String! + + """The default variables provided to the query.""" + fixedVariables: JSON + + """ + The list of variables that the caller of the query is allowed to provide. + """ + freeVariables: [String!] + + """ + The list of operation names that the caller of the query is allowed to execute. If the field is null, then all operationNames are allowed. + """ + allowedOperationNames: [String!] + + """The list of user-defined tags that were added to the query""" + tags: [String!] + + """The user-defined description that was added to the query""" + description: String + + """The parent of this query, if it has one.""" + parent: OneGraphPersistedQuery +} + +"""List of persisted queries.""" +type OneGraphPersistedQueryConnection { + """List of persisted queries.""" + nodes: [OneGraphPersistedQuery!]! + + """Pagination information""" + pageInfo: PageInfo! +} + +"""A custom cors origin""" +type OneGraphCustomCorsOrigin { + """The friendly service name for the cors origin""" + friendlyServiceName: String! + + """ + The name of the origin that should be displayed, e.g. oneblog for oneblog.netlify.app. + """ + displayName: String! + + """The encoded value as a string, used to remove the custom cors origin.""" + encodedValue: String! +} + +type OneGraphAppAuthCompletedLog implements OneGraphAppLog { + """ + Noted whenever an end-user has completed a login for a service when using this app + """ + service: String! + friendlyName: String! + + """The user id according to the service they logged into""" + serviceUserId: String + + """The id of the log""" + id: String! + + """The time of the log, encoded as rfc3339""" + createdAt: String! + + """JSON data encoded as a string for this specific event""" + jsonData(pretty: Boolean = false): String! +} + +type OneGraphAppLogJwtWebhookFailed implements OneGraphAppLog { + """ + The destination webhook where we tried to deliver the JWT for preprocessing when it failed + """ + destination: String! + + """The numeric HTTP status code we received from the webhook (if any)""" + responseStatusCode: Int + + """The textual responseBody we received from the webhook (if any)""" + responseBody: String + friendlyName: String! + + """The id of the log""" + id: String! + + """The time of the log, encoded as rfc3339""" + createdAt: String! + + """JSON data encoded as a string for this specific event""" + jsonData(pretty: Boolean = false): String! +} + +type OneGraphAppLogSubscriptionDeliveryFailed implements OneGraphAppLog { + """The subscription for the failed delivery attempt""" + subscription: OneGraphAppSubscription + + """The attempt number for delivering this subscription payload""" + attempt: Int! + friendlyName: String! + + """The id of the log""" + id: String! + + """The time of the log, encoded as rfc3339""" + createdAt: String! + + """JSON data encoded as a string for this specific event""" + jsonData(pretty: Boolean = false): String! +} + +interface OneGraphAppLog { + id: String! + createdAt: String! + friendlyName: String! + jsonData(pretty: Boolean = false): String +} + +type OneGraphAppLogConnection { + """Applogs""" + nodes: [OneGraphAppLog!]! +} + +"""An RSA public key used for signing JWTs""" +type OneGraphAppJwtRsaPublicKey { + """The algorithm associated with this public key""" + algorithm: String! + + """The n of the rsa key""" + n: String! + + """The exponent of the rsa key""" + e: String! +} + +"""An HMAC key used for signing JWTs""" +type OneGraphJwtSigningKeyHmac256 implements OneGraphJwtSigningKey { + """The algorithm associated with this public key""" + algorithm: OneGraphJwtSigningAlgorithmEnum! + + """The algorithm associated with this public key""" + family: OneGraphSigningAlgorithmFamilyEnum! + + """The shared secret for this key (if any)""" + sharedSecret: String +} + +"""Signing algorithm for JWTs generated by Onegraph""" +enum OneGraphJwtSigningAlgorithmEnum { + HMAC_256 + RSA_256 +} + +"""The family of Signing algorithms""" +enum OneGraphSigningAlgorithmFamilyEnum { + SYMMETRIC + ASYMMETRIC +} + +"""An RSA public key used for signing JWTs""" +type OneGraphJwtSigningKeyRsa256 implements OneGraphJwtSigningKey { + """The algorithm associated with this public key""" + family: OneGraphSigningAlgorithmFamilyEnum! + + """The algorithm associated with this public key""" + algorithm: OneGraphJwtSigningAlgorithmEnum! +} + +interface OneGraphJwtSigningKey { + """The family of algorithms used for this key""" + family: OneGraphSigningAlgorithmFamilyEnum! + + """The algorithm associated with this key""" + algorithm: OneGraphJwtSigningAlgorithmEnum! +} + +"""The method of generating JWTs""" +enum OneGraphAppJwtGenerationMethodEnum { + MANUAL + AUTH_BUILDER +} + +"""JWT settings for the app, useful for SSO.""" +type OneGraphAppJwtSettings { + """A query to run on every user log in to use in generating the JWT token""" + jwtPreflightQuery: String + + """ + An optional webhook to use for generating the full JWT. Use this and `jwtPreflightQuery` to customize claims. Very useful when used alongside e.g. Hasura or PostGraphile + """ + jwtWebhookUrl: String + + """ + Whether this app is generating JWTs on login via a manual query/webhook combination, or using OneGraph's AuthGuardian + """ + jwtGenerationMethod: OneGraphAppJwtGenerationMethodEnum! + + """ + The rules this app is configured to use when generating JWTs on user login + """ + jwtAuthGuardianRules: JSON + + """The current key used to sign JWTs generated for this app""" + activeKey: OneGraphJwtSigningKey + + """List of the public keys for an app""" + publicKeys: [OneGraphAppJwtRsaPublicKey!] + + """The full JWT configuration for Hasura""" + hasuraConfig: String + + """ + The public well-known JWK url of where to look for public keys when verifying JWT for this app + """ + jwksUrl: String! +} + +"""Status of the subscription""" +enum OneGraphAppSubscriptionsStatusEnumArg { + ACTIVE + INACTIVE +} + +enum OneGraphAppSubscriptionPayloadDeliveryStatus { + WAITING + DELIVERING + DELIVERED + FAILED +} + +"""Payload for a subscription created by the app""" +type OneGraphAppSubscriptionPayload { + """Unique id for the payload.""" + id: String! + + """ + Body of the payload or null if the payload is expired. This is the full body of the GraphQL payload, including the `data`, `errors`, and `extensions` fields as JSON. + """ + body: JSON! + + """ + `true` if the payload body has been deleted. Payload bodies will expire after 1 year. + """ + isExpired: Boolean! + + """ + The time that this payload was created, in rfc3339 format e.g. `2021-03-24T23:35:03-00:00` + """ + createdAt: String! + + """ + The delivery status of a subscription, if the subscription has a destination. + """ + deliveryStatus: OneGraphAppSubscriptionPayloadDeliveryStatus! + + """The number of times we attempted to deliver the payload.""" + deliveryAttempts: Int! + + """ + The last time we attempted to deliver the payload, in rfc3339 format e.g. `2021-03-24T23:35:03-00:00` + """ + lastDeliveryAttempt: String + + """ + The status code we received from the webhook destination the last time we attempted to deliver the payload. This field will be null for Websocket and Retain-only subscriptions. + """ + lastStatusCode: Int + + """ + If there was an error delivering the payload to a webhook destination, this field will contain the first 512 bytes of the response we receieved from the server. + """ + lastError: String +} + +"""Payloads for a subscription""" +type OneGraphAppSubscriptionPayloadsConnection { + """List of subscription payloads""" + nodes: [OneGraphAppSubscriptionPayload!]! +} + +scalar JSON + +"""Webhook destination for a OneGraph subscription""" +type OneGraphAppSubscriptionWebhookDestination { + """Url that the webhook will deliver payloads to.""" + url: String! +} + +"""Websocket destination for a OneGraph subscription""" +type OneGraphAppSubscriptionWebsocketDestination { + """The client-side id for the subscription.""" + clientId: String! +} + +""" +Destination for a OneGraph subscription that is only retained and not delivered. +""" +type OneGraphAppSubscriptionRetainedOnlyDestination { + retainedOnly: Boolean! +} + +union OneGraphAppSubscriptionDestination = OneGraphAppSubscriptionRetainedOnlyDestination | OneGraphAppSubscriptionWebsocketDestination | OneGraphAppSubscriptionWebhookDestination + +"""Information about a subscription to Salesforce.""" +type OneGraphSalesforceSubscriptionInfo { + """ + The Id of the Salesforce Organization that this subscription is subscription to + """ + organizationId: String! +} + +"""Information about a subscription to gmail.""" +type OneGraphGmailWatch { + """Email address that is being watched.""" + emailAddress: String! +} + +"""Subscription created by the app""" +type OneGraphAppSubscription { + """Unique id for the subscription.""" + id: String! + + """Status of the subscription.""" + status: String! + + """Query that the subscription run.""" + query: String! + + """ + If this is a subscription to Gmail, contains extra information about the Gmail subscription + """ + gmailWatch: OneGraphGmailWatch + + """ + If this is a subscription to Salesforce, contains extra information about the Salesforce subscription + """ + salesforceInfo: OneGraphSalesforceSubscriptionInfo + + """Destination for the subscription payloads""" + destination: OneGraphAppSubscriptionDestination! + + """Reason why this subscription can't be updated if it can't be updated.""" + updatesUnsupportedReason: String + + """The variables that this query was saved with.""" + requestVariables: JSON + + """ + The time that this subscription was created, in rfc3339 format e.g. `2021-03-24T23:35:03-00:00` + """ + createdAt: String! + + """ + Whether this subscription retains payloads. Payloads are available through the `payload` field on the subscription. + """ + retainPayloads: Boolean! + + """ + Latest payloads for a subscription, if the subscription was created with `retainPayloads` set to true. + """ + payloads( + """Number of payloads to fetch. Defaults to 20, maximum is 100.""" + first: Int = 20 + ): OneGraphAppSubscriptionPayloadsConnection +} + +"""Information about pagination in a connection.""" +type PageInfo { + """When paginating forwards, are there more items?""" + hasNextPage: Boolean! + + """When paginating backwards, are there more items?""" + hasPreviousPage: Boolean! + + """When paginating backwards, the cursor to continue.""" + startCursor: String + + """When paginating forwards, the cursor to continue.""" + endCursor: String +} + +""" +Subscriptions created by the app, with extra information about pagination. +""" +type OneGraphAppSubscriptionsConnection { + """Pagination information.""" + pageInfo: PageInfo! + + """List of subscriptions created by the app.""" + nodes: [OneGraphAppSubscription!]! +} + +"""Custom OAuth client for Adroll""" +type OneGraphAdrollServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Asana""" +type OneGraphAsanaServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Box""" +type OneGraphBoxServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Contentful""" +type OneGraphContentfulServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Dev.to""" +type OneGraphDevToServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Docusign""" +type OneGraphDocusignServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Dribbble""" +type OneGraphDribbbleServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Dropbox""" +type OneGraphDropboxServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Egghead.io""" +type OneGraphEggheadioServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Eventil""" +type OneGraphEventilServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Facebook""" +type OneGraphFacebookServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Firebase""" +type OneGraphFirebaseServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +type OneGraphGitHubAppWebhook { + signingSecret: String! + webhookUrl: String! +} + +"""Custom OAuth client for GitHub""" +type OneGraphGitHubServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String + gitHubAppWebhook: OneGraphGitHubAppWebhook +} + +"""Custom OAuth client for Gmail""" +type OneGraphGmailServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google""" +type OneGraphGoogleServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Ads""" +type OneGraphGoogleAdsServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Analytics""" +type OneGraphGoogleAnalyticsServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Calendar""" +type OneGraphGoogleCalendarServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Compute""" +type OneGraphGoogleComputeServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Docs""" +type OneGraphGoogleDocsServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Search Console""" +type OneGraphGoogleSearchConsoleServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Google Translate""" +type OneGraphGoogleTranslateServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Hubspot""" +type OneGraphHubspotServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Intercom""" +type OneGraphIntercomServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Mailchimp""" +type OneGraphMailchimpServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Meetup""" +type OneGraphMeetupServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Netlify""" +type OneGraphNetlifyServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Notion""" +type OneGraphNotionServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Product Hunt""" +type OneGraphProductHuntServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for QuickBooks""" +type OneGraphQuickbooksServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Salesforce""" +type OneGraphSalesforceServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Slack Event Webhook for an app.""" +type OneGraphSlackEventWebhook { + """Unique identifier.""" + id: String! + + """Custom OAuth service id.""" + serviceAuthId: String! + + """ + The webhook url that should be set as the request url for your Slack app. + """ + webhookUrl: String! + + """ + Last time that the webhook was verified by Slack, encoded as an []rfc3339](https://tools.ietf.org/html/rfc3339) string. For example: `1985-04-12T23:20:50-00:00``. + """ + verifiedAt: String + + """ + Date that the webhook was created, encoded as an []rfc3339](https://tools.ietf.org/html/rfc3339) string. For example: `1985-04-12T23:20:50-00:00``. + """ + createdAt: String! + + """The signing secret, masked.""" + maskedSigningSecret: String + + """The app token, masked.""" + maskedAppToken: String +} + +"""Custom OAuth client for Slack""" +type OneGraphSlackServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String + slackEventWebhook: OneGraphSlackEventWebhook +} + +"""Custom OAuth client for Spotify""" +type OneGraphSpotifyServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Stripe""" +type OneGraphStripeServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Trello""" +type OneGraphTrelloServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Twilio""" +type OneGraphTwilioServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Twitter""" +type OneGraphTwitterServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Twitch""" +type OneGraphTwitchTvServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for You Need a Budget""" +type OneGraphYnabServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for YouTube""" +type OneGraphYoutubeServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Vercel""" +type OneGraphZeitServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for Zendesk""" +type OneGraphZendeskServiceAuth implements OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""Custom OAuth client for a service""" +interface OneGraphServiceAuth { + """id for the service auth""" + id: String! + + """ + The service that the clientId and clientSecret belong to, e.g. "gmail" + """ + service: String! + + """clientId for the serviceAuth.""" + clientId: String! + + """clientSecret for the serviceAuth.""" + clientSecret: String! + + """ + Optional pubsub topic for gmail auth. Required to use gmail subscriptions with custom OAuth credentials. + """ + gmailWatchPubSubTopic: String + + """ + Developer token for the Google Ads api. Required to use the Google Ads api. + """ + googleDeveloperToken: String + + """ + App name for Trello OAuth client. This is the name that will be displayed on the OAuth login form. + """ + trelloAppName: String + + """Optional scopes to use for the OAuth flow.""" + scopes: [String!] + + """ + If true, the bearer token that is created fetchable by the user whose account the token grants access to. + """ + revealTokens: Boolean! + + """Custom OAuth redirect URI.""" + customRedirectUri: String + + """Custom CNAME host.""" + cname: String +} + +"""A OneGraph Org""" +type OneGraphOrg { + """The id of the OneGraph Org""" + id: String! + + """The name of the OneGraph Org""" + name: String! + + """All OneGraph apps belonging to this organization""" + apps: [OneGraphApp!]! +} + +"""A OneGraph App""" +type OneGraphApp { + """The id of the OneGraph App""" + id: String! + + """The description of the OneGraph App""" + description: String! + + """The subdomain of the OneGraph App""" + subdomain: String! + + """The name of the OneGraph App""" + name: String! + + """The origins allowed for this OneGraph App from CORS requests""" + corsOrigins: [String!]! + + """The id of the OneGraph organization that this app belongs to""" + orgId: String! + + """The OneGraph organization that this app belongs to""" + org: OneGraphOrg + + """The queries belonging to this OneGraph app""" + queries: [OneGraphQuery!]! + + """ + The custom clientId/clientSecret that have been set for services (e.g. Gmail and Slack) that belong to this OneGraph app + """ + serviceAuths: [OneGraphServiceAuth!]! + + """Subscriptions created with this app""" + subscriptions( + """ + Fiter by the Subscription's Salesforce organization Id, if the subscription is to a change in Salesforce.. + """ + salesforceOrganizationId: String + + """ + Fiter by the Subscription's webhook url, if the destination is a webhook. + """ + webhookUrl: String + + """Fiter by status of the subscription""" + status: OneGraphAppSubscriptionsStatusEnumArg + + """Fetch items in the list after the specified cursor""" + after: String + + """How many subsriptions to fetch""" + first: Int = 25 + ): OneGraphAppSubscriptionsConnection! + + """The JWT settings for this app""" + jwtSettings: OneGraphAppJwtSettings! + + """Activity related to this app""" + auditLogs( + """ + How many log items to pull from the front of the collection, maximum of `250` + """ + first: Int = 10 + ): OneGraphAppLogConnection! + + """ + Sites on Netlify associated with this app. OneGraph will allow CORS and authentication redirects to all previews, branch, and production deploys of these sites. + """ + netlifySiteNames: [String!]! + + """Custom cors origins""" + customCorsOrigins: [OneGraphCustomCorsOrigin!]! + + """List of persisted queries for this app""" + persistedQueries( + """Only return persisted queries that have all of the provided tags.""" + tags: [String!] + + """Returns results after the provided cursor.""" + after: String + + """How many persisted queries to return. Defaults to 10, max 100.""" + first: Int = 10 + ): OneGraphPersistedQueryConnection! + + """GitHub repos for the app that can have subscriptions on OneGraph.""" + gitHubRepositorySubscriptionDelegates: OneGraphGithubRepositorySubscriptionDelegateConnection! + + """The Slack channel for AuthGuardian to post into upon user sign-in""" + authGuardianSlackChannel: String + + """Whether the AuthGuardian Slack integration is enabled""" + authGuardianSlackIntegrationEnabled: Boolean! + + """External GraphQL schemas for the app.""" + externalGraphQLSchemas: OneGraphExternalGraphQLSchemaConnection! + + """Custom Salesforce schema for the app.""" + salesforceSchema: OneGraphSalesforceSchema + + """ + The domain that must be authorized to receive push notifications from Google for Google Calendar subscriptions. + """ + googleAuthorizedDomain: String! + + """Google Site Verification for the app""" + googleSiteVerification: OneGraphGoogleSiteVerification + + """External Honeycomb config for the app""" + externalHoneycombConfig: OneGraphExternalHoneycombConfig + + """Customizations to the default GraphQL schema""" + graphQLSchema: OneGraphGraphQLSchema +} + +"""A query stored in Onegraph""" +type OneGraphQuery { + """The id of the GraphQL query""" + id: String! + + """The id of the app that this GraphQL query belongs to""" + appId: String! + + """ + Whether a GraphQL query is globally enabled/disabled. Note that even if the query is enabled, a corresponding auth_token must share a tag with this query to use it. + """ + enabled: Boolean! + + """ + Whether a GraphQL query is shared and publicly viewable, including all of its meta-information. + """ + public: Boolean! + + """The version (currently a hash of the body) of the GraphQL query""" + version: String! + + """The body of the GraphQL query""" + body: String! + + """The name of the GraphQL query""" + name: String! + + """An optional description of the GraphQL query""" + description: String + + """The tags (for permissions and organization) of the GraphQL query""" + tags: [String!]! + + """What time this query was created""" + createdAtTs: String! + + """What time this query was created in milliseconds from the epoch""" + createdAtMs: Int! +} + +"""A query stored in OneGraph in shortened form for easy sharing""" +type OneGraphShortenedQuery { + """The id of the shortened OneGraph query""" + id: String! + + """The full query body of the shortened OneGraph query""" + query: String! + + """The variables of the shortened OneGraph query""" + variables: String + + """The pre-selected operation of the shortened OneGraph query""" + operation: String + + """An optional description of the purpose of the query""" + description: String + + """The optional short name for the shortened OneGraph query""" + name: String + + """ + The fully-qualified url for the shortened OneGraph query, used for sharing + """ + url: String! +} + +input OneGraphServiceInfoFilter { + """Filter for services that support custom service auth""" + supportsCustomServiceAuth: Boolean + + """Filter for services that support OAuth login""" + supportsOauthLogin: Boolean +} + +""" +Root fields for the OneGraph service. Used by OneGraph to build OneGraph. +""" +type OneGraphServiceQuery { + services(filter: OneGraphServiceInfoFilter): [OneGraphServiceInfo!]! + shortenedUrl(id: String!): OneGraphShortenedQuery + queries: [OneGraphQuery!]! + searchQueries(query: String!): [OneGraphQuery!]! + apps: [OneGraphApp!]! + app( + """App id""" + id: String! + ): OneGraphApp! + orgs: [OneGraphOrg!]! + org( + """Org id""" + id: String! + ): OneGraphOrg! + serverInfo: OneGraphServerInfo! + authGuardianPreview(input: OneGraphSetAuthGuardianInput!): OneGraphSetAuthGuardianResponsePayload + + """ + An identity function. The field will return whatever is provided as the input. + """ + identity( + """The input that should be returned.""" + input: JSON + ): JSON + + """A graphql subscription.""" + graphQLSubscription( + """The unique id for the app.""" + appId: String! + + """The unique id for the subscription.""" + id: String! + ): OneGraphAppSubscription + + """Fetch a single persisted query by its id.""" + persistedQuery( + """The id of the app that the persisted query belongs to.""" + appId: String! + + """The id of the persisted query.""" + id: String! + ): OneGraphPersistedQuery! + + """Find a GraphQL schema by its id.""" + graphQLSchema( + """The id of the app that the GraphQL schema belongs to.""" + appId: String! + + """The id of the GraphQL schema.""" + id: String! + ): OneGraphGraphQLSchema! + netlifyCliEvents( + """The number of events to fetch. The maximum is 1000.""" + first: Int = 1000 + sessionId: String! + ): [OneGraphNetlifyCliSessionEvent!]! + + """Netlify CLI sessions, orderd by createdAt descending.""" + netlifyCliSessionsByAppId( + """The number of sessions to fetch. The maximum is 10.""" + first: Int = 10 + appId: String! + ): [OneGraphNetlifyCliSession!]! + + """Get a Netlify CLI session by its id.""" + netlifyCliSession(id: String!): OneGraphNetlifyCliSession! +} + +"""Download data for npm overall""" +type NpmOverallDownloadPeriodData { + """The start date of download stats""" + start: String! + + """The end date of download stats""" + end: String! + + """ + The download stats for all over npm for the given range. Check out explanation of how [npm download counts work](http://blog.npmjs.org/post/92574016600/numeric-precision-matters-how-npm-download-counts), including "what counts as a download?" + """ + count: Int! + + """ + "Download data for all of npm for a given period in a daily breakdown" + """ + perDay: [NpmDownloadsPerDay!]! +} + +"""Information about download stats related to a package""" +type NpmOverallDownloadData { + """The download status for all of npm over the last day""" + lastDay: NpmOverallDownloadPeriodData + + """The download status for all of npm over the last week""" + lastWeek: NpmOverallDownloadPeriodData + + """The download status for all of npm over the last month""" + lastMonth: NpmOverallDownloadPeriodData + + """The download status for all of npm for a specific period""" + period( + """ + The later date for download stats, e.g. 2018-12-07. Must be after `startDate` + """ + endDate: String! + + """ + The earlier date for download stats, e.g. 2018-12-06. Must be before `endDate` + """ + startDate: String! + ): NpmOverallDownloadPeriodData + + """The download status for all of npm for a specific day""" + day( + """The specific date for download stats, e.g. 2018-12-06""" + date: String! + ): NpmOverallDownloadPeriodData +} + +type NpmPackageMetadataDistTagEntry { + """The name of the tag""" + tag: String! + + """The version as a string for this tag""" + versionString: String! + + """The full version for this tag""" + version: NpmPackageVersion +} + +type NpmPackageMetadataDistTagLatestEntry { + """The version as a string for this tag""" + versionString: String + + """The full version for the `latest` tag""" + version: NpmPackageVersion +} + +""" +Tags can be used to provide an alias instead of version numbers. For example, a project might choose to have multiple streams of development and use a different tag for each stream, e.g., stable, beta, dev, canary. +""" +type NpmPackageDistTags { + """ + By default, the latest tag is used by npm to identify the current version of a package + """ + latest: NpmPackageMetadataDistTagLatestEntry + + """Any custom tags used by the package maintainers""" + custom: [NpmPackageMetadataDistTagEntry!]! +} + +type NpmDownloadsPerDay { + """The download count""" + count: Int + + """""" + day: String +} + +"""Download data for a given package""" +type NpmPackageDownloadPeriodData { + """The start date of download stats""" + start: String! + + """The end date of download stats""" + end: String! + + """ + The download stats for the given package and range. Check out explanation of how [npm download counts work](http://blog.npmjs.org/post/92574016600/numeric-precision-matters-how-npm-download-counts), including "what counts as a download?" + """ + count: Int! + + """ + "Download data for this package and period in a daily breakdown" + """ + perDay: [NpmDownloadsPerDay!]! +} + +"""Information about download stats related to a package""" +type NpmPackageDownloadData { + """The download status for this package over the last day""" + lastDay: NpmPackageDownloadPeriodData + + """The download status for this package over the last week""" + lastWeek: NpmPackageDownloadPeriodData + + """The download status for this package over the last month""" + lastMonth: NpmPackageDownloadPeriodData + + """The download status for this package for a specific period""" + period( + """ + The later date for download stats, e.g. 2018-12-07. Must be after `startDate` + """ + endDate: String! + + """ + The earlier date for download stats, e.g. 2018-12-06. Must be before `endDate` + """ + startDate: String! + ): NpmPackageDownloadPeriodData + + """The download status for this package for a specific day""" + day( + """The specific date for download stats, e.g. 2018-12-06""" + date: String! + ): NpmPackageDownloadPeriodData +} + +"""A npm package license""" +type NpmPackageLicense { + """ + The [SPDX identifier](https://spdx.org/licenses/) of the package's license + """ + type: String + + """A url for the full license""" + url: String +} + +""" +A mapping of other packages this version depends on to the required semver ranges +""" +type NpmPackageVersionDependency { + """The package name of the dependency""" + name: String + + """The version of the package dependency""" + version: String +} + +"""The dist object is generated by npm and may be relied upon""" +type NpmPackageDist { + """""" + tarball: String + + """""" + shasum: String +} + +"""A npm package version""" +type NpmPackageVersion { + """ + `true` if this version is known to have a shrinkwrap that must be used to install it; false if this version is known not to have a shrinkwrap. If this field is undefined, the client must determine through other means if a shrinkwrap exists. + """ + hasShrinkwrap: Boolean + + """""" + from: String + + """`package@version`, such as `npm@1.0.0`""" + id: String + + """The version of node used to publish this""" + nodeVersion: String + + """The version of the npm client used to publish this""" + npmVersion: String + + """The dist object is generated by npm and may be relied upon.""" + dist: NpmPackageDist + + """The SHA-1 sum of the tarball""" + shasum: String + + """A short description of the package at this version""" + description: String + + """The package's entry point (e.g., `index.js` or `main.js`)""" + main: String + + """The package name""" + name: String + + """Deprecation warnings message of this version""" + deprecated: String + + """The version string for this version""" + version: String + + """""" + maintainers: [NpmPackageMaintainer!] + + """ + A mapping of other packages this version depends on to the required semver ranges + """ + dependencies: [NpmPackageVersionDependency!]! + + """ + A mapping of package names to the required semver ranges of _development_ dependencies + """ + devDependencies: [NpmPackageVersionDependency!]! + + """ + A mapping of package names to the required semver ranges of _optional_ dependencies + """ + optionalDependencies: [NpmPackageVersionDependency!]! + + """ + A mapping of package names to the required semver ranges of _peer_ dependencies + """ + peerDependencies: [NpmPackageVersionDependency!]! + + """The license for this package""" + license: NpmPackageLicense! +} + +"""Information on where bugs are filed for this package""" +type NpmPackageBugs { + """""" + url: String +} + +""" +Specifies the repository where the source for this package might be found +""" +type NpmPackageRepository { + """""" + url: String + + """""" + type: String +} + +"""A package publishing time for a given version""" +type NpmPackageTimeVersion { + """The package version""" + version: String + + """The date this version was published""" + date: String +} + +""" +Information about when a package was created and last modified, as well as the publishing date for each version +""" +type NpmPackageTime { + """""" + created: String + + """""" + modified: String + + """Publishing information for each version of a package""" + versions: [NpmPackageTimeVersion!]! +} + +"""A npm package maintainer""" +type NpmPackageMaintainer { + """The package maintainer's email""" + email: String + + """""" + name: String +} + +"""A npm package""" +type NpmPackage { + """The package name, used as an ID in CouchDB""" + id: String + + """The revision number of this version of the document in CouchDB""" + rev: String + + """The primary author of the npm package""" + author: NpmPackageMaintainer + + """ + A mapping of versions to the time published, along with created and modified timestamps + """ + time: NpmPackageTime + + """The package name""" + name: String + + """A short description of the package""" + description: String + + """ + The first 64K of the README data for the most-recently published version of the package + """ + readme: String + + """""" + homepage: String + + """The repository url as given in package.json, for the latest version""" + repository: NpmPackageRepository + + """""" + keywords: [String!] + + """""" + bugs: NpmPackageBugs + + """The name of the file from which the readme data was taken""" + readmeFilename: String + + """ + People with permission to publish this package (NB: Not authoritative, but informational) + """ + maintainers: [NpmPackageMaintainer!] + + """A mapping of semver-compliant version numbers to version data""" + versions: [NpmPackageVersion!]! + + """Summary download stats for a package""" + downloads: NpmPackageDownloadData! + + """The license for this package""" + license: NpmPackageLicense! + + """ + Tags can be used to provide an alias instead of version numbers. For example, a project might choose to have multiple streams of development and use a different tag for each stream, e.g., stable, beta, dev, canary. + """ + distTags: NpmPackageDistTags +} + +"""The root for Npm.""" +type NpmQuery { + """Find a npm package member by its npm name, e.g. `"fela"`""" + package( + """Find the package by its name""" + name: String! + ): NpmPackage + + """Overall download stats in the npm ecosystem""" + downloads: NpmOverallDownloadData +} + +input OneGraphServiceUserIds { + """User id for Adroll""" + adroll: String + + """User id for Asana""" + asana: String + + """User id for Box""" + box: String + + """User id for Contentful""" + contentful: String + + """User id for Dev.to""" + devTo: String + + """User id for Docusign""" + docusign: String + + """User id for Dribbble""" + dribbble: String + + """User id for Dropbox""" + dropbox: String + + """User id for Egghead.io""" + eggheadio: String + + """User id for Eventil""" + eventil: String + + """User id for Facebook""" + facebookBusiness: String + + """User id for Firebase""" + firebase: String + + """User id for GitHub""" + gitHub: String + + """User id for Gmail""" + gmail: String + + """User id for Google""" + google: String + + """User id for Google Ads""" + googleAds: String + + """User id for Google Analytics""" + googleAnalytics: String + + """User id for Google Calendar""" + googleCalendar: String + + """User id for Google Compute""" + googleCompute: String + + """User id for Google Docs""" + googleDocs: String + + """User id for Google Search Console""" + googleSearchConsole: String + + """User id for Google Translate""" + googleTranslate: String + + """User id for Hubspot""" + hubspot: String + + """User id for Intercom""" + intercom: String + + """User id for Mailchimp""" + mailchimp: String + + """User id for Meetup""" + meetup: String + + """User id for Netlify""" + netlify: String + + """User id for Notion""" + notion: String + + """User id for Product Hunt""" + productHunt: String + + """User id for QuickBooks""" + quickbooks: String + + """User id for Salesforce""" + salesforce: String + + """User id for Slack""" + slack: String + + """User id for Spotify""" + spotify: String + + """User id for Stripe""" + stripe: String + + """User id for Trello""" + trello: String + + """User id for Twilio""" + twilio: String + + """User id for Twitter""" + twitter: String + + """User id for Twitch""" + twitchTv: String + + """User id for You Need a Budget""" + ynab: String + + """User id for YouTube""" + youTube: String + + """User id for Vercel""" + zeit: String + + """User id for Zendesk""" + zendesk: String +} + +input OneGraphZendeskAPITokenAuth { + token: String! + email: String! + subdomain: String! +} + +input OneGraphUSPSAPIAuth { + password: String + userId: String! +} + +input OneGraphUPSAPIAuth { + accessToken: String! + password: String! + username: String! +} + +input OneGraphTwilioAuth { + authToken: String! + accountSid: String! +} + +input OneGraphTrelloTokenAuth { + token: String! + apiKey: String! +} + +""" +Authenticate requests when using the Stripe API on behalf of a connected account using the Stripe-Account header and the connected account’s ID. https://stripe.com/docs/connect/authentication#stripe-account-header +""" +input OneGraphStripeConnectAuthArg { + """Id of the connected account for which the request is being made.""" + connectedStripeAccountId: String! + + """Your platform account’s secret key.""" + platformSecretKey: String! +} + +input OneGraphSalesforceOAuthArg { + instanceUrl: String! + token: String! +} + +input OneGraphOrbitAuthArg { + """ + For use with a API key. To generate an api key, see the [Account Settings](https://app.orbit.love/user/edit) in your Orbit dashboard. + """ + apiKey: String! +} + +input OneGraphOpenCollectiveAuthArg { + """ + For use with a API key. To generate an api key, see the [applications page](https://opencollective.com/applications) in your OpenCollective dashboard. + """ + apiKey: String! +} + +input OneGraphNpmBasicAuth { + password: String! + username: String! +} + +input OneGraphNpmAuthArg { + """ + An API or OAuth token with sufficient permissions to publish npm packages + """ + apiToken: String + + """Basic username/password authentication""" + basic: OneGraphNpmBasicAuth +} + +input OneGraphNetlifyAuthArg { + oauthToken: String! +} + +input OneGraphMuxAPITokenAuthArg { + secret: String! + tokenId: String! +} + +input OneGraphMuxAuthArg { + """ + For advanced usage: if you have separately implemented the Mux OAuth flow and have an OAuth token to make calls on behalf of your user, use it with this `oauthToken` argument + """ + oauthToken: String + + """ + For use with a API access token. To generate an access token ID and secret, see the [settings page](https://dashboard.mux.com/settings/access-tokens) in your Mux dashboard. Will take priority over the `oauthToken` argument if both are provided. + """ + accessToken: OneGraphMuxAPITokenAuthArg +} + +input OneGraphLogdnaServiceAuthArg { + """ + Service Key from LogDNA. Retrive a service key from [your profile](https://app.logdna.com/manage/profile) under API Keys > Service Keys. + """ + serviceKey: String! +} + +input OneGraphGoogleAdsAuthArg { + oauthToken: String! + + """ + A developer token from Google allows your app to connect to the Google Ads API. + + To retrieve your developer token, sign in to your Manager Account. You must be signed-in to a Google Ads Manager Account before continuing. Navigate to TOOLS & SETTINGS > SETUP > API Center." + """ + developerToken: String! +} + +input OneGraphFedexAPIAuth { + meterNumber: String! + accountNumber: String! + password: String! + key: String! +} + +input OneGraphDevToAuthArg { + """ + For advanced usage: if you have separately implemented the Dev.to OAuth flow and have an OAuth token to make calls on behalf of your user, use it with this `oauthToken` argument + """ + oauthToken: String + + """ + For use with a personal API token, see the [Dev.to authentication](https://docs.dev.to/api/#section/Authentication/api_key) docs on generating a token. Will take priority over the `oauthToken` argument if both are provided. + """ + apiKey: String +} + +input OneGraphCloudflareUserAuthArg { + key: String! + email: String! +} + +input OneGraphChagebeeAuthArg { + """ + A [Chargebee API key](https://www.chargebee.com/docs/2.0/api_keys.html). To create a key go to **Settings** > **Configure Chargebee** > **API Keys and Webhooks** and then click on the **API Keys** tab. + """ + apiKey: String! + + """ + The [chargebee site](https://www.chargebee.com/docs/2.0/sites-intro.html). + """ + site: String! +} + +input OneGraphApolloAuthArg { + """ + For use with a API key. To generate an api key, see the [Account Settings](https://app.apollo.love/user/edit) in your Apollo dashboard. + """ + apiKey: String! +} + +input OneGraphServiceAuths { + zendeskAPITokenAuth: OneGraphZendeskAPITokenAuth + zeitOAuthToken: String + youtubeOAuthToken: String + + """ + A Wordpress bearer token. This arg is compatible with the `authToken` that is passed as an `Authorization` header in [wp-graphql-jwt-authentication plugin](https://github.com/wp-graphql/wp-graphql-jwt-authentication), or any other plugin that uses a bearer token in the `Authorization` header. + """ + wordpressBearerToken: String + uspsAPIAuth: OneGraphUSPSAPIAuth + upsAPIAuth: OneGraphUPSAPIAuth + twilioAuth: OneGraphTwilioAuth + trelloTokenAuth: OneGraphTrelloTokenAuth + stripeOAuthToken: String + stripeConnectAuth: OneGraphStripeConnectAuthArg + spotifyOAuthToken: String + slackOAuthToken: String + salesforceOAuth: OneGraphSalesforceOAuthArg + productHuntOAuthToken: String + orbit: OneGraphOrbitAuthArg + openCollective: OneGraphOpenCollectiveAuthArg + onegraphToken: String + npmAuth: OneGraphNpmAuthArg + netlifyAuth: OneGraphNetlifyAuthArg + muxAuth: OneGraphMuxAuthArg + mixpanelApiSecret: String + logdnaServiceAuth: OneGraphLogdnaServiceAuthArg + intercomOAuthToken: String + hubspotOAuthToken: String + graphCmsToken: String + googleTranslateOAuthToken: String + googleSearchConsoleOAuthToken: String + googleMapsKey: String + googleDocsOAuthToken: String + googleComputeOAuthToken: String + googleCalendarOAuthToken: String + googleAdsAuth: OneGraphGoogleAdsAuthArg + googleOAuthToken: String + gmailOAuthToken: String + gitHubOAuthToken: String + firebaseOAuthToken: String + fedexAPIAuth: OneGraphFedexAPIAuth + facebookOAuthToken: String + dropboxOAuthToken: String + dribbbleOAuthToken: String + devToAuth: OneGraphDevToAuthArg + crunchbaseUserKey: String + cloudflareUserAuth: OneGraphCloudflareUserAuthArg + clearbitAuth: String + chargebee: OneGraphChagebeeAuthArg + brexAuth: String + apollo: OneGraphApolloAuthArg + airtableApiKey: String +} + +""" +The anchor is like two-factor auth for the token. It ensures that the person who adds auth to the token is the same as the person who created the token. +""" +enum OneGraphAccessTokenAnchorEnum { + """ + Use the logged in OneGraph user. The user must be logged in to the OneGraph dashboard to use this option. + """ + ONEGRAPH_USER + + """ + Use the logged in Netlify user. The token must have an active Netlify auth to use this option. + """ + NETLIFY_USER + + """Use the provided Netlify site.""" + NETLIFY_SITE +} + +"""Custom data for a OneGraph user auth.""" +type OneGraphUserAuthCustomDataForOneGraph { + """AppId that the tokens applies to.""" + appId: String +} + +"""Service-specific data for a user auth.""" +union OneGraphUserAuthCustomData = OneGraphUserAuthCustomDataForOneGraph + +"""A user auth associated with an access token""" +type OneGraphUserAuth { + """Service that the auth belongs to.""" + service: OneGraphServiceEnum! + + """Unique id for the logged-in entity on the service.""" + foreignUserId: String! + + """Scopes granted for the service.""" + scopes: [String!] + + """Service-specific data for the user auth""" + customData: OneGraphUserAuthCustomData +} + +"""A OneGraph Access Token""" +type OneGraphAccessToken { + """Bearer token""" + token: String! + + """ + Time that the the token expires, measured in seconds since the Unix epoch + """ + expireDate: Int! + + """Token name, if it is a personal access token""" + name: String + + """AppId that the token belongs to""" + appId: String! + + """User auths for the access token""" + userAuths: [OneGraphUserAuth!]! + + """ + The anchor is like two-factor auth for the token. It ensures that the person who adds auth to the token is the same as the person who created the token. + """ + anchor: OneGraphAccessTokenAnchorEnum + + """Netlify-specific ID for the token""" + netlifyId: String +} + +"""The settings for a OneGraph User""" +type OneGraphUserSettings { + """The tours completed by this OneGraph user""" + completedTours: [String!]! +} + +"""A OneGraph User""" +type OneGraphUser { + """The id of the OneGraph User""" + id: String! + + """Whether this OneGraph user has confirmed their account""" + confirmed: Boolean! + + """The primary email of the currently logged-in OneGraph user""" + email: String! + + """The full name of the currently logged-in OneGraph user""" + fullName: String! + + """ + The date at which this user agreed to the OneGraph terms of service at https://www.onegraph.com/terms-and-conditions + """ + agreedToTosAt: Int + + """The settings of the currently logged-in OneGraph user""" + settings: OneGraphUserSettings! + + """User hash for securely identifying a user with Intercom""" + intercomUserHash: String! + + """Personal access tokens""" + personalTokens: [OneGraphAccessToken!] + + """ + The gitHub databaseId if this OneGraph User has associated their account with a GitHub account + """ + gitHubUserId: String +} + +"""A scope that has been granted to the user""" +type OneGraphServiceMetadataGrantedScope { + """The name of the scope that the underlying service uses.""" + scope: String! + + """ + Details about the scope. This may be null if OneGraph has not mapped out the scope. + """ + scopeInfo: OneGraphServiceScope +} + +"""Filter linked nodes by __typename.""" +input OneGraphLinkedNodesTypenameFilter { + """ + Checks for linked nodes where the __typename is in the list of the provided values. + """ + in: [String!] + + """ + Checks for linked nodes where the __typename is equal to the provided value. + """ + equalTo: String +} + +"""Services supported by OneGraph.""" +enum OneGraphServiceEnumArg { + ADROLL + ASANA + BOX + CONTENTFUL + DEV_TO + DOCUSIGN + DRIBBBLE + DROPBOX + EGGHEADIO + EVENTIL + FACEBOOK + FIREBASE + GITHUB + GMAIL + GOOGLE + GOOGLE_ADS + GOOGLE_ANALYTICS + GOOGLE_CALENDAR + GOOGLE_COMPUTE + GOOGLE_DOCS + GOOGLE_SEARCH_CONSOLE + GOOGLE_TRANSLATE + HUBSPOT + INTERCOM + MAILCHIMP + MEETUP + NETLIFY + NOTION + PRODUCT_HUNT + QUICKBOOKS + SALESFORCE + SLACK + SPOTIFY + STRIPE + TRELLO + TWILIO + TWITTER + TWITCH_TV + YNAB + YOUTUBE + ZEIT + ZENDESK + AIRTABLE + APOLLO + BREX + BUNDLEPHOBIA + CHARGEBEE + CLEARBIT + CLOUDFLARE + CRUNCHBASE + DESCURI + FEDEX + GOOGLE_MAPS + GRAPHCMS + IMMIGRATION_GRAPH + LOGDNA + MIXPANEL + MUX + NPM + ONEGRAPH + ORBIT + OPEN_COLLECTIVE + RSS + UPS + USPS + WORDPRESS +} + +"""Filter linked nodes by service.""" +input OneGraphLinkedNodesServiceFilter { + """ + Checks for linked nodes where the service is in the list of the provided values. + """ + in: [OneGraphServiceEnumArg!] + + """ + Checks for linked nodes where the service is equal to the provided value. + """ + equalTo: OneGraphServiceEnumArg +} + +input OneGraphLinkedNodesConnectionFilter { + """Filter connections by their GraphQL __typename""" + typename: OneGraphLinkedNodesTypenameFilter + + """Filter connections by service""" + service: OneGraphLinkedNodesServiceFilter +} + +"""An object with a globally unique id across all of OneGraph""" +interface OneGraphNode { + """The id of the object.""" + oneGraphId: ID! + + """List of OneGraphNodes that are linked from this node.""" + oneGraphLinkedNodes( + """Filter the connected nodes that are returned by service or typename.""" + filter: OneGraphLinkedNodesConnectionFilter + ): OneGraphLinkedNodesConnection! +} + +"""List of OneGraphNodes that are linked from this node.""" +type OneGraphLinkedNodesConnection { + """List of OneGraphNodes that are linked from this node.""" + nodes: [OneGraphNode!]! +} + +"""An OAuth scope that the service supports.""" +type OneGraphServiceScope { + category: String + scope: String! + display: String! + isDefault: Boolean! + isRequired: Boolean! + description: String! + title: String +} + +"""Information about a service that OneGraph supports.""" +type OneGraphServiceInfo implements OneGraphNode { + service: OneGraphServiceEnum! + friendlyServiceName: String! + + """ + Service string that can be provided in the URL when going through the oauth flow. + """ + slug: String! + supportsOauthLogin: Boolean! + supportsCustomServiceAuth: Boolean! + supportsCustomRedirectUri: Boolean! + supportsTestFlow: Boolean! + availableScopes: [OneGraphServiceScope!] + + """A short-lived svg image url of the logo for the service. May be null.""" + logoUrl: String + oneGraphLinkedNodes( + """Filter the connected nodes that are returned by service or typename.""" + filter: OneGraphLinkedNodesConnectionFilter + ): OneGraphLinkedNodesConnection! + + """Unique id across all of OneGraph""" + oneGraphId: ID! +} + +"""Services supported by OneGraph.""" +enum OneGraphServiceEnum { + ADROLL + ASANA + BOX + CONTENTFUL + DEV_TO + DOCUSIGN + DRIBBBLE + DROPBOX + EGGHEADIO + EVENTIL + FACEBOOK + FIREBASE + GITHUB + GMAIL + GOOGLE + GOOGLE_ADS + GOOGLE_ANALYTICS + GOOGLE_CALENDAR + GOOGLE_COMPUTE + GOOGLE_DOCS + GOOGLE_SEARCH_CONSOLE + GOOGLE_TRANSLATE + HUBSPOT + INTERCOM + MAILCHIMP + MEETUP + NETLIFY + NOTION + PRODUCT_HUNT + QUICKBOOKS + SALESFORCE + SLACK + SPOTIFY + STRIPE + TRELLO + TWILIO + TWITTER + TWITCH_TV + YNAB + YOUTUBE + ZEIT + ZENDESK + AIRTABLE + APOLLO + BREX + BUNDLEPHOBIA + CHARGEBEE + CLEARBIT + CLOUDFLARE + CRUNCHBASE + DESCURI + FEDEX + GOOGLE_MAPS + GRAPHCMS + IMMIGRATION_GRAPH + LOGDNA + MIXPANEL + MUX + NPM + ONEGRAPH + ORBIT + OPEN_COLLECTIVE + RSS + UPS + USPS + WORDPRESS +} + +"""Information about a service.""" +type OneGraphServiceMetadata { + service: OneGraphServiceEnum! + friendlyServiceName: String! + isLoggedIn: Boolean! + usedTestFlow: Boolean! + foreignUserId: String + + """ + Bearer token that can be used to query the underlying API directly. This field will always be null unless the OneGraph App has enabled sharing tokens for its custom OAuth client. + """ + bearerToken: String + serviceInfo: OneGraphServiceInfo! + + """ + The scopes that the user granted for this service. This is a best estimate of the scopes that were granted. Most services do not have a way to query the scopes on an auth, and some services do not return information about the scopes that were granted in the auth flow. + """ + grantedScopes: [OneGraphServiceMetadataGrantedScope!] +} + +"""Information about OneGraph services""" +type OneGraphServicesMetadata { + loggedInServices: [OneGraphServiceMetadata!]! + adroll: OneGraphServiceMetadata! + asana: OneGraphServiceMetadata! + box: OneGraphServiceMetadata! + contentful: OneGraphServiceMetadata! + devTo: OneGraphServiceMetadata! + docusign: OneGraphServiceMetadata! + dribbble: OneGraphServiceMetadata! + dropbox: OneGraphServiceMetadata! + eggheadio: OneGraphServiceMetadata! + eventil: OneGraphServiceMetadata! + facebookBusiness: OneGraphServiceMetadata! + firebase: OneGraphServiceMetadata! + gitHub: OneGraphServiceMetadata! + gmail: OneGraphServiceMetadata! + google: OneGraphServiceMetadata! + googleAds: OneGraphServiceMetadata! + googleAnalytics: OneGraphServiceMetadata! + googleCalendar: OneGraphServiceMetadata! + googleCompute: OneGraphServiceMetadata! + googleDocs: OneGraphServiceMetadata! + googleSearchConsole: OneGraphServiceMetadata! + googleTranslate: OneGraphServiceMetadata! + hubspot: OneGraphServiceMetadata! + intercom: OneGraphServiceMetadata! + mailchimp: OneGraphServiceMetadata! + meetup: OneGraphServiceMetadata! + netlify: OneGraphServiceMetadata! + notion: OneGraphServiceMetadata! + productHunt: OneGraphServiceMetadata! + quickbooks: OneGraphServiceMetadata! + salesforce: OneGraphServiceMetadata! + slack: OneGraphServiceMetadata! + spotify: OneGraphServiceMetadata! + stripe: OneGraphServiceMetadata! + trello: OneGraphServiceMetadata! + twilio: OneGraphServiceMetadata! + twitter: OneGraphServiceMetadata! + twitchTv: OneGraphServiceMetadata! + ynab: OneGraphServiceMetadata! + youTube: OneGraphServiceMetadata! + zeit: OneGraphServiceMetadata! + zendesk: OneGraphServiceMetadata! + airtable: OneGraphServiceMetadata! + apollo: OneGraphServiceMetadata! + brex: OneGraphServiceMetadata! + bundlephobia: OneGraphServiceMetadata! + chargebee: OneGraphServiceMetadata! + clearbit: OneGraphServiceMetadata! + cloudflare: OneGraphServiceMetadata! + crunchbase: OneGraphServiceMetadata! + descuri: OneGraphServiceMetadata! + fedex: OneGraphServiceMetadata! + googleMaps: OneGraphServiceMetadata! + graphcms: OneGraphServiceMetadata! + immigrationGraph: OneGraphServiceMetadata! + logdna: OneGraphServiceMetadata! + mixpanel: OneGraphServiceMetadata! + mux: OneGraphServiceMetadata! + npm: OneGraphServiceMetadata! + onegraph: OneGraphServiceMetadata! + orbit: OneGraphServiceMetadata! + openCollective: OneGraphServiceMetadata! + rss: OneGraphServiceMetadata! + ups: OneGraphServiceMetadata! + usps: OneGraphServiceMetadata! + wordpress: OneGraphServiceMetadata! + facebook: OneGraphServiceMetadata! @deprecated(reason: "Use facebookBusiness.") +} + +"""Currently authed user""" +type Viewer { + """Metadata and logged-in state for all OneGraph services""" + serviceMetadata: OneGraphServicesMetadata! + + """Currently logged in oneUser""" + oneGraph: OneGraphUser +} + +type Query { + me( + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): Viewer! + + """Fetches an object given its globally unique `oneGraphId`.""" + oneGraphNode( + """The globally unique `oneGraphId`.""" + oneGraphId: ID! + + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): OneGraphNode + + """The root for npm queries""" + npm( + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): NpmQuery! + oneGraph( + """ + Instruct OneGraph to use the auth associated with a particular user. + + Note that the user must have gone through the OneGraph oauth flow and logged in with an account with the userId provided in the auth. If there is no user with the account, you may get an auth/auth-missing error. + + The userIds for logged-in services can be found under `me.serviceMetadata.loggedInServices.foreignUserId`. + """ + userIds: OneGraphServiceUserIds + + """Optional OAuth tokens used to execute the query""" + auths: OneGraphServiceAuths + ): OneGraphServiceQuery! +} \ No newline at end of file diff --git a/tests/command.graph.test.js b/tests/command.graph.test.js new file mode 100644 index 00000000000..11d93f035f9 --- /dev/null +++ b/tests/command.graph.test.js @@ -0,0 +1,14 @@ +const test = require('ava') + +const callCli = require('./utils/call-cli') +const { normalize } = require('./utils/snapshots') + +test('netlify graph', async (t) => { + const cliResponse = await callCli(['graph']) + t.snapshot(normalize(cliResponse)) +}) + +test('netlify graph completion', async (t) => { + const cliResponse = await callCli(['graph', 'pull']) + t.snapshot(normalize(cliResponse)) +}) diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js new file mode 100644 index 00000000000..488bb0d7b32 --- /dev/null +++ b/tests/graph-codegen.test.js @@ -0,0 +1,54 @@ +const fs = require('fs') +const { join } = require('path') + +const test = require('ava') +const { buildSchema, parse } = require('graphql') + +const { extractFunctionsFromOperationDoc, generateFunctionsSource, generateHandlerSource } = require('../src/lib/one-graph/netlify-graph') + +const { normalize } = require('./utils/snapshots') + +const netligraphConfig = { + extension: 'mjs', + netligraphPath: 'netlify', + moduleType: 'commonjs', + functionsPath: 'functions', + netligraphImplementationFilename: 'dummy/index.mjs', + netligraphTypeDefinitionsFilename: 'dummy/index.d.ts', + graphQLOperationsSourceFilename: 'dummy/netligraphOperationsLibrary.graphql', + graphQLSchemaFilename: 'dummy/netligraphSchema.graphql', +} + +const loadAsset = (filename) => fs.readFileSync(join(__dirname, 'assets', filename), 'utf8') + +test('netlify graph function codegen', (t) => { + const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schema = buildSchema(schemaString) + + const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + const parsedDoc = parse(appOperationsDoc, { + noLocation: true, + }) + + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const generatedFunctions = generateFunctionsSource(netligraphConfig, schema, appOperationsDoc, operations) + console.log("!!!!!!!!!!!!!!!!!!!!! generatedFunctions", generatedFunctions) + + t.snapshot(normalize(JSON.stringify(generatedFunctions))) +}) + +test('netlify graph handler codegen', (t) => { + const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schema = buildSchema(schemaString) + + const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + + // From the asset GraphQL file + const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' + const handlerOptions = {}; + const generatedHandler = generateHandlerSource({ netligraphConfig, schema, operationsDoc: appOperationsDoc, operationId, handlerOptions }) + + console.log("!!!!!!!!!!!!!!!!!!!!! generatedHandler", generatedHandler) + + t.snapshot(normalize(JSON.stringify(generatedHandler))) +}) diff --git a/tests/snapshots/command.graph.test.js.md b/tests/snapshots/command.graph.test.js.md new file mode 100644 index 00000000000..9c039f800ef --- /dev/null +++ b/tests/snapshots/command.graph.test.js.md @@ -0,0 +1,53 @@ +# Snapshot report for `tests/command.graph.test.js` + +The actual snapshot is saved in `command.graph.test.js.snap`. + +Generated by [AVA](https://avajs.dev). + +## netlify graph + +> Snapshot 1 + + `(Beta) Control the Netlify Graph functions for the current site␊ + ␊ + USAGE␊ + $ netlify graph [options]␊ + ␊ + OPTIONS␊ + -h, --help display help for command␊ + --debug Print debugging information␊ + --httpProxy [address] Proxy server address to route requests through.␊ + --httpProxyCertificateFilename [file] Certificate file to use when connecting using a proxy server␊ + ␊ + EXAMPLES␊ + $ netlify graph:pull␊ + $ netlify graph:edit␊ + ␊ + COMMANDS␊ + $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ + $ graph:pull Pull down your local Netlify Graph schema and regenerate your local functions␊ + ` + +## netlify graph completion + +> Snapshot 1 + + `(Beta) Control the Netlify Graph functions for the current site␊ + ␊ + USAGE␊ + $ netlify graph [options]␊ + ␊ + OPTIONS␊ + -h, --help display help for command␊ + --debug Print debugging information␊ + --httpProxy [address] Proxy server address to route requests through.␊ + --httpProxyCertificateFilename [file] Certificate file to use when connecting using a proxy server␊ + ␊ + EXAMPLES␊ + $ netlify graph:pull␊ + $ netlify graph:edit␊ + ␊ + COMMANDS␊ + $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ + $ graph:pull Pull down your local Netlify Graph schema and regenerate your local functions␊ + ` diff --git a/tests/snapshots/command.graph.test.js.snap b/tests/snapshots/command.graph.test.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..3e7dfe3e8dd26a854d5427bedfe1bb1e141544b3 GIT binary patch literal 500 zcmV?RzVwjxa(e zMX`ik!)gwNSD6!9Stztg^~@WC%7GOQDSbKZ?G7lwLr|-}GWE@Lo!Sm49Zz07ACIO1 z)a6g0+vO;0SQELhwPZ_3*f=@URmD^uNxC`CeYuVy#Kef8GoeeNN)ReARV?aCJlwf@ zV)W4xW-QMQT6^#xo`|t%UZH^%5}XF3y+bf~=+U~6;UQ7-r&qcAXq+fS#vDEq5*4cu zW<~fro7E^o%tl^s5f&U(c(hU&)*rNc8@~+dh89W(`@P|0Z!o=nfUVj~`HwW_!cp2E z4~M Snapshot 1 + + '{"clientSource":"// GENERATED VIA `netlify-plugin-netligraph`, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n // return fetchOneGraphPersisted(accessToken, /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", /"ExampleQuery/", variables)/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated Netligraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA `netlify-plugin-netligraph`, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/n package: string/n},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/n package: string/n}","returnSignature":"{/n/**/n* Any data retrieved by the function be returned here/n*//n data?: {/n /n/**/n* The root for npm queries/n*//n npm: {/n /n/**/n* Find a npm package member by its npm name, e.g. `/"fela/"`/n*//n package?: {/n /n/**/n* The package name, used as an ID in CouchDB/n*//n id?: string; /n/**/n* The first 64K of the README data for the most-recently published version of the package/n*//n readme?: string; /n/**/n* The license for this package/n*//n license: {/n /n/**/n* A url for the full license/n*//n url?: string/n }/n }/n }/n }; /n/**/n* Any errors in the function will be returned here/n*//n errors?: Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netligraph","loc":{"start":39,"end":49}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":50,"end":52}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":54,"end":92}},"loc":{"start":50,"end":92}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":94,"end":97}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":99,"end":125}},"loc":{"start":94,"end":125}}],"loc":{"start":38,"end":126}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":131,"end":134}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":141,"end":148}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":149,"end":153}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":156,"end":163}},"loc":{"start":155,"end":163}},"loc":{"start":149,"end":163}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":173,"end":175}},"arguments":[],"directives":[],"loc":{"start":173,"end":175}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":182,"end":188}},"arguments":[],"directives":[],"loc":{"start":182,"end":188}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":195,"end":202}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":213,"end":216}},"arguments":[],"directives":[],"loc":{"start":213,"end":216}}],"loc":{"start":203,"end":224}},"loc":{"start":195,"end":224}}],"loc":{"start":165,"end":230}},"loc":{"start":141,"end":230}}],"loc":{"start":135,"end":234}},"loc":{"start":131,"end":234}}],"loc":{"start":127,"end":236}},"loc":{"start":0,"end":236}}}]}' + +## netlify graph handler codegen + +> Snapshot 1 + + '{"source":"const { getSecrets } = require(/"@sgrove/netlify-functions/");/nconst Netligraph = require(/"./netligraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await Netligraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.mjs`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' diff --git a/tests/snapshots/graph-codegen.test.js.snap b/tests/snapshots/graph-codegen.test.js.snap new file mode 100644 index 0000000000000000000000000000000000000000..264f7468f1085f0e302637c25190306238204e45 GIT binary patch literal 3339 zcmV+m4fOIsRzVmZW#)_PmLSJhovS$T8i*Vpzx zCSU*TSAYM@pFjTP@BjImH&*cP$8WE!{HgJ~uZ@%OAOH4?KU`YB{p-maZ1vP$S^2@r z4;j`QZ>{|3&9~mZ*5WXYhE(fn!!U>wa!oF1azcj@O=7Yj+a#i|QZJ&0t-T*#MB$9u z0Zn{wG;fa5V3>G7WozbRJK*$(2)u}#>9{~^aViD?bUT3Gucu*@#MameT%SgO?!@z8 zNDMloLDC?=FQKm!lWadB*LFaNZIit@ap}lOeSkZ@Pj-(F$Pm87B#kKvLgJ*!7^uCW zgPI|gPZQz{hcu4+;Ux_~OpyBiV>{q1f$71B%)^viIYB~_kZ}SgWaxXqNskNESHPW2 zoJ%jbP=tp8qX5bX@CS74_@k~+xhR|M%^Fk3rBVFS)==Lt@_x?M)lPS;cMPjC^@2x8PJA|XhL_F-%`EaNrP2H( ziNLPMPUK8z0`}Rl1e&1rM#RV|x3@_eKs0y(bx}?Mf<88R*boTAB#i?3i;y^Rk~DrA zy0lBy+Uv*bdx#Wm*}cS-NHGnxAIr)Y~FTWb*4Nt_~NA676kIYaKqJnO6xO@?C?-?%11 zpKflWMMI4UQ!#K=iOi0uZ|GBt>1&kiRHr<8p+VZFS>82r@xzOoc;GgR9FVx^O4X6= z)m35Ro81_vY~NjyL@CW&U)8?W9d+pYwH^}gmVOr*-_3(iXZ0;en#p`hb%-hlVoBDm zFCnLN88Yk>182dEU_X3_Y50&lWd*7kdoCqjFbg?t+~q(lkE|jb@^VdNxhA71oUqC< zh{7uH+#k)b6LK?EnBIvk8?ea%ybqeL{G;z7ZJo-sAfZA%`w0I=gQn|_hRwA{olbMh-Ex|v&f3=IaIiVt+G+z~096LC)y=`GOXFeWO*unt z7qkRbSv^JX#ep-8$6->GtGyD${8Ric1hMf>RyBBCeqfUK^F!S5n7QtvxvfDN3x|ll zOglIqxHE$3M0!PtH*nWoBDFDdr+KdY7D0ARsQd+4L<5LSrE;f{pOs?aTv3r0+G0`Y ziMl_z*7(tXB0D2EKA-gtdoOnTy?yf8!7e$MEzs0YFT9|co8`Pgdiw``^7%pkIeEJK zY5(Bp@PX`&#z``b3vCfwVf_%t7)J9cm_<*DOAgEPvRiDpS}=w?BIguJ|Lkl86KBwi%Zwxw`j@bVI&GexxAkdiC9CoV|23 zqLGEChk=SW2ac6_xVoBTptF;F~!cEd3tyPn}N8lKyRuEnpCb3~@ zb(J(p2mad+$vS~OrcjIE%vz?%3rImMRvvcJAqjo=7EQ!5_7$w)%cRcgZoD53!QJQI z-C}#r8U$e%c7C&AWI8=?8(=49q`ZdBoCpiy92zq*HDbmAjm`| zo-D0DA?>X#Qw>0&CRfPF*9p^{wep2k7;81zB_E0LH`^<8uT66F z5qaM4AB%y5wZ<@^zgtqJp)xgbgZ*WrSfLQs4bX(_s+VWo!WGvJr1T!UzalJART%Kj`7Un0{SlTk3$wT>FXhPl zN!)}!C5)(29+mNro8pF`xFr^9Lx3IV-#7#qm#)I>`v~~&M?iUk6UC@7$cfTe9_83Q zshA7_Y_Z=plb&ke!(RX6gJ&;xkDs4?-rIYAbo9~LN$=^4UcY|MD_&0PubZ-GXy(oM zX=QrMZ+q1_iVrOHt+lkbzEnSKx`PmRg%1HvfZw^rU>Jo429J;{Iv9uHr8J1H%oew` z=%w-5xEAJX;CavMVt*!VWUuKvhF(jQZDK?7t0$DQ&dk20Xr%06`3fTUm%JiDX;Qm z!Q!le_tL2bp*H@nxTQ;$daUG8@wfy+^Si`<^QlT$*&%DIErQbm>+67_S}1Dnu>t)~ z_t+C~7aJJ$PXqaiMBVJt*pyXyp*1wTV&2D>5|3@^KX|bvJ${2%&?(%2H{Ayp(ni$y zY$oR0hrN{ZX(xx7T{)Ayhe+2#H&88@vsV%tg?K=G`3y6mlL5pN=;I|ZgWv!T?XPuV zk#k!cQQxt(bHP_oEmcW!>pZM|Gi9@xd!#;#*>6E|5 zW`s--=8vD&2=v1t;zFYrC0ci*p;07iJz6aClq;VOg7Ie+u#%>V0ut|5)r5O1TD4b& zTJ23#s|aju6@b`LsuIA^;C;L(*Q!7e?+Vb(n((Z6$Z609^ zGh@K*{25!#`P{J)8Gxuut;My3=4-hZEPj8-av1W2#pUs>btkc-*i&3SF6*KdUV#x zp;wOi|B05%s!?k#({%08H&2p)|18VMT)N(=i=S^?Q(Nm5U>RMqwM8^O7L2>w?5 zQ&U}9n;ogv=K39i=w|AB>ce}Ps!osE*`Znqm)mtJQQuQ1(ezZ6+LG>VueSd$vJD!t z>hao=4r#YG?rpjfbrrsv!P{$feZ{&8u6kx8gLhWzGNh$~tK^-WyiR(jrGl&E?ad6n VQ6*nhfs50{zX0`GjDnXh004f$fw}+y literal 0 HcmV?d00001 From b7f0866f2c459a305ae30f8e54bae2a88cfab142 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 12 Jan 2022 17:53:31 -0800 Subject: [PATCH 35/58] chore: fix formatting --- src/commands/dev/dev.js | 10 ++--- src/commands/graph/graph-pull.js | 19 +++++++-- src/lib/one-graph/client.js | 8 ++-- src/lib/one-graph/netlify-graph.js | 25 ++++++----- tests/command.graph.test.js | 8 ++-- tests/graph-codegen.test.js | 66 +++++++++++++++++------------- 6 files changed, 82 insertions(+), 54 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 4ef6b8665ee..aeb26bc58b0 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index a501ac51e05..71049e21dc2 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -2,7 +2,13 @@ const process = require('process') const { buildSchema } = require('graphql') -const { ackCLISessionEvents, fetchCliSessionEvents, handleCliSessionEvent, loadCLISession, refetchAndGenerateFromOneGraph } = require('../../lib/one-graph/client') +const { + ackCLISessionEvents, + fetchCliSessionEvents, + handleCliSessionEvent, + loadCLISession, + refetchAndGenerateFromOneGraph, +} = require('../../lib/one-graph/client') const { getNetligraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/netlify-graph') const { NETLIFYDEVERR, chalk } = require('../../utils') @@ -26,13 +32,13 @@ const graphPull = async (options, command) => { const oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { - console.warn("No local Netlify Graph session found, skipping command queue drain") + console.warn('No local Netlify Graph session found, skipping command queue drain') return } const schemaString = readGraphQLSchemaFile(netligraphConfig) - let schema; + let schema try { schema = buildSchema(schemaString) @@ -62,7 +68,12 @@ const graphPull = async (options, command) => { await Promise.all(handled) - await ackCLISessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId, eventIds: ackIds }) + await ackCLISessionEvents({ + appId: siteId, + authToken: netlifyToken, + sessionId: oneGraphSessionId, + eventIds: ackIds, + }) } } diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index ac2ab5b31ee..84dfb1845c6 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -500,7 +500,6 @@ const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { const events = (next.data && next.data.oneGraph && next.data.oneGraph.netlifyCliEvents) || [] - return { events } } @@ -715,13 +714,16 @@ const handleCliSessionEvent = async ({ authToken, event, netligraphConfig, schem await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netligraphConfig, schema, siteId }) break default: { - console.warn(`${NETLIFYDEVWARN} Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) + console.warn( + `${NETLIFYDEVWARN} Unrecognized event received, you may need to upgrade your CLI version`, + __typename, + payload, + ) break } } } - const loadCLISession = (state) => state.get('oneGraphSessionId') const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, state }) => { diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js index 613a6ff0d58..990594cb8e3 100644 --- a/src/lib/one-graph/netlify-graph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -543,13 +543,17 @@ const generateFunctionsSource = (netligraphConfig, schema, operationsDoc, querie return { clientSource, typeDefinitionsSource, - functionDefinitions + functionDefinitions, } } - const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { - const { clientSource, typeDefinitionsSource } = generateFunctionsSource(netligraphConfig, schema, operationsDoc, queries) + const { clientSource, typeDefinitionsSource } = generateFunctionsSource( + netligraphConfig, + schema, + operationsDoc, + queries, + ) ensureNetligraphPath(netligraphConfig) fs.writeFileSync(netligraphConfig.netligraphImplementationFilename, clientSource, 'utf8') @@ -639,13 +643,9 @@ const writeGraphQLSchemaFile = (netligraphConfig, schema) => { ) } - const readGraphQLSchemaFile = (netligraphConfig) => { ensureNetligraphPath(netligraphConfig) - return fs.readFileSync( - `${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, - 'utf8', - ) + return fs.readFileSync(`${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, 'utf8') } const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, operationsDoc, schema }) => { @@ -670,14 +670,19 @@ const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, return { source, operation } } - const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) if (currentOperationsDoc.trim().length === 0) { currentOperationsDoc = defaultExampleOperationsDoc } - const { operation, source } = generateHandlerSource({ netligraphConfig, schema, operationsDoc: currentOperationsDoc, operationId, handlerOptions }) + const { operation, source } = generateHandlerSource({ + netligraphConfig, + schema, + operationsDoc: currentOperationsDoc, + operationId, + handlerOptions, + }) const filename = `${netligraphConfig.functionsPath}/${operation.name}.${netligraphConfig.extension}` diff --git a/tests/command.graph.test.js b/tests/command.graph.test.js index 11d93f035f9..d05ee3d065f 100644 --- a/tests/command.graph.test.js +++ b/tests/command.graph.test.js @@ -4,11 +4,11 @@ const callCli = require('./utils/call-cli') const { normalize } = require('./utils/snapshots') test('netlify graph', async (t) => { - const cliResponse = await callCli(['graph']) - t.snapshot(normalize(cliResponse)) + const cliResponse = await callCli(['graph']) + t.snapshot(normalize(cliResponse)) }) test('netlify graph completion', async (t) => { - const cliResponse = await callCli(['graph', 'pull']) - t.snapshot(normalize(cliResponse)) + const cliResponse = await callCli(['graph', 'pull']) + t.snapshot(normalize(cliResponse)) }) diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js index 488bb0d7b32..28694c5d5e8 100644 --- a/tests/graph-codegen.test.js +++ b/tests/graph-codegen.test.js @@ -4,51 +4,61 @@ const { join } = require('path') const test = require('ava') const { buildSchema, parse } = require('graphql') -const { extractFunctionsFromOperationDoc, generateFunctionsSource, generateHandlerSource } = require('../src/lib/one-graph/netlify-graph') +const { + extractFunctionsFromOperationDoc, + generateFunctionsSource, + generateHandlerSource, +} = require('../src/lib/one-graph/netlify-graph') const { normalize } = require('./utils/snapshots') const netligraphConfig = { - extension: 'mjs', - netligraphPath: 'netlify', - moduleType: 'commonjs', - functionsPath: 'functions', - netligraphImplementationFilename: 'dummy/index.mjs', - netligraphTypeDefinitionsFilename: 'dummy/index.d.ts', - graphQLOperationsSourceFilename: 'dummy/netligraphOperationsLibrary.graphql', - graphQLSchemaFilename: 'dummy/netligraphSchema.graphql', + extension: 'mjs', + netligraphPath: 'netlify', + moduleType: 'commonjs', + functionsPath: 'functions', + netligraphImplementationFilename: 'dummy/index.mjs', + netligraphTypeDefinitionsFilename: 'dummy/index.d.ts', + graphQLOperationsSourceFilename: 'dummy/netligraphOperationsLibrary.graphql', + graphQLSchemaFilename: 'dummy/netligraphSchema.graphql', } const loadAsset = (filename) => fs.readFileSync(join(__dirname, 'assets', filename), 'utf8') test('netlify graph function codegen', (t) => { - const schemaString = loadAsset('../assets/netligraphSchema.graphql') - const schema = buildSchema(schemaString) + const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schema = buildSchema(schemaString) - const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') - const parsedDoc = parse(appOperationsDoc, { - noLocation: true, - }) + const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + const parsedDoc = parse(appOperationsDoc, { + noLocation: true, + }) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - const generatedFunctions = generateFunctionsSource(netligraphConfig, schema, appOperationsDoc, operations) - console.log("!!!!!!!!!!!!!!!!!!!!! generatedFunctions", generatedFunctions) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + const generatedFunctions = generateFunctionsSource(netligraphConfig, schema, appOperationsDoc, operations) + console.log('!!!!!!!!!!!!!!!!!!!!! generatedFunctions', generatedFunctions) - t.snapshot(normalize(JSON.stringify(generatedFunctions))) + t.snapshot(normalize(JSON.stringify(generatedFunctions))) }) test('netlify graph handler codegen', (t) => { - const schemaString = loadAsset('../assets/netligraphSchema.graphql') - const schema = buildSchema(schemaString) + const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schema = buildSchema(schemaString) - const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') - // From the asset GraphQL file - const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' - const handlerOptions = {}; - const generatedHandler = generateHandlerSource({ netligraphConfig, schema, operationsDoc: appOperationsDoc, operationId, handlerOptions }) + // From the asset GraphQL file + const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' + const handlerOptions = {} + const generatedHandler = generateHandlerSource({ + netligraphConfig, + schema, + operationsDoc: appOperationsDoc, + operationId, + handlerOptions, + }) - console.log("!!!!!!!!!!!!!!!!!!!!! generatedHandler", generatedHandler) + console.log('!!!!!!!!!!!!!!!!!!!!! generatedHandler', generatedHandler) - t.snapshot(normalize(JSON.stringify(generatedHandler))) + t.snapshot(normalize(JSON.stringify(generatedHandler))) }) From f4530f409ad52b71869274f906d1b1ab85a47098 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 13 Jan 2022 13:51:59 -0800 Subject: [PATCH 36/58] chore: address pr comments --- src/commands/dev/dev.js | 16 +- src/commands/graph/graph-edit.js | 9 +- src/commands/graph/graph-pull.js | 24 +- src/lib/one-graph/client.js | 564 +++++------------- src/lib/one-graph/graphql-helpers.js | 75 +-- .../netlify-graph-code-exporter-snippets.js | 24 +- src/lib/one-graph/netlify-graph.js | 76 ++- .../nextjs-graph-code-exporter-snippets.js | 366 ++++++++++++ .../oneGraphClientGraphQLOperations.js | 338 +++++++++++ ... => netlifyGraphOperationsLibrary.graphql} | 0 ...ema.graphql => netlifyGraphSchema.graphql} | 0 tests/graph-codegen.test.js | 15 +- tests/snapshots/graph-codegen.test.js.md | 4 +- tests/snapshots/graph-codegen.test.js.snap | Bin 3339 -> 3337 bytes 14 files changed, 995 insertions(+), 516 deletions(-) create mode 100644 src/lib/one-graph/nextjs-graph-code-exporter-snippets.js create mode 100644 src/lib/one-graph/oneGraphClientGraphQLOperations.js rename tests/assets/{netligraphOperationsLibrary.graphql => netlifyGraphOperationsLibrary.graphql} (100%) rename tests/assets/{netligraphSchema.graphql => netlifyGraphSchema.graphql} (100%) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index aeb26bc58b0..3d5d4723034 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -296,9 +296,9 @@ const dev = async (options, command) => { const startNetligraphWatcher = Boolean(options.graph) if (startNetligraphWatcher && options.offline) { - console.warn(`${NETLIFYDEVERR} Warning: unable to start Netlify Graph in offline mode`) + warn(`${NETLIFYDEVERR} Warning: unable to start Netlify Graph in offline mode`) } else if (startNetligraphWatcher && !site.id) { - console.warn( + warn( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, @@ -307,7 +307,7 @@ const dev = async (options, command) => { } else if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() await ensureAppForSite(netlifyToken, site.id) - const netligraphConfig = getNetligraphConfig({ command, options }) + const netligraphConfig = await getNetligraphConfig({ command, options }) startOneGraphCLISession({ netligraphConfig, netlifyToken, site, state }) } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index d161bb17b49..3343a46a50e 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -15,7 +15,7 @@ const { getNetligraphConfig, readGraphQLOperationsSourceFile, } = require('../../lib/one-graph/netlify-graph') -const { NETLIFYDEVERR, chalk } = require('../../utils') +const { NETLIFYDEVERR, chalk, error } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') const graphEdit = async (options, command) => { @@ -23,7 +23,7 @@ const graphEdit = async (options, command) => { const siteId = site.id if (!site.id) { - console.error( + error( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, @@ -31,11 +31,9 @@ const graphEdit = async (options, command) => { process.exit(1) } - console.time('graph:edit') - const siteData = await api.getSite({ siteId }) - const netligraphConfig = getNetligraphConfig({ command, options }) + const netligraphConfig = await getNetligraphConfig({ command, options }) const { branch } = gitRepoInfo() @@ -70,7 +68,6 @@ const graphEdit = async (options, command) => { const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}` await openBrowser({ url }) - console.timeEnd('graph:edit') } /** diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 71049e21dc2..dde24e73439 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,3 +1,5 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable fp/no-loops */ const process = require('process') const { buildSchema } = require('graphql') @@ -10,13 +12,13 @@ const { refetchAndGenerateFromOneGraph, } = require('../../lib/one-graph/client') const { getNetligraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/netlify-graph') -const { NETLIFYDEVERR, chalk } = require('../../utils') +const { NETLIFYDEVERR, chalk, error, warn } = require('../../utils') const graphPull = async (options, command) => { const { site, state } = command.netlify if (!site.id) { - console.error( + error( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, @@ -24,7 +26,7 @@ const graphPull = async (options, command) => { process.exit(1) } - const netligraphConfig = getNetligraphConfig({ command, options }) + const netligraphConfig = await getNetligraphConfig({ command, options }) const netlifyToken = await command.authenticate() const siteId = site.id await refetchAndGenerateFromOneGraph({ netligraphConfig, netlifyToken, state, siteId }) @@ -32,7 +34,7 @@ const graphPull = async (options, command) => { const oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { - console.warn('No local Netlify Graph session found, skipping command queue drain') + warn('No local Netlify Graph session found, skipping command queue drain') return } @@ -42,31 +44,29 @@ const graphPull = async (options, command) => { try { schema = buildSchema(schemaString) - } catch (error) { - console.error(`${NETLIFYDEVERR} Error parsing schema: ${error.message}`) + } catch (buildSchemaError) { + error(`${NETLIFYDEVERR} Error parsing schema: ${buildSchemaError.message}`) process.exit(1) } if (!schema) { - console.error(`${NETLIFYDEVERR} Failed to fetch and update Netlify GraphQL schem`) + error(`${NETLIFYDEVERR} Failed to fetch and update Netlify GraphQL schem`) process.exit(1) } const next = await fetchCliSessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId }) if (next.errors) { - console.error(`${NETLIFYDEVERR} Failed to fetch Netlify Graph cli session events`, next.errors) + error(`${NETLIFYDEVERR} Failed to fetch Netlify Graph cli session events`, next.errors) process.exit(1) } if (next.events) { const ackIds = [] - const handled = next.events.map(async (event) => { + for (const event of next.events) { await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) ackIds.push(event.id) - }) - - await Promise.all(handled) + } await ackCLISessionEvents({ appId: siteId, diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 84dfb1845c6..73156285476 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -1,10 +1,11 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable fp/no-loops */ const os = require('os') -const dotProp = require('dot-prop') const { buildClientSchema, parse } = require('graphql') const fetch = require('node-fetch') -const { NETLIFYDEVLOG, NETLIFYDEVWARN, chalk, log } = require('../../utils') +const { NETLIFYDEVLOG, NETLIFYDEVWARN, chalk, error, log, warn } = require('../../utils') const { defaultExampleOperationsDoc, @@ -15,11 +16,14 @@ const { writeGraphQLOperationsSourceFile, writeGraphQLSchemaFile, } = require('./netlify-graph') +const { internalOperationsDoc } = require("./oneGraphClientGraphQLOperations") + const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' const httpOkLow = 200 const httpOkHigh = 299 +const basicPostTimeoutMilliseconds = 30_000 const basicPost = async (url, options) => { const reqBody = options.body || '' @@ -31,12 +35,10 @@ const basicPost = async (url, options) => { 'Content-Length': reqBody.length, } - const timeoutMilliseconds = 30_000 - const resp = await fetch(url, { method: 'POST', headers, - timeout: timeoutMilliseconds, + timeout: basicPostTimeoutMilliseconds, compress: true, body: reqBody, }) @@ -44,8 +46,9 @@ const basicPost = async (url, options) => { const respBody = await resp.text() if (resp.status < httpOkLow || resp.status > httpOkHigh) { - console.warn('Response:', respBody) - throw new Error(`Netlify OneGraph return non - OK HTTP status code: ${resp.status}`) + warn('Response:', respBody) + error(`Netlify OneGraph return invalid HTTP status code: ${resp.status}`) + return respBody } return respBody @@ -63,8 +66,8 @@ const fetchOneGraphSchemaJson = async (appId, enabledServices) => { }) return JSON.parse(response) - } catch (error) { - console.error('Error fetching schema:', error) + } catch (postError) { + postError('Error fetching schema:', postError) } } @@ -74,14 +77,24 @@ const fetchOneGraphSchema = async (appId, enabledServices) => { return schema } -const fetchOneGraph = async ( - accessToken, - appId, - query, - operationName, - variables, - // eslint-disable-next-line max-params -) => { +/** + * Fetch data from OneGraph + * @param {object} config + * @param {string|null} config.accessToken The (typically netlify) access token that is used for authentication, if any + * @param {string} config.appId The app to query against, typically the siteId + * @param {string} config.query The full GraphQL operation doc + * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc + * @param {object} config.variables The variables to pass to the GraphQL operation + */ +const fetchOneGraph = async (config) => { + const { + accessToken, + appId, + operationName, + query, + variables + } = config + const payload = { query, variables, @@ -103,7 +116,7 @@ const fetchOneGraph = async ( // @ts-ignore const value = JSON.parse(result) if (value.errors) { - console.warn(`${NETLIFYDEVWARN} fetchOneGraph errors`, operationName, JSON.stringify(value, null, 2)) + warn(`${NETLIFYDEVWARN} fetchOneGraph errors`, operationName, JSON.stringify(value, null, 2)) } return value } catch { @@ -111,14 +124,24 @@ const fetchOneGraph = async ( } } -const fetchOneGraphPersisted = async ( - appId, - accessToken, - docId, - operationName, - variables, - // eslint-disable-next-line max-params -) => { +/** + * Fetch data from OneGraph using a previously persisted query + * @param {object} config + * @param {string|null} config.accessToken The (typically netlify) access token that is used for authentication, if any + * @param {string} config.appId The app to query against, typically the siteId + * @param {string} config.docId The id of the previously persisted GraphQL operation doc + * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc + * @param {object} config.variables The variables to pass to the GraphQL operation + */ +const fetchOneGraphPersisted = async (config) => { + const { + accessToken, + appId, + docId, + operationName, + variables, + } = config; + const payload = { doc_id: docId, variables, @@ -139,346 +162,17 @@ const fetchOneGraphPersisted = async ( } } -const internalOperationsDoc = `mutation CreatePersistedQueryMutation( - $nfToken: String! - $appId: String! - $query: String! - $tags: [String!]! - $description: String! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createPersistedQuery( - input: { - query: $query - appId: $appId - tags: $tags - description: $description - } - ) { - persistedQuery { - id - } - } - } -} - -query ListPersistedQueries( - $appId: String! - $first: Int! - $after: String - $tags: [String!]! - ) { - oneGraph { - app(id: $appId) { - id - persistedQueries( - first: $first - after: $after - tags: $tags - ) { - pageInfo { - hasNextPage - endCursor - } - nodes { - id - query - fixedVariables - freeVariables - allowedOperationNames - tags - description - } - } - } - } - } - - subscription ListPersistedQueriesSubscription( - $appId: String! - $first: Int! - $after: String - $tags: [String!]! - ) { - poll( - onlyTriggerWhenPayloadChanged: true - schedule: { every: { minutes: 1 } } - ) { - query { - oneGraph { - app(id: $appId) { - id - persistedQueries( - first: $first - after: $after - tags: $tags - ) { - pageInfo { - hasNextPage - endCursor - } - nodes { - id - query - fixedVariables - freeVariables - allowedOperationNames - tags - description - } - } - } - } - } - } - } - - query PersistedQueriesQuery( - $nfToken: String! - $appId: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - app(id: $appId) { - persistedQueries { - nodes { - id - query - allowedOperationNames - description - freeVariables - fixedVariables - tags - } - } - } - } - } - - query PersistedQueryQuery( - $nfToken: String! - $appId: String! - $id: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - persistedQuery(appId: $appId, id: $id) { - id - query - allowedOperationNames - description - freeVariables - fixedVariables - tags - } - } - } - - mutation CreateCLISessionMutation( - $nfToken: String! - $appId: String! - $name: String! - $metadata: JSON - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createNetlifyCliSession( - input: { appId: $appId, name: $name, metadata: metadata } - ) { - session { - id - appId - netlifyUserId - name - } - } - } - } - - mutation UpdateCLISessionMetadataMutation( - $nfToken: String! - $sessionId: String! - $metadata: JSON! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - updateNetlifyCliSession( - input: { id: $sessionId, metadata: $metadata } - ) { - session { - id - name - metadata - } - } - } - } - - mutation CreateCLISessionEventMutation( - $nfToken: String! - $sessionId: String! - $payload: JSON! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createNetlifyCliTestEvent( - input: { - data: { payload: $payload } - sessionId: $sessionId - } - ) { - event { - id - createdAt - sessionId - } - } - } - } - -query CLISessionEventsQuery( - $nfToken: String! - $sessionId: String! - $first: Int! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - netlifyCliEvents(sessionId: $sessionId, first: $first) { - __typename - createdAt - id - sessionId - ... on OneGraphNetlifyCliSessionLogEvent { - id - message - sessionId - createdAt - } - ... on OneGraphNetlifyCliSessionTestEvent { - id - createdAt - payload - sessionId - } - } - } -} - -mutation AckCLISessionEventMutation( - $nfToken: String! - $sessionId: String! - $eventIds: [String!]! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - ackNetlifyCliEvents( - input: { eventIds: $eventIds, sessionId: $sessionId } - ) { - events { - id - } - } - } -} - -query AppSchemaQuery( - $nfToken: String! - $appId: String! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - app(id: $appId) { - graphQLSchema { - appId - createdAt - id - services { - friendlyServiceName - logoUrl - service - slug - supportsCustomRedirectUri - supportsCustomServiceAuth - supportsOauthLogin - } - updatedAt - } - } - } -} - -mutation UpsertAppForSiteMutation( - $nfToken: String! - $siteId: String! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - upsertAppForNetlifySite( - input: { netlifySiteId: $siteId } - ) { - org { - id - name - } - app { - id - name - corsOrigins - customCorsOrigins { - friendlyServiceName - displayName - encodedValue - } - } - } - } -} - -mutation CreateNewSchemaMutation( - $nfToken: String! - $input: OneGraphCreateGraphQLSchemaInput! -) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createGraphQLSchema(input: $input) { - app { - graphQLSchema { - id - } - } - graphqlSchema { - id - services { - friendlyServiceName - logoUrl - service - slug - supportsCustomRedirectUri - supportsCustomServiceAuth - supportsOauthLogin - } - } - } - } -}` - const fetchPersistedQuery = async (authToken, appId, docId) => { - const response = await fetchOneGraph(authToken, ONEDASH_APP_ID, internalOperationsDoc, 'PersistedQueryQuery', { - nfToken: authToken, - appId, - id: docId, + const response = await fetchOneGraph({ + accessToken: authToken, + appId: ONEDASH_APP_ID, + query: internalOperationsDoc, + operationName: 'PersistedQueryQuery', + variables: { + nfToken: authToken, + appId, + id: docId, + } }) const persistedQuery = response.data && response.data.oneGraph && response.data.oneGraph.persistedQuery @@ -487,11 +181,18 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { } const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { - const first = 1000 - const next = await fetchOneGraph(null, appId, internalOperationsDoc, 'CLISessionEventsQuery', { - nfToken: authToken, - sessionId, - first, + // Grab the first 1000 events so we can chew through as many at a time as possible + const desiredEventCount = 1000 + const next = await fetchOneGraph({ + accessToken: null, + appId, + query: internalOperationsDoc, + operationName: 'CLISessionEventsQuery', + variables: { + nfToken: authToken, + sessionId, + first: desiredEventCount, + } }) if (next.errors) { @@ -520,7 +221,7 @@ const monitorCLISessionEvents = ({ const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) if (!enabledServicesInfo) { - console.warn('Unable to fetch enabled services for site for code generation') + warn('Unable to fetch enabled services for site for code generation') return } const newEnabledServices = enabledServicesInfo.map((service) => service.service) @@ -553,15 +254,15 @@ const monitorCLISessionEvents = ({ const next = await fetchCliSessionEvents({ appId, authToken, sessionId }) if (next.errors) { - next.errors.forEach((error) => { - onError(error) + next.errors.forEach((fetchEventError) => { + onError(fetchEventError) }) } const { events } = next if (events.length !== 0) { - const ackIds = onEvents(events) + const ackIds = await onEvents(events) await ackCLISessionEvents({ appId, authToken, sessionId, eventIds: ackIds }) } @@ -584,7 +285,13 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { metadata, } - const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreateCLISessionMutation', payload) + const result = await fetchOneGraph({ + accessToken: null, + appId, + query: internalOperationsDoc, + operationName: 'CreateCLISessionMutation', + variables: payload + }) const session = result.data && @@ -596,10 +303,15 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { } const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata) => { - const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'UpdateCLISessionMetadataMutation', { - nfToken: netlifyToken, - sessionId, - metadata, + const result = await fetchOneGraph({ + accessToken: null, appId, + query: internalOperationsDoc, + operationName: 'UpdateCLISessionMetadataMutation', + variables: { + nfToken: netlifyToken, + sessionId, + metadata, + } }) const session = @@ -612,10 +324,16 @@ const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata } const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => { - const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'AckCLISessionEventMutation', { - nfToken: authToken, - sessionId, - eventIds, + const result = await fetchOneGraph({ + accessToken: null, + appId, + query: internalOperationsDoc, + operationName: 'AckCLISessionEventMutation', + variables: { + nfToken: authToken, + sessionId, + eventIds, + } }) const events = result.data && result.data.oneGraph && result.data.oneGraph.ackNetlifyCliEvents @@ -624,12 +342,18 @@ const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => } const createPersistedQuery = async (netlifyToken, { appId, description, document, tags }) => { - const result = await fetchOneGraph(null, appId, internalOperationsDoc, 'CreatePersistedQueryMutation', { - nfToken: netlifyToken, + const result = await fetchOneGraph({ + accessToken: null, appId, - query: document, - tags, - description, + query: internalOperationsDoc, + operationName: 'CreatePersistedQueryMutation', + variables: { + nfToken: netlifyToken, + appId, + query: document, + tags, + description, + } }) const persistedQuery = @@ -646,7 +370,7 @@ const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) if (!enabledServicesInfo) { - console.warn('Unable to fetch enabled services for site for code generation') + warn('Unable to fetch enabled services for site for code generation') return } @@ -671,7 +395,7 @@ const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, const updateGraphQLOperationsFile = async ({ authToken, docId, netligraphConfig, schema, siteId }) => { const persistedDoc = await fetchPersistedQuery(authToken, siteId, docId) if (!persistedDoc) { - console.warn('No persisted doc found for:', docId) + warn('No persisted doc found for:', docId) return } @@ -714,7 +438,7 @@ const handleCliSessionEvent = async ({ authToken, event, netligraphConfig, schem await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netligraphConfig, schema, siteId }) break default: { - console.warn( + warn( `${NETLIFYDEVWARN} Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload, @@ -744,56 +468,74 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s netligraphConfig, sessionId: oneGraphSessionId, state, - onEvents: (events) => { - events.forEach(async (event) => { + onEvents: async (events) => { + for (const event of events) { const eventName = friendlyEventName(event) log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) - }) + } return events.map((event) => event.id) }, - onError: (error) => { - console.error(`OneGraph: ${error}`) + onError: (fetchEventError) => { + error(`Netlify Graph upstream error: ${fetchEventError}`) }, onClose: () => { - console.debug('OneGraph: closed') + log('Netlify Graph upstream closed') }, }) } const fetchAppSchema = async (authToken, siteId) => { - const result = await fetchOneGraph(authToken, siteId, internalOperationsDoc, 'AppSchemaQuery', { - nfToken: authToken, + const result = await fetchOneGraph({ + accessToken: authToken, appId: siteId, + query: internalOperationsDoc, + operationName: 'AppSchemaQuery', + variables: { + nfToken: authToken, + appId: siteId, + } }) - return dotProp.get(result, 'data.oneGraph.app.graphQLSchema') + return result.data && result.data.oneGraph && result.data.oneGraph.app && result.data.oneGraph.app.graphQLSchema } const upsertAppForSite = async (authToken, siteId) => { - const result = await fetchOneGraph(authToken, ONEDASH_APP_ID, internalOperationsDoc, 'UpsertAppForSiteMutation', { - nfToken: authToken, - siteId, + const result = await fetchOneGraph({ + accessToken: authToken, + appId: ONEDASH_APP_ID, + query: internalOperationsDoc, + operationName: 'UpsertAppForSiteMutation', + variables: { + nfToken: authToken, + siteId, + } }) - return dotProp.get(result, 'data.oneGraph.upsertAppForNetlifySite.app') + return result.data && result.data.oneGraph && result.data.oneGraph.upsertAppForNetlifySite && result.data.oneGraph.upsertAppForNetlifySite.app } const createNewAppSchema = async (nfToken, input) => { - const result = await fetchOneGraph(null, input.appId, internalOperationsDoc, 'CreateNewSchemaMutation', { - nfToken, - input, + const result = await fetchOneGraph({ + accessToken: null, + appId: input.appId, + query: internalOperationsDoc, + operationName: 'CreateNewSchemaMutation', + variables: { + nfToken, + input, + } }) - return dotProp.get(result, 'data.oneGraph.createGraphQLSchema.graphqlSchema') + return result.data && result.data.oneGraph && result.data.oneGraph.createGraphQLSchema && result.data.oneGraph.createGraphQLSchema.graphqlSchema } const ensureAppForSite = async (authToken, siteId) => { const app = await upsertAppForSite(authToken, siteId) const schema = await fetchAppSchema(authToken, app.id) if (!schema) { - console.log(`${NETLIFYDEVLOG} Creating new empty default GraphQL schema for site....`) + log(`${NETLIFYDEVLOG} Creating new empty default GraphQL schema for site....`) await createNewAppSchema(authToken, { appId: siteId, enabledServices: ['ONEGRAPH'], @@ -804,13 +546,13 @@ const ensureAppForSite = async (authToken, siteId) => { const fetchEnabledServices = async (authToken, appId) => { const appSchema = await fetchAppSchema(authToken, appId) - return dotProp.get(appSchema, 'services') + return appSchema && appSchema.services } const generateSessionName = () => { const userInfo = os.userInfo('utf-8') const sessionName = `${userInfo.username}-${Date.now()}` - console.log(`${NETLIFYDEVLOG} Generated Netlify Graph session name: ${sessionName}`) + log(`${NETLIFYDEVLOG} Generated Netlify Graph session name: ${sessionName}`) return sessionName } diff --git a/src/lib/one-graph/graphql-helpers.js b/src/lib/one-graph/graphql-helpers.js index 189e47dadb6..fe85c397a1f 100644 --- a/src/lib/one-graph/graphql-helpers.js +++ b/src/lib/one-graph/graphql-helpers.js @@ -17,6 +17,8 @@ const { visitWithTypeInfo, } = require('graphql') +const { warn } = require('../../utils') + const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) const gatherAllReferencedTypes = (schema, query) => { @@ -29,6 +31,7 @@ const gatherAllReferencedTypes = (schema, query) => { const fullType = typeInfo.getType() if (fullType) { const typ = getNamedType(fullType) + // We don't want to pick up the `OneMe` type since that should be hidden from the end developer for the first few releases if (typ) types.add(typ.name.toLocaleLowerCase().replace('oneme', '')) } }, @@ -126,7 +129,7 @@ const listCount = (gqlType) => { } totalCount += 1 if (totalCount > maximumDepth) { - console.warn('Bailing on potential infinite recursion') + warn('Bailing on potential infinite recursion') return errorSigil } inspectedType = inspectedType.ofType @@ -240,7 +243,7 @@ const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fra return entry } // @ts-ignore - console.warn('No returnType!', basicType, namedType.name, selection) + warn('No returnType!', basicType, namedType.name, selection) } let baseGqlType = null @@ -363,7 +366,7 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn( + warn( 'Unable to find subscription service field, you may need to enable additional services. Missing field:', selection.name.value, ) @@ -403,28 +406,28 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'String', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookUrl', + value: 'String', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookUrl', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -446,7 +449,7 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { if (selection.kind !== 'Field') return selection const field = subscriptionType.getFields()[selection.name.value] if (!field) { - console.warn( + warn( 'Unable to find subscription service field, you may need to enable additional services. Missing field:', selection.name.value, ) @@ -486,28 +489,28 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', + type: { + kind: 'NonNullType', type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', - }, - }, - }, - variable: { - kind: 'Variable', + kind: 'NamedType', name: { kind: 'Name', - value: 'netligraphWebhookSecret', + value: 'OneGraphSubscriptionSecretInput', }, }, }, - ] + variable: { + kind: 'Variable', + name: { + kind: 'Name', + value: 'netligraphWebhookSecret', + }, + }, + }, + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js index 9f11b240cc4..7762ea30b0d 100644 --- a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js +++ b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js @@ -1,5 +1,6 @@ const dotProp = require('dot-prop') const { parse, print } = require('graphql') +const { error } = require('../../utils') const { munge } = require('./codegen-helpers') @@ -91,7 +92,7 @@ const topologicalSortHelper = ({ graph, node, temp, visited }, result) => { } if (temp[fragmentOperationData.name]) { - console.error('The operation graph has a cycle') + error('The operation graph has a cycle') return } if (!visited[fragmentOperationData.name]) { @@ -332,20 +333,17 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${ - useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ - pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${ - pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -363,7 +361,7 @@ const subscriptionHandler = ({ netligraphConfig, operationData }) => `${imp( '{ getSecrets }', '@sgrove/netlify-functions', )} -${imp(netligraphConfig, 'Netligraph', './netligraph')} +${imp(netligraphConfig, 'Netligraph', netligraphConfig.netligraphRequirePath)} ${exp(netligraphConfig, 'handler')} = async (event, context) => { let secrets = await getSecrets(event); @@ -446,8 +444,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js index 990594cb8e3..64a9efc99f5 100644 --- a/src/lib/one-graph/netlify-graph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -4,7 +4,7 @@ const fs = require('fs') const dotProp = require('dot-prop') const { parse, print, printSchema } = require('graphql') -const { getFunctionsDir } = require('../../utils') +const { NETLIFYDEVERR, detectServerSettings, getFunctionsDir, log } = require('../../utils') const { patchSubscriptionWebhookField, @@ -13,6 +13,7 @@ const { typeScriptSignatureForOperationVariables, } = require('./graphql-helpers') const { computeOperationDataList, netlifyFunctionSnippet } = require('./netlify-graph-code-exporter-snippets') +const { nextjsFunctionSnippet } = require('./nextjs-graph-code-exporter-snippets') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -24,7 +25,7 @@ const replaceAll = (target, search, replace) => { const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' const defaultNetligraphConfig = { - extension: 'mjs', + extension: 'js', netligraphPath: 'netlify', moduleType: 'commonjs', } @@ -33,23 +34,47 @@ const defaultNetligraphConfig = { * Return a full Netligraph config with any defaults overridden by netlify.toml * @param {import('../base-command').BaseCommand} command */ -const getNetligraphConfig = ({ command, options }) => { - const { config } = command.netlify - const userSpecifiedConfig = config && config.netligraph - const functionsPath = getFunctionsDir({ config, options }) - const netligraphPath = `${functionsPath}/netligraph` +const getNetligraphConfig = async ({ command, options }) => { + const { config, site } = command.netlify + config.dev = { ...config.dev } + config.build = { ...config.build } + const userSpecifiedConfig = (config && config.graph) || {} + /** @type {import('./types').DevConfig} */ + const devConfig = { + framework: '#auto', + ...(config.functionsDirectory && { functions: config.functionsDirectory }), + ...(config.build.publish && { publish: config.build.publish }), + ...config.dev, + ...options, + } + + /** @type {Partial} */ + let settings = {} + try { + settings = await detectServerSettings(devConfig, options, site.root) + } catch (error) { + log(NETLIFYDEVERR, error.message) + } + + const framework = settings.framework || userSpecifiedConfig.framework + const isNextjs = framework === 'Next.js' + const functionsPath = isNextjs ? 'pages/api' : getFunctionsDir({ config, options }) || `functions` + const netligraphPath = isNextjs ? 'lib/netligraph' : `${functionsPath}/netligraph` const baseConfig = { ...defaultNetligraphConfig, ...userSpecifiedConfig, netligraphPath } const netligraphImplementationFilename = `${baseConfig.netligraphPath}/index.${baseConfig.extension}` const netligraphTypeDefinitionsFilename = `${baseConfig.netligraphPath}/index.d.ts` const graphQLOperationsSourceFilename = `${baseConfig.netligraphPath}/${sourceOperationsFilename}` const graphQLSchemaFilename = 'netligraphSchema.graphql' + const netligraphRequirePath = isNextjs ? '../../lib/netligraph' : `./netligraph` const fullConfig = { + ...baseConfig, functionsPath, netligraphImplementationFilename, netligraphTypeDefinitionsFilename, graphQLOperationsSourceFilename, graphQLSchemaFilename, - ...baseConfig, + netligraphRequirePath, + framework, } return fullConfig @@ -367,7 +392,6 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl variables, accessToken, ) => { - // return fetchOneGraphPersisted(accessToken, "${fn.id}", "${fn.operationName}", variables) return fetchOneGraph(accessToken, operationsDoc, "${fn.operationName}", variables) } @@ -418,7 +442,7 @@ const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabl } }` - const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! + const source = `// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION! ${imp(netligraphConfig, 'https', 'https')} ${imp(netligraphConfig, 'crypto', 'crypto')} @@ -528,7 +552,7 @@ export function ${fn.fnName}( >;` }) - const source = `// GENERATED VIA \`netlify-plugin-netligraph\`, EDIT WITH CAUTION! + const source = `// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION! ${functionDecls.join('\n\n')} ` @@ -654,18 +678,26 @@ const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, const operation = operations[operationId] if (!operation) { - console.warn(`Operation ${operationId} not found in graphql.`) + console.warn(`Operation ${operationId} not found in graphql.`, Object.keys(operations)) return } const odl = computeOperationDataList({ query: operation.query, variables: [] }) - const source = netlifyFunctionSnippet.generate({ - netligraphConfig, - operationDataList: odl.operationDataList, - schema, - options: handlerOptions, - }) + const source = netligraphConfig.framework === "Next.js" ? + nextjsFunctionSnippet.generate({ + netligraphConfig, + operationDataList: odl.operationDataList, + schema, + options: handlerOptions, + }) + : + netlifyFunctionSnippet.generate({ + netligraphConfig, + operationDataList: odl.operationDataList, + schema, + options: handlerOptions, + }) return { source, operation } } @@ -676,7 +708,7 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) currentOperationsDoc = defaultExampleOperationsDoc } - const { operation, source } = generateHandlerSource({ + const handlerSource = generateHandlerSource({ netligraphConfig, schema, operationsDoc: currentOperationsDoc, @@ -684,6 +716,12 @@ const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) handlerOptions, }) + if (!(handlerSource && handlerSource.source)) { + return + } + + const { operation, source } = handlerSource + const filename = `${netligraphConfig.functionsPath}/${operation.name}.${netligraphConfig.extension}` ensureFunctionsPath(netligraphConfig) diff --git a/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js b/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js new file mode 100644 index 00000000000..41ff35fca6e --- /dev/null +++ b/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js @@ -0,0 +1,366 @@ +const dotProp = require('dot-prop') +const { print } = require('graphql') + +const { munge } = require('./codegen-helpers') + +const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) + +const unnamedSymbols = new Set(['query', 'mutation', 'subscription']) + +const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) + +const addLeftWhitespace = (string, padding) => { + const paddingString = ' '.repeat(padding) + + return string + .split('\n') + .map((line) => paddingString + line) + .join('\n') +} + +const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') + +const snippetOptions = [ + { + id: 'postHttpMethod', + label: 'POST function', + initial: true, + }, + { + id: 'useClientAuth', + label: "Use user's OAuth token", + initial: false, + }, +] + +const operationFunctionName = (operationData) => { + const { type } = operationData + + let prefix = 'unknow' + switch (type) { + case 'query': + prefix = 'fetch' + break + case 'mutation': + prefix = 'execute' + break + case 'subscription': + prefix = 'subscribeTo' + break + default: + break + } + + const fnName = prefix + (prefix.length === 0 ? operationData.name : capitalizeFirstLetter(operationData.name)) + + return fnName +} + +const coercerFor = (type, name) => { + const typeName = print(type).replace(/\W+/gi, '').toLocaleLowerCase() + + switch (typeName) { + case 'string': + return `${name}` + case 'int': + return `parseInt(${name})` + case 'float': + return `parseFloat(${name})` + case 'boolean': + return `${name} === 'true'` + default: + return `${name}` + } +} + +const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { + const invocations = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map((namedOperationData) => { + const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( + (def) => def.variable.name.value, + ) + + const invocationParams = params.map((param) => `${param}: ${munge(param)}`) + + const pluckers = { + get: + dotProp + .get(namedOperationData, 'operationDefinition.variableDefinitions', []) + .map((def) => { + const name = def.variable.name.value + const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) + return `const ${munge(name)} = ${withCoercer};` + }) + .join('\n ') || '', + post: + dotProp + .get(namedOperationData, 'operationDefinition.variableDefinitions', []) + .map((def) => { + const name = def.variable.name.value + return `const ${munge(name)} = eventBodyJson?.${name};` + }) + .join('\n ') || '', + } + + let variableValidation = '' + + let requiredVariableCount = 0 + + if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { + const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions + .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) + .filter(Boolean) + + requiredVariableCount = requiredVariableNames.length + + // TODO: Filter nullable variables + const condition = requiredVariableNames + .map((name) => `${munge(name)} === undefined || ${munge(name)} === null`) + .join(' || ') + + const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') + + variableValidation = ` if (${condition}) { + return res.status(422).json({ + error: 'You must supply parameters for: ${message}' + }), + }` + } + + return `${pluckerStyle === 'get' ? pluckers.get : pluckers.post} + +${requiredVariableCount > 0 ? variableValidation : ''} + + const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name}Data } = + await Netligraph.${operationFunctionName(namedOperationData)}({ ${invocationParams.join(', ')} }, accessToken); + + if (${namedOperationData.name}Errors) { + console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); + } + + console.log(JSON.stringify(${namedOperationData.name}Data, null, 2));` + }) + .join('\n\n') + + return invocations +} + +const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) => { + const invocations = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map((namedOperationData) => { + const whitespace = 8 + + const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( + (def) => def.variable.name.value, + ) + let bodyPayload = '' + + if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { + const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( + (def) => def.variable.name.value, + ) + + const variables = variableNames.map((name) => `"${name}": ${name}`).join(',\n') + + bodyPayload = ` +${variables} +` + } + + const clientAuth = useClientAuth + ? `, + headers: { + ...oneGraphAuth?.authHeaders() + }` + : '' + + return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' + }params) { + const {${params.join(', ')}} = params || {}; + const resp = await fetch(\`/api/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, + { + method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' + ? '' + : `, + body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` + } + }); + + const text = await resp.text(); + + return JSON.parse(text); +}` + }) + .join('\n\n') + + return invocations +} + +const subscriptionHandler = ({ netligraphConfig, operationData }) => `${imp( + netligraphConfig, + '{ getSecrets }', + '@sgrove/netlify-functions', +)} +${imp(netligraphConfig, 'NetlifyGraph', netligraphConfig.netligraphRequirePath)} + +${exp(netligraphConfig, 'handler')} = async (req, res) => { + let secrets = await getSecrets(event); + + const payload = NetlifyGraph.parseAndVerify${operationData.name}Event(event); + + if (!payload) { + return res.status(412).json({ + success: false, + error: 'Unable to verify payload signature', + }) + } + + const { errors: ${operationData.name}Errors, data: ${operationData.name}Data } = payload; + + if (${operationData.name}Errors) { + console.error(${operationData.name}Errors); + } + + console.log(${operationData.name}Data); + + /** + * If you want to unsubscribe from this webhook + * in order to stop receiving new events, + * simply return status 410, e.g.: + * + * return res.status(410).json(null); + */ + + res.setHeader('Content-Type', 'application/json'); + + return res.status(200).json({successfullyProcessedIncomingWebhook: true}) +}; +` + +const imp = (netligraphConfig, name, package) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `const ${name} = require("${package}")` + } + + return `import ${name} from "${package}"` +} + +const exp = (netligraphConfig, name) => { + if (netligraphConfig.moduleType === 'commonjs') { + return `exports.${name}` + } + + return `export const ${name}` +} + +// Snippet generation! +const nextjsFunctionSnippet = { + language: 'JavaScript', + codeMirrorMode: 'javascript', + name: 'Netlify Function', + options: snippetOptions, + generate: (opts) => { + const { netligraphConfig, options } = opts + + const operationDataList = opts.operationDataList.map((operationData, idx) => { + if (!isOperationNamed(operationData)) { + return { + ...operationData, + name: `unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1}`.trim(), + query: `# Consider giving this ${operationData.type} a unique, descriptive +# name in your application as a best practice +${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, + } + } + return operationData + }) + + const firstOperation = operationDataList.find( + (operation) => operation.operationDefinition.kind === 'OperationDefinition', + ) + + if (!firstOperation) { + return '// No operation found' + } + + const filename = `${firstOperation.name}.${netligraphConfig.extension}` + + const isSubscription = firstOperation.type === 'subscription' + + if (isSubscription) { + const result = subscriptionHandler({ + netligraphConfig, + operationData: firstOperation, + }) + + return result + } + + const fetcherInvocation = asyncFetcherInvocation( + operationDataList, + dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', + ) + + const passThroughResults = operationDataList + .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) + .map( + (operationData) => `${operationData.name}Errors: ${operationData.name}Errors, +${operationData.name}Data: ${operationData.name}Data`, + ) + .join(',\n') + + const clientSideCalls = clientSideInvocations( + operationDataList, + dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', + options.useClientAuth, + ) + + const whitespace = 6 + + const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@sgrove/netlify-functions')}; +${imp(netligraphConfig, 'Netligraph', netligraphConfig.netligraphRequirePath)} + +${exp(netligraphConfig, 'handler')} = async (req, res) => { + // By default, all API calls use no authentication + let accessToken = null; + + //// If you want to use the client's accessToken when making API calls on the user's behalf: + // accessToken = event.headers["authorization"]?.split(" ")[1] + + //// If you want to use the API with your own access token: + // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken; + + const eventBodyJson = JSON.parse(req.body || "{}"); + + ${fetcherInvocation} + + res.setHeader('Content-Type', 'application/json'); + + return res.status(200).json({ + success: true, +${addLeftWhitespace(passThroughResults, whitespace)} + }) +}; + +/** + * Client-side invocations: + * Call your Netlify function from the browser (after saving + * the code to \`${filename}\`) with these helpers: + */ + +/** +${clientSideCalls} +*/ + +export default handler;` + + return collapseExtraNewlines(snippet) + }, +} + +module.exports = { nextjsFunctionSnippet } diff --git a/src/lib/one-graph/oneGraphClientGraphQLOperations.js b/src/lib/one-graph/oneGraphClientGraphQLOperations.js new file mode 100644 index 00000000000..5fb1c572bf4 --- /dev/null +++ b/src/lib/one-graph/oneGraphClientGraphQLOperations.js @@ -0,0 +1,338 @@ +const internalOperationsDoc = `mutation CreatePersistedQueryMutation( + $nfToken: String! + $appId: String! + $query: String! + $tags: [String!]! + $description: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createPersistedQuery( + input: { + query: $query + appId: $appId + tags: $tags + description: $description + } + ) { + persistedQuery { + id + } + } + } + } + + query ListPersistedQueries( + $appId: String! + $first: Int! + $after: String + $tags: [String!]! + ) { + oneGraph { + app(id: $appId) { + id + persistedQueries( + first: $first + after: $after + tags: $tags + ) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + query + fixedVariables + freeVariables + allowedOperationNames + tags + description + } + } + } + } + } + + subscription ListPersistedQueriesSubscription( + $appId: String! + $first: Int! + $after: String + $tags: [String!]! + ) { + poll( + onlyTriggerWhenPayloadChanged: true + schedule: { every: { minutes: 1 } } + ) { + query { + oneGraph { + app(id: $appId) { + id + persistedQueries( + first: $first + after: $after + tags: $tags + ) { + pageInfo { + hasNextPage + endCursor + } + nodes { + id + query + fixedVariables + freeVariables + allowedOperationNames + tags + description + } + } + } + } + } + } + } + + query PersistedQueriesQuery( + $nfToken: String! + $appId: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + app(id: $appId) { + persistedQueries { + nodes { + id + query + allowedOperationNames + description + freeVariables + fixedVariables + tags + } + } + } + } + } + + query PersistedQueryQuery( + $nfToken: String! + $appId: String! + $id: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + persistedQuery(appId: $appId, id: $id) { + id + query + allowedOperationNames + description + freeVariables + fixedVariables + tags + } + } + } + + mutation CreateCLISessionMutation( + $nfToken: String! + $appId: String! + $name: String! + $metadata: JSON + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createNetlifyCliSession( + input: { appId: $appId, name: $name, metadata: metadata } + ) { + session { + id + appId + netlifyUserId + name + } + } + } + } + + mutation UpdateCLISessionMetadataMutation( + $nfToken: String! + $sessionId: String! + $metadata: JSON! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + updateNetlifyCliSession( + input: { id: $sessionId, metadata: $metadata } + ) { + session { + id + name + metadata + } + } + } + } + + mutation CreateCLISessionEventMutation( + $nfToken: String! + $sessionId: String! + $payload: JSON! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createNetlifyCliTestEvent( + input: { + data: { payload: $payload } + sessionId: $sessionId + } + ) { + event { + id + createdAt + sessionId + } + } + } + } + + query CLISessionEventsQuery( + $nfToken: String! + $sessionId: String! + $first: Int! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + netlifyCliEvents(sessionId: $sessionId, first: $first) { + __typename + createdAt + id + sessionId + ... on OneGraphNetlifyCliSessionLogEvent { + id + message + sessionId + createdAt + } + ... on OneGraphNetlifyCliSessionTestEvent { + id + createdAt + payload + sessionId + } + } + } + } + + mutation AckCLISessionEventMutation( + $nfToken: String! + $sessionId: String! + $eventIds: [String!]! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + ackNetlifyCliEvents( + input: { eventIds: $eventIds, sessionId: $sessionId } + ) { + events { + id + } + } + } + } + + query AppSchemaQuery( + $nfToken: String! + $appId: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + app(id: $appId) { + graphQLSchema { + appId + createdAt + id + services { + friendlyServiceName + logoUrl + service + slug + supportsCustomRedirectUri + supportsCustomServiceAuth + supportsOauthLogin + } + updatedAt + } + } + } + } + + mutation UpsertAppForSiteMutation( + $nfToken: String! + $siteId: String! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + upsertAppForNetlifySite( + input: { netlifySiteId: $siteId } + ) { + org { + id + name + } + app { + id + name + corsOrigins + customCorsOrigins { + friendlyServiceName + displayName + encodedValue + } + } + } + } + } + + mutation CreateNewSchemaMutation( + $nfToken: String! + $input: OneGraphCreateGraphQLSchemaInput! + ) { + oneGraph( + auths: { netlifyAuth: { oauthToken: $nfToken } } + ) { + createGraphQLSchema(input: $input) { + app { + graphQLSchema { + id + } + } + graphqlSchema { + id + services { + friendlyServiceName + logoUrl + service + slug + supportsCustomRedirectUri + supportsCustomServiceAuth + supportsOauthLogin + } + } + } + } + }` + +module.exports = { + internalOperationsDoc +} \ No newline at end of file diff --git a/tests/assets/netligraphOperationsLibrary.graphql b/tests/assets/netlifyGraphOperationsLibrary.graphql similarity index 100% rename from tests/assets/netligraphOperationsLibrary.graphql rename to tests/assets/netlifyGraphOperationsLibrary.graphql diff --git a/tests/assets/netligraphSchema.graphql b/tests/assets/netlifyGraphSchema.graphql similarity index 100% rename from tests/assets/netligraphSchema.graphql rename to tests/assets/netlifyGraphSchema.graphql diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js index 28694c5d5e8..3c54586ad26 100644 --- a/tests/graph-codegen.test.js +++ b/tests/graph-codegen.test.js @@ -13,11 +13,11 @@ const { const { normalize } = require('./utils/snapshots') const netligraphConfig = { - extension: 'mjs', + extension: 'js', netligraphPath: 'netlify', moduleType: 'commonjs', functionsPath: 'functions', - netligraphImplementationFilename: 'dummy/index.mjs', + netligraphImplementationFilename: 'dummy/index.js', netligraphTypeDefinitionsFilename: 'dummy/index.d.ts', graphQLOperationsSourceFilename: 'dummy/netligraphOperationsLibrary.graphql', graphQLSchemaFilename: 'dummy/netligraphSchema.graphql', @@ -26,26 +26,25 @@ const netligraphConfig = { const loadAsset = (filename) => fs.readFileSync(join(__dirname, 'assets', filename), 'utf8') test('netlify graph function codegen', (t) => { - const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schemaString = loadAsset('../assets/netlifyGraphSchema.graphql') const schema = buildSchema(schemaString) - const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + const appOperationsDoc = loadAsset('../assets/netlifyGraphOperationsLibrary.graphql') const parsedDoc = parse(appOperationsDoc, { noLocation: true, }) const operations = extractFunctionsFromOperationDoc(parsedDoc) const generatedFunctions = generateFunctionsSource(netligraphConfig, schema, appOperationsDoc, operations) - console.log('!!!!!!!!!!!!!!!!!!!!! generatedFunctions', generatedFunctions) t.snapshot(normalize(JSON.stringify(generatedFunctions))) }) test('netlify graph handler codegen', (t) => { - const schemaString = loadAsset('../assets/netligraphSchema.graphql') + const schemaString = loadAsset('../assets/netlifyGraphSchema.graphql') const schema = buildSchema(schemaString) - const appOperationsDoc = loadAsset('../assets/netligraphOperationsLibrary.graphql') + const appOperationsDoc = loadAsset('../assets/netlifyGraphOperationsLibrary.graphql') // From the asset GraphQL file const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' @@ -58,7 +57,5 @@ test('netlify graph handler codegen', (t) => { handlerOptions, }) - console.log('!!!!!!!!!!!!!!!!!!!!! generatedHandler', generatedHandler) - t.snapshot(normalize(JSON.stringify(generatedHandler))) }) diff --git a/tests/snapshots/graph-codegen.test.js.md b/tests/snapshots/graph-codegen.test.js.md index aebea24783e..afcfdc972ba 100644 --- a/tests/snapshots/graph-codegen.test.js.md +++ b/tests/snapshots/graph-codegen.test.js.md @@ -8,10 +8,10 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 - '{"clientSource":"// GENERATED VIA `netlify-plugin-netligraph`, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n // return fetchOneGraphPersisted(accessToken, /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", /"ExampleQuery/", variables)/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated Netligraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA `netlify-plugin-netligraph`, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/n package: string/n},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/n package: string/n}","returnSignature":"{/n/**/n* Any data retrieved by the function be returned here/n*//n data?: {/n /n/**/n* The root for npm queries/n*//n npm: {/n /n/**/n* Find a npm package member by its npm name, e.g. `/"fela/"`/n*//n package?: {/n /n/**/n* The package name, used as an ID in CouchDB/n*//n id?: string; /n/**/n* The first 64K of the README data for the most-recently published version of the package/n*//n readme?: string; /n/**/n* The license for this package/n*//n license: {/n /n/**/n* A url for the full license/n*//n url?: string/n }/n }/n }/n }; /n/**/n* Any errors in the function will be returned here/n*//n errors?: Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netligraph","loc":{"start":39,"end":49}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":50,"end":52}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":54,"end":92}},"loc":{"start":50,"end":92}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":94,"end":97}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":99,"end":125}},"loc":{"start":94,"end":125}}],"loc":{"start":38,"end":126}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":131,"end":134}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":141,"end":148}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":149,"end":153}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":156,"end":163}},"loc":{"start":155,"end":163}},"loc":{"start":149,"end":163}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":173,"end":175}},"arguments":[],"directives":[],"loc":{"start":173,"end":175}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":182,"end":188}},"arguments":[],"directives":[],"loc":{"start":182,"end":188}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":195,"end":202}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":213,"end":216}},"arguments":[],"directives":[],"loc":{"start":213,"end":216}}],"loc":{"start":203,"end":224}},"loc":{"start":195,"end":224}}],"loc":{"start":165,"end":230}},"loc":{"start":141,"end":230}}],"loc":{"start":135,"end":234}},"loc":{"start":131,"end":234}}],"loc":{"start":127,"end":236}},"loc":{"start":0,"end":236}}}]}' + '{"clientSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated Netligraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/n package: string/n},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/n package: string/n}","returnSignature":"{/n/**/n* Any data retrieved by the function be returned here/n*//n data?: {/n /n/**/n* The root for npm queries/n*//n npm: {/n /n/**/n* Find a npm package member by its npm name, e.g. `/"fela/"`/n*//n package?: {/n /n/**/n* The package name, used as an ID in CouchDB/n*//n id?: string; /n/**/n* The first 64K of the README data for the most-recently published version of the package/n*//n readme?: string; /n/**/n* The license for this package/n*//n license: {/n /n/**/n* A url for the full license/n*//n url?: string/n }/n }/n }/n }; /n/**/n* Any errors in the function will be returned here/n*//n errors?: Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netligraph","loc":{"start":39,"end":49}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":50,"end":52}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":54,"end":92}},"loc":{"start":50,"end":92}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":94,"end":97}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":99,"end":125}},"loc":{"start":94,"end":125}}],"loc":{"start":38,"end":126}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":131,"end":134}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":141,"end":148}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":149,"end":153}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":156,"end":163}},"loc":{"start":155,"end":163}},"loc":{"start":149,"end":163}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":173,"end":175}},"arguments":[],"directives":[],"loc":{"start":173,"end":175}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":182,"end":188}},"arguments":[],"directives":[],"loc":{"start":182,"end":188}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":195,"end":202}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":213,"end":216}},"arguments":[],"directives":[],"loc":{"start":213,"end":216}}],"loc":{"start":203,"end":224}},"loc":{"start":195,"end":224}}],"loc":{"start":165,"end":230}},"loc":{"start":141,"end":230}}],"loc":{"start":135,"end":234}},"loc":{"start":131,"end":234}}],"loc":{"start":127,"end":236}},"loc":{"start":0,"end":236}}}]}' ## netlify graph handler codegen > Snapshot 1 - '{"source":"const { getSecrets } = require(/"@sgrove/netlify-functions/");/nconst Netligraph = require(/"./netligraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await Netligraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.mjs`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' + '{"source":"const { getSecrets } = require(/"@sgrove/netlify-functions/");/nconst Netligraph = require(/"./netligraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await Netligraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.js`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' diff --git a/tests/snapshots/graph-codegen.test.js.snap b/tests/snapshots/graph-codegen.test.js.snap index 264f7468f1085f0e302637c25190306238204e45..e64b62c0cb016c511d44b18864924ce0e7a52807 100644 GIT binary patch literal 3337 zcmV+k4fgUuRzVTQ{>15gI4_sr?0pLJ@Na|tHmKDijY$cAQT8uLpk1B!0rHBXwXgnyh3Kw1U z@e`fts_SmL>9V`dbh7Fvbkpgot8RPFeE=5#DalRSbjH>~B=33N^SbBU+g@5)dUxrU zSI$31U;pG6fB*BJp8ou||NPZEOZfN0_m-CaVEyK6<9PV{zy0iY7xu6Ja{LZk{j0sS z^qr;eGpu*MxAcQ|zx&>mmPA?Hr&?R~tnvfaUA~AiL`7t#d?Zf0e zjwaLzX&U&0>GB{8`>799j%MC>LQa2x!1LH04@+{lEuKdQzgk z1ny+yUijg;B0LHi1yII--=jk}7_^1TW!Y?R_K>i1iO(p{Wyt`<;TZ|2lm*F6UuqnJ%Ev~zJh&R&3J?q#HVAof8n0f+#)YC z8c&bY80>oF#_ouwV4rPUpb1)kK#YQNYl~zdM1vnv59O2~=wp+I4S_IBvpAH$2uV^m z&5}ovN84nz*|g+3YTV`z-^W}AaU81 zsw0~#E5gRtyD`bwzS|^?Gn%`;uKiqh%tPOs>mlK8>35Ow?IH+uR^P&OIh~HF4pHSo zEXlg{CFGPYLxz1~;LMm2oV#~14eyditUxU%zDJ24P9jd5v^fyVBdZ7pyj&AmuE`*d zMyzu5;^-1e7F2@)1TRV42^fn}v-$^S#X57QZq5EOIWu{=0UW46LmG^6V@T!*^_-Ab z@Oq}EzTpSIFD3O+k)-Z`?-KK zVcFalki5glYeT7e-03=+^qq(~DIHIvTso>^LdCh?cjLe&IrdN=@lW~z+JbA)W$5F=6mv649PX3@)sl#4Iwg>!kxuIUWtWsMM0Wr zvstMn`s0tTG=B0Q%f<*!&&QpE&a<6vXOBGJ-ysK`?$iB`z92iFbq_yft9za2qx(wHA5PrB_Y`~aN`I?;4&4O1WZ`0lZ-a;2 zls*B;hR#LnmhhusX=h_-3aG(!t*q&`URgo6$|cV~hx9Y_A$_Hr#jZK@4p+lY{SkQV z*d5T$%ghZ7nK--IU_fIV4-W$sw+QEB%|obIPvUY^_Hk>2-e5`G0IRk8VaiQnk;aNi z9uPQ%sU1d_hDjV)T3I2>qy_(-yJU^P9y6##aAqx14-#ucY`Kk8QTh0 z@MTixbvN0I`rz)fH@DcHu?9idg`MAQ78#HCJqzr_j8xRHi5p`f+~rkDfb+2eJHsNC zaP)e@dn^T4bX~lUQ1UKE6l&YHtuPP~tv?bCTK9$qEk}Gx!}D|qs6uNyU<;NKBw|m8 zT){#E*@5UshsRyL+B6PJib00bC`;Rf#e>RS*dh*qvCa;cw&TFYCKSgyJ|Fa>k;A^d z47OoMr@ptPlMe`Ug31LO9AWwwC#47v=_NUWEcc1#Q0aL|} zc}5wapQRYVBFID~0&CRfNP)(O*`b@HWEm})iI zBp-_DH{UCCugm1{6Y`|nJreT<>x^MQ|Dd9Zr7|^@U#5}|MH(gG6GO-O4l2CSA7Z4T`GJvM!Z+%Iq$$PDChRS*ltda=;>Vp)?Wv^{pcU^ulQzO^Y3g7%2Rnm-RW4 zSz>tvxtnw4U&ellwqeO_7VF>&E)vmal?o@hA3*~9NeTkwMOS$|s^PI1RfcpHP*B^U zR^qq(SUG^2ZHe0AyS;#7ohVIKV|N-vu2)nW;Bty*O2JK`ZkHG#s3fXANAj#vIIL|yqNyTIcV4MA(GwG=YW^?M}XFEqvPCxJLJ~=%69M%%Rp%%^u*`3*rM>lq`eD-@Mz||{2XI6D&MgMRC^Rs5gj~|z zFp4guL3CxdxT!_2jL*iEFrQVJ!xGUTyG>m$io5h-?N$rjSIxp|{uX|fI+hY%MJ`Vc z7R0eC3_JZ?P!V8wMbEC_$X(JMQgTj1WCF*I@-h?nz1RhPm1l!ol*2FbM6r@rYO-)} z*1&t=bb(L@|JTgZCJQZBv8;IG0ing6-oN=`B&_U`)s+UpuATK)z)(%tIoHX6eyi)` z5x9#DZu)1Te9WONwLZ4R3n)@WH}oTlx=PFiDSJ;}vuYH{f;mvZe49wKktk z`SxKi)wtd+U}js+1`iPFO6Ufvg;VyJfi{nQ@R&z>Q+CmutJ9;xApjdvEU7G#kZN10 z`#DRD?>K_mfR{u#&Emd&ng}{rnMd`JA9@fEh%aA5Ms(DJcmjR=G+_`NgrN&a3aW)FNv@m+43;1+A#O@{M^V-v?(GU@zLy*Cewod{kHMAetDoSV z7uxArXJ_xz4mTq17}rKok}k&-hVT?0qOxA#Cqoc8!7dU^DoBM&LM9*K7s-_)Jr@C$ zxJ)d-^ESW3Mo+2Q00wl4EocF(gi3KSApa?vV7TyiF|=7JOfG$3ydYLM2?*JVV|V(% z4W|!*^~3w@=3R17a!_l(c)d$_FQFf*A^%yGk-K!QH7|a?aZPQk<+XmjHK(estz8Q)^h5Bs;-5Ly zrLobHYHh6DB8aZ1eocLNFH_g)UNb*bYvFRUP8I6c)JZfwb)`0?dz&lG|BGychOB

oznhLIaW<7_uR_0|$Lj~8#TLt+%>8*weu9G)6a`<|k Td_@J$PGmZW#)_PmLSJhovS$T8i*Vpzx zCSU*TSAYM@pFjTP@BjImH&*cP$8WE!{HgJ~uZ@%OAOH4?KU`YB{p-maZ1vP$S^2@r z4;j`QZ>{|3&9~mZ*5WXYhE(fn!!U>wa!oF1azcj@O=7Yj+a#i|QZJ&0t-T*#MB$9u z0Zn{wG;fa5V3>G7WozbRJK*$(2)u}#>9{~^aViD?bUT3Gucu*@#MameT%SgO?!@z8 zNDMloLDC?=FQKm!lWadB*LFaNZIit@ap}lOeSkZ@Pj-(F$Pm87B#kKvLgJ*!7^uCW zgPI|gPZQz{hcu4+;Ux_~OpyBiV>{q1f$71B%)^viIYB~_kZ}SgWaxXqNskNESHPW2 zoJ%jbP=tp8qX5bX@CS74_@k~+xhR|M%^Fk3rBVFS)==Lt@_x?M)lPS;cMPjC^@2x8PJA|XhL_F-%`EaNrP2H( ziNLPMPUK8z0`}Rl1e&1rM#RV|x3@_eKs0y(bx}?Mf<88R*boTAB#i?3i;y^Rk~DrA zy0lBy+Uv*bdx#Wm*}cS-NHGnxAIr)Y~FTWb*4Nt_~NA676kIYaKqJnO6xO@?C?-?%11 zpKflWMMI4UQ!#K=iOi0uZ|GBt>1&kiRHr<8p+VZFS>82r@xzOoc;GgR9FVx^O4X6= z)m35Ro81_vY~NjyL@CW&U)8?W9d+pYwH^}gmVOr*-_3(iXZ0;en#p`hb%-hlVoBDm zFCnLN88Yk>182dEU_X3_Y50&lWd*7kdoCqjFbg?t+~q(lkE|jb@^VdNxhA71oUqC< zh{7uH+#k)b6LK?EnBIvk8?ea%ybqeL{G;z7ZJo-sAfZA%`w0I=gQn|_hRwA{olbMh-Ex|v&f3=IaIiVt+G+z~096LC)y=`GOXFeWO*unt z7qkRbSv^JX#ep-8$6->GtGyD${8Ric1hMf>RyBBCeqfUK^F!S5n7QtvxvfDN3x|ll zOglIqxHE$3M0!PtH*nWoBDFDdr+KdY7D0ARsQd+4L<5LSrE;f{pOs?aTv3r0+G0`Y ziMl_z*7(tXB0D2EKA-gtdoOnTy?yf8!7e$MEzs0YFT9|co8`Pgdiw``^7%pkIeEJK zY5(Bp@PX`&#z``b3vCfwVf_%t7)J9cm_<*DOAgEPvRiDpS}=w?BIguJ|Lkl86KBwi%Zwxw`j@bVI&GexxAkdiC9CoV|23 zqLGEChk=SW2ac6_xVoBTptF;F~!cEd3tyPn}N8lKyRuEnpCb3~@ zb(J(p2mad+$vS~OrcjIE%vz?%3rImMRvvcJAqjo=7EQ!5_7$w)%cRcgZoD53!QJQI z-C}#r8U$e%c7C&AWI8=?8(=49q`ZdBoCpiy92zq*HDbmAjm`| zo-D0DA?>X#Qw>0&CRfPF*9p^{wep2k7;81zB_E0LH`^<8uT66F z5qaM4AB%y5wZ<@^zgtqJp)xgbgZ*WrSfLQs4bX(_s+VWo!WGvJr1T!UzalJART%Kj`7Un0{SlTk3$wT>FXhPl zN!)}!C5)(29+mNro8pF`xFr^9Lx3IV-#7#qm#)I>`v~~&M?iUk6UC@7$cfTe9_83Q zshA7_Y_Z=plb&ke!(RX6gJ&;xkDs4?-rIYAbo9~LN$=^4UcY|MD_&0PubZ-GXy(oM zX=QrMZ+q1_iVrOHt+lkbzEnSKx`PmRg%1HvfZw^rU>Jo429J;{Iv9uHr8J1H%oew` z=%w-5xEAJX;CavMVt*!VWUuKvhF(jQZDK?7t0$DQ&dk20Xr%06`3fTUm%JiDX;Qm z!Q!le_tL2bp*H@nxTQ;$daUG8@wfy+^Si`<^QlT$*&%DIErQbm>+67_S}1Dnu>t)~ z_t+C~7aJJ$PXqaiMBVJt*pyXyp*1wTV&2D>5|3@^KX|bvJ${2%&?(%2H{Ayp(ni$y zY$oR0hrN{ZX(xx7T{)Ayhe+2#H&88@vsV%tg?K=G`3y6mlL5pN=;I|ZgWv!T?XPuV zk#k!cQQxt(bHP_oEmcW!>pZM|Gi9@xd!#;#*>6E|5 zW`s--=8vD&2=v1t;zFYrC0ci*p;07iJz6aClq;VOg7Ie+u#%>V0ut|5)r5O1TD4b& zTJ23#s|aju6@b`LsuIA^;C;L(*Q!7e?+Vb(n((Z6$Z609^ zGh@K*{25!#`P{J)8Gxuut;My3=4-hZEPj8-av1W2#pUs>btkc-*i&3SF6*KdUV#x zp;wOi|B05%s!?k#({%08H&2p)|18VMT)N(=i=S^?Q(Nm5U>RMqwM8^O7L2>w?5 zQ&U}9n;ogv=K39i=w|AB>ce}Ps!osE*`Znqm)mtJQQuQ1(ezZ6+LG>VueSd$vJD!t z>hao=4r#YG?rpjfbrrsv!P{$feZ{&8u6kx8gLhWzGNh$~tK^-WyiR(jrGl&E?ad6n VQ6*nhfs50{zX0`GjDnXh004f$fw}+y From 94d5e93d41805853c72eda502a5991bdee489768 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 13 Jan 2022 13:55:02 -0800 Subject: [PATCH 37/58] chore: fix filenames --- src/lib/one-graph/client.js | 2 +- .../netlify-graph-code-exporter-snippets.js | 1 + src/lib/one-graph/netlify-graph.js | 21 +- .../nextjs-graph-code-exporter-snippets.js | 366 ------------------ ...=> one-graph-client-graphql-operations.js} | 0 5 files changed, 8 insertions(+), 382 deletions(-) delete mode 100644 src/lib/one-graph/nextjs-graph-code-exporter-snippets.js rename src/lib/one-graph/{oneGraphClientGraphQLOperations.js => one-graph-client-graphql-operations.js} (100%) diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 73156285476..481d898b517 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -16,7 +16,7 @@ const { writeGraphQLOperationsSourceFile, writeGraphQLSchemaFile, } = require('./netlify-graph') -const { internalOperationsDoc } = require("./oneGraphClientGraphQLOperations") +const { internalOperationsDoc } = require("./one-graph-client-graphql-operations") const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' diff --git a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js index 7762ea30b0d..56f620cdc93 100644 --- a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js +++ b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js @@ -1,5 +1,6 @@ const dotProp = require('dot-prop') const { parse, print } = require('graphql') + const { error } = require('../../utils') const { munge } = require('./codegen-helpers') diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js index 64a9efc99f5..2059bcfce87 100644 --- a/src/lib/one-graph/netlify-graph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -13,7 +13,6 @@ const { typeScriptSignatureForOperationVariables, } = require('./graphql-helpers') const { computeOperationDataList, netlifyFunctionSnippet } = require('./netlify-graph-code-exporter-snippets') -const { nextjsFunctionSnippet } = require('./nextjs-graph-code-exporter-snippets') const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) @@ -684,20 +683,12 @@ const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, const odl = computeOperationDataList({ query: operation.query, variables: [] }) - const source = netligraphConfig.framework === "Next.js" ? - nextjsFunctionSnippet.generate({ - netligraphConfig, - operationDataList: odl.operationDataList, - schema, - options: handlerOptions, - }) - : - netlifyFunctionSnippet.generate({ - netligraphConfig, - operationDataList: odl.operationDataList, - schema, - options: handlerOptions, - }) + const source = netlifyFunctionSnippet.generate({ + netligraphConfig, + operationDataList: odl.operationDataList, + schema, + options: handlerOptions, + }) return { source, operation } } diff --git a/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js b/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js deleted file mode 100644 index 41ff35fca6e..00000000000 --- a/src/lib/one-graph/nextjs-graph-code-exporter-snippets.js +++ /dev/null @@ -1,366 +0,0 @@ -const dotProp = require('dot-prop') -const { print } = require('graphql') - -const { munge } = require('./codegen-helpers') - -const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) - -const unnamedSymbols = new Set(['query', 'mutation', 'subscription']) - -const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) - -const addLeftWhitespace = (string, padding) => { - const paddingString = ' '.repeat(padding) - - return string - .split('\n') - .map((line) => paddingString + line) - .join('\n') -} - -const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') - -const snippetOptions = [ - { - id: 'postHttpMethod', - label: 'POST function', - initial: true, - }, - { - id: 'useClientAuth', - label: "Use user's OAuth token", - initial: false, - }, -] - -const operationFunctionName = (operationData) => { - const { type } = operationData - - let prefix = 'unknow' - switch (type) { - case 'query': - prefix = 'fetch' - break - case 'mutation': - prefix = 'execute' - break - case 'subscription': - prefix = 'subscribeTo' - break - default: - break - } - - const fnName = prefix + (prefix.length === 0 ? operationData.name : capitalizeFirstLetter(operationData.name)) - - return fnName -} - -const coercerFor = (type, name) => { - const typeName = print(type).replace(/\W+/gi, '').toLocaleLowerCase() - - switch (typeName) { - case 'string': - return `${name}` - case 'int': - return `parseInt(${name})` - case 'float': - return `parseFloat(${name})` - case 'boolean': - return `${name} === 'true'` - default: - return `${name}` - } -} - -const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { - const invocations = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map((namedOperationData) => { - const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( - (def) => def.variable.name.value, - ) - - const invocationParams = params.map((param) => `${param}: ${munge(param)}`) - - const pluckers = { - get: - dotProp - .get(namedOperationData, 'operationDefinition.variableDefinitions', []) - .map((def) => { - const name = def.variable.name.value - const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) - return `const ${munge(name)} = ${withCoercer};` - }) - .join('\n ') || '', - post: - dotProp - .get(namedOperationData, 'operationDefinition.variableDefinitions', []) - .map((def) => { - const name = def.variable.name.value - return `const ${munge(name)} = eventBodyJson?.${name};` - }) - .join('\n ') || '', - } - - let variableValidation = '' - - let requiredVariableCount = 0 - - if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { - const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions - .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) - .filter(Boolean) - - requiredVariableCount = requiredVariableNames.length - - // TODO: Filter nullable variables - const condition = requiredVariableNames - .map((name) => `${munge(name)} === undefined || ${munge(name)} === null`) - .join(' || ') - - const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') - - variableValidation = ` if (${condition}) { - return res.status(422).json({ - error: 'You must supply parameters for: ${message}' - }), - }` - } - - return `${pluckerStyle === 'get' ? pluckers.get : pluckers.post} - -${requiredVariableCount > 0 ? variableValidation : ''} - - const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name}Data } = - await Netligraph.${operationFunctionName(namedOperationData)}({ ${invocationParams.join(', ')} }, accessToken); - - if (${namedOperationData.name}Errors) { - console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); - } - - console.log(JSON.stringify(${namedOperationData.name}Data, null, 2));` - }) - .join('\n\n') - - return invocations -} - -const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) => { - const invocations = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map((namedOperationData) => { - const whitespace = 8 - - const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( - (def) => def.variable.name.value, - ) - let bodyPayload = '' - - if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { - const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( - (def) => def.variable.name.value, - ) - - const variables = variableNames.map((name) => `"${name}": ${name}`).join(',\n') - - bodyPayload = ` -${variables} -` - } - - const clientAuth = useClientAuth - ? `, - headers: { - ...oneGraphAuth?.authHeaders() - }` - : '' - - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { - const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/api/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, - { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' - ? '' - : `, - body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } - }); - - const text = await resp.text(); - - return JSON.parse(text); -}` - }) - .join('\n\n') - - return invocations -} - -const subscriptionHandler = ({ netligraphConfig, operationData }) => `${imp( - netligraphConfig, - '{ getSecrets }', - '@sgrove/netlify-functions', -)} -${imp(netligraphConfig, 'NetlifyGraph', netligraphConfig.netligraphRequirePath)} - -${exp(netligraphConfig, 'handler')} = async (req, res) => { - let secrets = await getSecrets(event); - - const payload = NetlifyGraph.parseAndVerify${operationData.name}Event(event); - - if (!payload) { - return res.status(412).json({ - success: false, - error: 'Unable to verify payload signature', - }) - } - - const { errors: ${operationData.name}Errors, data: ${operationData.name}Data } = payload; - - if (${operationData.name}Errors) { - console.error(${operationData.name}Errors); - } - - console.log(${operationData.name}Data); - - /** - * If you want to unsubscribe from this webhook - * in order to stop receiving new events, - * simply return status 410, e.g.: - * - * return res.status(410).json(null); - */ - - res.setHeader('Content-Type', 'application/json'); - - return res.status(200).json({successfullyProcessedIncomingWebhook: true}) -}; -` - -const imp = (netligraphConfig, name, package) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `const ${name} = require("${package}")` - } - - return `import ${name} from "${package}"` -} - -const exp = (netligraphConfig, name) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `exports.${name}` - } - - return `export const ${name}` -} - -// Snippet generation! -const nextjsFunctionSnippet = { - language: 'JavaScript', - codeMirrorMode: 'javascript', - name: 'Netlify Function', - options: snippetOptions, - generate: (opts) => { - const { netligraphConfig, options } = opts - - const operationDataList = opts.operationDataList.map((operationData, idx) => { - if (!isOperationNamed(operationData)) { - return { - ...operationData, - name: `unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1}`.trim(), - query: `# Consider giving this ${operationData.type} a unique, descriptive -# name in your application as a best practice -${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, - } - } - return operationData - }) - - const firstOperation = operationDataList.find( - (operation) => operation.operationDefinition.kind === 'OperationDefinition', - ) - - if (!firstOperation) { - return '// No operation found' - } - - const filename = `${firstOperation.name}.${netligraphConfig.extension}` - - const isSubscription = firstOperation.type === 'subscription' - - if (isSubscription) { - const result = subscriptionHandler({ - netligraphConfig, - operationData: firstOperation, - }) - - return result - } - - const fetcherInvocation = asyncFetcherInvocation( - operationDataList, - dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', - ) - - const passThroughResults = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map( - (operationData) => `${operationData.name}Errors: ${operationData.name}Errors, -${operationData.name}Data: ${operationData.name}Data`, - ) - .join(',\n') - - const clientSideCalls = clientSideInvocations( - operationDataList, - dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', - options.useClientAuth, - ) - - const whitespace = 6 - - const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@sgrove/netlify-functions')}; -${imp(netligraphConfig, 'Netligraph', netligraphConfig.netligraphRequirePath)} - -${exp(netligraphConfig, 'handler')} = async (req, res) => { - // By default, all API calls use no authentication - let accessToken = null; - - //// If you want to use the client's accessToken when making API calls on the user's behalf: - // accessToken = event.headers["authorization"]?.split(" ")[1] - - //// If you want to use the API with your own access token: - // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken; - - const eventBodyJson = JSON.parse(req.body || "{}"); - - ${fetcherInvocation} - - res.setHeader('Content-Type', 'application/json'); - - return res.status(200).json({ - success: true, -${addLeftWhitespace(passThroughResults, whitespace)} - }) -}; - -/** - * Client-side invocations: - * Call your Netlify function from the browser (after saving - * the code to \`${filename}\`) with these helpers: - */ - -/** -${clientSideCalls} -*/ - -export default handler;` - - return collapseExtraNewlines(snippet) - }, -} - -module.exports = { nextjsFunctionSnippet } diff --git a/src/lib/one-graph/oneGraphClientGraphQLOperations.js b/src/lib/one-graph/one-graph-client-graphql-operations.js similarity index 100% rename from src/lib/one-graph/oneGraphClientGraphQLOperations.js rename to src/lib/one-graph/one-graph-client-graphql-operations.js From 1cfa0de5223ac314aa08227ea16e6c89b924519b Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 13 Jan 2022 13:56:11 -0800 Subject: [PATCH 38/58] chore: fix formatting --- src/commands/dev/dev.js | 10 +-- src/lib/one-graph/client.js | 54 ++++++++-------- src/lib/one-graph/graphql-helpers.js | 64 +++++++++---------- .../netlify-graph-code-exporter-snippets.js | 19 +++--- .../one-graph-client-graphql-operations.js | 4 +- 5 files changed, 76 insertions(+), 75 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 3d5d4723034..c20af5f2d91 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -107,12 +107,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 481d898b517..21f815debd1 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -16,8 +16,7 @@ const { writeGraphQLOperationsSourceFile, writeGraphQLSchemaFile, } = require('./netlify-graph') -const { internalOperationsDoc } = require("./one-graph-client-graphql-operations") - +const { internalOperationsDoc } = require('./one-graph-client-graphql-operations') const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' @@ -87,13 +86,7 @@ const fetchOneGraphSchema = async (appId, enabledServices) => { * @param {object} config.variables The variables to pass to the GraphQL operation */ const fetchOneGraph = async (config) => { - const { - accessToken, - appId, - operationName, - query, - variables - } = config + const { accessToken, appId, operationName, query, variables } = config const payload = { query, @@ -134,13 +127,7 @@ const fetchOneGraph = async (config) => { * @param {object} config.variables The variables to pass to the GraphQL operation */ const fetchOneGraphPersisted = async (config) => { - const { - accessToken, - appId, - docId, - operationName, - variables, - } = config; + const { accessToken, appId, docId, operationName, variables } = config const payload = { doc_id: docId, @@ -172,7 +159,7 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { nfToken: authToken, appId, id: docId, - } + }, }) const persistedQuery = response.data && response.data.oneGraph && response.data.oneGraph.persistedQuery @@ -192,7 +179,7 @@ const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { nfToken: authToken, sessionId, first: desiredEventCount, - } + }, }) if (next.errors) { @@ -290,7 +277,7 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { appId, query: internalOperationsDoc, operationName: 'CreateCLISessionMutation', - variables: payload + variables: payload, }) const session = @@ -304,14 +291,15 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata) => { const result = await fetchOneGraph({ - accessToken: null, appId, + accessToken: null, + appId, query: internalOperationsDoc, operationName: 'UpdateCLISessionMetadataMutation', variables: { nfToken: netlifyToken, sessionId, metadata, - } + }, }) const session = @@ -333,7 +321,7 @@ const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => nfToken: authToken, sessionId, eventIds, - } + }, }) const events = result.data && result.data.oneGraph && result.data.oneGraph.ackNetlifyCliEvents @@ -353,7 +341,7 @@ const createPersistedQuery = async (netlifyToken, { appId, description, document query: document, tags, description, - } + }, }) const persistedQuery = @@ -495,7 +483,7 @@ const fetchAppSchema = async (authToken, siteId) => { variables: { nfToken: authToken, appId: siteId, - } + }, }) return result.data && result.data.oneGraph && result.data.oneGraph.app && result.data.oneGraph.app.graphQLSchema @@ -510,10 +498,15 @@ const upsertAppForSite = async (authToken, siteId) => { variables: { nfToken: authToken, siteId, - } + }, }) - return result.data && result.data.oneGraph && result.data.oneGraph.upsertAppForNetlifySite && result.data.oneGraph.upsertAppForNetlifySite.app + return ( + result.data && + result.data.oneGraph && + result.data.oneGraph.upsertAppForNetlifySite && + result.data.oneGraph.upsertAppForNetlifySite.app + ) } const createNewAppSchema = async (nfToken, input) => { @@ -525,10 +518,15 @@ const createNewAppSchema = async (nfToken, input) => { variables: { nfToken, input, - } + }, }) - return result.data && result.data.oneGraph && result.data.oneGraph.createGraphQLSchema && result.data.oneGraph.createGraphQLSchema.graphqlSchema + return ( + result.data && + result.data.oneGraph && + result.data.oneGraph.createGraphQLSchema && + result.data.oneGraph.createGraphQLSchema.graphqlSchema + ) } const ensureAppForSite = async (authToken, siteId) => { diff --git a/src/lib/one-graph/graphql-helpers.js b/src/lib/one-graph/graphql-helpers.js index fe85c397a1f..b477d2513b6 100644 --- a/src/lib/one-graph/graphql-helpers.js +++ b/src/lib/one-graph/graphql-helpers.js @@ -406,28 +406,28 @@ const patchSubscriptionWebhookField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'String', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'String', + value: 'netligraphWebhookUrl', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later @@ -489,28 +489,28 @@ const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { const variableDefinitions = hasWebhookVariableDefinition ? definition.variableDefinitions : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', + ...(definition.variableDefinitions || []), + { + kind: 'VariableDefinition', type: { - kind: 'NamedType', + kind: 'NonNullType', + type: { + kind: 'NamedType', + name: { + kind: 'Name', + value: 'OneGraphSubscriptionSecretInput', + }, + }, + }, + variable: { + kind: 'Variable', name: { kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', + value: 'netligraphWebhookSecret', }, }, }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ] + ] return { ...definition, // @ts-ignore: Handle edge cases later diff --git a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js index 56f620cdc93..cdd06be1ca8 100644 --- a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js +++ b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js @@ -334,17 +334,20 @@ ${variables} }` : '' - return `async function ${operationFunctionName(namedOperationData)}(${useClientAuth ? 'oneGraphAuth, ' : '' - }params) { + return `async function ${operationFunctionName(namedOperationData)}(${ + useClientAuth ? 'oneGraphAuth, ' : '' + }params) { const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, + const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ + pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' + }\`, { - method: "${pluckerStyle.toLocaleUpperCase()}"${pluckerStyle === 'get' + method: "${pluckerStyle.toLocaleUpperCase()}"${ + pluckerStyle === 'get' ? '' : `, body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } + } }); const text = await resp.text(); @@ -445,8 +448,8 @@ const netlifyFunctionSnippet = { query: `# Consider giving this ${operationData.type} a unique, descriptive # name in your application as a best practice ${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, + .trim() + .replace(/^(query|mutation|subscription) /i, '')}`, } } return operationData diff --git a/src/lib/one-graph/one-graph-client-graphql-operations.js b/src/lib/one-graph/one-graph-client-graphql-operations.js index 5fb1c572bf4..8ba57c8aeb0 100644 --- a/src/lib/one-graph/one-graph-client-graphql-operations.js +++ b/src/lib/one-graph/one-graph-client-graphql-operations.js @@ -334,5 +334,5 @@ const internalOperationsDoc = `mutation CreatePersistedQueryMutation( }` module.exports = { - internalOperationsDoc -} \ No newline at end of file + internalOperationsDoc, +} From 110f143936992fa795c0a85f968288a9f48ecfc4 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 13 Jan 2022 14:45:28 -0800 Subject: [PATCH 39/58] chore: add jsdocs --- src/commands/dev/dev.js | 20 +-- src/commands/graph/graph-edit.js | 10 +- src/commands/graph/graph-pull.js | 30 +++-- src/lib/one-graph/client.js | 204 ++++++++++++++++++++++++----- src/lib/one-graph/netlify-graph.js | 14 +- 5 files changed, 218 insertions(+), 60 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index c20af5f2d91..337c3c8f558 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -20,6 +20,7 @@ const { NETLIFYDEVWARN, chalk, detectServerSettings, + error, exit, getSiteInformation, injectEnvVariables, @@ -48,10 +49,10 @@ const startStaticServer = async ({ settings }) => { log(`\n${NETLIFYDEVLOG} Static server listening to`, settings.frameworkPort) } -const isNonExistingCommandError = ({ command, error }) => { +const isNonExistingCommandError = ({ command, error: commandError }) => { // `ENOENT` is only returned for non Windows systems // See https://github.com/sindresorhus/execa/pull/447 - if (error.code === 'ENOENT') { + if (commandError.code === 'ENOENT') { return true } @@ -62,7 +63,8 @@ const isNonExistingCommandError = ({ command, error }) => { // this only works on English versions of Windows return ( - typeof error.message === 'string' && error.message.includes('is not recognized as an internal or external command') + typeof commandError.message === 'string' && + commandError.message.includes('is not recognized as an internal or external command') ) } @@ -264,8 +266,8 @@ const dev = async (options, command) => { let settings = {} try { settings = await detectServerSettings(devConfig, options, site.root) - } catch (error) { - log(NETLIFYDEVERR, error.message) + } catch (detectServerSettingsError) { + error(detectServerSettingsError.message) exit(1) } @@ -296,14 +298,14 @@ const dev = async (options, command) => { const startNetligraphWatcher = Boolean(options.graph) if (startNetligraphWatcher && options.offline) { - warn(`${NETLIFYDEVERR} Warning: unable to start Netlify Graph in offline mode`) + warn(`Unable to start Netlify Graph in offline mode`) } else if (startNetligraphWatcher && !site.id) { - warn( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( + error( + `No siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) - process.exit(1) + return } else if (startNetligraphWatcher) { const netlifyToken = await command.authenticate() await ensureAppForSite(netlifyToken, site.id) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 3343a46a50e..f59cc55e48d 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -18,6 +18,12 @@ const { const { NETLIFYDEVERR, chalk, error } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') +/** + * Creates the `netlify graph:edit` command + * @param {import('commander').OptionValues} options + * @param {import('../base-command').BaseCommand} program + * @returns + */ const graphEdit = async (options, command) => { const { api, site, state } = command.netlify const siteId = site.id @@ -26,9 +32,9 @@ const graphEdit = async (options, command) => { error( `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', - )} or ${chalk.yellow('netlify link')}?`, + )} or ${chalk.yellow('netlify link')}`, ) - process.exit(1) + return } const siteData = await api.getSite({ siteId }) diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index dde24e73439..f0965616acb 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,7 +1,5 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable fp/no-loops */ -const process = require('process') - const { buildSchema } = require('graphql') const { @@ -12,18 +10,24 @@ const { refetchAndGenerateFromOneGraph, } = require('../../lib/one-graph/client') const { getNetligraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/netlify-graph') -const { NETLIFYDEVERR, chalk, error, warn } = require('../../utils') +const { chalk, error, warn } = require('../../utils') +/** + * Creates the `netlify graph:pull` command + * @param {import('commander').OptionValues} options + * @param {import('../base-command').BaseCommand} program + * @returns + */ const graphPull = async (options, command) => { const { site, state } = command.netlify if (!site.id) { error( - `${NETLIFYDEVERR} Warning: no siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( + `No siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', - )} or ${chalk.yellow('netlify link')}?`, + )} or ${chalk.yellow('netlify link')}`, ) - process.exit(1) + return } const netligraphConfig = await getNetligraphConfig({ command, options }) @@ -45,20 +49,20 @@ const graphPull = async (options, command) => { try { schema = buildSchema(schemaString) } catch (buildSchemaError) { - error(`${NETLIFYDEVERR} Error parsing schema: ${buildSchemaError.message}`) - process.exit(1) + error(`Error parsing schema: ${buildSchemaError.message}`) + return } if (!schema) { - error(`${NETLIFYDEVERR} Failed to fetch and update Netlify GraphQL schem`) - process.exit(1) + error(`Failed to fetch and update Netlify GraphQL schema`) + return } const next = await fetchCliSessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId }) if (next.errors) { - error(`${NETLIFYDEVERR} Failed to fetch Netlify Graph cli session events`, next.errors) - process.exit(1) + error(`Failed to fetch Netlify Graph cli session events`, next.errors) + return } if (next.events) { @@ -85,7 +89,7 @@ const graphPull = async (options, command) => { const createGraphPullCommand = (program) => program .command('graph:pull') - .description('Pull down your local Netlify Graph schema and regenerate your local functions') + .description('Pull down your local Netlify Graph schema, and process Graph edit events') .action(async (options, command) => { await graphPull(options, command) }) diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js index 21f815debd1..e8f36d2de5d 100644 --- a/src/lib/one-graph/client.js +++ b/src/lib/one-graph/client.js @@ -5,7 +5,7 @@ const os = require('os') const { buildClientSchema, parse } = require('graphql') const fetch = require('node-fetch') -const { NETLIFYDEVLOG, NETLIFYDEVWARN, chalk, error, log, warn } = require('../../utils') +const { chalk, error, log, warn } = require('../../utils') const { defaultExampleOperationsDoc, @@ -24,6 +24,13 @@ const httpOkLow = 200 const httpOkHigh = 299 const basicPostTimeoutMilliseconds = 30_000 +/** + * The basic http function used to communicate with OneGraph. + * The least opinionated function that can be used to communicate with OneGraph. + * @param {string} url + * @param {object} options + * @returns {Promise} The response from OneGraph + */ const basicPost = async (url, options) => { const reqBody = options.body || '' const userHeaders = options.headers || {} @@ -46,13 +53,19 @@ const basicPost = async (url, options) => { if (resp.status < httpOkLow || resp.status > httpOkHigh) { warn('Response:', respBody) - error(`Netlify OneGraph return invalid HTTP status code: ${resp.status}`) + error(`Netlify Graph upstream return invalid HTTP status code: ${resp.status}`) return respBody } return respBody } +/** + * Given an appId and desired services, fetch the schema (in json form) for that app + * @param {string} appId + * @param {string[]} enabledServices + * @returns {Promise} The schema for the app + */ const fetchOneGraphSchemaJson = async (appId, enabledServices) => { const url = `https://serve.onegraph.com/schema?app_id=${appId}&services=${enabledServices.join(',')}` const headers = {} @@ -66,10 +79,16 @@ const fetchOneGraphSchemaJson = async (appId, enabledServices) => { return JSON.parse(response) } catch (postError) { - postError('Error fetching schema:', postError) + error('Error fetching schema:', postError) } } +/** + * Given an appId and desired services, fetch the schema json for an app and parse it into a GraphQL Schema + * @param {string} appId + * @param {string[]} enabledServices + * @returns {Promise} The schema for the app + */ const fetchOneGraphSchema = async (appId, enabledServices) => { const result = await fetchOneGraphSchemaJson(appId, enabledServices) const schema = buildClientSchema(result.data) @@ -84,6 +103,7 @@ const fetchOneGraphSchema = async (appId, enabledServices) => { * @param {string} config.query The full GraphQL operation doc * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc * @param {object} config.variables The variables to pass to the GraphQL operation + * @returns {Promise} The response from OneGraph */ const fetchOneGraph = async (config) => { const { accessToken, appId, operationName, query, variables } = config @@ -109,7 +129,7 @@ const fetchOneGraph = async (config) => { // @ts-ignore const value = JSON.parse(result) if (value.errors) { - warn(`${NETLIFYDEVWARN} fetchOneGraph errors`, operationName, JSON.stringify(value, null, 2)) + warn(`Errors seen fetching Netlify Graph upstream`, operationName, JSON.stringify(value, null, 2)) } return value } catch { @@ -125,6 +145,7 @@ const fetchOneGraph = async (config) => { * @param {string} config.docId The id of the previously persisted GraphQL operation doc * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc * @param {object} config.variables The variables to pass to the GraphQL operation + * @returns {Promise} The response from OneGraph */ const fetchOneGraphPersisted = async (config) => { const { accessToken, appId, docId, operationName, variables } = config @@ -149,6 +170,13 @@ const fetchOneGraphPersisted = async (config) => { } } +/** + * Fetch a persisted doc belonging to appId by its id + * @param {string} authToken + * @param {string} appId + * @param {string} docId + * @returns {string|undefined} The persisted operations doc + */ const fetchPersistedQuery = async (authToken, appId, docId) => { const response = await fetchOneGraph({ accessToken: authToken, @@ -167,7 +195,17 @@ const fetchPersistedQuery = async (authToken, appId, docId) => { return persistedQuery } -const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { +/** + * + * @param {object} options + * @param {string} options.appId The app to query against, typically the siteId + * @param {string} options.authToken The (typically netlify) access token that is used for authentication + * @param {string} options.sessionId The session id to fetch CLI events for + * @returns {Promise} The unhandled events for the cli session to process + */ +const fetchCliSessionEvents = async (options) => { + const { appId, authToken, sessionId } = options + // Grab the first 1000 events so we can chew through as many at a time as possible const desiredEventCount = 1000 const next = await fetchOneGraph({ @@ -190,17 +228,22 @@ const fetchCliSessionEvents = async ({ appId, authToken, sessionId }) => { return { events } } +/** + * Start polling for CLI events for a given session to process locally + * @param {object} input + * @param {string} input.appId The app to query against, typically the siteId + * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {function} input.onClose A function to call when the polling loop is closed + * @param {function} input.onError A function to call when an error occurs + * @param {function} input.onEvents A function to call when CLI events are received and need to be processed + * @param {string} input.sessionId The session id to monitor CLI events for + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @returns + */ +const monitorCLISessionEvents = (input) => { + const { appId, authToken, netligraphConfig, onClose, onError, onEvents, sessionId, state } = input -const monitorCLISessionEvents = ({ - appId, - authToken, - netligraphConfig, - onClose, - onError, - onEvents, - sessionId, - state, -}) => { const frequency = 5000 let shouldClose = false @@ -217,12 +260,12 @@ const monitorCLISessionEvents = ({ if (enabledServicesCompareKey !== newEnabledServicesCompareKey) { log( - `${NETLIFYDEVLOG} ${chalk.magenta( + `${chalk.magenta( 'Reloading', )} Netlify Graph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, ) await refetchAndGenerateFromOneGraph({ netligraphConfig, state, netlifyToken, siteId }) - log(`${NETLIFYDEVLOG} ${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) + log(`${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) } } @@ -264,6 +307,14 @@ const monitorCLISessionEvents = ({ return close } +/** + * Register a new CLI session with OneGraph + * @param {string} netlifyToken The netlify token to use for authentication + * @param {string} appId The app to query against, typically the siteId + * @param {string} name The name of the CLI session, will be visible in the UI and CLI ouputs + * @param {object} metadata Any additional metadata to attach to the session + * @returns {Promise} The CLI session object + */ const createCLISession = async (netlifyToken, appId, name, metadata) => { const payload = { nfToken: netlifyToken, @@ -289,6 +340,14 @@ const createCLISession = async (netlifyToken, appId, name, metadata) => { return session } +/** + * Update the CLI session with new metadata (e.g. the latest docId) by its id + * @param {string} netlifyToken The netlify token to use for authentication + * @param {string} appId The app to query against, typically the siteId + * @param {string} sessionId The session id to update + * @param {object} metadata The new metadata to set on the session + * @returns {Promise} The updated session object + */ const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata) => { const result = await fetchOneGraph({ accessToken: null, @@ -311,7 +370,17 @@ const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata return session } -const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => { +/** + * Acknoledge CLI events that have been processed and delete them from the upstream queue + * @param {object} input + * @param {string} input.appId The app to query against, typically the siteId + * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} input.sessionId The session id the events belong to + * @param {string[]} input.eventIds The event ids to ack (and delete) from the session queue, having been processed + * @returns + */ +const ackCLISessionEvents = async (input) => { + const { appId, authToken, eventIds, sessionId } = input const result = await fetchOneGraph({ accessToken: null, appId, @@ -329,6 +398,16 @@ const ackCLISessionEvents = async ({ appId, authToken, eventIds, sessionId }) => return events } +/** + * Create a persisted operations doc to be later retrieved, usually from a GUI + * @param {string} netlifyToken The netlify token to use for authentication + * @param {object} input + * @param {string} input.appId The app to query against, typically the siteId + * @param {string} input.document The GraphQL operations document to persist + * @param {string} input.description A description of the operations doc + * @param {string[]} input.tags A list of tags to attach to the operations doc + * @returns + */ const createPersistedQuery = async (netlifyToken, { appId, description, document, tags }) => { const result = await fetchOneGraph({ accessToken: null, @@ -353,7 +432,17 @@ const createPersistedQuery = async (netlifyToken, { appId, description, document return persistedQuery } -const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, siteId, state }) => { +/** + * Fetch the schema for a site, and regenerate all of the downstream files + * @param {object} input + * @param {string} input.siteId The id of the site to query against + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @returns {Promise} + */ +const refetchAndGenerateFromOneGraph = async (input) => { + const { netlifyToken, netligraphConfig, siteId, state } = input await ensureAppForSite(netlifyToken, siteId) const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) @@ -380,7 +469,18 @@ const refetchAndGenerateFromOneGraph = async ({ netlifyToken, netligraphConfig, state.set('oneGraphEnabledServices', enabledServices) } -const updateGraphQLOperationsFile = async ({ authToken, docId, netligraphConfig, schema, siteId }) => { +/** + * + * @param {object} input + * @param {string} input.siteId The site id to query against + * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} input.docId The GraphQL operations document id to fetch + * @param {string} input.schema The GraphQL schema to use when generating code + * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @returns + */ +const updateGraphQLOperationsFile = async (input) => { + const { authToken, docId, netligraphConfig, schema, siteId } = input const persistedDoc = await fetchPersistedQuery(authToken, siteId, docId) if (!persistedDoc) { warn('No persisted doc found for:', docId) @@ -426,19 +526,29 @@ const handleCliSessionEvent = async ({ authToken, event, netligraphConfig, schem await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netligraphConfig, schema, siteId }) break default: { - warn( - `${NETLIFYDEVWARN} Unrecognized event received, you may need to upgrade your CLI version`, - __typename, - payload, - ) + warn(`Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) break } } } +/** + * Load the CLI session id from the local state + * @param {state} state + * @returns + */ const loadCLISession = (state) => state.get('oneGraphSessionId') -const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, state }) => { +/** + * Idemponentially save the CLI session id to the local state and start monitoring for CLI events and upstream schema changes + * @param {object} input + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @param {site} input.site The site object + */ +const startOneGraphCLISession = async (input) => { + const { netlifyToken, netligraphConfig, site, state } = input let oneGraphSessionId = loadCLISession(state) if (!oneGraphSessionId) { const sessionName = generateSessionName() @@ -459,9 +569,9 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s onEvents: async (events) => { for (const event of events) { const eventName = friendlyEventName(event) - log(`${NETLIFYDEVLOG} ${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) + log(`${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) - log(`${NETLIFYDEVLOG} ${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) + log(`${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) } return events.map((event) => event.id) }, @@ -474,6 +584,12 @@ const startOneGraphCLISession = async ({ netlifyToken, netligraphConfig, site, s }) } +/** + * Fetch the schema metadata for a site (enabled services, id, etc.) + * @param {string} authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} siteId The site id to query against + * @returns {Promise} The schema metadata for the site + */ const fetchAppSchema = async (authToken, siteId) => { const result = await fetchOneGraph({ accessToken: authToken, @@ -489,6 +605,12 @@ const fetchAppSchema = async (authToken, siteId) => { return result.data && result.data.oneGraph && result.data.oneGraph.app && result.data.oneGraph.app.graphQLSchema } +/** + * If a site does not exists upstream in OneGraph for the given site, create it + * @param {string} authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} siteId The site id to create an app for upstream on OneGraph + * @returns + */ const upsertAppForSite = async (authToken, siteId) => { const result = await fetchOneGraph({ accessToken: authToken, @@ -509,6 +631,12 @@ const upsertAppForSite = async (authToken, siteId) => { ) } +/** + * Create a new schema in OneGraph for the given site with the specified metadata (enabled services, etc.) + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any + * @param {object} input The details of the schema to create + * @returns {Promise} The schema metadata for the site + */ const createNewAppSchema = async (nfToken, input) => { const result = await fetchOneGraph({ accessToken: null, @@ -529,11 +657,17 @@ const createNewAppSchema = async (nfToken, input) => { ) } +/** + * Ensure that an app exists upstream in OneGraph for the given site + * @param {string} authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} siteId The site id to create an app for upstream on OneGraph + * @returns + */ const ensureAppForSite = async (authToken, siteId) => { const app = await upsertAppForSite(authToken, siteId) const schema = await fetchAppSchema(authToken, app.id) if (!schema) { - log(`${NETLIFYDEVLOG} Creating new empty default GraphQL schema for site....`) + log(`Creating new empty default GraphQL schema for site....`) await createNewAppSchema(authToken, { appId: siteId, enabledServices: ['ONEGRAPH'], @@ -542,15 +676,25 @@ const ensureAppForSite = async (authToken, siteId) => { } } +/** + * Fetch a list of what services are enabled for the given site + * @param {string} authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} appId The app id to query against + * @returns + */ const fetchEnabledServices = async (authToken, appId) => { const appSchema = await fetchAppSchema(authToken, appId) return appSchema && appSchema.services } +/** + * Generate a session name that can be identified as belonging to the current checkout + * @returns {string} The name of the session to create + */ const generateSessionName = () => { const userInfo = os.userInfo('utf-8') const sessionName = `${userInfo.username}-${Date.now()}` - log(`${NETLIFYDEVLOG} Generated Netlify Graph session name: ${sessionName}`) + log(`Generated Netlify Graph session name: ${sessionName}`) return sessionName } diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js index 2059bcfce87..1caf4ad5cfa 100644 --- a/src/lib/one-graph/netlify-graph.js +++ b/src/lib/one-graph/netlify-graph.js @@ -4,7 +4,7 @@ const fs = require('fs') const dotProp = require('dot-prop') const { parse, print, printSchema } = require('graphql') -const { NETLIFYDEVERR, detectServerSettings, getFunctionsDir, log } = require('../../utils') +const { detectServerSettings, error, getFunctionsDir, warn } = require('../../utils') const { patchSubscriptionWebhookField, @@ -51,8 +51,8 @@ const getNetligraphConfig = async ({ command, options }) => { let settings = {} try { settings = await detectServerSettings(devConfig, options, site.root) - } catch (error) { - log(NETLIFYDEVERR, error.message) + } catch (detectServerSettingsError) { + error(detectServerSettingsError.message) } const framework = settings.framework || userSpecifiedConfig.framework @@ -334,7 +334,8 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { const fragments = parsed.definitions.filter((def) => def.kind === 'FragmentDefinition') if (!operations) { - throw new Error(`Operation definition is required in ${basicFn.id}`) + error(`Operation definition is required in ${basicFn.id}`) + return } const [operation] = operations @@ -348,7 +349,8 @@ const queryToFunctionDefinition = (fullSchema, persistedQuery) => { const operationName = operation.name && operation.name.value if (!operationName) { - throw new Error(`Operation name is required in ${basicFn.definition}\n\tfound: ${JSON.stringify(operation.name)}`) + error(`Operation name is required in ${basicFn.definition}\n\tfound: ${JSON.stringify(operation.name)}`) + return } const fn = { @@ -677,7 +679,7 @@ const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, const operation = operations[operationId] if (!operation) { - console.warn(`Operation ${operationId} not found in graphql.`, Object.keys(operations)) + warn(`Operation ${operationId} not found in graphql.`, Object.keys(operations)) return } From 8ebc83ad2c01c3d4e6c4cafa9b30739683849682 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 13 Jan 2022 14:57:26 -0800 Subject: [PATCH 40/58] chore: update graph command snapshots --- tests/snapshots/command.graph.test.js.md | 4 ++-- tests/snapshots/command.graph.test.js.snap | Bin 500 -> 502 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/snapshots/command.graph.test.js.md b/tests/snapshots/command.graph.test.js.md index 9c039f800ef..8f3ba385e1e 100644 --- a/tests/snapshots/command.graph.test.js.md +++ b/tests/snapshots/command.graph.test.js.md @@ -25,7 +25,7 @@ Generated by [AVA](https://avajs.dev). ␊ COMMANDS␊ $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ - $ graph:pull Pull down your local Netlify Graph schema and regenerate your local functions␊ + $ graph:pull Pull down your local Netlify Graph schema, and process Graph edit events␊ ` ## netlify graph completion @@ -49,5 +49,5 @@ Generated by [AVA](https://avajs.dev). ␊ COMMANDS␊ $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ - $ graph:pull Pull down your local Netlify Graph schema and regenerate your local functions␊ + $ graph:pull Pull down your local Netlify Graph schema, and process Graph edit events␊ ` diff --git a/tests/snapshots/command.graph.test.js.snap b/tests/snapshots/command.graph.test.js.snap index 3e7dfe3e8dd26a854d5427bedfe1bb1e141544b3..4c6ee256d789b50e6f92b5eac4bfe8f45c9a59b5 100644 GIT binary patch literal 502 zcmVvb#3oB0l^B$P}m3%$qlFXWkAWq)krr+mC0TzPx&O?(eZ`citi~ zuG)lL?6J?UKfJu|{5X35=HcbnR?2?w5VA$?CseCL9<;x;AMc`LPoS@rGg^Y<2qSb- z6ie7QtmaU7l{ul6g+iND&%80H99ZFy(ihX-{(u5J0=4cdQ{PP2sqL83@#OINcr*>5 zF5iZ3m!qsE<~1AGCWLzYOYz7D@+4z2W3wF#Y`iJGGbc4{6MWqqILB z4tt}$Ro}0|zt?%df){x5z})CX&=AF@zNPjCq|TUJpTA)nqpP2uYK)8WHe4?va=lPZ s_S@#P8OMrkLoh~MOcw95sw7o-8hmQ$o#pQ=|DRd@250Z%s2~Oa0R9g0`v3p{ literal 500 zcmV?RzVwjxa(e zMX`ik!)gwNSD6!9Stztg^~@WC%7GOQDSbKZ?G7lwLr|-}GWE@Lo!Sm49Zz07ACIO1 z)a6g0+vO;0SQELhwPZ_3*f=@URmD^uNxC`CeYuVy#Kef8GoeeNN)ReARV?aCJlwf@ zV)W4xW-QMQT6^#xo`|t%UZH^%5}XF3y+bf~=+U~6;UQ7-r&qcAXq+fS#vDEq5*4cu zW<~fro7E^o%tl^s5f&U(c(hU&)*rNc8@~+dh89W(`@P|0Z!o=nfUVj~`HwW_!cp2E z4~M Date: Mon, 17 Jan 2022 16:55:16 -0800 Subject: [PATCH 41/58] chore: refactor Netlify Graph logic into a reusable package with types and docstrings --- npm-shrinkwrap.json | 19 + package.json | 1 + src/commands/dev/dev.js | 18 +- src/commands/graph/graph-edit.js | 19 +- src/commands/graph/graph-pull.js | 26 +- src/lib/one-graph/cli-client.js | 268 +++++++ src/lib/one-graph/cli-netlify-graph.js | 201 +++++ src/lib/one-graph/client.js | 719 ----------------- src/lib/one-graph/codegen-helpers.js | 83 -- src/lib/one-graph/graphql-helpers.js | 536 ------------- .../netlify-graph-code-exporter-snippets.js | 545 ------------- src/lib/one-graph/netlify-graph.js | 736 ------------------ .../one-graph-client-graphql-operations.js | 338 -------- .../netlifyGraphOperationsLibrary.graphql | 2 +- tests/graph-codegen.test.js | 21 +- tests/snapshots/graph-codegen.test.js.md | 4 +- tests/snapshots/graph-codegen.test.js.snap | Bin 3337 -> 3330 bytes 17 files changed, 533 insertions(+), 3003 deletions(-) create mode 100644 src/lib/one-graph/cli-client.js create mode 100644 src/lib/one-graph/cli-netlify-graph.js delete mode 100644 src/lib/one-graph/client.js delete mode 100644 src/lib/one-graph/codegen-helpers.js delete mode 100644 src/lib/one-graph/graphql-helpers.js delete mode 100644 src/lib/one-graph/netlify-graph-code-exporter-snippets.js delete mode 100644 src/lib/one-graph/netlify-graph.js delete mode 100644 src/lib/one-graph/one-graph-client-graphql-operations.js diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 4f3e9e65aec..8b16a695b7d 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -79,6 +79,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.1", "netlify-headers-parser": "^6.0.0", + "netlify-onegraph-internal": "0.0.2", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", @@ -14106,6 +14107,15 @@ "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, + "node_modules/netlify-onegraph-internal": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.2.tgz", + "integrity": "sha512-jCATlMB8XhiK2uMeyYeVOCOlUyC5xWDP+5IxxGI1er2MQvaj29URzVNl5DJnpIVrr3/kqBPiBAcwa64UDtMaiw==", + "dependencies": { + "graphql": "16.1.0", + "node-fetch": "^2.6.0" + } + }, "node_modules/netlify-redirect-parser": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/netlify-redirect-parser/-/netlify-redirect-parser-13.0.0.tgz", @@ -30624,6 +30634,15 @@ "toml": "^3.0.0" } }, + "netlify-onegraph-internal": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.2.tgz", + "integrity": "sha512-jCATlMB8XhiK2uMeyYeVOCOlUyC5xWDP+5IxxGI1er2MQvaj29URzVNl5DJnpIVrr3/kqBPiBAcwa64UDtMaiw==", + "requires": { + "graphql": "16.1.0", + "node-fetch": "^2.6.0" + } + }, "netlify-redirect-parser": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/netlify-redirect-parser/-/netlify-redirect-parser-13.0.0.tgz", diff --git a/package.json b/package.json index 0414f129725..f5edcc5eb61 100644 --- a/package.json +++ b/package.json @@ -146,6 +146,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.1", "netlify-headers-parser": "^6.0.0", + "netlify-onegraph-internal": "0.0.2", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 337c3c8f558..6ad8cd59381 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -11,8 +11,8 @@ const stripAnsiCc = require('strip-ansi-control-characters') const waitPort = require('wait-port') const { startFunctionsServer } = require('../../lib/functions/server') -const { ensureAppForSite, startOneGraphCLISession } = require('../../lib/one-graph/client') -const { getNetligraphConfig } = require('../../lib/one-graph/netlify-graph') +const { OneGraphCliClient, startOneGraphCLISession } = require('../../lib/one-graph/cli-client') +const { getNetlifyGraphConfig } = require('../../lib/one-graph/cli-netlify-graph') const { NETLIFYDEV, NETLIFYDEVERR, @@ -295,22 +295,22 @@ const dev = async (options, command) => { process.env.URL = url process.env.DEPLOY_URL = url - const startNetligraphWatcher = Boolean(options.graph) + const startNetlifyGraphWatcher = Boolean(options.graph) - if (startNetligraphWatcher && options.offline) { + if (startNetlifyGraphWatcher && options.offline) { warn(`Unable to start Netlify Graph in offline mode`) - } else if (startNetligraphWatcher && !site.id) { + } else if (startNetlifyGraphWatcher && !site.id) { error( `No siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', )} or ${chalk.yellow('netlify link')}?`, ) return - } else if (startNetligraphWatcher) { + } else if (startNetlifyGraphWatcher) { const netlifyToken = await command.authenticate() - await ensureAppForSite(netlifyToken, site.id) - const netligraphConfig = await getNetligraphConfig({ command, options }) - startOneGraphCLISession({ netligraphConfig, netlifyToken, site, state }) + await OneGraphCliClient.ensureAppForSite(netlifyToken, site.id) + const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) + startOneGraphCLISession({ netlifyGraphConfig, netlifyToken, site, state }) } printBanner({ url }) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index f59cc55e48d..18791e88746 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -2,22 +2,17 @@ const process = require('process') const gitRepoInfo = require('git-repo-info') -const { - createCLISession, - createPersistedQuery, - ensureAppForSite, - generateSessionName, - loadCLISession, - updateCLISessionMetadata, -} = require('../../lib/one-graph/client') +const { OneGraphCliClient, generateSessionName, loadCLISession } = require('../../lib/one-graph/cli-client') const { defaultExampleOperationsDoc, - getNetligraphConfig, + getNetlifyGraphConfig, readGraphQLOperationsSourceFile, -} = require('../../lib/one-graph/netlify-graph') +} = require('../../lib/one-graph/cli-netlify-graph') const { NETLIFYDEVERR, chalk, error } = require('../../utils') const { openBrowser } = require('../../utils/open-browser') +const { createCLISession, createPersistedQuery, ensureAppForSite, updateCLISessionMetadata } = OneGraphCliClient + /** * Creates the `netlify graph:edit` command * @param {import('commander').OptionValues} options @@ -39,11 +34,11 @@ const graphEdit = async (options, command) => { const siteData = await api.getSite({ siteId }) - const netligraphConfig = await getNetligraphConfig({ command, options }) + const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) const { branch } = gitRepoInfo() - let graphqlDocument = readGraphQLOperationsSourceFile(netligraphConfig) + let graphqlDocument = readGraphQLOperationsSourceFile(netlifyGraphConfig) if (graphqlDocument.trim().length === 0) { graphqlDocument = defaultExampleOperationsDoc diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index f0965616acb..681cee9fc41 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -1,15 +1,12 @@ /* eslint-disable eslint-comments/disable-enable-pair */ /* eslint-disable fp/no-loops */ -const { buildSchema } = require('graphql') - const { - ackCLISessionEvents, - fetchCliSessionEvents, + OneGraphCliClient, handleCliSessionEvent, loadCLISession, refetchAndGenerateFromOneGraph, -} = require('../../lib/one-graph/client') -const { getNetligraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/netlify-graph') +} = require('../../lib/one-graph/cli-client') +const { buildSchema, getNetlifyGraphConfig, readGraphQLSchemaFile } = require('../../lib/one-graph/cli-netlify-graph') const { chalk, error, warn } = require('../../utils') /** @@ -30,10 +27,11 @@ const graphPull = async (options, command) => { return } - const netligraphConfig = await getNetligraphConfig({ command, options }) + const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) const netlifyToken = await command.authenticate() const siteId = site.id - await refetchAndGenerateFromOneGraph({ netligraphConfig, netlifyToken, state, siteId }) + + await refetchAndGenerateFromOneGraph({ netlifyGraphConfig, netlifyToken, state, siteId }) const oneGraphSessionId = loadCLISession(state) @@ -42,7 +40,7 @@ const graphPull = async (options, command) => { return } - const schemaString = readGraphQLSchemaFile(netligraphConfig) + const schemaString = readGraphQLSchemaFile(netlifyGraphConfig) let schema @@ -58,7 +56,11 @@ const graphPull = async (options, command) => { return } - const next = await fetchCliSessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId }) + const next = await OneGraphCliClient.fetchCliSessionEvents({ + appId: siteId, + authToken: netlifyToken, + sessionId: oneGraphSessionId, + }) if (next.errors) { error(`Failed to fetch Netlify Graph cli session events`, next.errors) @@ -68,11 +70,11 @@ const graphPull = async (options, command) => { if (next.events) { const ackIds = [] for (const event of next.events) { - await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) + await handleCliSessionEvent({ authToken: netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) ackIds.push(event.id) } - await ackCLISessionEvents({ + await OneGraphCliClient.ackCLISessionEvents({ appId: siteId, authToken: netlifyToken, sessionId: oneGraphSessionId, diff --git a/src/lib/one-graph/cli-client.js b/src/lib/one-graph/cli-client.js new file mode 100644 index 00000000000..71620ceb33d --- /dev/null +++ b/src/lib/one-graph/cli-client.js @@ -0,0 +1,268 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable fp/no-loops */ +const os = require('os') + +const { GraphQL, OneGraphClient } = require('netlify-onegraph-internal') +const { NetlifyGraph } = require('netlify-onegraph-internal') + +const { chalk, error, log, warn } = require('../../utils') + +const { createCLISession, createPersistedQuery, ensureAppForSite, updateCLISessionMetadata } = OneGraphClient + +const { + generateFunctionsFile, + generateHandler, + readGraphQLOperationsSourceFile, + writeGraphQLOperationsSourceFile, + writeGraphQLSchemaFile, +} = require('./cli-netlify-graph') + +const { parse } = GraphQL +const { defaultExampleOperationsDoc, extractFunctionsFromOperationDoc } = NetlifyGraph + +/** + * Start polling for CLI events for a given session to process locally + * @param {object} input + * @param {string} input.appId The app to query against, typically the siteId + * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {function} input.onClose A function to call when the polling loop is closed + * @param {function} input.onError A function to call when an error occurs + * @param {function} input.onEvents A function to call when CLI events are received and need to be processed + * @param {string} input.sessionId The session id to monitor CLI events for + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @returns + */ +const monitorCLISessionEvents = (input) => { + const { appId, authToken, netlifyGraphConfig, onClose, onError, onEvents, sessionId, state } = input + + const frequency = 5000 + let shouldClose = false + + const enabledServiceWatcher = async (netlifyToken, siteId) => { + const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] + const enabledServicesInfo = await OneGraphClient.fetchEnabledServices(netlifyToken, siteId) + if (!enabledServicesInfo) { + warn('Unable to fetch enabled services for site for code generation') + return + } + const newEnabledServices = enabledServicesInfo.map((service) => service.service) + const enabledServicesCompareKey = enabledServices.sort().join(',') + const newEnabledServicesCompareKey = newEnabledServices.sort().join(',') + + if (enabledServicesCompareKey !== newEnabledServicesCompareKey) { + log( + `${chalk.magenta( + 'Reloading', + )} Netlify Graph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, + ) + await refetchAndGenerateFromOneGraph({ netlifyGraphConfig, state, netlifyToken, siteId }) + log(`${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) + } + } + + const close = () => { + shouldClose = true + } + + let handle + + const helper = async () => { + if (shouldClose) { + clearTimeout(handle) + onClose() + } + + const next = await OneGraphClient.fetchCliSessionEvents({ appId, authToken, sessionId }) + + if (next.errors) { + next.errors.forEach((fetchEventError) => { + onError(fetchEventError) + }) + } + + const { events } = next + + if (events.length !== 0) { + const ackIds = await onEvents(events) + await OneGraphClient.ackCLISessionEvents({ appId, authToken, sessionId, eventIds: ackIds }) + } + + await enabledServiceWatcher(authToken, appId) + + handle = setTimeout(helper, frequency) + } + + // Fire immediately to start rather than waiting the initial `frequency` + helper() + + return close +} + +/** + * Fetch the schema for a site, and regenerate all of the downstream files + * @param {object} input + * @param {string} input.siteId The id of the site to query against + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @returns {Promise} + */ +const refetchAndGenerateFromOneGraph = async (input) => { + const { netlifyGraphConfig, netlifyToken, siteId, state } = input + await OneGraphClient.ensureAppForSite(netlifyToken, siteId) + + const enabledServicesInfo = await OneGraphClient.fetchEnabledServices(netlifyToken, siteId) + if (!enabledServicesInfo) { + warn('Unable to fetch enabled services for site for code generation') + return + } + + const enabledServices = enabledServicesInfo + .map((service) => service.service) + .sort((aString, bString) => aString.localeCompare(bString)) + const schema = await OneGraphClient.fetchOneGraphSchema(siteId, enabledServices) + console.log('Reading from source file...') + let currentOperationsDoc = readGraphQLOperationsSourceFile(netlifyGraphConfig) + console.log('Reading from source file...done') + if (currentOperationsDoc.trim().length === 0) { + console.log('5', currentOperationsDoc) + currentOperationsDoc = defaultExampleOperationsDoc + } + console.log('6', currentOperationsDoc) + + const parsedDoc = parse(currentOperationsDoc) + console.log('Extract funcions from source file...', parsedDoc) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + + console.log('Generating functions file...') + generateFunctionsFile(netlifyGraphConfig, schema, currentOperationsDoc, operations) + console.log('Writing schema to disk...') + writeGraphQLSchemaFile(netlifyGraphConfig, schema) + state.set('oneGraphEnabledServices', enabledServices) +} + +/** + * + * @param {object} input + * @param {string} input.siteId The site id to query against + * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} input.docId The GraphQL operations document id to fetch + * @param {string} input.schema The GraphQL schema to use when generating code + * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @returns + */ +const updateGraphQLOperationsFile = async (input) => { + const { authToken, docId, netlifyGraphConfig, schema, siteId } = input + const persistedDoc = await OneGraphClient.fetchPersistedQuery(authToken, siteId, docId) + if (!persistedDoc) { + warn('No persisted doc found for:', docId) + return + } + + const doc = persistedDoc.query + + writeGraphQLOperationsSourceFile(netlifyGraphConfig, doc) + const appOperationsDoc = readGraphQLOperationsSourceFile(netlifyGraphConfig) + const parsedDoc = parse(appOperationsDoc, { + noLocation: true, + }) + const operations = extractFunctionsFromOperationDoc(parsedDoc) + generateFunctionsFile(netlifyGraphConfig, schema, appOperationsDoc, operations) +} + +const handleCliSessionEvent = async ({ authToken, event, netlifyGraphConfig, schema, siteId }) => { + const { __typename, payload } = await event + switch (__typename) { + case 'OneGraphNetlifyCliSessionTestEvent': + await handleCliSessionEvent({ authToken, event: payload, netlifyGraphConfig, schema, siteId }) + break + case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': + await generateHandler(netlifyGraphConfig, schema, payload.operationId, payload) + break + case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': + await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netlifyGraphConfig, schema, siteId }) + break + default: { + warn(`Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) + break + } + } +} + +/** + * Load the CLI session id from the local state + * @param {state} state + * @returns + */ +const loadCLISession = (state) => state.get('oneGraphSessionId') + +/** + * Idemponentially save the CLI session id to the local state and start monitoring for CLI events and upstream schema changes + * @param {object} input + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any + * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events + * @param {state} input.state A function to call to set/get the current state of the local Netlify project + * @param {site} input.site The site object + */ +const startOneGraphCLISession = async (input) => { + const { netlifyGraphConfig, netlifyToken, site, state } = input + OneGraphClient.ensureAppForSite(netlifyToken, site.id) + let oneGraphSessionId = loadCLISession(state) + if (!oneGraphSessionId) { + const sessionName = generateSessionName() + const sessionMetadata = {} + const oneGraphSession = await OneGraphClient.createCLISession(netlifyToken, site.id, sessionName, sessionMetadata) + state.set('oneGraphSessionId', oneGraphSession.id) + oneGraphSessionId = state.get('oneGraphSessionId') + } + + const enabledServices = [] + const schema = await OneGraphClient.fetchOneGraphSchema(site.id, enabledServices) + + monitorCLISessionEvents({ + appId: site.id, + authToken: netlifyToken, + netlifyGraphConfig, + sessionId: oneGraphSessionId, + state, + onEvents: async (events) => { + for (const event of events) { + const eventName = OneGraphClient.friendlyEventName(event) + log(`${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) + await handleCliSessionEvent({ authToken: netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) + log(`${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) + } + return events.map((event) => event.id) + }, + onError: (fetchEventError) => { + error(`Netlify Graph upstream error: ${fetchEventError}`) + }, + onClose: () => { + log('Netlify Graph upstream closed') + }, + }) +} + +/** + * Generate a session name that can be identified as belonging to the current checkout + * @returns {string} The name of the session to create + */ +const generateSessionName = () => { + const userInfo = os.userInfo({ encoding: 'utf-8' }) + const sessionName = `${userInfo.username}-${Date.now()}` + log(`Generated Netlify Graph session name: ${sessionName}`) + return sessionName +} + +const OneGraphCliClient = { createCLISession, createPersistedQuery, ensureAppForSite, updateCLISessionMetadata } + +module.exports = { + OneGraphCliClient, + handleCliSessionEvent, + generateSessionName, + loadCLISession, + monitorCLISessionEvents, + refetchAndGenerateFromOneGraph, + startOneGraphCLISession, +} diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js new file mode 100644 index 00000000000..4949aa85332 --- /dev/null +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -0,0 +1,201 @@ +const fs = require('fs') +const path = require('path') + +const { GraphQL, NetlifyGraph } = require('netlify-onegraph-internal') + +const { detectServerSettings, error, getFunctionsDir } = require('../../utils') + +const { printSchema } = GraphQL + +/** + * Return a full NetlifyGraph config with any defaults overridden by netlify.toml + * @param {import('../base-command').BaseCommand} command + * @return {NetlifyGraphConfig} NetlifyGraphConfig + */ +const getNetlifyGraphConfig = async ({ command, options }) => { + const { config, site } = command.netlify + config.dev = { ...config.dev } + config.build = { ...config.build } + const userSpecifiedConfig = (config && config.graph) || {} + /** @type {import('./types').DevConfig} */ + const devConfig = { + framework: '#auto', + ...(config.functionsDirectory && { functions: config.functionsDirectory }), + ...(config.build.publish && { publish: config.build.publish }), + ...config.dev, + ...options, + } + + /** @type {Partial} */ + let settings = {} + try { + settings = await detectServerSettings(devConfig, options, site.root) + } catch (detectServerSettingsError) { + error(detectServerSettingsError.message) + } + + const framework = settings.framework || userSpecifiedConfig.framework + const isNextjs = framework === 'Next.js' + const detectedFunctionsPathString = getFunctionsDir({ config, options }) + const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null + const functionsPath = isNextjs ? ['pages', 'api'] : detectedFunctionsPath || [`functions`] + const baseConfig = { ...NetlifyGraph.defaultNetlifyGraphConfig, ...userSpecifiedConfig } + const netlifyGraphImplementationFilename = [...baseConfig.netlifyGraphPath, `index.${baseConfig.extension}`] + const netlifyGraphTypeDefinitionsFilename = [...baseConfig.netlifyGraphPath, `index.d.ts`] + const graphQLOperationsSourceFilename = [...baseConfig.netlifyGraphPath, NetlifyGraph.defaultSourceOperationsFilename] + const netlifyGraphRequirePath = isNextjs ? ['..', '..', 'lib', 'netlifyGraph'] : [`./netlifyGraph`] + const fullConfig = { + ...baseConfig, + functionsPath, + netlifyGraphImplementationFilename, + netlifyGraphTypeDefinitionsFilename, + graphQLOperationsSourceFilename, + netlifyGraphRequirePath, + framework, + } + + return fullConfig +} + +/** + * Given a NetlifyGraphConfig, ensure that the netlifyGraphPath exists + * @param {NetlifyGraphConfig} netlifyGraphConfig + */ +const ensureNetlifyGraphPath = (netlifyGraphConfig) => { + fs.mkdirSync(path.join(...netlifyGraphConfig.netlifyGraphPath), { recursive: true }) +} + +/** + * Given a NetlifyGraphConfig, ensure that the functionsPath exists + * @param {NetlifyGraphConfig} netlifyGraphConfig + */ +const ensureFunctionsPath = (netlifyGraphConfig) => { + fs.mkdirSync(path.join(...netlifyGraphConfig.functionsPath), { recursive: true }) +} + +/** + * Generate a library file with type definitions for a given NetlifyGraphConfig, operationsDoc, and schema, writing them to the filesystem + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @param {GraphQLSchema} schema The schema to use when generating the functions and their types + * @param {string} operationsDoc The GraphQL operations doc to use when generating the functions + * @param {NetlifyGraph.ParsedFunction} queries The parsed queries with metadata to use when generating library functions + */ +const generateFunctionsFile = (netlifyGraphConfig, schema, operationsDoc, queries) => { + const { clientSource, typeDefinitionsSource } = NetlifyGraph.generateFunctionsSource( + netlifyGraphConfig, + schema, + operationsDoc, + queries, + ) + + ensureNetlifyGraphPath(netlifyGraphConfig) + fs.writeFileSync(path.join(...netlifyGraphConfig.netlifyGraphImplementationFilename), clientSource, 'utf8') + fs.writeFileSync(path.join(...netlifyGraphConfig.netlifyGraphTypeDefinitionsFilename), typeDefinitionsSource, 'utf8') +} + +/** + * Using the given NetlifyGraphConfig, read the GraphQL operations file and return the _unparsed_ GraphQL operations doc + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @returns {string} GraphQL operations doc + */ +const readGraphQLOperationsSourceFile = (netlifyGraphConfig) => { + ensureNetlifyGraphPath(netlifyGraphConfig) + + const fullFilename = path.join(...netlifyGraphConfig.graphQLOperationsSourceFilename) + if (!fs.existsSync(fullFilename)) { + fs.writeFileSync(fullFilename, '') + fs.closeSync(fs.openSync(fullFilename, 'w')) + } + + const source = fs.readFileSync(fullFilename, 'utf8') + + return source +} + +/** + * Write an operations doc to the filesystem using the given NetlifyGraphConfig + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @param {string} operationsDoc The GraphQL operations doc to write + */ +const writeGraphQLOperationsSourceFile = (netlifyGraphConfig, operationDocString) => { + const graphqlSource = operationDocString + + ensureNetlifyGraphPath(netlifyGraphConfig) + fs.writeFileSync(path.join(...netlifyGraphConfig.graphQLOperationsSourceFilename), graphqlSource, 'utf8') +} + +/** + * Write a GraphQL Schema printed in SDL format to the filesystem using the given NetlifyGraphConfig + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @param {GraphQLSchema} schema The GraphQL schema to print and write to the filesystem + */ +const writeGraphQLSchemaFile = (netlifyGraphConfig, schema) => { + const graphqlSource = printSchema(schema) + + ensureNetlifyGraphPath(netlifyGraphConfig) + fs.writeFileSync(path.join(...netlifyGraphConfig.graphQLSchemaFilename), graphqlSource, 'utf8') +} + +/** + * Using the given NetlifyGraphConfig, read the GraphQL schema file and return it _unparsed_ + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @returns {string} GraphQL schema + */ +const readGraphQLSchemaFile = (netlifyGraphConfig) => { + ensureNetlifyGraphPath(netlifyGraphConfig) + return fs.readFileSync(path.join(...netlifyGraphConfig.graphQLSchemaFilename), 'utf8') +} + +/** + * Given a NetlifyGraphConfig, read the appropriate files and write a handler for the given operationId to the filesystem + * @param {NetlifyGraphConfig} netlifyGraphConfig + * @param {GraphQLSchema} schema The GraphQL schema to use when generating the handler + * @param {string} operationId The operationId to use when generating the handler + * @param {object} handlerOptions The options to use when generating the handler + * @returns + */ +const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions) => { + let currentOperationsDoc = readGraphQLOperationsSourceFile(netlifyGraphConfig) + if (currentOperationsDoc.trim().length === 0) { + currentOperationsDoc = NetlifyGraph.defaultExampleOperationsDoc + } + + const handlerSource = NetlifyGraph.generateHandlerSource({ + handlerOptions, + schema, + netlifyGraphConfig, + operationId, + operationsDoc: currentOperationsDoc, + }) + + if (!(handlerSource && handlerSource.source)) { + return + } + + const { operation, source } = handlerSource + + const filenameArr = [...netlifyGraphConfig.functionsPath, `${operation.name}.${netlifyGraphConfig.extension}`] + const fullFilename = path.join(...filenameArr) + + ensureFunctionsPath(netlifyGraphConfig) + fs.writeFileSync(fullFilename, source) +} + +// Export the minimal set of functions that are required for Netlify Graph +const { buildSchema, parse } = GraphQL + +module.exports = { + buildSchema, + defaultExampleOperationsDoc: NetlifyGraph.defaultExampleOperationsDoc, + extractFunctionsFromOperationDoc: NetlifyGraph.extractFunctionsFromOperationDoc, + generateFunctionsSource: NetlifyGraph.generateFunctionsSource, + generateFunctionsFile, + generateHandlerSource: NetlifyGraph.generateHandlerSource, + generateHandler, + getNetlifyGraphConfig, + parse, + readGraphQLOperationsSourceFile, + readGraphQLSchemaFile, + writeGraphQLOperationsSourceFile, + writeGraphQLSchemaFile, +} diff --git a/src/lib/one-graph/client.js b/src/lib/one-graph/client.js deleted file mode 100644 index e8f36d2de5d..00000000000 --- a/src/lib/one-graph/client.js +++ /dev/null @@ -1,719 +0,0 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable fp/no-loops */ -const os = require('os') - -const { buildClientSchema, parse } = require('graphql') -const fetch = require('node-fetch') - -const { chalk, error, log, warn } = require('../../utils') - -const { - defaultExampleOperationsDoc, - extractFunctionsFromOperationDoc, - generateFunctionsFile, - generateHandler, - readGraphQLOperationsSourceFile, - writeGraphQLOperationsSourceFile, - writeGraphQLSchemaFile, -} = require('./netlify-graph') -const { internalOperationsDoc } = require('./one-graph-client-graphql-operations') - -const ONEDASH_APP_ID = '0b066ba6-ed39-4db8-a497-ba0be34d5b2a' - -const httpOkLow = 200 -const httpOkHigh = 299 -const basicPostTimeoutMilliseconds = 30_000 - -/** - * The basic http function used to communicate with OneGraph. - * The least opinionated function that can be used to communicate with OneGraph. - * @param {string} url - * @param {object} options - * @returns {Promise} The response from OneGraph - */ -const basicPost = async (url, options) => { - const reqBody = options.body || '' - const userHeaders = options.headers || {} - - const headers = { - ...userHeaders, - 'Content-Type': 'application/json', - 'Content-Length': reqBody.length, - } - - const resp = await fetch(url, { - method: 'POST', - headers, - timeout: basicPostTimeoutMilliseconds, - compress: true, - body: reqBody, - }) - - const respBody = await resp.text() - - if (resp.status < httpOkLow || resp.status > httpOkHigh) { - warn('Response:', respBody) - error(`Netlify Graph upstream return invalid HTTP status code: ${resp.status}`) - return respBody - } - - return respBody -} - -/** - * Given an appId and desired services, fetch the schema (in json form) for that app - * @param {string} appId - * @param {string[]} enabledServices - * @returns {Promise} The schema for the app - */ -const fetchOneGraphSchemaJson = async (appId, enabledServices) => { - const url = `https://serve.onegraph.com/schema?app_id=${appId}&services=${enabledServices.join(',')}` - const headers = {} - - try { - const response = await basicPost(url, { - method: 'GET', - headers, - body: null, - }) - - return JSON.parse(response) - } catch (postError) { - error('Error fetching schema:', postError) - } -} - -/** - * Given an appId and desired services, fetch the schema json for an app and parse it into a GraphQL Schema - * @param {string} appId - * @param {string[]} enabledServices - * @returns {Promise} The schema for the app - */ -const fetchOneGraphSchema = async (appId, enabledServices) => { - const result = await fetchOneGraphSchemaJson(appId, enabledServices) - const schema = buildClientSchema(result.data) - return schema -} - -/** - * Fetch data from OneGraph - * @param {object} config - * @param {string|null} config.accessToken The (typically netlify) access token that is used for authentication, if any - * @param {string} config.appId The app to query against, typically the siteId - * @param {string} config.query The full GraphQL operation doc - * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc - * @param {object} config.variables The variables to pass to the GraphQL operation - * @returns {Promise} The response from OneGraph - */ -const fetchOneGraph = async (config) => { - const { accessToken, appId, operationName, query, variables } = config - - const payload = { - query, - variables, - operationName, - } - - const body = JSON.stringify(payload) - try { - const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}&show_metrics=false`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/json', - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body, - }) - - // @ts-ignore - const value = JSON.parse(result) - if (value.errors) { - warn(`Errors seen fetching Netlify Graph upstream`, operationName, JSON.stringify(value, null, 2)) - } - return value - } catch { - return {} - } -} - -/** - * Fetch data from OneGraph using a previously persisted query - * @param {object} config - * @param {string|null} config.accessToken The (typically netlify) access token that is used for authentication, if any - * @param {string} config.appId The app to query against, typically the siteId - * @param {string} config.docId The id of the previously persisted GraphQL operation doc - * @param {string} config.operationName The operation to execute inside of the GraphQL operation doc - * @param {object} config.variables The variables to pass to the GraphQL operation - * @returns {Promise} The response from OneGraph - */ -const fetchOneGraphPersisted = async (config) => { - const { accessToken, appId, docId, operationName, variables } = config - - const payload = { - doc_id: docId, - variables, - operationName, - } - try { - const result = await basicPost(`https://serve.onegraph.com/graphql?app_id=${appId}`, { - method: 'POST', - headers: { - Authorization: accessToken ? `Bearer ${accessToken}` : '', - }, - body: JSON.stringify(payload), - }) - - return JSON.parse(result) - } catch { - return {} - } -} - -/** - * Fetch a persisted doc belonging to appId by its id - * @param {string} authToken - * @param {string} appId - * @param {string} docId - * @returns {string|undefined} The persisted operations doc - */ -const fetchPersistedQuery = async (authToken, appId, docId) => { - const response = await fetchOneGraph({ - accessToken: authToken, - appId: ONEDASH_APP_ID, - query: internalOperationsDoc, - operationName: 'PersistedQueryQuery', - variables: { - nfToken: authToken, - appId, - id: docId, - }, - }) - - const persistedQuery = response.data && response.data.oneGraph && response.data.oneGraph.persistedQuery - - return persistedQuery -} - -/** - * - * @param {object} options - * @param {string} options.appId The app to query against, typically the siteId - * @param {string} options.authToken The (typically netlify) access token that is used for authentication - * @param {string} options.sessionId The session id to fetch CLI events for - * @returns {Promise} The unhandled events for the cli session to process - */ -const fetchCliSessionEvents = async (options) => { - const { appId, authToken, sessionId } = options - - // Grab the first 1000 events so we can chew through as many at a time as possible - const desiredEventCount = 1000 - const next = await fetchOneGraph({ - accessToken: null, - appId, - query: internalOperationsDoc, - operationName: 'CLISessionEventsQuery', - variables: { - nfToken: authToken, - sessionId, - first: desiredEventCount, - }, - }) - - if (next.errors) { - return next - } - - const events = (next.data && next.data.oneGraph && next.data.oneGraph.netlifyCliEvents) || [] - - return { events } -} -/** - * Start polling for CLI events for a given session to process locally - * @param {object} input - * @param {string} input.appId The app to query against, typically the siteId - * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any - * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events - * @param {function} input.onClose A function to call when the polling loop is closed - * @param {function} input.onError A function to call when an error occurs - * @param {function} input.onEvents A function to call when CLI events are received and need to be processed - * @param {string} input.sessionId The session id to monitor CLI events for - * @param {state} input.state A function to call to set/get the current state of the local Netlify project - * @returns - */ -const monitorCLISessionEvents = (input) => { - const { appId, authToken, netligraphConfig, onClose, onError, onEvents, sessionId, state } = input - - const frequency = 5000 - let shouldClose = false - - const enabledServiceWatcher = async (netlifyToken, siteId) => { - const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] - const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - if (!enabledServicesInfo) { - warn('Unable to fetch enabled services for site for code generation') - return - } - const newEnabledServices = enabledServicesInfo.map((service) => service.service) - const enabledServicesCompareKey = enabledServices.sort().join(',') - const newEnabledServicesCompareKey = newEnabledServices.sort().join(',') - - if (enabledServicesCompareKey !== newEnabledServicesCompareKey) { - log( - `${chalk.magenta( - 'Reloading', - )} Netlify Graph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, - ) - await refetchAndGenerateFromOneGraph({ netligraphConfig, state, netlifyToken, siteId }) - log(`${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) - } - } - - const close = () => { - shouldClose = true - } - - let handle - - const helper = async () => { - if (shouldClose) { - clearTimeout(handle) - onClose() - } - - const next = await fetchCliSessionEvents({ appId, authToken, sessionId }) - - if (next.errors) { - next.errors.forEach((fetchEventError) => { - onError(fetchEventError) - }) - } - - const { events } = next - - if (events.length !== 0) { - const ackIds = await onEvents(events) - await ackCLISessionEvents({ appId, authToken, sessionId, eventIds: ackIds }) - } - - await enabledServiceWatcher(authToken, appId) - - handle = setTimeout(helper, frequency) - } - - // Fire immediately to start rather than waiting the initial `frequency` - helper() - - return close -} - -/** - * Register a new CLI session with OneGraph - * @param {string} netlifyToken The netlify token to use for authentication - * @param {string} appId The app to query against, typically the siteId - * @param {string} name The name of the CLI session, will be visible in the UI and CLI ouputs - * @param {object} metadata Any additional metadata to attach to the session - * @returns {Promise} The CLI session object - */ -const createCLISession = async (netlifyToken, appId, name, metadata) => { - const payload = { - nfToken: netlifyToken, - appId, - name, - metadata, - } - - const result = await fetchOneGraph({ - accessToken: null, - appId, - query: internalOperationsDoc, - operationName: 'CreateCLISessionMutation', - variables: payload, - }) - - const session = - result.data && - result.data.oneGraph && - result.data.oneGraph.createNetlifyCliSession && - result.data.oneGraph.createNetlifyCliSession.session - - return session -} - -/** - * Update the CLI session with new metadata (e.g. the latest docId) by its id - * @param {string} netlifyToken The netlify token to use for authentication - * @param {string} appId The app to query against, typically the siteId - * @param {string} sessionId The session id to update - * @param {object} metadata The new metadata to set on the session - * @returns {Promise} The updated session object - */ -const updateCLISessionMetadata = async (netlifyToken, appId, sessionId, metadata) => { - const result = await fetchOneGraph({ - accessToken: null, - appId, - query: internalOperationsDoc, - operationName: 'UpdateCLISessionMetadataMutation', - variables: { - nfToken: netlifyToken, - sessionId, - metadata, - }, - }) - - const session = - result.data && - result.data.oneGraph && - result.data.oneGraph.updateNetlifyCliSession && - result.data.oneGraph.updateNetlifyCliSession.session - - return session -} - -/** - * Acknoledge CLI events that have been processed and delete them from the upstream queue - * @param {object} input - * @param {string} input.appId The app to query against, typically the siteId - * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} input.sessionId The session id the events belong to - * @param {string[]} input.eventIds The event ids to ack (and delete) from the session queue, having been processed - * @returns - */ -const ackCLISessionEvents = async (input) => { - const { appId, authToken, eventIds, sessionId } = input - const result = await fetchOneGraph({ - accessToken: null, - appId, - query: internalOperationsDoc, - operationName: 'AckCLISessionEventMutation', - variables: { - nfToken: authToken, - sessionId, - eventIds, - }, - }) - - const events = result.data && result.data.oneGraph && result.data.oneGraph.ackNetlifyCliEvents - - return events -} - -/** - * Create a persisted operations doc to be later retrieved, usually from a GUI - * @param {string} netlifyToken The netlify token to use for authentication - * @param {object} input - * @param {string} input.appId The app to query against, typically the siteId - * @param {string} input.document The GraphQL operations document to persist - * @param {string} input.description A description of the operations doc - * @param {string[]} input.tags A list of tags to attach to the operations doc - * @returns - */ -const createPersistedQuery = async (netlifyToken, { appId, description, document, tags }) => { - const result = await fetchOneGraph({ - accessToken: null, - appId, - query: internalOperationsDoc, - operationName: 'CreatePersistedQueryMutation', - variables: { - nfToken: netlifyToken, - appId, - query: document, - tags, - description, - }, - }) - - const persistedQuery = - result.data && - result.data.oneGraph && - result.data.oneGraph.createPersistedQuery && - result.data.oneGraph.createPersistedQuery.persistedQuery - - return persistedQuery -} - -/** - * Fetch the schema for a site, and regenerate all of the downstream files - * @param {object} input - * @param {string} input.siteId The id of the site to query against - * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any - * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events - * @param {state} input.state A function to call to set/get the current state of the local Netlify project - * @returns {Promise} - */ -const refetchAndGenerateFromOneGraph = async (input) => { - const { netlifyToken, netligraphConfig, siteId, state } = input - await ensureAppForSite(netlifyToken, siteId) - - const enabledServicesInfo = await fetchEnabledServices(netlifyToken, siteId) - if (!enabledServicesInfo) { - warn('Unable to fetch enabled services for site for code generation') - return - } - - const enabledServices = enabledServicesInfo - .map((service) => service.service) - .sort((aString, bString) => aString.localeCompare(bString)) - const schema = await fetchOneGraphSchema(siteId, enabledServices) - let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - - if (currentOperationsDoc.trim().length === 0) { - currentOperationsDoc = defaultExampleOperationsDoc - } - - const parsedDoc = parse(currentOperationsDoc) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - - generateFunctionsFile(netligraphConfig, schema, currentOperationsDoc, operations) - writeGraphQLSchemaFile(netligraphConfig, schema) - state.set('oneGraphEnabledServices', enabledServices) -} - -/** - * - * @param {object} input - * @param {string} input.siteId The site id to query against - * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} input.docId The GraphQL operations document id to fetch - * @param {string} input.schema The GraphQL schema to use when generating code - * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events - * @returns - */ -const updateGraphQLOperationsFile = async (input) => { - const { authToken, docId, netligraphConfig, schema, siteId } = input - const persistedDoc = await fetchPersistedQuery(authToken, siteId, docId) - if (!persistedDoc) { - warn('No persisted doc found for:', docId) - return - } - - const doc = persistedDoc.query - - writeGraphQLOperationsSourceFile(netligraphConfig, doc) - const appOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - const parsedDoc = parse(appOperationsDoc, { - noLocation: true, - }) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - generateFunctionsFile(netligraphConfig, schema, appOperationsDoc, operations) -} - -const friendlyEventName = (event) => { - const { __typename, payload } = event - switch (__typename) { - case 'OneGraphNetlifyCliSessionTestEvent': - return friendlyEventName(payload) - case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - return 'Generate handler as Netlify function ' - case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - return `Sync Netlify Graph operations library` - default: { - return `Unrecognized event (${__typename})` - } - } -} - -const handleCliSessionEvent = async ({ authToken, event, netligraphConfig, schema, siteId }) => { - const { __typename, payload } = await event - switch (__typename) { - case 'OneGraphNetlifyCliSessionTestEvent': - await handleCliSessionEvent({ authToken, event: payload, netligraphConfig, schema, siteId }) - break - case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': - await generateHandler(netligraphConfig, schema, payload.operationId, payload) - break - case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netligraphConfig, schema, siteId }) - break - default: { - warn(`Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) - break - } - } -} - -/** - * Load the CLI session id from the local state - * @param {state} state - * @returns - */ -const loadCLISession = (state) => state.get('oneGraphSessionId') - -/** - * Idemponentially save the CLI session id to the local state and start monitoring for CLI events and upstream schema changes - * @param {object} input - * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any - * @param {NetlgraphConfig} input.netligraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events - * @param {state} input.state A function to call to set/get the current state of the local Netlify project - * @param {site} input.site The site object - */ -const startOneGraphCLISession = async (input) => { - const { netlifyToken, netligraphConfig, site, state } = input - let oneGraphSessionId = loadCLISession(state) - if (!oneGraphSessionId) { - const sessionName = generateSessionName() - const oneGraphSession = await createCLISession(netlifyToken, site.id, sessionName) - state.set('oneGraphSessionId', oneGraphSession.id) - oneGraphSessionId = state.get('oneGraphSessionId') - } - - const enabledServices = [] - const schema = await fetchOneGraphSchema(site.id, enabledServices) - - monitorCLISessionEvents({ - appId: site.id, - authToken: netlifyToken, - netligraphConfig, - sessionId: oneGraphSessionId, - state, - onEvents: async (events) => { - for (const event of events) { - const eventName = friendlyEventName(event) - log(`${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) - await handleCliSessionEvent({ authToken: netlifyToken, event, netligraphConfig, schema, siteId: site.id }) - log(`${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) - } - return events.map((event) => event.id) - }, - onError: (fetchEventError) => { - error(`Netlify Graph upstream error: ${fetchEventError}`) - }, - onClose: () => { - log('Netlify Graph upstream closed') - }, - }) -} - -/** - * Fetch the schema metadata for a site (enabled services, id, etc.) - * @param {string} authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} siteId The site id to query against - * @returns {Promise} The schema metadata for the site - */ -const fetchAppSchema = async (authToken, siteId) => { - const result = await fetchOneGraph({ - accessToken: authToken, - appId: siteId, - query: internalOperationsDoc, - operationName: 'AppSchemaQuery', - variables: { - nfToken: authToken, - appId: siteId, - }, - }) - - return result.data && result.data.oneGraph && result.data.oneGraph.app && result.data.oneGraph.app.graphQLSchema -} - -/** - * If a site does not exists upstream in OneGraph for the given site, create it - * @param {string} authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} siteId The site id to create an app for upstream on OneGraph - * @returns - */ -const upsertAppForSite = async (authToken, siteId) => { - const result = await fetchOneGraph({ - accessToken: authToken, - appId: ONEDASH_APP_ID, - query: internalOperationsDoc, - operationName: 'UpsertAppForSiteMutation', - variables: { - nfToken: authToken, - siteId, - }, - }) - - return ( - result.data && - result.data.oneGraph && - result.data.oneGraph.upsertAppForNetlifySite && - result.data.oneGraph.upsertAppForNetlifySite.app - ) -} - -/** - * Create a new schema in OneGraph for the given site with the specified metadata (enabled services, etc.) - * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any - * @param {object} input The details of the schema to create - * @returns {Promise} The schema metadata for the site - */ -const createNewAppSchema = async (nfToken, input) => { - const result = await fetchOneGraph({ - accessToken: null, - appId: input.appId, - query: internalOperationsDoc, - operationName: 'CreateNewSchemaMutation', - variables: { - nfToken, - input, - }, - }) - - return ( - result.data && - result.data.oneGraph && - result.data.oneGraph.createGraphQLSchema && - result.data.oneGraph.createGraphQLSchema.graphqlSchema - ) -} - -/** - * Ensure that an app exists upstream in OneGraph for the given site - * @param {string} authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} siteId The site id to create an app for upstream on OneGraph - * @returns - */ -const ensureAppForSite = async (authToken, siteId) => { - const app = await upsertAppForSite(authToken, siteId) - const schema = await fetchAppSchema(authToken, app.id) - if (!schema) { - log(`Creating new empty default GraphQL schema for site....`) - await createNewAppSchema(authToken, { - appId: siteId, - enabledServices: ['ONEGRAPH'], - setAsDefaultForApp: true, - }) - } -} - -/** - * Fetch a list of what services are enabled for the given site - * @param {string} authToken The (typically netlify) access token that is used for authentication, if any - * @param {string} appId The app id to query against - * @returns - */ -const fetchEnabledServices = async (authToken, appId) => { - const appSchema = await fetchAppSchema(authToken, appId) - return appSchema && appSchema.services -} - -/** - * Generate a session name that can be identified as belonging to the current checkout - * @returns {string} The name of the session to create - */ -const generateSessionName = () => { - const userInfo = os.userInfo('utf-8') - const sessionName = `${userInfo.username}-${Date.now()}` - log(`Generated Netlify Graph session name: ${sessionName}`) - return sessionName -} - -module.exports = { - ackCLISessionEvents, - createCLISession, - createPersistedQuery, - ensureAppForSite, - fetchCliSessionEvents, - fetchOneGraphPersisted, - fetchOneGraphSchemaJson, - fetchOneGraphSchema, - fetchPersistedQuery, - handleCliSessionEvent, - generateSessionName, - loadCLISession, - monitorCLISessionEvents, - refetchAndGenerateFromOneGraph, - startOneGraphCLISession, - updateCLISessionMetadata, - upsertAppForSite, -} diff --git a/src/lib/one-graph/codegen-helpers.js b/src/lib/one-graph/codegen-helpers.js deleted file mode 100644 index 1bd7002e8a0..00000000000 --- a/src/lib/one-graph/codegen-helpers.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Keywords in both Javascript and TypeScript - */ -const reservedKewords = new Set([ - 'abstract', - 'any', - 'as', - 'async', - 'await', - 'boolean', - 'break', - 'case', - 'catch', - 'class', - 'const', - 'constructor', - 'continue', - 'debugger', - 'declare', - 'default', - 'delete', - 'do', - 'else', - 'enum', - 'export', - 'extends', - 'false', - 'finally', - 'for', - 'from', - 'function', - 'get', - 'if', - 'implements', - 'import', - 'in', - 'instanceof', - 'interface', - 'is', - 'let', - 'module', - 'namespace', - 'new', - 'null', - 'number', - 'of', - 'package', - 'private', - 'protected', - 'public', - 'require', - 'return', - 'set', - 'static', - 'string', - 'super', - 'switch', - 'symbol', - 'this', - 'throw', - 'true', - 'try', - 'type', - 'typeof', - 'var', - 'void', - 'while', - 'with', - 'yield', -]) - -const isReservedKeyword = (keyword) => reservedKewords.has(keyword) - -const munge = (name) => { - if (isReservedKeyword(name)) { - return `_${name}` - } - return name -} - -module.exports = { - munge, -} diff --git a/src/lib/one-graph/graphql-helpers.js b/src/lib/one-graph/graphql-helpers.js deleted file mode 100644 index b477d2513b6..00000000000 --- a/src/lib/one-graph/graphql-helpers.js +++ /dev/null @@ -1,536 +0,0 @@ -const dotProp = require('dot-prop') -const { - TypeInfo, - getNamedType, - isEnumType, - isInputObjectType, - isInterfaceType, - isListType, - isNonNullType, - isObjectType, - isUnionType, - isWrappingType, - parseType, - print, - typeFromAST, - visit, - visitWithTypeInfo, -} = require('graphql') - -const { warn } = require('../../utils') - -const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) - -const gatherAllReferencedTypes = (schema, query) => { - const types = new Set([]) - const typeInfo = new TypeInfo(schema) - visit( - query, - visitWithTypeInfo(typeInfo, { - enter: () => { - const fullType = typeInfo.getType() - if (fullType) { - const typ = getNamedType(fullType) - // We don't want to pick up the `OneMe` type since that should be hidden from the end developer for the first few releases - if (typ) types.add(typ.name.toLocaleLowerCase().replace('oneme', '')) - } - }, - }), - ) - const result = [...types] - return result -} - -const extractVariableNameStringPair = (varDef) => [varDef.variable.name.value, print(varDef.type)] - -const gatherVariableDefinitions = (definition) => { - const varDefs = dotProp.get(definition, 'variableDefinitions.') || [] - return varDefs.map(extractVariableNameStringPair).sort(([left], [right]) => left.localeCompare(right)) -} -const typeScriptForGraphQLType = (schema, gqlType) => { - const scalarMap = { - String: 'string', - ID: 'string', - Int: 'number', - Float: 'number', - Boolean: 'boolean', - } - if (isListType(gqlType)) { - const subType = typeScriptForGraphQLType(schema, gqlType.ofType) - return `Array<${subType}>` - } - if (isObjectType(gqlType) || isInputObjectType(gqlType)) { - const fields = Object.values(gqlType.getFields()).map((field) => { - const nullable = !isNonNullType(field.type) - const type = typeScriptForGraphQLType(schema, field.type) - const description = field.description - ? `/** -* ${field.description} -*/ -` - : '' - return ` -${description} ${field.name}${nullable ? '?' : ''}: ${type}` - }) - return `{ - ${fields.join('; ')} -}` - } - if (isWrappingType(gqlType)) { - return typeScriptForGraphQLType(schema, gqlType.ofType) - } - if (isEnumType(gqlType)) { - const values = gqlType.getValues() - const enums = values.map((enumValue) => `"${enumValue.value}"`) - return enums.join(' | ') - } - - const namedType = getNamedType(gqlType) - // @ts-ignore metaprogramming - const basicType = scalarMap[namedType && namedType.name] || 'any' - return basicType -} - -const typeScriptSignatureForOperationVariablesHelper = (variableDefinition) => { - const variableName = variableDefinition.variable.name.value - const result = [variableName, variableDefinition] - return result -} - -const typeScriptSignatureForOperationVariables = (variableNames, schema, operationDefinition) => { - const variables = (operationDefinition.variableDefinitions || []) - .map(typeScriptSignatureForOperationVariablesHelper) - .filter(([variableName]) => variableNames.includes(variableName)) - const typesObject = variables.map(([varName, varDef]) => { - const printedType = print(varDef.type) - const parsedType = parseType(printedType) - const gqlType = typeFromAST(schema, parsedType) - const tsType = typeScriptForGraphQLType(schema, gqlType) - return [varName, tsType] - }) - const typeFields = typesObject.map(([name, tsType]) => `${name}: ${tsType}`).join(', ') - const types = `{ - ${typeFields} -}` - return types === '' ? 'null' : types -} - -const listCount = (gqlType) => { - let inspectedType = gqlType - let innerListCount = 0 - let totalCount = 0 - const maximumDepth = 30 - // TODO: Clean this up and do things properly - const errorSigil = -99 - // eslint-disable-next-line fp/no-loops - while (isWrappingType(inspectedType)) { - if (isListType(inspectedType)) { - innerListCount += 1 - } - totalCount += 1 - if (totalCount > maximumDepth) { - warn('Bailing on potential infinite recursion') - return errorSigil - } - inspectedType = inspectedType.ofType - } - return innerListCount -} - -const typeScriptDefinitionObjectForOperation = (schema, operationDefinition, fragmentDefinitions) => { - const scalarMap = { - String: 'string', - ID: 'string', - Int: 'number', - Float: 'number', - Boolean: 'boolean', - GitHubGitObjectID: 'string', - // JSON: "JSON", - } - // @ts-ignore - const helper = (parentGqlType, selection) => { - if (!parentGqlType) { - return - } - const parentNamedType = - // @ts-ignore - getNamedType(parentGqlType) || getNamedType(parentGqlType.type) - const alias = dotProp.get(selection, 'alias.value') - const name = dotProp.get(selection, 'name.value') - const displayedName = alias || name - // @ts-ignore - const field = parentNamedType.getFields()[name] - const gqlType = dotProp.get(field, 'type') - if (name.startsWith('__')) { - return [ - displayedName, - { - type: 'any', - description: 'Internal GraphQL field', - nullable: true, - }, - ] - } - const namedType = getNamedType(gqlType) - const isNullable = !isNonNullType(gqlType) - const isList = isListType(gqlType) || (!isNullable && isListType(gqlType.ofType)) - const isObjectLike = isObjectType(namedType) || isUnionType(namedType) || isInterfaceType(namedType) - const sub = dotProp - .get(selection, 'selectionSet.selections', []) - // @ts-ignore - .map(function innerHelper(innerSelection) { - if (innerSelection.kind === 'Field') { - return helper(namedType, innerSelection) - } - if (innerSelection.kind === 'InlineFragment') { - const fragmentGqlType = typeFromAST(schema, innerSelection.typeCondition) - if (!fragmentGqlType) { - return null - } - const fragmentSelections = innerSelection.selectionSet.selections.map( - // @ts-ignore - (subSelection) => { - const subSel = helper(fragmentGqlType, subSelection) - return subSel - }, - ) - return fragmentSelections - } - if (innerSelection.kind === 'FragmentSpread') { - const fragmentName = [innerSelection.name.value] - // @ts-ignore - const fragment = fragmentDefinitions[fragmentName] - if (fragment) { - const fragmentGqlType = typeFromAST(schema, fragment.typeCondition) - if (!fragmentGqlType) { - return null - } - const fragmentSelections = fragment.selectionSet.selections.map(innerHelper) - return fragmentSelections - } - } - return null - }) - .filter(Boolean) - // @ts-ignore - .reduce((acc, next) => { - if (Array.isArray(next[0])) { - return [...acc, ...next] - } - - return [...acc, next] - }, []) - const nestingLevel = isList ? listCount(gqlType) : 0 - const isEnum = isEnumType(namedType) - const basicType = isEnum - ? new Set(namedType.getValues().map((gqlEnum) => gqlEnum.value)) - : scalarMap[(namedType && namedType.name) || 'any'] - let returnType - if (isObjectLike) { - returnType = sub ? Object.fromEntries(sub) : null - } else if (basicType) { - returnType = basicType - } else { - returnType = 'any' - } - if (returnType) { - let finalType = returnType - // eslint-disable-next-line fp/no-loops - for (let idx = 0; idx < nestingLevel; idx++) { - finalType = [finalType] - } - const entry = [displayedName, { type: finalType, description: field && field.description, nullable: isNullable }] - return entry - } - // @ts-ignore - warn('No returnType!', basicType, namedType.name, selection) - } - - let baseGqlType = null - - if (operationDefinition.kind === 'OperationDefinition') { - switch (operationDefinition.operation) { - case 'query': - baseGqlType = schema.getQueryType() - break - case 'mutation': - baseGqlType = schema.getMutationType() - break - case 'subscription': - baseGqlType = schema.getSubscriptionType() - break - default: - break - } - } else if (operationDefinition.kind === 'FragmentDefinition') { - const typeName = operationDefinition.typeCondition.name.value - baseGqlType = schema.getType(typeName) - } - - const selections = dotProp.get(operationDefinition, 'selectionSet.selections') - const sub = selections && selections.map((selection) => helper(baseGqlType, selection)) - if (sub) { - // @ts-ignore - const object = Object.fromEntries(sub) - const result = { - data: { - type: object, - nullable: true, - description: 'Any data retrieved by the function be returned here', - }, - errors: { - type: ['any'], - nullable: true, - description: 'Any errors in the function will be returned here', - }, - } - return result - } - - return { - data: { - // @ts-ignore - type: 'any', - nullable: true, - description: 'Any data retrieved by the function be returned here', - }, - errors: { - type: ['any'], - nullable: true, - description: 'Any errors in the function will be returned here', - }, - } -} - -const typeScriptForOperation = (schema, operationDefinition, fragmentDefinitions) => { - const typeMap = typeScriptDefinitionObjectForOperation(schema, operationDefinition, fragmentDefinitions) - const valueHelper = (value) => { - if (typeof dotProp.get(value, 'type') === 'string') { - return value.type - } - if (Array.isArray(value.type)) { - const subType = valueHelper({ type: value.type[0] }) - return `Array<${subType}>` - } - if (value.type instanceof Set) { - // @ts-ignore - const enums = [...value.type.values()].map((innerValue) => `"${innerValue}"`).join(' | ') - return enums - } - if (typeof value.type === 'object') { - const fields = objectHelper(value.type) - return `{ - ${fields.join('; ')} - }` - } - } - - const objectHelper = (obj) => - Object.entries(obj).map(([name, value]) => { - const { description } = value - const tsType = valueHelper(value) - const { nullable } = value - const doc = description - ? `/** -* ${description} -*/ -` - : '' - return ` -${doc} ${name}${nullable ? '?' : ''}: ${tsType}` - }) - - const fields = objectHelper(typeMap).join('; ') - return `{${fields}}` -} - -const typeScriptTypeNameForOperation = (name) => `${capitalizeFirstLetter(name)}Payload` - -const typeScriptSignatureForOperation = (schema, operationDefinition, fragmentDefinitions) => { - const types = typeScriptForOperation(schema, operationDefinition, fragmentDefinitions) - return `${types}` -} - -/** - * Doesn't patch e.g. fragments - */ -const patchSubscriptionWebhookField = ({ definition, schema }) => { - if (definition.operation !== 'subscription') { - return definition - } - const subscriptionType = schema.getSubscriptionType() - if (!subscriptionType) { - return definition - } - const newSelections = definition.selectionSet.selections.map((selection) => { - if (selection.kind !== 'Field') return selection - const field = subscriptionType.getFields()[selection.name.value] - if (!field) { - warn( - 'Unable to find subscription service field, you may need to enable additional services. Missing field:', - selection.name.value, - ) - return selection - } - const fieldHasWebhookUrlArg = field.args.some((arg) => arg.name === 'webhookUrl') - const selectionHasWebhookUrlArg = dotProp - .get(selection, 'arguments', []) - .some((arg) => arg.name.value === 'webhookUrl') - if (fieldHasWebhookUrlArg && !selectionHasWebhookUrlArg) { - return { - ...selection, - arguments: [ - ...(selection.arguments || []), - { - kind: 'Argument', - name: { - kind: 'Name', - value: 'webhookUrl', - }, - value: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ], - } - } - return selection - }) - const hasWebhookVariableDefinition = - definition.variableDefinitions && - definition.variableDefinitions.find((varDef) => varDef.variable.name.value === 'netligraphWebhookUrl') - const variableDefinitions = hasWebhookVariableDefinition - ? definition.variableDefinitions - : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'String', - }, - }, - }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookUrl', - }, - }, - }, - ] - return { - ...definition, - // @ts-ignore: Handle edge cases later - variableDefinitions, - // @ts-ignore: Handle edge cases later - selectionSet: { ...definition.selectionSet, selections: newSelections }, - } -} - -const patchSubscriptionWebhookSecretField = ({ definition, schema }) => { - if (definition.operation !== 'subscription') { - return definition - } - const subscriptionType = schema.getSubscriptionType() - if (!subscriptionType) { - return definition - } - const newSelections = definition.selectionSet.selections.map((selection) => { - if (selection.kind !== 'Field') return selection - const field = subscriptionType.getFields()[selection.name.value] - if (!field) { - warn( - 'Unable to find subscription service field, you may need to enable additional services. Missing field:', - selection.name.value, - ) - return selection - } - const fieldHasWebhookSecretArg = field.args.some((arg) => arg.name === 'secret') - const selectionHasWebhookSecretArg = dotProp - .get(selection, 'arguments', []) - .some((arg) => arg.name.value === 'secret') - if (fieldHasWebhookSecretArg && !selectionHasWebhookSecretArg) { - return { - ...selection, - arguments: [ - ...(selection.arguments || []), - { - kind: 'Argument', - name: { - kind: 'Name', - value: 'secret', - }, - value: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ], - } - } - return selection - }) - const hasWebhookVariableDefinition = dotProp - .get(definition, 'variableDefinitions', []) - .find((varDef) => varDef.variable.name.value === 'netligraphWebhookSecret') - const variableDefinitions = hasWebhookVariableDefinition - ? definition.variableDefinitions - : [ - ...(definition.variableDefinitions || []), - { - kind: 'VariableDefinition', - type: { - kind: 'NonNullType', - type: { - kind: 'NamedType', - name: { - kind: 'Name', - value: 'OneGraphSubscriptionSecretInput', - }, - }, - }, - variable: { - kind: 'Variable', - name: { - kind: 'Name', - value: 'netligraphWebhookSecret', - }, - }, - }, - ] - return { - ...definition, - // @ts-ignore: Handle edge cases later - variableDefinitions, - // @ts-ignore: Handle edge cases later - selectionSet: { ...definition.selectionSet, selections: newSelections }, - } -} - -module.exports = { - capitalizeFirstLetter, - gatherAllReferencedTypes, - gatherVariableDefinitions, - typeScriptForGraphQLType, - typeScriptSignatureForOperationVariables, - listCount, - typeScriptDefinitionObjectForOperation, - typeScriptForOperation, - typeScriptTypeNameForOperation, - typeScriptSignatureForOperation, - patchSubscriptionWebhookField, - patchSubscriptionWebhookSecretField, -} diff --git a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js b/src/lib/one-graph/netlify-graph-code-exporter-snippets.js deleted file mode 100644 index cdd06be1ca8..00000000000 --- a/src/lib/one-graph/netlify-graph-code-exporter-snippets.js +++ /dev/null @@ -1,545 +0,0 @@ -const dotProp = require('dot-prop') -const { parse, print } = require('graphql') - -const { error } = require('../../utils') - -const { munge } = require('./codegen-helpers') - -let operationNodesMemo = [null, null] - -const getOperationNodes = (query) => { - if (operationNodesMemo[0] === query && operationNodesMemo[1]) { - return operationNodesMemo[1] - } - const operationDefinitions = [] - try { - parse(query).definitions.forEach((def) => { - if (def.kind === 'FragmentDefinition' || def.kind === 'OperationDefinition') { - operationDefinitions.push(def) - } - }) - } catch { - // ignore - } - operationNodesMemo = [query, operationDefinitions] - return operationDefinitions -} - -const getOperationName = (operationDefinition) => - operationDefinition.name ? operationDefinition.name.value : operationDefinition.operation - -const getOperationDisplayName = (operationDefinition) => - operationDefinition.name ? operationDefinition.name.value : `` - -const formatVariableName = (name) => { - const uppercasePattern = /[A-Z]/g - - return name.charAt(0).toUpperCase() + name.slice(1).replace(uppercasePattern, '_$&').toUpperCase() -} - -const getUsedVariables = (variables, operationDefinition) => - (operationDefinition.variableDefinitions || []).reduce((usedVariables, variable) => { - const variableName = variable.variable.name.value - if (variables[variableName]) { - usedVariables[variableName] = variables[variableName] - } - - return usedVariables - }, {}) - -const findFragmentDependencies = (operationDefinitions, definition) => { - const fragmentByName = (name) => operationDefinitions.find((def) => def.name.value === name) - - const findReferencedFragments = (selectionSet) => { - const { selections } = selectionSet - - const namedFragments = selections - .map((selection) => { - if (selection.kind === 'FragmentSpread') { - return fragmentByName(selection.name.value) - } - return null - }) - .filter(Boolean) - - const nestedNamedFragments = selections.reduce((acc, selection) => { - if ( - (selection.kind === 'Field' || selection.kind === 'SelectionNode' || selection.kind === 'InlineFragment') && - selection.selectionSet !== undefined - ) { - return [...acc, ...findReferencedFragments(selection.selectionSet)] - } - return acc - }, []) - - return [...namedFragments, ...nestedNamedFragments] - } - - const { selectionSet } = definition - - return findReferencedFragments(selectionSet) -} - -const operationDataByName = (graph, name) => graph.find((operationData) => operationData.name === name) - -const topologicalSortHelper = ({ graph, node, temp, visited }, result) => { - temp[node.name] = true - const neighbors = node.fragmentDependencies - neighbors.forEach((fragmentDependency) => { - const fragmentOperationData = operationDataByName(graph, fragmentDependency.name.value) - - if (!fragmentOperationData) { - return - } - - if (temp[fragmentOperationData.name]) { - error('The operation graph has a cycle') - return - } - if (!visited[fragmentOperationData.name]) { - topologicalSortHelper( - { - node: fragmentOperationData, - visited, - temp, - graph, - }, - result, - ) - } - }) - temp[node.name] = false - visited[node.name] = true - result.push(node) -} - -const toposort = (graph) => { - const result = [] - const visited = {} - const temp = {} - graph.forEach((node) => { - if (!visited[node.name] && !temp[node.name]) { - topologicalSortHelper({ node, visited, temp, graph }, result) - } - }) - return result -} - -const computeOperationDataList = ({ query, variables }) => { - const operationDefinitions = getOperationNodes(query) - - const fragmentDefinitions = [] - - operationDefinitions.forEach((operationDefinition) => { - if (operationDefinition.kind === 'FragmentDefinition') { - fragmentDefinitions.push(operationDefinition) - } - }) - - const rawOperationDataList = operationDefinitions.map((operationDefinition) => ({ - query: print(operationDefinition), - name: getOperationName(operationDefinition), - displayName: getOperationDisplayName(operationDefinition), - // $FlowFixMe: Come back for this - type: operationDefinition.operation || 'fragment', - variableName: formatVariableName(getOperationName(operationDefinition)), - variables: getUsedVariables(variables, operationDefinition), - operationDefinition, - fragmentDependencies: findFragmentDependencies(fragmentDefinitions, operationDefinition), - })) - - const operationDataList = toposort(rawOperationDataList) - - return { - operationDefinitions, - fragmentDefinitions, - rawOperationDataList, - operationDataList, - } -} - -const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) - -const unnamedSymbols = new Set(['query', 'mutation', 'subscription']) - -const isOperationNamed = (operationData) => !unnamedSymbols.has(operationData.name.trim()) - -const addLeftWhitespace = (string, padding) => { - const paddingString = ' '.repeat(padding) - - return string - .split('\n') - .map((line) => paddingString + line) - .join('\n') -} - -const collapseExtraNewlines = (string) => string.replace(/\n{2,}/g, '\n\n') - -const snippetOptions = [ - { - id: 'postHttpMethod', - label: 'POST function', - initial: true, - }, - { - id: 'useClientAuth', - label: "Use user's OAuth token", - initial: false, - }, -] - -const operationFunctionName = (operationData) => { - const { type } = operationData - - let prefix = 'unknow' - switch (type) { - case 'query': - prefix = 'fetch' - break - case 'mutation': - prefix = 'execute' - break - case 'subscription': - prefix = 'subscribeTo' - break - default: - break - } - - const fnName = prefix + (prefix.length === 0 ? operationData.name : capitalizeFirstLetter(operationData.name)) - - return fnName -} - -const coercerFor = (type, name) => { - const typeName = print(type).replace(/\W+/gi, '').toLocaleLowerCase() - - switch (typeName) { - case 'string': - return `${name}` - case 'int': - return `parseInt(${name})` - case 'float': - return `parseFloat(${name})` - case 'boolean': - return `${name} === 'true'` - default: - return `${name}` - } -} - -const asyncFetcherInvocation = (operationDataList, pluckerStyle) => { - const invocations = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map((namedOperationData) => { - const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( - (def) => def.variable.name.value, - ) - - const invocationParams = params.map((param) => `${param}: ${munge(param)}`) - - const pluckers = { - get: - dotProp - .get(namedOperationData, 'operationDefinition.variableDefinitions', []) - .map((def) => { - const name = def.variable.name.value - const withCoercer = coercerFor(def.type, `event.queryStringParameters?.${name}`) - return `const ${munge(name)} = ${withCoercer};` - }) - .join('\n ') || '', - post: - dotProp - .get(namedOperationData, 'operationDefinition.variableDefinitions', []) - .map((def) => { - const name = def.variable.name.value - return `const ${munge(name)} = eventBodyJson?.${name};` - }) - .join('\n ') || '', - } - - let variableValidation = '' - - let requiredVariableCount = 0 - - if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { - const requiredVariableNames = namedOperationData.operationDefinition.variableDefinitions - .map((def) => (print(def.type).endsWith('!') ? def.variable.name.value : null)) - .filter(Boolean) - - requiredVariableCount = requiredVariableNames.length - - // TODO: Filter nullable variables - const condition = requiredVariableNames - .map((name) => `${munge(name)} === undefined || ${munge(name)} === null`) - .join(' || ') - - const message = requiredVariableNames.map((name) => `\`${name}\``).join(', ') - - variableValidation = ` if (${condition}) { - return { - statusCode: 422, - body: JSON.stringify({ - error: 'You must supply parameters for: ${message}' - }), - }; - }` - } - - return `${pluckerStyle === 'get' ? pluckers.get : pluckers.post} - -${requiredVariableCount > 0 ? variableValidation : ''} - - const { errors: ${namedOperationData.name}Errors, data: ${namedOperationData.name}Data } = - await Netligraph.${operationFunctionName(namedOperationData)}({ ${invocationParams.join(', ')} }, accessToken); - - if (${namedOperationData.name}Errors) { - console.error(JSON.stringify(${namedOperationData.name}Errors, null, 2)); - } - - console.log(JSON.stringify(${namedOperationData.name}Data, null, 2));` - }) - .join('\n\n') - - return invocations -} - -const clientSideInvocations = (operationDataList, pluckerStyle, useClientAuth) => { - const invocations = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map((namedOperationData) => { - const whitespace = 8 - - const params = (namedOperationData.operationDefinition.variableDefinitions || []).map( - (def) => def.variable.name.value, - ) - let bodyPayload = '' - - if ((dotProp.get(namedOperationData, 'operationDefinition.variableDefinitions', []).length !== 0 || 0) > 0) { - const variableNames = namedOperationData.operationDefinition.variableDefinitions.map( - (def) => def.variable.name.value, - ) - - const variables = variableNames.map((name) => `"${name}": ${name}`).join(',\n') - - bodyPayload = ` -${variables} -` - } - - const clientAuth = useClientAuth - ? `, - headers: { - ...oneGraphAuth?.authHeaders() - }` - : '' - - return `async function ${operationFunctionName(namedOperationData)}(${ - useClientAuth ? 'oneGraphAuth, ' : '' - }params) { - const {${params.join(', ')}} = params || {}; - const resp = await fetch(\`/.netlify/functions/${namedOperationData.name}${ - pluckerStyle === 'get' ? `?${params.map((param) => `${param}=\${${param}}`).join('&')}` : '' - }\`, - { - method: "${pluckerStyle.toLocaleUpperCase()}"${ - pluckerStyle === 'get' - ? '' - : `, - body: JSON.stringify({${addLeftWhitespace(bodyPayload, whitespace).trim()}})${clientAuth}` - } - }); - - const text = await resp.text(); - - return JSON.parse(text); -}` - }) - .join('\n\n') - - return invocations -} - -const subscriptionHandler = ({ netligraphConfig, operationData }) => `${imp( - netligraphConfig, - '{ getSecrets }', - '@sgrove/netlify-functions', -)} -${imp(netligraphConfig, 'Netligraph', netligraphConfig.netligraphRequirePath)} - -${exp(netligraphConfig, 'handler')} = async (event, context) => { - let secrets = await getSecrets(event); - - const payload = Netligraph.parseAndVerify${operationData.name}Event(event); - - if (!payload) { - return { - statusCode: 412, - data: JSON.stringify({ - success: false, - error: 'Unable to verify payload signature', - }), - }; - } - const { errors: ${operationData.name}Errors, data: ${operationData.name}Data } = payload; - - if (${operationData.name}Errors) { - console.error(${operationData.name}Errors); - } - - console.log(${operationData.name}Data); - - /** - * If you want to unsubscribe from this webhook - * in order to stop receiving new events, - * simply return status 410, e.g.: - * - * return { - * statusCode: 410, - * body: JSON.stringify(null), - * headers: { - * 'content-type': 'application/json', - * }, - * } - */ - - return { - statusCode: 200, - body: JSON.stringify({ - successfullyProcessedIncomingWebhook: true, - }), - headers: { - 'content-type': 'application/json', - }, - }; -}; -` - -const imp = (netligraphConfig, name, package) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `const ${name} = require("${package}")` - } - - return `import ${name} from "${package}"` -} - -const exp = (netligraphConfig, name) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `exports.${name}` - } - - return `export const ${name}` -} - -// Snippet generation! -const netlifyFunctionSnippet = { - language: 'JavaScript', - codeMirrorMode: 'javascript', - name: 'Netlify Function', - options: snippetOptions, - generate: (opts) => { - const { netligraphConfig, options } = opts - - const operationDataList = opts.operationDataList.map((operationData, idx) => { - if (!isOperationNamed(operationData)) { - return { - ...operationData, - name: `unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1}`.trim(), - query: `# Consider giving this ${operationData.type} a unique, descriptive -# name in your application as a best practice -${operationData.type} unnamed${capitalizeFirstLetter(operationData.type)}${idx + 1} ${operationData.query - .trim() - .replace(/^(query|mutation|subscription) /i, '')}`, - } - } - return operationData - }) - - const firstOperation = operationDataList.find( - (operation) => operation.operationDefinition.kind === 'OperationDefinition', - ) - - if (!firstOperation) { - return '// No operation found' - } - - const filename = `${firstOperation.name}.${netligraphConfig.extension}` - - const isSubscription = firstOperation.type === 'subscription' - - if (isSubscription) { - const result = subscriptionHandler({ - netligraphConfig, - operationData: firstOperation, - }) - - return result - } - - const fetcherInvocation = asyncFetcherInvocation( - operationDataList, - dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', - ) - - const passThroughResults = operationDataList - .filter((operationData) => ['query', 'mutation', 'subscription'].includes(operationData.type)) - .map( - (operationData) => `${operationData.name}Errors: ${operationData.name}Errors, -${operationData.name}Data: ${operationData.name}Data`, - ) - .join(',\n') - - const clientSideCalls = clientSideInvocations( - operationDataList, - dotProp.get(options, 'postHttpMethod') === true ? 'post' : 'get', - options.useClientAuth, - ) - - const whitespace = 6 - - const snippet = `${imp(netligraphConfig, '{ getSecrets }', '@sgrove/netlify-functions')}; -${imp(netligraphConfig, 'Netligraph', './netligraph')} - -${exp(netligraphConfig, 'handler')} = async (event, context) => { - // By default, all API calls use no authentication - let accessToken = null; - - //// If you want to use the client's accessToken when making API calls on the user's behalf: - // accessToken = event.headers["authorization"]?.split(" ")[1] - - //// If you want to use the API with your own access token: - // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken; - - const eventBodyJson = JSON.parse(event.body || "{}"); - - ${fetcherInvocation} - - return { - statusCode: 200, - body: JSON.stringify({ - success: true, -${addLeftWhitespace(passThroughResults, whitespace)} - }), - headers: { - 'content-type': 'application/json', - }, - }; -}; - -/** - * Client-side invocations: - * Call your Netlify function from the browser (after saving - * the code to \`${filename}\`) with these helpers: - */ - -/** -${clientSideCalls} -*/ - -` - - return collapseExtraNewlines(snippet) - }, -} - -module.exports = { computeOperationDataList, netlifyFunctionSnippet } diff --git a/src/lib/one-graph/netlify-graph.js b/src/lib/one-graph/netlify-graph.js deleted file mode 100644 index 1caf4ad5cfa..00000000000 --- a/src/lib/one-graph/netlify-graph.js +++ /dev/null @@ -1,736 +0,0 @@ -const { randomUUID } = require('crypto') -const fs = require('fs') - -const dotProp = require('dot-prop') -const { parse, print, printSchema } = require('graphql') - -const { detectServerSettings, error, getFunctionsDir, warn } = require('../../utils') - -const { - patchSubscriptionWebhookField, - patchSubscriptionWebhookSecretField, - typeScriptSignatureForOperation, - typeScriptSignatureForOperationVariables, -} = require('./graphql-helpers') -const { computeOperationDataList, netlifyFunctionSnippet } = require('./netlify-graph-code-exporter-snippets') - -const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) - -const replaceAll = (target, search, replace) => { - const simpleString = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - return target.replace(new RegExp(simpleString, 'g'), replace) -} - -const sourceOperationsFilename = 'netligraphOperationsLibrary.graphql' - -const defaultNetligraphConfig = { - extension: 'js', - netligraphPath: 'netlify', - moduleType: 'commonjs', -} - -/** - * Return a full Netligraph config with any defaults overridden by netlify.toml - * @param {import('../base-command').BaseCommand} command - */ -const getNetligraphConfig = async ({ command, options }) => { - const { config, site } = command.netlify - config.dev = { ...config.dev } - config.build = { ...config.build } - const userSpecifiedConfig = (config && config.graph) || {} - /** @type {import('./types').DevConfig} */ - const devConfig = { - framework: '#auto', - ...(config.functionsDirectory && { functions: config.functionsDirectory }), - ...(config.build.publish && { publish: config.build.publish }), - ...config.dev, - ...options, - } - - /** @type {Partial} */ - let settings = {} - try { - settings = await detectServerSettings(devConfig, options, site.root) - } catch (detectServerSettingsError) { - error(detectServerSettingsError.message) - } - - const framework = settings.framework || userSpecifiedConfig.framework - const isNextjs = framework === 'Next.js' - const functionsPath = isNextjs ? 'pages/api' : getFunctionsDir({ config, options }) || `functions` - const netligraphPath = isNextjs ? 'lib/netligraph' : `${functionsPath}/netligraph` - const baseConfig = { ...defaultNetligraphConfig, ...userSpecifiedConfig, netligraphPath } - const netligraphImplementationFilename = `${baseConfig.netligraphPath}/index.${baseConfig.extension}` - const netligraphTypeDefinitionsFilename = `${baseConfig.netligraphPath}/index.d.ts` - const graphQLOperationsSourceFilename = `${baseConfig.netligraphPath}/${sourceOperationsFilename}` - const graphQLSchemaFilename = 'netligraphSchema.graphql' - const netligraphRequirePath = isNextjs ? '../../lib/netligraph' : `./netligraph` - const fullConfig = { - ...baseConfig, - functionsPath, - netligraphImplementationFilename, - netligraphTypeDefinitionsFilename, - graphQLOperationsSourceFilename, - graphQLSchemaFilename, - netligraphRequirePath, - framework, - } - - return fullConfig -} - -const ensureNetligraphPath = (netligraphConfig) => { - fs.mkdirSync(netligraphConfig.netligraphPath, { recursive: true }) -} - -const ensureFunctionsPath = (netligraphConfig) => { - fs.mkdirSync(netligraphConfig.functionsPath, { recursive: true }) -} - -const defaultExampleOperationsDoc = `query ExampleQuery @netligraph(doc: "An example query to start with.") { - __typename -}` - -const generatedOneGraphClient = () => - ` -const fetch = (appId, options) => { - var reqBody = options.body || null - const userHeaders = options.headers || {} - const headers = { - ...userHeaders, - 'Content-Type': 'application/json', - 'Content-Length': reqBody.length, - } - - var reqOptions = { - method: 'POST', - headers: headers, - timeout: 30000, - } - - const url = 'https://serve.onegraph.com/graphql?app_id=' + appId - - const respBody = [] - - return new Promise((resolve, reject) => { - var req = https.request(url, reqOptions, (res) => { - if (res.statusCode < 200 || res.statusCode > 299) { - return reject( - new Error( - "Netlify OneGraph return non - OK HTTP status code" + res.statusCode, - ), - ) - } - - res.on('data', (chunk) => respBody.push(chunk)) - - res.on('end', () => { - const resString = Buffer.concat(respBody).toString() - resolve(resString) - }) - }) - - req.on('error', (e) => { - console.error('Error making request to Netlify OneGraph: ', e) - }) - - req.on('timeout', () => { - req.destroy() - reject(new Error('Request to Netlify OneGraph timed out')) - }) - - req.write(reqBody) - req.end() - }) -} - -const fetchOneGraphPersisted = async function fetchOneGraphPersisted( - accessToken, - docId, - operationName, - variables, -) { - const payload = { - doc_id: docId, - variables: variables, - operationName: operationName, - } - - const result = await fetch( - process.env.SITE_ID, - { - method: 'POST', - headers: { - Authorization: accessToken ? "Bearer " + accessToken : '', - }, - body: JSON.stringify(payload), - }, - ) - - // @ts-ignore - return JSON.parse(result) -} - -const fetchOneGraph = async function fetchOneGraph( - accessToken, - query, - operationName, - variables, -) { - const payload = { - query: query, - variables: variables, - operationName: operationName, - } - - const result = await fetch( - process.env.SITE_ID, - { - method: 'POST', - headers: { - Authorization: accessToken ? "Bearer " + accessToken : '', - }, - body: JSON.stringify(payload), - }, - ) - - // @ts-ignore - return JSON.parse(result) -} -` - -const subscriptionParserName = (fn) => `parseAndVerify${fn.operationName}Event` - -const subscriptionFunctionName = (fn) => `subscribeTo${fn.operationName}` - -const exp = (netligraphConfig, name) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `exports.${name}` - } - - return `export const ${name}` -} - -const imp = (netligraphConfig, name, package) => { - if (netligraphConfig.moduleType === 'commonjs') { - return `const ${name} = require("${package}")` - } - - return `import ${name} from "${package}"` -} - -const generateSubscriptionFunctionTypeDefinition = (schema, fn, fragments) => { - const parsingFunctionReturnSignature = typeScriptSignatureForOperation(schema, fn.parsedOperation, fragments) - - const variableNames = (fn.parsedOperation.variableDefinitions || []).map((varDef) => varDef.variable.name.value) - - const variableSignature = typeScriptSignatureForOperationVariables(variableNames, schema, fn.parsedOperation) - - const jsDoc = replaceAll(fn.description || '', '*/', '!') - .split('\n') - .join('\n* ') - - return `/** -* ${jsDoc} -*/ -export function ${subscriptionFunctionName(fn)}( - /** - * This will be available in your webhook handler as a query parameter. - * Use this to keep track of which subscription you're receiving - * events for. - */ - netligraphWebhookId: string, - variables: ${variableSignature}, - accessToken?: string | null - ) : void - -/** - * Verify the ${fn.operationName} event body is signed securely, and then parse the result. - */ -export function ${subscriptionParserName( - fn, - )} (/** A Netlify Handler Event */ event) : null | ${parsingFunctionReturnSignature} -` -} - -// TODO: Handle fragments -const generateSubscriptionFunction = (schema, fn) => { - const patchedWithWebhookUrl = patchSubscriptionWebhookField({ - schema, - definition: fn.parsedOperation, - }) - - const patched = patchSubscriptionWebhookSecretField({ - schema, - definition: patchedWithWebhookUrl, - }) - - // TODO: Don't allow unnamed operations as subscription - const filename = (patched.name && patched.name.value) || 'Unknown' - - const body = print(patched) - const safeBody = replaceAll(body, '${', '\\${') - - return `const ${subscriptionFunctionName(fn)} = async ( - /** - * This will be available in your webhook handler as a query parameter. - * Use this to keep track of which subscription you're receiving - * events for. - */ - netligraphWebhookId, - variables, - accessToken, - ) => { - const netligraphWebhookUrl = \`\${process.env.DEPLOY_URL}/.netlify/functions/${filename}?netligraphWebhookId=\${netligraphWebhookId}\` - const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET - const fullVariables = {...variables, netligraphWebhookUrl: netligraphWebhookUrl, netligraphWebhookSecret: { hmacSha256Key: secret }} - - const persistedInput = { - doc_id: "${fn.id}", - oeprationName: "${fn.operationName}", - variables: fullVariables, - accessToken: accessToken - } - - const subscriptionOperationDoc = \`${safeBody}\`; - - // const result = await fetchOneGraphPersisted(persistedInput) - const result = await fetchOneGraph(accessToken, subscriptionOperationDoc, "${fn.operationName}", fullVariables) -} - -const ${subscriptionParserName(fn)} = (event) => { - if (!verifyRequestSignature({ event: event })) { - console.warn("Unable to verify signature for ${filename}") - return null - } - - return JSON.parse(event.body || '{}') -}` -} - -const makeFunctionName = (kind, operationName) => { - if (kind === 'query') { - return `fetch${capitalizeFirstLetter(operationName)}` - } - if (kind === 'mutation') { - return `execute${capitalizeFirstLetter(operationName)} ` - } - - return capitalizeFirstLetter(operationName) -} - -const queryToFunctionDefinition = (fullSchema, persistedQuery) => { - const basicFn = { - id: persistedQuery.id, - definition: persistedQuery.query, - description: persistedQuery.description, - } - - const body = basicFn.definition - const safeBody = replaceAll(body, '${', '\\${') - - const parsed = parse(body) - const operations = parsed.definitions.filter((def) => def.kind === 'OperationDefinition') - const fragments = parsed.definitions.filter((def) => def.kind === 'FragmentDefinition') - - if (!operations) { - error(`Operation definition is required in ${basicFn.id}`) - return - } - - const [operation] = operations - - const returnSignature = typeScriptSignatureForOperation(fullSchema, operation, fragments) - - const variableNames = (operation.variableDefinitions || []).map((varDef) => varDef.variable.name.value) - - const variableSignature = typeScriptSignatureForOperationVariables(variableNames, fullSchema, operation) - - const operationName = operation.name && operation.name.value - - if (!operationName) { - error(`Operation name is required in ${basicFn.definition}\n\tfound: ${JSON.stringify(operation.name)}`) - return - } - - const fn = { - ...basicFn, - fnName: makeFunctionName(operation.operation, operationName), - safeBody, - kind: operation.operation, - variableSignature, - returnSignature, - operationName, - parsedOperation: operation, - } - - return fn -} - -const generateJavaScriptClient = (netligraphConfig, schema, operationsDoc, enabledFunctions) => { - const operationsWithoutTemplateDollar = replaceAll(operationsDoc, '${', '\\${') - const safeOperationsDoc = replaceAll(operationsWithoutTemplateDollar, '`', '\\`') - const functionDecls = enabledFunctions.map((fn) => { - if (fn.kind === 'subscription') { - const fragments = [] - return generateSubscriptionFunction(schema, fn, fragments) - } - - const dynamicFunction = `${exp(netligraphConfig, fn.fnName)} = ( - variables, - accessToken, - ) => { - return fetchOneGraph({ - query: \`${fn.safeBody}\`, - variables: variables, - accessToken: accessToken - }) -} - - ` - - const staticFunction = `${exp(netligraphConfig, fn.fnName)} = ( - variables, - accessToken, -) => { - return fetchOneGraph(accessToken, operationsDoc, "${fn.operationName}", variables) -} - -` - return fn.id ? staticFunction : dynamicFunction - }) - - const exportedFunctionsObjectProperties = enabledFunctions - .map((fn) => { - const isSubscription = fn.kind === 'subscription' - - if (isSubscription) { - const subscriptionFnName = subscriptionFunctionName(fn) - const parserFnName = subscriptionParserName(fn) - - const jsDoc = replaceAll(fn.description || '', '*/', '') - .split('\n') - .join('\n* ') - - return `/** - * ${jsDoc} - */ - ${subscriptionFnName}:${subscriptionFnName}, - /** - * Verify the event body is signed securely, and then parse the result. - */ - ${parserFnName}: ${parserFnName}` - } - - const jsDoc = replaceAll(fn.description || '', '*/', '') - .split('\n') - .join('\n* ') - - return `/** - * ${jsDoc} - */ - ${fn.fnName}: ${netligraphConfig.moduleType === 'commonjs' ? 'exports.' : ''}${fn.fnName}` - }) - .join(',\n ') - - const dummyHandler = `${exp(netligraphConfig, 'handler')} = async (event, context) => { - // return a 401 json response - return { - statusCode: 401, - body: JSON.stringify({ - message: 'Unauthorized', - }), - } -}` - - const source = `// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION! -${imp(netligraphConfig, 'https', 'https')} -${imp(netligraphConfig, 'crypto', 'crypto')} - -${exp(netligraphConfig, 'verifySignature')} = (input) => { - const secret = input.secret - const body = input.body - const signature = input.signature - - if (!signature) { - console.error('Missing signature') - return false - } - - const sig = {} - for (const pair of signature.split(',')) { - const [k, v] = pair.split('=') - sig[k] = v - } - - if (!sig.t || !sig.hmac_sha256) { - console.error('Invalid signature header') - return false - } - - const hash = crypto - .createHmac('sha256', secret) - .update(sig.t) - .update('.') - .update(body) - .digest('hex') - - if ( - !crypto.timingSafeEqual( - Buffer.from(hash, 'hex'), - Buffer.from(sig.hmac_sha256, 'hex') - ) - ) { - console.error('Invalid signature') - return false - } - - if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) { - console.error('Request is too old') - return false - } - - return true -} - -const operationsDoc = \`${safeOperationsDoc}\` - -${generatedOneGraphClient()} - -${exp(netligraphConfig, 'verifyRequestSignature')} = (request) => { - const event = request.event - const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET - const signature = event.headers['x-onegraph-signature'] - const body = event.body - - if (!secret) { - console.error( - 'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request' - ) - return false - } - - return verifySignature({ secret, signature, body: body || '' }) -} - -${functionDecls.join('\n\n')} - -/** - * The generated Netligraph library with your operations - */ -const functions = { - ${exportedFunctionsObjectProperties} -} - -${netligraphConfig.moduleType === 'commonjs' ? 'exports.default = functions' : 'export default functions'} - -${dummyHandler}` - - return source -} - -const generateTypeScriptDefinitions = (netligraphConfig, schema, enabledFunctions) => { - const functionDecls = enabledFunctions.map((fn) => { - const isSubscription = fn.kind === 'subscription' - - if (isSubscription) { - const fragments = [] - return generateSubscriptionFunctionTypeDefinition(schema, fn, fragments) - } - - const jsDoc = replaceAll(fn.description || ``, '*/', '') - .split('\n') - .join('\n* ') - - return `/** - * ${jsDoc} - */ -export function ${fn.fnName}( - variables: ${fn.variableSignature}, - accessToken?: string -): Promise< - ${fn.returnSignature} ->;` - }) - - const source = `// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION! -${functionDecls.join('\n\n')} -` - - return source -} - -const generateFunctionsSource = (netligraphConfig, schema, operationsDoc, queries) => { - const functionDefinitions = Object.values(queries).map((query) => queryToFunctionDefinition(schema, query)) - const clientSource = generateJavaScriptClient(netligraphConfig, schema, operationsDoc, functionDefinitions) - const typeDefinitionsSource = generateTypeScriptDefinitions(netligraphConfig, schema, functionDefinitions) - - return { - clientSource, - typeDefinitionsSource, - functionDefinitions, - } -} - -const generateFunctionsFile = (netligraphConfig, schema, operationsDoc, queries) => { - const { clientSource, typeDefinitionsSource } = generateFunctionsSource( - netligraphConfig, - schema, - operationsDoc, - queries, - ) - - ensureNetligraphPath(netligraphConfig) - fs.writeFileSync(netligraphConfig.netligraphImplementationFilename, clientSource, 'utf8') - fs.writeFileSync(netligraphConfig.netligraphTypeDefinitionsFilename, typeDefinitionsSource, 'utf8') -} - -const pluckDirectiveArgValue = (directive, argName) => { - const targetArg = dotProp.get(directive, 'arguments', []).find((arg) => arg.name.value === argName) - if (!(targetArg && targetArg.value)) { - return null - } - - if (targetArg.value.kind === 'StringValue') { - return targetArg.value.value - } - - return null -} - -const extractFunctionsFromOperationDoc = (parsedDoc) => { - const functionEntries = parsedDoc.definitions - .map((next) => { - if (next.kind !== 'OperationDefinition') { - return null - } - - const key = dotProp.get(next, 'name.value') - - const directive = dotProp - .get(next, 'directives', []) - .find((localDirective) => localDirective.name.value === 'netligraph') - - if (!directive) { - return null - } - - const docString = pluckDirectiveArgValue(directive, 'doc') || '' - let id = pluckDirectiveArgValue(directive, 'id') - - if (!id) { - id = randomUUID() - } - - const operation = { - id, - name: key, - description: docString, - operation: next.operation, - query: print(next), - } - - return [id, operation] - }) - .filter(Boolean) - - return Object.fromEntries(functionEntries) -} - -const readGraphQLOperationsSourceFile = (netligraphConfig) => { - ensureNetligraphPath(netligraphConfig) - - const fullFilename = netligraphConfig.graphQLOperationsSourceFilename - if (!fs.existsSync(fullFilename)) { - fs.writeFileSync(fullFilename, '') - fs.closeSync(fs.openSync(fullFilename, 'w')) - } - const source = fs.readFileSync(fullFilename, 'utf8') - - return source -} - -const writeGraphQLOperationsSourceFile = (netligraphConfig, operationDocString) => { - const graphqlSource = operationDocString - - ensureNetligraphPath(netligraphConfig) - fs.writeFileSync(netligraphConfig.graphQLOperationsSourceFilename, graphqlSource, 'utf8') -} - -const writeGraphQLSchemaFile = (netligraphConfig, schema) => { - const graphqlSource = printSchema(schema) - - ensureNetligraphPath(netligraphConfig) - fs.writeFileSync( - `${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, - graphqlSource, - 'utf8', - ) -} - -const readGraphQLSchemaFile = (netligraphConfig) => { - ensureNetligraphPath(netligraphConfig) - return fs.readFileSync(`${netligraphConfig.netligraphPath}/${netligraphConfig.graphQLSchemaFilename}`, 'utf8') -} - -const generateHandlerSource = ({ handlerOptions, netligraphConfig, operationId, operationsDoc, schema }) => { - const parsedDoc = parse(operationsDoc) - const operations = extractFunctionsFromOperationDoc(parsedDoc) - const operation = operations[operationId] - - if (!operation) { - warn(`Operation ${operationId} not found in graphql.`, Object.keys(operations)) - return - } - - const odl = computeOperationDataList({ query: operation.query, variables: [] }) - - const source = netlifyFunctionSnippet.generate({ - netligraphConfig, - operationDataList: odl.operationDataList, - schema, - options: handlerOptions, - }) - - return { source, operation } -} - -const generateHandler = (netligraphConfig, schema, operationId, handlerOptions) => { - let currentOperationsDoc = readGraphQLOperationsSourceFile(netligraphConfig) - if (currentOperationsDoc.trim().length === 0) { - currentOperationsDoc = defaultExampleOperationsDoc - } - - const handlerSource = generateHandlerSource({ - netligraphConfig, - schema, - operationsDoc: currentOperationsDoc, - operationId, - handlerOptions, - }) - - if (!(handlerSource && handlerSource.source)) { - return - } - - const { operation, source } = handlerSource - - const filename = `${netligraphConfig.functionsPath}/${operation.name}.${netligraphConfig.extension}` - - ensureFunctionsPath(netligraphConfig) - fs.writeFileSync(filename, source) -} - -module.exports = { - defaultExampleOperationsDoc, - extractFunctionsFromOperationDoc, - generateFunctionsSource, - generateFunctionsFile, - generateHandler, - generateHandlerSource, - getNetligraphConfig, - readGraphQLOperationsSourceFile, - readGraphQLSchemaFile, - writeGraphQLOperationsSourceFile, - writeGraphQLSchemaFile, -} diff --git a/src/lib/one-graph/one-graph-client-graphql-operations.js b/src/lib/one-graph/one-graph-client-graphql-operations.js deleted file mode 100644 index 8ba57c8aeb0..00000000000 --- a/src/lib/one-graph/one-graph-client-graphql-operations.js +++ /dev/null @@ -1,338 +0,0 @@ -const internalOperationsDoc = `mutation CreatePersistedQueryMutation( - $nfToken: String! - $appId: String! - $query: String! - $tags: [String!]! - $description: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createPersistedQuery( - input: { - query: $query - appId: $appId - tags: $tags - description: $description - } - ) { - persistedQuery { - id - } - } - } - } - - query ListPersistedQueries( - $appId: String! - $first: Int! - $after: String - $tags: [String!]! - ) { - oneGraph { - app(id: $appId) { - id - persistedQueries( - first: $first - after: $after - tags: $tags - ) { - pageInfo { - hasNextPage - endCursor - } - nodes { - id - query - fixedVariables - freeVariables - allowedOperationNames - tags - description - } - } - } - } - } - - subscription ListPersistedQueriesSubscription( - $appId: String! - $first: Int! - $after: String - $tags: [String!]! - ) { - poll( - onlyTriggerWhenPayloadChanged: true - schedule: { every: { minutes: 1 } } - ) { - query { - oneGraph { - app(id: $appId) { - id - persistedQueries( - first: $first - after: $after - tags: $tags - ) { - pageInfo { - hasNextPage - endCursor - } - nodes { - id - query - fixedVariables - freeVariables - allowedOperationNames - tags - description - } - } - } - } - } - } - } - - query PersistedQueriesQuery( - $nfToken: String! - $appId: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - app(id: $appId) { - persistedQueries { - nodes { - id - query - allowedOperationNames - description - freeVariables - fixedVariables - tags - } - } - } - } - } - - query PersistedQueryQuery( - $nfToken: String! - $appId: String! - $id: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - persistedQuery(appId: $appId, id: $id) { - id - query - allowedOperationNames - description - freeVariables - fixedVariables - tags - } - } - } - - mutation CreateCLISessionMutation( - $nfToken: String! - $appId: String! - $name: String! - $metadata: JSON - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createNetlifyCliSession( - input: { appId: $appId, name: $name, metadata: metadata } - ) { - session { - id - appId - netlifyUserId - name - } - } - } - } - - mutation UpdateCLISessionMetadataMutation( - $nfToken: String! - $sessionId: String! - $metadata: JSON! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - updateNetlifyCliSession( - input: { id: $sessionId, metadata: $metadata } - ) { - session { - id - name - metadata - } - } - } - } - - mutation CreateCLISessionEventMutation( - $nfToken: String! - $sessionId: String! - $payload: JSON! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createNetlifyCliTestEvent( - input: { - data: { payload: $payload } - sessionId: $sessionId - } - ) { - event { - id - createdAt - sessionId - } - } - } - } - - query CLISessionEventsQuery( - $nfToken: String! - $sessionId: String! - $first: Int! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - netlifyCliEvents(sessionId: $sessionId, first: $first) { - __typename - createdAt - id - sessionId - ... on OneGraphNetlifyCliSessionLogEvent { - id - message - sessionId - createdAt - } - ... on OneGraphNetlifyCliSessionTestEvent { - id - createdAt - payload - sessionId - } - } - } - } - - mutation AckCLISessionEventMutation( - $nfToken: String! - $sessionId: String! - $eventIds: [String!]! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - ackNetlifyCliEvents( - input: { eventIds: $eventIds, sessionId: $sessionId } - ) { - events { - id - } - } - } - } - - query AppSchemaQuery( - $nfToken: String! - $appId: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - app(id: $appId) { - graphQLSchema { - appId - createdAt - id - services { - friendlyServiceName - logoUrl - service - slug - supportsCustomRedirectUri - supportsCustomServiceAuth - supportsOauthLogin - } - updatedAt - } - } - } - } - - mutation UpsertAppForSiteMutation( - $nfToken: String! - $siteId: String! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - upsertAppForNetlifySite( - input: { netlifySiteId: $siteId } - ) { - org { - id - name - } - app { - id - name - corsOrigins - customCorsOrigins { - friendlyServiceName - displayName - encodedValue - } - } - } - } - } - - mutation CreateNewSchemaMutation( - $nfToken: String! - $input: OneGraphCreateGraphQLSchemaInput! - ) { - oneGraph( - auths: { netlifyAuth: { oauthToken: $nfToken } } - ) { - createGraphQLSchema(input: $input) { - app { - graphQLSchema { - id - } - } - graphqlSchema { - id - services { - friendlyServiceName - logoUrl - service - slug - supportsCustomRedirectUri - supportsCustomServiceAuth - supportsOauthLogin - } - } - } - } - }` - -module.exports = { - internalOperationsDoc, -} diff --git a/tests/assets/netlifyGraphOperationsLibrary.graphql b/tests/assets/netlifyGraphOperationsLibrary.graphql index 40880927deb..d0546046c16 100644 --- a/tests/assets/netlifyGraphOperationsLibrary.graphql +++ b/tests/assets/netlifyGraphOperationsLibrary.graphql @@ -1,4 +1,4 @@ -query ExampleQuery($package: String!) @netligraph(id: "d86699fb-ddfc-4833-9d9a-f3497cb7c992", doc: "A test query to snapshot") { +query ExampleQuery($package: String!) @netlify(id: "d86699fb-ddfc-4833-9d9a-f3497cb7c992", doc: "A test query to snapshot") { npm { package(name: $package) { id diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js index 3c54586ad26..da5bb18dc65 100644 --- a/tests/graph-codegen.test.js +++ b/tests/graph-codegen.test.js @@ -2,25 +2,26 @@ const fs = require('fs') const { join } = require('path') const test = require('ava') -const { buildSchema, parse } = require('graphql') const { + buildSchema, extractFunctionsFromOperationDoc, generateFunctionsSource, generateHandlerSource, -} = require('../src/lib/one-graph/netlify-graph') + parse, +} = require('../src/lib/one-graph/cli-netlify-graph') const { normalize } = require('./utils/snapshots') -const netligraphConfig = { +const netlifyGraphConfig = { extension: 'js', - netligraphPath: 'netlify', + netlifyGraphPath: 'netlify', moduleType: 'commonjs', functionsPath: 'functions', - netligraphImplementationFilename: 'dummy/index.js', - netligraphTypeDefinitionsFilename: 'dummy/index.d.ts', - graphQLOperationsSourceFilename: 'dummy/netligraphOperationsLibrary.graphql', - graphQLSchemaFilename: 'dummy/netligraphSchema.graphql', + netlifyGraphImplementationFilename: 'dummy/index.js', + netlifyGraphTypeDefinitionsFilename: 'dummy/index.d.ts', + graphQLOperationsSourceFilename: 'dummy/netlifyGraphOperationsLibrary.graphql', + graphQLSchemaFilename: 'dummy/netlifyGraphSchema.graphql', } const loadAsset = (filename) => fs.readFileSync(join(__dirname, 'assets', filename), 'utf8') @@ -35,7 +36,7 @@ test('netlify graph function codegen', (t) => { }) const operations = extractFunctionsFromOperationDoc(parsedDoc) - const generatedFunctions = generateFunctionsSource(netligraphConfig, schema, appOperationsDoc, operations) + const generatedFunctions = generateFunctionsSource(netlifyGraphConfig, schema, appOperationsDoc, operations) t.snapshot(normalize(JSON.stringify(generatedFunctions))) }) @@ -50,7 +51,7 @@ test('netlify graph handler codegen', (t) => { const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' const handlerOptions = {} const generatedHandler = generateHandlerSource({ - netligraphConfig, + netlifyGraphConfig, schema, operationsDoc: appOperationsDoc, operationId, diff --git a/tests/snapshots/graph-codegen.test.js.md b/tests/snapshots/graph-codegen.test.js.md index afcfdc972ba..71c48e7eced 100644 --- a/tests/snapshots/graph-codegen.test.js.md +++ b/tests/snapshots/graph-codegen.test.js.md @@ -8,10 +8,10 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 - '{"clientSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIGRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIGRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated Netligraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/n package: string/n},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/n package: string/n}","returnSignature":"{/n/**/n* Any data retrieved by the function be returned here/n*//n data?: {/n /n/**/n* The root for npm queries/n*//n npm: {/n /n/**/n* Find a npm package member by its npm name, e.g. `/"fela/"`/n*//n package?: {/n /n/**/n* The package name, used as an ID in CouchDB/n*//n id?: string; /n/**/n* The first 64K of the README data for the most-recently published version of the package/n*//n readme?: string; /n/**/n* The license for this package/n*//n license: {/n /n/**/n* A url for the full license/n*//n url?: string/n }/n }/n }/n }; /n/**/n* Any errors in the function will be returned here/n*//n errors?: Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netligraph","loc":{"start":39,"end":49}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":50,"end":52}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":54,"end":92}},"loc":{"start":50,"end":92}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":94,"end":97}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":99,"end":125}},"loc":{"start":94,"end":125}}],"loc":{"start":38,"end":126}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":131,"end":134}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":141,"end":148}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":149,"end":153}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":156,"end":163}},"loc":{"start":155,"end":163}},"loc":{"start":149,"end":163}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":173,"end":175}},"arguments":[],"directives":[],"loc":{"start":173,"end":175}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":182,"end":188}},"arguments":[],"directives":[],"loc":{"start":182,"end":188}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":195,"end":202}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":213,"end":216}},"arguments":[],"directives":[],"loc":{"start":213,"end":216}}],"loc":{"start":203,"end":224}},"loc":{"start":195,"end":224}}],"loc":{"start":165,"end":230}},"loc":{"start":141,"end":230}}],"loc":{"start":135,"end":234}},"loc":{"start":131,"end":234}}],"loc":{"start":127,"end":236}},"loc":{"start":0,"end":236}}}]}' + '{"clientSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIFY_GRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIFY_GRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated NetlifyGraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/"package/": string},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/"package/": string}","returnSignature":"{/**/n * Any data retrieved by the function will be returned here/n *//n /"data/": {/n /**/n * The root for npm queries/n *//n /"npm/": {/n /**/n * Find a npm package member by its npm name, e.g. `/"fela/"`/n *//n /"package/": {/n /**/n * The package name, used as an ID in CouchDB/n *//n /"id/": string, /**/n * The first 64K of the README data for the most-recently published version of the package/n *//n /"readme/": string, /**/n * The license for this package/n *//n /"license/": {/n /**/n * A url for the full license/n *//n /"url/": string/n }/n }/n }/n }, /**/n * Any errors in the function will be returned here/n *//n /"errors/": Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netlify","loc":{"start":39,"end":46}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":47,"end":49}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":51,"end":89}},"loc":{"start":47,"end":89}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":91,"end":94}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":96,"end":122}},"loc":{"start":91,"end":122}}],"loc":{"start":38,"end":123}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":128,"end":131}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":138,"end":145}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":146,"end":150}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":153,"end":160}},"loc":{"start":152,"end":160}},"loc":{"start":146,"end":160}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":170,"end":172}},"arguments":[],"directives":[],"loc":{"start":170,"end":172}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":179,"end":185}},"arguments":[],"directives":[],"loc":{"start":179,"end":185}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":192,"end":199}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":210,"end":213}},"arguments":[],"directives":[],"loc":{"start":210,"end":213}}],"loc":{"start":200,"end":221}},"loc":{"start":192,"end":221}}],"loc":{"start":162,"end":227}},"loc":{"start":138,"end":227}}],"loc":{"start":132,"end":231}},"loc":{"start":128,"end":231}}],"loc":{"start":124,"end":233}},"loc":{"start":0,"end":233}}}]}' ## netlify graph handler codegen > Snapshot 1 - '{"source":"const { getSecrets } = require(/"@sgrove/netlify-functions/");/nconst Netligraph = require(/"./netligraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await Netligraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.js`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netligraph(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' + '{"source":"const { getSecrets } = require(/"@netlify/functions/");/nconst NetlifyGraph = require(/"./netlifyGraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await NetlifyGraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.js`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' diff --git a/tests/snapshots/graph-codegen.test.js.snap b/tests/snapshots/graph-codegen.test.js.snap index e64b62c0cb016c511d44b18864924ce0e7a52807..4d7b45ff4739075d5066cf418dedf66ab8d4f91f 100644 GIT binary patch literal 3330 zcmV+d4gK;#RzVaQA}P%bIo8P1h#tuvOUjTQmupIvK%yza0s#&dX&9M@ z9J2gGs&dLXmt67(sY>~jpGf7DQ?7Zh7oY)`|p58qi?`GfVFuZ`aL_ka1>@6PRC|GD=TTOBzoE8koB z0mFLh`zt?sd*z)gEs3&tNVSeOjKU-(SLBSQJvxkOnvgl!Br$!R`7t#d?Sqh}fj^o# zqbwYzKA=0A`Pd0L;QpWBpO7mjB*byZ&Ww0;m`|h9D-)g5a?ea+bh!e?(?cMlRhjC27Ps0TVI|eBh)fCF)DyPA2ZTAD$_~ zqmWSmWeoTOI(CCmN2pwu&Gu%Gsq4`=dF5!RZxs7K{KHS~Y(}sX zd9#m_2w8sAJ3O$bZk$lg%N_uXeDxLV<7&>Mq#!<-y2Eq#jOG@3ozZyKOJlI>ksG@c znu2|{Y=I_d{Sh$=%FRuZg%AyXNIjHOf}oF09ySC5G0oyo{vsqv-84&{Mjq{u^=8wO z>!@*uZzN%=K*Sn36(KZ^qqsx#&%q0m47QPE(`hgx(_CXRLWEPH$*C@B=cW)cXO^6+ zwz%SalMd;=aVOJ&{se8&Wos7k+|(^Yc3}n6k~8FvR5Q;W(R4UgDU2&3H0l&qnp5y zWBcxqG|p)5{JQoF9kK|0ccG7j!=>j%&UcD1)LDfK)75k~r8>lw3(+Ji*O!o0x(pij ziJ>!RMsV)m$3(nOp0X0Pn)n_ies~da+N8sQSRh$V5Ya(o(I%rfny}h2h@(p=T2K#0 z5WXaFFThxgnpHqBD^{9Qb!+yQ$*IW;4&Xoy8q;8k8$&WjsON;dmKPFhG0BofMwZ9~ z5u14Ca4_ce70(%t64PXgCk2ao#?&}1XI;`bIa4U32I?u7;iZ6YyBi9ntRV%nb~gI6K*BL}MFI z4g(dp2achI#U`gBnE42Gz%1vUC#+pgqCvXH)JB%(3lQ^)nwnkP- z3;sLz$p(QvW>AaZz*?rr3rImMRzCL85s3ot22I2=_7tqz%cRbWZn7HE zS_5Gec5<^hWIEmVEHDzYP*K1x+!(9i4lhvxoR1XP6Bc=dW7i(&01q%&i@1Y+Z_WF9YT^yGb zgY=|PmUak>2bH_9MH~QQot-Ql$AOJqP#o#b*kmw_CJy`dI@p38o%r6SPTnKT2`U$C zZG`Dx9hbs8q?hCfQrw5u#sIV^xS$pQzobLu_{sMQ445i*%+tvL{Vc@@7C|N|Ax~*o zw2RgrvKe}N^kilI32C<5rW$}kO|FnptP`d=>)}hQFwttVJw6nZZ@yRPTUW{9$7HYH zKN6D$>xp4Ff3Kp7r7|^@U#5}|MH(gG6GO+@4$8YR9B1JVsWcJ%^{pcUbirvH&59j~7%2Rn*YpLFSz>tvxtj~+U&ellwqeO_ z7VF>&E)vn_l?o@hA3*~9NeTkwC0BVcs^PI1RmO7`P*B^UR^qq(OgVs>ZHe0AyMusY zohZ#zQ+F0bu2)nW;BtazO2JK`?vxlIs3fYhK=Qm&IIshG&vKpt=^k;O1E2EkkUKs>WZ*LRbjxp;5)zm;zwA{EDhnNypJOvq{%8Y zDN#(7@~8}c+!WUY#SO8rFa+3v{*6O`ap@?`zKei=e*{#=H&KjAQ=BM`)j5t`k&3Yp zz&886V9ZkuEQZvRXD_yo_D(+Q?(7{NetgpFK7G;cFP`(tSJV2NRoOPI7R~r^ZF(&3 zdeu3K4=jsYYiV-*Iu)_+4kO$fz67`-e&=?Bc@)|hJV-9-U>rr~(k!|%Ufk5BS0-rV zN*K{9EMke6kUgia7bRYLvUaP5PORo)HH!=HN*zmSuOgR+2MeNE6^8wOE~p4IyrgGW zaO6Jek108$Au@r(r}RD(_=DI5jg_Z^T$sbJ@+muj+raOS{$>6C#`2mjX$)FDf4 zSFx>l=K-O`t=>QRY9#FJlJ&I)!S0>)S-?g?Ap?uJxUVeLP z$|^b6EDi5^ck$7}XIuIg-ZDv_U*i>Y3OC?&H?ySx#+s{%nb6TXgl~Udjq5E5f%xvo z3E_Q2x+=mYoU!K&w0P`;zdSOSv5V$hnM*$i$bbr;0K%B^>dM0j=3u;7*GdOL&L4w4 zj-XKBr4bIeXab)mDm^SOBmdA3J%|w`ly4*xIvGHWftG%nFbEFG(4yLBHaT^)5e-0_ zQ&oUss%1J#?wl74pCC3NZb;Mycg($$#4xSry3RW=CxWDH_2u-^o;3sR}OB3VrQ%cRRI04@k>_5v0H zXPHH|*~}_69l>NTxvEU?VnHinjOEqB4@E(YH~zGSX1!aSaXJ*a9mnqMeK(vv0TE9g zvkQF5M@eL@^XhJQ`Cd-@Exvuf!{fz>HJpG`D_8(b+!4jW>|1S0n65qLWk;6qyvqUD z!decvJP*p4-<9p}%J%<7*;ZdZ4;H?lvU$xrRG(!=0jAg3~aPZ zKOc_h3DEVL@oHUHOv-L;)D^oW@BsonACfEeFDM%LcFN~yclNAfE)QGTP^t9 zvWXdhsB^8urtGTRjfRl>s9pC&t`q~_eV=d;*EZUg0^94i-{>_R$90=)=Q-PK)_0d{ z!l1RtYCX!qEe1|#Kv{+B(Nxt~T~@G4q4A+l1MlYGn@(!>YBX~_T8(PxRRjJ%qUEwu z)F>>rzVXeIB;-FUGS+jKZmcbepKn}H8yhVt;lbL1lDg5n7F_6u;Qxw$7F3tULwQUz z9yV_gMAuW_Q6JvsEYPW)pQyEPxrI(;>O1Nrx}dsJ?cBZX_Wwk-L336=TO0YQ-)P<0 zbQS74d@YAJ8;hEXrV6fm=0O2p)RW{@f`RMgt(?5INP1ol8Msc~T+iXHI{BIkoFC8s M0Zc29OQ0_R00&=MBme*a literal 3337 zcmV+k4fgUuRzVTQ{>15gI4_sr?0pLJ@Na|tHmKDijY$cAQT8uLpk1B!0rHBXwXgnyh3Kw1U z@e`fts_SmL>9V`dbh7Fvbkpgot8RPFeE=5#DalRSbjH>~B=33N^SbBU+g@5)dUxrU zSI$31U;pG6fB*BJp8ou||NPZEOZfN0_m-CaVEyK6<9PV{zy0iY7xu6Ja{LZk{j0sS z^qr;eGpu*MxAcQ|zx&>mmPA?Hr&?R~tnvfaUA~AiL`7t#d?Zf0e zjwaLzX&U&0>GB{8`>799j%MC>LQa2x!1LH04@+{lEuKdQzgk z1ny+yUijg;B0LHi1yII--=jk}7_^1TW!Y?R_K>i1iO(p{Wyt`<;TZ|2lm*F6UuqnJ%Ev~zJh&R&3J?q#HVAof8n0f+#)YC z8c&bY80>oF#_ouwV4rPUpb1)kK#YQNYl~zdM1vnv59O2~=wp+I4S_IBvpAH$2uV^m z&5}ovN84nz*|g+3YTV`z-^W}AaU81 zsw0~#E5gRtyD`bwzS|^?Gn%`;uKiqh%tPOs>mlK8>35Ow?IH+uR^P&OIh~HF4pHSo zEXlg{CFGPYLxz1~;LMm2oV#~14eyditUxU%zDJ24P9jd5v^fyVBdZ7pyj&AmuE`*d zMyzu5;^-1e7F2@)1TRV42^fn}v-$^S#X57QZq5EOIWu{=0UW46LmG^6V@T!*^_-Ab z@Oq}EzTpSIFD3O+k)-Z`?-KK zVcFalki5glYeT7e-03=+^qq(~DIHIvTso>^LdCh?cjLe&IrdN=@lW~z+JbA)W$5F=6mv649PX3@)sl#4Iwg>!kxuIUWtWsMM0Wr zvstMn`s0tTG=B0Q%f<*!&&QpE&a<6vXOBGJ-ysK`?$iB`z92iFbq_yft9za2qx(wHA5PrB_Y`~aN`I?;4&4O1WZ`0lZ-a;2 zls*B;hR#LnmhhusX=h_-3aG(!t*q&`URgo6$|cV~hx9Y_A$_Hr#jZK@4p+lY{SkQV z*d5T$%ghZ7nK--IU_fIV4-W$sw+QEB%|obIPvUY^_Hk>2-e5`G0IRk8VaiQnk;aNi z9uPQ%sU1d_hDjV)T3I2>qy_(-yJU^P9y6##aAqx14-#ucY`Kk8QTh0 z@MTixbvN0I`rz)fH@DcHu?9idg`MAQ78#HCJqzr_j8xRHi5p`f+~rkDfb+2eJHsNC zaP)e@dn^T4bX~lUQ1UKE6l&YHtuPP~tv?bCTK9$qEk}Gx!}D|qs6uNyU<;NKBw|m8 zT){#E*@5UshsRyL+B6PJib00bC`;Rf#e>RS*dh*qvCa;cw&TFYCKSgyJ|Fa>k;A^d z47OoMr@ptPlMe`Ug31LO9AWwwC#47v=_NUWEcc1#Q0aL|} zc}5wapQRYVBFID~0&CRfNP)(O*`b@HWEm})iI zBp-_DH{UCCugm1{6Y`|nJreT<>x^MQ|Dd9Zr7|^@U#5}|MH(gG6GO-O4l2CSA7Z4T`GJvM!Z+%Iq$$PDChRS*ltda=;>Vp)?Wv^{pcU^ulQzO^Y3g7%2Rnm-RW4 zSz>tvxtnw4U&ellwqeO_7VF>&E)vmal?o@hA3*~9NeTkwMOS$|s^PI1RfcpHP*B^U zR^qq(SUG^2ZHe0AyS;#7ohVIKV|N-vu2)nW;Bty*O2JK`ZkHG#s3fXANAj#vIIL|yqNyTIcV4MA(GwG=YW^?M}XFEqvPCxJLJ~=%69M%%Rp%%^u*`3*rM>lq`eD-@Mz||{2XI6D&MgMRC^Rs5gj~|z zFp4guL3CxdxT!_2jL*iEFrQVJ!xGUTyG>m$io5h-?N$rjSIxp|{uX|fI+hY%MJ`Vc z7R0eC3_JZ?P!V8wMbEC_$X(JMQgTj1WCF*I@-h?nz1RhPm1l!ol*2FbM6r@rYO-)} z*1&t=bb(L@|JTgZCJQZBv8;IG0ing6-oN=`B&_U`)s+UpuATK)z)(%tIoHX6eyi)` z5x9#DZu)1Te9WONwLZ4R3n)@WH}oTlx=PFiDSJ;}vuYH{f;mvZe49wKktk z`SxKi)wtd+U}js+1`iPFO6Ufvg;VyJfi{nQ@R&z>Q+CmutJ9;xApjdvEU7G#kZN10 z`#DRD?>K_mfR{u#&Emd&ng}{rnMd`JA9@fEh%aA5Ms(DJcmjR=G+_`NgrN&a3aW)FNv@m+43;1+A#O@{M^V-v?(GU@zLy*Cewod{kHMAetDoSV z7uxArXJ_xz4mTq17}rKok}k&-hVT?0qOxA#Cqoc8!7dU^DoBM&LM9*K7s-_)Jr@C$ zxJ)d-^ESW3Mo+2Q00wl4EocF(gi3KSApa?vV7TyiF|=7JOfG$3ydYLM2?*JVV|V(% z4W|!*^~3w@=3R17a!_l(c)d$_FQFf*A^%yGk-K!QH7|a?aZPQk<+XmjHK(estz8Q)^h5Bs;-5Ly zrLobHYHh6DB8aZ1eocLNFH_g)UNb*bYvFRUP8I6c)JZfwb)`0?dz&lG|BGychOB

oznhLIaW<7_uR_0|$Lj~8#TLt+%>8*weu9G)6a`<|k Td_@J$PG Date: Mon, 17 Jan 2022 16:57:00 -0800 Subject: [PATCH 42/58] chore: add npm scripts back --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index f5edcc5eb61..d8d28d0e948 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,8 @@ "url": "https://github.com/netlify/cli/issues" }, "scripts": { + "prepublishOnly": "run-s prepublishOnly:*", + "prepublishOnly:test": "run-local \"npm test\"", "start": "node ./bin/run", "test": "run-s format test:dev", "format": "run-s format:check-fix:*", From 5f1d4b3e4a4303713edf84aa71e60f361fb32357 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 11:13:47 -0800 Subject: [PATCH 43/58] chore: refactor common Netlify Graph functionality out to a shared package --- npm-shrinkwrap.json | 20 ++++---- package.json | 2 +- src/commands/graph/graph-pull.js | 2 +- src/lib/one-graph/cli-client.js | 64 +++++++++++++++----------- src/lib/one-graph/cli-netlify-graph.js | 25 ++++++++-- 5 files changed, 70 insertions(+), 43 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 8b16a695b7d..1eae35e2d1c 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -79,7 +79,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.1", "netlify-headers-parser": "^6.0.0", - "netlify-onegraph-internal": "0.0.2", + "netlify-onegraph-internal": "0.0.10", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", @@ -14108,12 +14108,13 @@ } }, "node_modules/netlify-onegraph-internal": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.2.tgz", - "integrity": "sha512-jCATlMB8XhiK2uMeyYeVOCOlUyC5xWDP+5IxxGI1er2MQvaj29URzVNl5DJnpIVrr3/kqBPiBAcwa64UDtMaiw==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.10.tgz", + "integrity": "sha512-vZ6sDpxyZjslKC9RUjdFLACK35eY00c+d1FxyRIXmwDCGJSoDbtnORstFWx3Dzp9k4yeR0xgm8ToBu62N7Pd+w==", "dependencies": { "graphql": "16.1.0", - "node-fetch": "^2.6.0" + "node-fetch": "^2.6.0", + "uuid": "^8.3.2" } }, "node_modules/netlify-redirect-parser": { @@ -30635,12 +30636,13 @@ } }, "netlify-onegraph-internal": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.2.tgz", - "integrity": "sha512-jCATlMB8XhiK2uMeyYeVOCOlUyC5xWDP+5IxxGI1er2MQvaj29URzVNl5DJnpIVrr3/kqBPiBAcwa64UDtMaiw==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.10.tgz", + "integrity": "sha512-vZ6sDpxyZjslKC9RUjdFLACK35eY00c+d1FxyRIXmwDCGJSoDbtnORstFWx3Dzp9k4yeR0xgm8ToBu62N7Pd+w==", "requires": { "graphql": "16.1.0", - "node-fetch": "^2.6.0" + "node-fetch": "^2.6.0", + "uuid": "^8.3.2" } }, "netlify-redirect-parser": { diff --git a/package.json b/package.json index d8d28d0e948..9dc689d7d27 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.1", "netlify-headers-parser": "^6.0.0", - "netlify-onegraph-internal": "0.0.2", + "netlify-onegraph-internal": "0.0.10", "netlify-redirect-parser": "^13.0.0", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 681cee9fc41..7413e71f7f7 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -70,7 +70,7 @@ const graphPull = async (options, command) => { if (next.events) { const ackIds = [] for (const event of next.events) { - await handleCliSessionEvent({ authToken: netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) + await handleCliSessionEvent({ netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) ackIds.push(event.id) } diff --git a/src/lib/one-graph/cli-client.js b/src/lib/one-graph/cli-client.js index 71620ceb33d..714f895881e 100644 --- a/src/lib/one-graph/cli-client.js +++ b/src/lib/one-graph/cli-client.js @@ -2,7 +2,7 @@ /* eslint-disable fp/no-loops */ const os = require('os') -const { GraphQL, OneGraphClient } = require('netlify-onegraph-internal') +const { GraphQL, InternalConsole, OneGraphClient } = require('netlify-onegraph-internal') const { NetlifyGraph } = require('netlify-onegraph-internal') const { chalk, error, log, warn } = require('../../utils') @@ -20,11 +20,20 @@ const { const { parse } = GraphQL const { defaultExampleOperationsDoc, extractFunctionsFromOperationDoc } = NetlifyGraph +const internalConsole = { + log, + warn, + error, + debug: console.debug, +} + +InternalConsole.registerConsole(internalConsole) + /** * Start polling for CLI events for a given session to process locally * @param {object} input * @param {string} input.appId The app to query against, typically the siteId - * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events * @param {function} input.onClose A function to call when the polling loop is closed * @param {function} input.onError A function to call when an error occurs @@ -34,14 +43,14 @@ const { defaultExampleOperationsDoc, extractFunctionsFromOperationDoc } = Netlif * @returns */ const monitorCLISessionEvents = (input) => { - const { appId, authToken, netlifyGraphConfig, onClose, onError, onEvents, sessionId, state } = input + const { appId, netlifyGraphConfig, netlifyToken, onClose, onError, onEvents, sessionId, state } = input const frequency = 5000 let shouldClose = false - const enabledServiceWatcher = async (netlifyToken, siteId) => { + const enabledServiceWatcher = async (innerNetlifyToken, siteId) => { const enabledServices = state.get('oneGraphEnabledServices') || ['onegraph'] - const enabledServicesInfo = await OneGraphClient.fetchEnabledServices(netlifyToken, siteId) + const enabledServicesInfo = await OneGraphClient.fetchEnabledServices(innerNetlifyToken, siteId) if (!enabledServicesInfo) { warn('Unable to fetch enabled services for site for code generation') return @@ -56,7 +65,7 @@ const monitorCLISessionEvents = (input) => { 'Reloading', )} Netlify Graph schema..., ${enabledServicesCompareKey} => ${newEnabledServicesCompareKey}`, ) - await refetchAndGenerateFromOneGraph({ netlifyGraphConfig, state, netlifyToken, siteId }) + await refetchAndGenerateFromOneGraph({ netlifyGraphConfig, state, netlifyToken: innerNetlifyToken, siteId }) log(`${chalk.green('Reloaded')} Netlify Graph schema and regenerated functions`) } } @@ -73,7 +82,7 @@ const monitorCLISessionEvents = (input) => { onClose() } - const next = await OneGraphClient.fetchCliSessionEvents({ appId, authToken, sessionId }) + const next = await OneGraphClient.fetchCliSessionEvents({ appId, authToken: netlifyToken, sessionId }) if (next.errors) { next.errors.forEach((fetchEventError) => { @@ -85,10 +94,10 @@ const monitorCLISessionEvents = (input) => { if (events.length !== 0) { const ackIds = await onEvents(events) - await OneGraphClient.ackCLISessionEvents({ appId, authToken, sessionId, eventIds: ackIds }) + await OneGraphClient.ackCLISessionEvents({ appId, authToken: netlifyToken, sessionId, eventIds: ackIds }) } - await enabledServiceWatcher(authToken, appId) + await enabledServiceWatcher(netlifyToken, appId) handle = setTimeout(helper, frequency) } @@ -122,22 +131,16 @@ const refetchAndGenerateFromOneGraph = async (input) => { .map((service) => service.service) .sort((aString, bString) => aString.localeCompare(bString)) const schema = await OneGraphClient.fetchOneGraphSchema(siteId, enabledServices) - console.log('Reading from source file...') + let currentOperationsDoc = readGraphQLOperationsSourceFile(netlifyGraphConfig) - console.log('Reading from source file...done') if (currentOperationsDoc.trim().length === 0) { - console.log('5', currentOperationsDoc) currentOperationsDoc = defaultExampleOperationsDoc } - console.log('6', currentOperationsDoc) const parsedDoc = parse(currentOperationsDoc) - console.log('Extract funcions from source file...', parsedDoc) const operations = extractFunctionsFromOperationDoc(parsedDoc) - console.log('Generating functions file...') generateFunctionsFile(netlifyGraphConfig, schema, currentOperationsDoc, operations) - console.log('Writing schema to disk...') writeGraphQLSchemaFile(netlifyGraphConfig, schema) state.set('oneGraphEnabledServices', enabledServices) } @@ -146,15 +149,15 @@ const refetchAndGenerateFromOneGraph = async (input) => { * * @param {object} input * @param {string} input.siteId The site id to query against - * @param {string} input.authToken The (typically netlify) access token that is used for authentication, if any + * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any * @param {string} input.docId The GraphQL operations document id to fetch * @param {string} input.schema The GraphQL schema to use when generating code * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events * @returns */ const updateGraphQLOperationsFile = async (input) => { - const { authToken, docId, netlifyGraphConfig, schema, siteId } = input - const persistedDoc = await OneGraphClient.fetchPersistedQuery(authToken, siteId, docId) + const { docId, netlifyGraphConfig, netlifyToken, schema, siteId } = input + const persistedDoc = await OneGraphClient.fetchPersistedQuery(netlifyToken, siteId, docId) if (!persistedDoc) { warn('No persisted doc found for:', docId) return @@ -171,17 +174,17 @@ const updateGraphQLOperationsFile = async (input) => { generateFunctionsFile(netlifyGraphConfig, schema, appOperationsDoc, operations) } -const handleCliSessionEvent = async ({ authToken, event, netlifyGraphConfig, schema, siteId }) => { +const handleCliSessionEvent = async ({ event, netlifyGraphConfig, netlifyToken, schema, siteId }) => { const { __typename, payload } = await event switch (__typename) { case 'OneGraphNetlifyCliSessionTestEvent': - await handleCliSessionEvent({ authToken, event: payload, netlifyGraphConfig, schema, siteId }) + await handleCliSessionEvent({ netlifyToken, event: payload, netlifyGraphConfig, schema, siteId }) break case 'OneGraphNetlifyCliSessionGenerateHandlerEvent': await generateHandler(netlifyGraphConfig, schema, payload.operationId, payload) break case 'OneGraphNetlifyCliSessionPersistedLibraryUpdatedEvent': - await updateGraphQLOperationsFile({ authToken, docId: payload.docId, netlifyGraphConfig, schema, siteId }) + await updateGraphQLOperationsFile({ netlifyToken, docId: payload.docId, netlifyGraphConfig, schema, siteId }) break default: { warn(`Unrecognized event received, you may need to upgrade your CLI version`, __typename, payload) @@ -222,16 +225,16 @@ const startOneGraphCLISession = async (input) => { monitorCLISessionEvents({ appId: site.id, - authToken: netlifyToken, + netlifyToken, netlifyGraphConfig, sessionId: oneGraphSessionId, state, onEvents: async (events) => { for (const event of events) { const eventName = OneGraphClient.friendlyEventName(event) - log(`${chalk.magenta('Handling')} Netlify Graph event: ${eventName}...`) - await handleCliSessionEvent({ authToken: netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) - log(`${chalk.green('Finished handling')} Netlify Graph event: ${eventName}...`) + log(`${chalk.magenta('Handling')} Netlify Graph: ${eventName}...`) + await handleCliSessionEvent({ netlifyToken, event, netlifyGraphConfig, schema, siteId: site.id }) + log(`${chalk.green('Finished handling')} Netlify Graph: ${eventName}...`) } return events.map((event) => event.id) }, @@ -255,7 +258,14 @@ const generateSessionName = () => { return sessionName } -const OneGraphCliClient = { createCLISession, createPersistedQuery, ensureAppForSite, updateCLISessionMetadata } +const OneGraphCliClient = { + ackCLISessionEvents: OneGraphClient.ackCLISessionEvents, + createCLISession, + createPersistedQuery, + fetchCliSessionEvents: OneGraphClient.fetchCliSessionEvents, + ensureAppForSite, + updateCLISessionMetadata, +} module.exports = { OneGraphCliClient, diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 4949aa85332..59bf6b9d352 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -1,12 +1,21 @@ const fs = require('fs') const path = require('path') -const { GraphQL, NetlifyGraph } = require('netlify-onegraph-internal') +const { GraphQL, InternalConsole, NetlifyGraph } = require('netlify-onegraph-internal') -const { detectServerSettings, error, getFunctionsDir } = require('../../utils') +const { detectServerSettings, error, getFunctionsDir, log, warn } = require('../../utils') const { printSchema } = GraphQL +const internalConsole = { + log, + warn, + error, + debug: console.debug, +} + +InternalConsole.registerConsole(internalConsole) + /** * Return a full NetlifyGraph config with any defaults overridden by netlify.toml * @param {import('../base-command').BaseCommand} command @@ -174,11 +183,17 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions const { operation, source } = handlerSource - const filenameArr = [...netlifyGraphConfig.functionsPath, `${operation.name}.${netlifyGraphConfig.extension}`] - const fullFilename = path.join(...filenameArr) + const operationName = (operation.name && operation.name.value) || 'Unnamed' + + const filenameArr = [ + path.sep, + ...netlifyGraphConfig.functionsPath, + `${operationName}.${netlifyGraphConfig.extension}`, + ] + const absoluteFilename = path.resolve(...filenameArr) ensureFunctionsPath(netlifyGraphConfig) - fs.writeFileSync(fullFilename, source) + fs.writeFileSync(absoluteFilename, source) } // Export the minimal set of functions that are required for Netlify Graph From b7cc1ef91b272e9eb3c1a3c3e760fc493472e268 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 11:38:13 -0800 Subject: [PATCH 44/58] chore: error exits, no need to return --- src/commands/dev/dev.js | 16 +++++++--------- src/commands/graph/graph-edit.js | 1 - src/commands/graph/graph-pull.js | 4 ---- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 6ad8cd59381..f686574a73b 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -109,12 +109,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -267,8 +267,7 @@ const dev = async (options, command) => { try { settings = await detectServerSettings(devConfig, options, site.root) } catch (detectServerSettingsError) { - error(detectServerSettingsError.message) - exit(1) + error(detectServerSettingsError) } command.setAnalyticsPayload({ projectType: settings.framework || 'custom', live: options.live }) @@ -303,9 +302,8 @@ const dev = async (options, command) => { error( `No siteId defined, unable to start Netlify Graph. To enable, run ${chalk.yellow( 'netlify init', - )} or ${chalk.yellow('netlify link')}?`, + )} or ${chalk.yellow('netlify link')}.`, ) - return } else if (startNetlifyGraphWatcher) { const netlifyToken = await command.authenticate() await OneGraphCliClient.ensureAppForSite(netlifyToken, site.id) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 18791e88746..63de3dc26e1 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -29,7 +29,6 @@ const graphEdit = async (options, command) => { 'netlify init', )} or ${chalk.yellow('netlify link')}`, ) - return } const siteData = await api.getSite({ siteId }) diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 7413e71f7f7..72fe7610f50 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -24,7 +24,6 @@ const graphPull = async (options, command) => { 'netlify init', )} or ${chalk.yellow('netlify link')}`, ) - return } const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) @@ -48,12 +47,10 @@ const graphPull = async (options, command) => { schema = buildSchema(schemaString) } catch (buildSchemaError) { error(`Error parsing schema: ${buildSchemaError.message}`) - return } if (!schema) { error(`Failed to fetch and update Netlify GraphQL schema`) - return } const next = await OneGraphCliClient.fetchCliSessionEvents({ @@ -64,7 +61,6 @@ const graphPull = async (options, command) => { if (next.errors) { error(`Failed to fetch Netlify Graph cli session events`, next.errors) - return } if (next.events) { From b61e5ad6e63492328868cf4eb22074719bba710f Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 11:40:13 -0800 Subject: [PATCH 45/58] chore: fix formatting --- src/commands/dev/dev.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index f686574a73b..03be9e358ad 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -109,12 +109,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } From 3da2b34438a64a060b4aff94197483f88cd757e7 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 11:45:16 -0800 Subject: [PATCH 46/58] chore: address PR comments --- src/commands/graph/graph-edit.js | 2 +- src/lib/one-graph/cli-client.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index 63de3dc26e1..c0c5102fa22 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -64,7 +64,7 @@ const graphEdit = async (options, command) => { await updateCLISessionMetadata(netlifyToken, siteId, oneGraphSessionId, { docId: persistedDoc.id }) - const host = process.env.NETLIFY_APP_HOST || `localhost:8080` + const host = 'app.netlify.com' || process.env.NETLIFY_APP_HOST const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}` await openBrowser({ url }) diff --git a/src/lib/one-graph/cli-client.js b/src/lib/one-graph/cli-client.js index 714f895881e..9badfcb2597 100644 --- a/src/lib/one-graph/cli-client.js +++ b/src/lib/one-graph/cli-client.js @@ -115,7 +115,7 @@ const monitorCLISessionEvents = (input) => { * @param {string} input.netlifyToken The (typically netlify) access token that is used for authentication, if any * @param {NetlifyGraphConfig} input.netlifyGraphConfig A standalone config object that contains all the information necessary for Netlify Graph to process events * @param {state} input.state A function to call to set/get the current state of the local Netlify project - * @returns {Promise} + * @returns {Promise} */ const refetchAndGenerateFromOneGraph = async (input) => { const { netlifyGraphConfig, netlifyToken, siteId, state } = input From 528454abaf2c73951b7e3d28f6a0d1fa9432b743 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 11:50:32 -0800 Subject: [PATCH 47/58] chore: update docs --- README.md | 2 +- docs/README.md | 2 +- docs/commands/graph.md | 4 ++-- docs/commands/index.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 390520bbd88..69ef9bbc26b 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ Manage netlify functions | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema, and process pending Graph edit events | ### [init](/docs/commands/init.md) diff --git a/docs/README.md b/docs/README.md index 63e908c9a2d..c5a623f1cb4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -117,7 +117,7 @@ Manage netlify functions | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema, and process pending Graph edit events | ### [init](/docs/commands/init.md) diff --git a/docs/commands/graph.md b/docs/commands/graph.md index 7b8cbfd7ef8..476f55c0edd 100644 --- a/docs/commands/graph.md +++ b/docs/commands/graph.md @@ -23,7 +23,7 @@ netlify graph | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema, and process pending Graph edit events | **Examples** @@ -53,7 +53,7 @@ netlify graph:edit --- ## `graph:pull` -Pull down your local Netlify Graph schema and regenerate your local functions +Pull down your local Netlify Graph schema, and process pending Graph edit events **Usage** diff --git a/docs/commands/index.md b/docs/commands/index.md index ea6cd56f0f6..d87829f72d0 100644 --- a/docs/commands/index.md +++ b/docs/commands/index.md @@ -98,7 +98,7 @@ Manage netlify functions | Subcommand | description | |:--------------------------- |:-----| | [`graph:edit`](/docs/commands/graph.md#graphedit) | Launch the browser to edit your local graph functions from Netlify | -| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema and regenerate your local functions | +| [`graph:pull`](/docs/commands/graph.md#graphpull) | Pull down your local Netlify Graph schema, and process pending Graph edit events | ### [init](/docs/commands/init.md) From 9a5984615f0adcb801ea90271c0e4eb4b4ea59ba Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 12:52:34 -0800 Subject: [PATCH 48/58] chore: fix command help wording --- src/commands/graph/graph-pull.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 72fe7610f50..6bca0e86d5f 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -87,7 +87,7 @@ const graphPull = async (options, command) => { const createGraphPullCommand = (program) => program .command('graph:pull') - .description('Pull down your local Netlify Graph schema, and process Graph edit events') + .description('Pull down your local Netlify Graph schema, and process pending Graph edit events') .action(async (options, command) => { await graphPull(options, command) }) From 8d0ee53a370f0417b7e54a70348f3854c3cdd9d0 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 22:37:37 -0800 Subject: [PATCH 49/58] feat: add next.js support --- npm-shrinkwrap.json | 2689 +++++++++++++++++++----- package.json | 2 +- src/commands/dev/dev.js | 13 +- src/commands/graph/graph-edit.js | 23 +- src/lib/one-graph/cli-netlify-graph.js | 96 +- 5 files changed, 2239 insertions(+), 584 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b056f3bc237..0d483398e16 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -79,7 +79,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.2", "netlify-headers-parser": "^6.0.1", - "netlify-onegraph-internal": "0.0.10", + "netlify-onegraph-internal": "0.0.15", "netlify-redirect-parser": "^13.0.1", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", @@ -13751,14 +13751,23 @@ } }, "node_modules/netlify-onegraph-internal": { - "version": "0.0.10", - "integrity": "sha512-vZ6sDpxyZjslKC9RUjdFLACK35eY00c+d1FxyRIXmwDCGJSoDbtnORstFWx3Dzp9k4yeR0xgm8ToBu62N7Pd+w==", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.15.tgz", + "integrity": "sha512-PlUro29zk/D+9/8NLQOx8Qw58KWvZo/42uR+7YMqSx9pMtgvtqKWqpAGGf0iCy4eAwe/XLT/eCQR6k/dIBbZHw==", "dependencies": { - "graphql": "16.1.0", + "graphql": "16.0.0", "node-fetch": "^2.6.0", "uuid": "^8.3.2" } }, + "node_modules/netlify-onegraph-internal/node_modules/graphql": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.0.0.tgz", + "integrity": "sha512-n9NxoRfwnpYBZB/WJ7L166gyrShuZ8qYgVaX8oxVyELcJfAwkvwPt6WlYIl90WRlzqDjaNWvLmNOSnKs5llZWQ==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || >=16.0.0" + } + }, "node_modules/netlify-redirect-parser": { "version": "13.0.1", "resolved": "https://registry.npmjs.org/netlify-redirect-parser/-/netlify-redirect-parser-13.0.1.tgz", @@ -18740,7 +18749,8 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.7.1.tgz", "integrity": "sha512-g2QDI/ZLpuEor9EnJ1b7s9S2QSJgNCPBw9ZCSkQdqXNjg5ZQs4mASgW/elVifSxISFwBeMaIAmMBP5luAOIKAw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/type": { "version": "1.2.0", @@ -20046,6 +20056,7 @@ "dependencies": { "@babel/code-frame": { "version": "7.16.7", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { "@babel/highlight": "^7.16.7" } @@ -20057,6 +20068,7 @@ }, "@babel/core": { "version": "7.16.5", + "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==", "requires": { "@babel/code-frame": "^7.16.0", "@babel/generator": "^7.16.5", @@ -20076,12 +20088,14 @@ }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/eslint-parser": { "version": "7.16.5", + "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==", "dev": true, "requires": { "eslint-scope": "^5.1.1", @@ -20091,6 +20105,7 @@ "dependencies": { "semver": { "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -20107,6 +20122,7 @@ }, "@babel/helper-annotate-as-pure": { "version": "7.16.7", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "requires": { "@babel/types": "^7.16.7" } @@ -20184,6 +20200,7 @@ }, "@babel/helper-environment-visitor": { "version": "7.16.7", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "requires": { "@babel/types": "^7.16.7" } @@ -20198,6 +20215,7 @@ }, "@babel/helper-function-name": { "version": "7.16.7", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "requires": { "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", @@ -20206,12 +20224,14 @@ }, "@babel/helper-get-function-arity": { "version": "7.16.7", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-hoist-variables": { "version": "7.16.7", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "requires": { "@babel/types": "^7.16.7" } @@ -20226,6 +20246,7 @@ }, "@babel/helper-module-imports": { "version": "7.16.7", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { "@babel/types": "^7.16.7" } @@ -20254,7 +20275,8 @@ } }, "@babel/helper-plugin-utils": { - "version": "7.16.7" + "version": "7.16.7", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { "version": "7.16.8", @@ -20296,15 +20318,18 @@ }, "@babel/helper-split-export-declaration": { "version": "7.16.7", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7" + "version": "7.16.7", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { - "version": "7.16.7" + "version": "7.16.7", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { "version": "7.16.8", @@ -20319,6 +20344,7 @@ }, "@babel/helpers": { "version": "7.16.5", + "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==", "requires": { "@babel/template": "^7.16.0", "@babel/traverse": "^7.16.5", @@ -20327,6 +20353,7 @@ }, "@babel/highlight": { "version": "7.16.7", + "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -20335,12 +20362,14 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -20348,13 +20377,16 @@ } }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-flag": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -20577,6 +20609,7 @@ }, "@babel/plugin-syntax-jsx": { "version": "7.16.7", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" @@ -20856,6 +20889,7 @@ }, "@babel/plugin-transform-react-display-name": { "version": "7.16.7", + "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7" @@ -20863,6 +20897,7 @@ }, "@babel/plugin-transform-react-jsx": { "version": "7.16.7", + "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -20874,6 +20909,7 @@ }, "@babel/plugin-transform-react-jsx-development": { "version": "7.16.7", + "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", "dev": true, "requires": { "@babel/plugin-transform-react-jsx": "^7.16.7" @@ -20881,6 +20917,7 @@ }, "@babel/plugin-transform-react-pure-annotations": { "version": "7.16.7", + "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -21063,6 +21100,7 @@ }, "@babel/preset-react": { "version": "7.16.7", + "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", @@ -21083,6 +21121,7 @@ }, "@babel/template": { "version": "7.16.7", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", @@ -21117,16 +21156,19 @@ }, "@bcoe/v8-coverage": { "version": "0.2.3", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "@bugsnag/browser": { "version": "7.14.1", + "integrity": "sha512-xenvisYx6xFNuh7GGR/SCLcRs2H6AXn58Ha/u/Yhk+typ1oE5EFAy15+2vdGMDmZp0GsAEgrOTsEZ30uSKdC1w==", "requires": { "@bugsnag/core": "^7.14.0" } }, "@bugsnag/core": { "version": "7.14.0", + "integrity": "sha512-DKN7hNEA6zEOgnucihgNEiMmx4GVaFHD9dJUYQFiouAIL19R/TLgG6B+pGC+QAqHVYsCUt5XDnG8jD+J+3fKOA==", "requires": { "@bugsnag/cuid": "^3.0.0", "@bugsnag/safe-json-stringify": "^6.0.0", @@ -21136,10 +21178,12 @@ } }, "@bugsnag/cuid": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg==" }, "@bugsnag/js": { "version": "7.14.1", + "integrity": "sha512-ygykhixXByzolFpOsUGr72ENgiL1t4TkvKvka2rhoSHOr5kul9TierjvmwBKNpkPdUpDNkgqw3y349jYzzjk+w==", "requires": { "@bugsnag/browser": "^7.14.1", "@bugsnag/node": "^7.14.1" @@ -21147,6 +21191,7 @@ }, "@bugsnag/node": { "version": "7.14.1", + "integrity": "sha512-QhdFez60rTlEueg5rA0W6x8UrTcEnssv4XVPgfooGe2fYh6O89RFjI7zVVdw8QXUyqdf7w4WzyAsCir3XEhCqQ==", "requires": { "@bugsnag/core": "^7.14.0", "byline": "^5.0.0", @@ -21157,10 +21202,12 @@ } }, "@bugsnag/safe-json-stringify": { - "version": "6.0.0" + "version": "6.0.0", + "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" }, "@commitlint/cli": { "version": "16.0.1", + "integrity": "sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==", "dev": true, "requires": { "@commitlint/format": "^16.0.0", @@ -21176,6 +21223,7 @@ }, "@commitlint/config-conventional": { "version": "16.0.0", + "integrity": "sha512-mN7J8KlKFn0kROd+q9PB01sfDx/8K/R25yITspL1No8PB4oj9M1p77xWjP80hPydqZG9OvQq+anXK3ZWeR7s3g==", "dev": true, "requires": { "conventional-changelog-conventionalcommits": "^4.3.1" @@ -21183,6 +21231,7 @@ }, "@commitlint/config-validator": { "version": "16.0.0", + "integrity": "sha512-i80DGlo1FeC5jZpuoNV9NIjQN/m2dDV3jYGWg+1Wr+KldptkUHXj+6GY1Akll66lJ3D8s6aUGi3comPLHPtWHg==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", @@ -21191,6 +21240,7 @@ "dependencies": { "ajv": { "version": "6.12.6", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -21201,12 +21251,14 @@ }, "json-schema-traverse": { "version": "0.4.1", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true } } }, "@commitlint/ensure": { "version": "16.0.0", + "integrity": "sha512-WdMySU8DCTaq3JPf0tZFCKIUhqxaL54mjduNhu8v4D2AMUVIIQKYMGyvXn94k8begeW6iJkTf9cXBArayskE7Q==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", @@ -21215,10 +21267,12 @@ }, "@commitlint/execute-rule": { "version": "16.0.0", + "integrity": "sha512-8edcCibmBb386x5JTHSPHINwA5L0xPkHQFY8TAuDEt5QyRZY/o5DF8OPHSa5Hx2xJvGaxxuIz4UtAT6IiRDYkw==", "dev": true }, "@commitlint/format": { "version": "16.0.0", + "integrity": "sha512-9yp5NCquXL1jVMKL0ZkRwJf/UHdebvCcMvICuZV00NQGYSAL89O398nhqrqxlbjBhM5EZVq0VGcV5+7r3D4zAA==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", @@ -21227,6 +21281,7 @@ }, "@commitlint/is-ignored": { "version": "16.0.0", + "integrity": "sha512-gmAQcwIGC/R/Lp0CEb2b5bfGC7MT5rPe09N8kOGjO/NcdNmfFSZMquwrvNJsq9hnAP0skRdHIsqwlkENkN4Lag==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", @@ -21235,6 +21290,7 @@ }, "@commitlint/lint": { "version": "16.0.0", + "integrity": "sha512-HNl15bRC0h+pLzbMzQC3tM0j1aESXsLYhElqKnXcf5mnCBkBkHzu6WwJW8rZbfxX+YwJmNljN62cPhmdBo8x0A==", "dev": true, "requires": { "@commitlint/is-ignored": "^16.0.0", @@ -21245,6 +21301,7 @@ }, "@commitlint/load": { "version": "16.0.0", + "integrity": "sha512-7WhrGCkP6K/XfjBBguLkkI2XUdiiIyMGlNsSoSqgRNiD352EiffhFEApMy1/XOU+viwBBm/On0n5p0NC7e9/4A==", "dev": true, "requires": { "@commitlint/config-validator": "^16.0.0", @@ -21261,10 +21318,12 @@ }, "@commitlint/message": { "version": "16.0.0", + "integrity": "sha512-CmK2074SH1Ws6kFMEKOKH/7hMekGVbOD6vb4alCOo2+33ZSLUIX8iNkDYyrw38Jwg6yWUhLjyQLUxREeV+QIUA==", "dev": true }, "@commitlint/parse": { "version": "16.0.0", + "integrity": "sha512-F9EjFlMw4MYgBEqoRrWZZKQBzdiJzPBI0qFDFqwUvfQsMmXEREZ242T4R5bFwLINWaALFLHEIa/FXEPa6QxCag==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", @@ -21274,6 +21333,7 @@ }, "@commitlint/read": { "version": "16.0.0", + "integrity": "sha512-H4T2zsfmYQK9B+JtoQaCXWBHUhgIJyOzWZjSfuIV9Ce69/OgHoffNpLZPF2lX6yKuDrS1SQFhI/kUCjVc/e4ew==", "dev": true, "requires": { "@commitlint/top-level": "^16.0.0", @@ -21284,6 +21344,7 @@ }, "@commitlint/resolve-extends": { "version": "16.0.0", + "integrity": "sha512-Z/w9MAQUcxeawpCLtjmkVNXAXOmB2nhW+LYmHEZcx9O6UTauF/1+uuZ2/r0MtzTe1qw2JD+1QHVhEWYHVPlkdA==", "dev": true, "requires": { "@commitlint/config-validator": "^16.0.0", @@ -21296,6 +21357,7 @@ }, "@commitlint/rules": { "version": "16.0.0", + "integrity": "sha512-AOl0y2SBTdJ1bvIv8nwHvQKRT/jC1xb09C5VZwzHoT8sE8F54KDeEzPCwHQFgUcWdGLyS10kkOTAH2MyA8EIlg==", "dev": true, "requires": { "@commitlint/ensure": "^16.0.0", @@ -21307,10 +21369,12 @@ }, "@commitlint/to-lines": { "version": "16.0.0", + "integrity": "sha512-iN/qU38TCKU7uKOg6RXLpD49wNiuI0TqMqybHbjefUeP/Jmzxa8ishryj0uLyVdrAl1ZjGeD1ukXGMTtvqz8iA==", "dev": true }, "@commitlint/top-level": { "version": "16.0.0", + "integrity": "sha512-/Jt6NLxyFkpjL5O0jxurZPCHURZAm7cQCqikgPCwqPAH0TLgwqdHjnYipl8J+AGnAMGDip4FNLoYrtgIpZGBYw==", "dev": true, "requires": { "find-up": "^5.0.0" @@ -21318,6 +21382,7 @@ }, "@commitlint/types": { "version": "16.0.0", + "integrity": "sha512-+0FvYOAS39bJ4aKjnYn/7FD4DfWkmQ6G/06I4F0Gvu4KS5twirEg8mIcLhmeRDOOKn4Tp8PwpLwBiSA6npEMQA==", "dev": true, "requires": { "chalk": "^4.0.0" @@ -21325,6 +21390,7 @@ }, "@concordance/react": { "version": "2.0.0", + "integrity": "sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==", "dev": true, "requires": { "arrify": "^1.0.1" @@ -21332,21 +21398,25 @@ "dependencies": { "arrify": { "version": "1.0.1", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true } } }, "@cspotcode/source-map-consumer": { - "version": "0.8.0" + "version": "0.8.0", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==" }, "@cspotcode/source-map-support": { "version": "0.7.0", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "requires": { "@cspotcode/source-map-consumer": "0.8.0" } }, "@dabh/diagnostics": { "version": "2.0.2", + "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", "requires": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -21355,6 +21425,7 @@ }, "@eslint/eslintrc": { "version": "0.4.3", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -21370,6 +21441,7 @@ "dependencies": { "ajv": { "version": "6.12.6", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -21380,6 +21452,7 @@ }, "argparse": { "version": "1.0.10", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -21387,6 +21460,7 @@ }, "globals": { "version": "13.12.0", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -21394,10 +21468,12 @@ }, "ignore": { "version": "4.0.6", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "js-yaml": { "version": "3.14.1", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -21406,16 +21482,19 @@ }, "json-schema-traverse": { "version": "0.4.1", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "type-fest": { "version": "0.20.2", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "@humanwhocodes/config-array": { "version": "0.5.0", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.0", @@ -21425,14 +21504,17 @@ }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/schema": { "version": "0.1.3", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/types": { "version": "26.6.2", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -21443,6 +21525,7 @@ }, "@mapbox/node-pre-gyp": { "version": "1.0.8", + "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "requires": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", @@ -21457,6 +21540,7 @@ }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "requires": { "call-me-maybe": "^1.0.1", "glob-to-regexp": "^0.3.0" @@ -21600,6 +21684,7 @@ }, "@netlify/cache-utils": { "version": "4.0.0", + "integrity": "sha512-8BNDYMkkrkmlfwNaSeRqOhGu8lETc2ixM6bmvDAXuE5TcNNAActWcWurocwS419HNwyTw1kSEUKLp6Vx5/wiBg==", "requires": { "cpy": "^8.1.0", "del": "^5.1.0", @@ -21615,6 +21700,7 @@ "dependencies": { "del": { "version": "5.1.0", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", "requires": { "globby": "^10.0.1", "graceful-fs": "^4.2.2", @@ -21628,6 +21714,7 @@ "dependencies": { "globby": { "version": "10.0.2", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "requires": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -21643,6 +21730,7 @@ }, "p-map": { "version": "3.0.0", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "requires": { "aggregate-error": "^3.0.0" } @@ -21651,6 +21739,7 @@ }, "@netlify/config": { "version": "17.0.3", + "integrity": "sha512-u1x//PEqKvsExPQtRMG4x786mKcAV6ykwqiN102szLlr5Dojb7X5y+6vb9wi4JJ/KNiVURP7Wna/sMxGvFi/Tw==", "requires": { "chalk": "^4.1.2", "cron-parser": "^4.1.0", @@ -21681,15 +21770,18 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "cliui": { "version": "6.0.0", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -21698,30 +21790,36 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "dot-prop": { "version": "5.3.0", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" } }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "locate-path": { "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" }, "dependencies": { "p-locate": { "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } @@ -21730,12 +21828,14 @@ }, "p-limit": { "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "wrap-ansi": { "version": "6.2.0", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -21743,10 +21843,12 @@ } }, "y18n": { - "version": "4.0.3" + "version": "4.0.3", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yargs": { "version": "15.4.1", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -21763,6 +21865,7 @@ "dependencies": { "find-up": { "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -21772,6 +21875,7 @@ }, "yargs-parser": { "version": "18.1.3", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -21780,7 +21884,8 @@ } }, "@netlify/esbuild": { - "version": "0.13.6" + "version": "0.13.6", + "integrity": "sha512-tiKmDcHM2riSVN79c0mJY/67EBDafXQAMitHuLiCDAMdtz3kfv+NqdVG5krgf5lWR8Uf8AeZrUW5Q9RP25REvw==" }, "@netlify/eslint-config-node": { "version": "4.1.5", @@ -21837,6 +21942,7 @@ }, "@netlify/functions-utils": { "version": "4.0.3", + "integrity": "sha512-HOhBYUymE2zQGCEN0fi5evxX0GsqqiZf2MQGZqE/9OFghacX5EqjeH7fwYKhqxzfO1lba6QvDJhApFepXeGFIQ==", "requires": { "@netlify/zip-it-and-ship-it": "^5.4.0", "cpy": "^8.1.0", @@ -21845,6 +21951,7 @@ }, "@netlify/git-utils": { "version": "4.0.0", + "integrity": "sha512-CZGyItsvmX9dBbzoxS6JUSKJzYKM/RfLQHeq18dombL1sk0jxsWcXdwKfZUGqw98T11uGz6JDPQUp/oUw2rNuA==", "requires": { "execa": "^5.1.1", "map-obj": "^4.0.0", @@ -21855,6 +21962,7 @@ }, "@netlify/local-functions-proxy": { "version": "1.1.1", + "integrity": "sha512-eXSsayLT6PMvjzFQpjC9nkg2Otc3lZ5GoYele9M6f8PmsvWpaXRhwjNQ0NYhQQ2UZbLMIiO2dH8dbRsT3bMkFw==", "requires": { "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", "@netlify/local-functions-proxy-darwin-x64": "1.1.1", @@ -21872,10 +21980,12 @@ }, "@netlify/local-functions-proxy-darwin-x64": { "version": "1.1.1", + "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", "optional": true }, "@netlify/open-api": { - "version": "2.8.0" + "version": "2.8.0", + "integrity": "sha512-lfNB/QYDgaP07pwm/nWEaWPvRAAGyhxvJqNzvxMijc7A4uwquMjlbYve8yYyd0LJXPwgBpGobwiQj5RA76xzUQ==" }, "@netlify/plugin-edge-handlers": { "version": "3.0.4", @@ -21906,6 +22016,7 @@ }, "@netlify/routing-local-proxy": { "version": "0.34.1", + "integrity": "sha512-FuzgxdxC7wJXUT08qPTtHiKwjFDHh3ViCDZwxwjm8CjOKYz+9NjhmIffkbEFl6R+uH6IV/3R6gVDL5Fb5hwRbQ==", "requires": { "@netlify/routing-local-proxy-darwin-arm64": "^0.34.1", "@netlify/routing-local-proxy-darwin-x64": "^0.34.1", @@ -21915,10 +22026,12 @@ }, "@netlify/routing-local-proxy-darwin-x64": { "version": "0.34.1", + "integrity": "sha512-x5mukoDWGl+jpVsyNZjRBrP1m93AFrVI/afodQbu45nyW78fpNALhqJPGoI2ixe/Z5HKaYl+ItvI+J4wAVFseQ==", "optional": true }, "@netlify/run-utils": { "version": "4.0.0", + "integrity": "sha512-ZeQFp1VmSMfrKaV2A13HJ2b7UJBHf7DUvzAcNjjJdbugD8wCDs5l00rRZeLhyl48AIZl9ki+RpsATZ/j6qKn+g==", "requires": { "execa": "^5.1.1" } @@ -21991,16 +22104,19 @@ }, "@nodelib/fs.scandir": { "version": "2.1.5", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.5" + "version": "2.0.5", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -22008,12 +22124,14 @@ }, "@octokit/auth-token": { "version": "2.5.0", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "requires": { "@octokit/types": "^6.0.3" } }, "@octokit/core": { "version": "3.5.1", + "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", "requires": { "@octokit/auth-token": "^2.4.4", "@octokit/graphql": "^4.5.8", @@ -22026,6 +22144,7 @@ }, "@octokit/endpoint": { "version": "6.0.12", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "requires": { "@octokit/types": "^6.0.3", "is-plain-object": "^5.0.0", @@ -22034,6 +22153,7 @@ }, "@octokit/graphql": { "version": "4.8.0", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "requires": { "@octokit/request": "^5.6.0", "@octokit/types": "^6.0.3", @@ -22041,20 +22161,24 @@ } }, "@octokit/openapi-types": { - "version": "11.2.0" + "version": "11.2.0", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" }, "@octokit/plugin-paginate-rest": { "version": "2.17.0", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "requires": { "@octokit/types": "^6.34.0" } }, "@octokit/plugin-request-log": { "version": "1.0.4", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "requires": { "@octokit/types": "^6.34.0", "deprecation": "^2.3.1" @@ -22062,6 +22186,7 @@ }, "@octokit/request": { "version": "5.6.2", + "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "requires": { "@octokit/endpoint": "^6.0.1", "@octokit/request-error": "^2.1.0", @@ -22073,6 +22198,7 @@ }, "@octokit/request-error": { "version": "2.1.0", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "requires": { "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", @@ -22081,6 +22207,7 @@ }, "@octokit/rest": { "version": "18.12.0", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "requires": { "@octokit/core": "^3.5.1", "@octokit/plugin-paginate-rest": "^2.16.8", @@ -22090,6 +22217,7 @@ }, "@octokit/types": { "version": "6.34.0", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "requires": { "@octokit/openapi-types": "^11.2.0" } @@ -22167,16 +22295,19 @@ }, "@samverschueren/stream-to-observable": { "version": "0.3.1", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "requires": { "any-observable": "^0.3.0" } }, "@sindresorhus/is": { "version": "4.2.0", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", "dev": true }, "@sindresorhus/slugify": { "version": "1.1.2", + "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", "requires": { "@sindresorhus/transliterate": "^0.1.1", "escape-string-regexp": "^4.0.0" @@ -22184,18 +22315,21 @@ }, "@sindresorhus/transliterate": { "version": "0.1.2", + "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "requires": { "escape-string-regexp": "^2.0.0", "lodash.deburr": "^4.1.0" }, "dependencies": { "escape-string-regexp": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, "@sinonjs/commons": { "version": "1.8.3", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { "type-detect": "4.0.8" @@ -22203,6 +22337,7 @@ }, "@sinonjs/fake-timers": { "version": "8.1.0", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -22210,6 +22345,7 @@ }, "@sinonjs/samsam": { "version": "6.0.2", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, "requires": { "@sinonjs/commons": "^1.6.0", @@ -22219,28 +22355,35 @@ }, "@sinonjs/text-encoding": { "version": "0.7.1", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, "@szmarczak/http-timer": { "version": "4.0.6", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "requires": { "defer-to-connect": "^2.0.0" } }, "@tsconfig/node10": { - "version": "1.0.8" + "version": "1.0.8", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" }, "@tsconfig/node12": { - "version": "1.0.9" + "version": "1.0.9", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" }, "@tsconfig/node14": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" }, "@tsconfig/node16": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, "@types/cacheable-request": { "version": "6.0.2", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "requires": { "@types/http-cache-semantics": "*", "@types/keyv": "*", @@ -22250,12 +22393,14 @@ }, "@types/decompress": { "version": "4.2.4", + "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", "requires": { "@types/node": "*" } }, "@types/download": { "version": "8.0.1", + "integrity": "sha512-t5DjMD6Y1DxjXtEHl7Kt+nQn9rOmVLYD8p4Swrcc5QpgyqyqR2gXTIK6RwwMnNeFJ+ZIiIW789fQKzCrK7AOFA==", "requires": { "@types/decompress": "*", "@types/got": "^8", @@ -22269,6 +22414,7 @@ }, "@types/glob": { "version": "7.2.0", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "requires": { "@types/minimatch": "*", "@types/node": "*" @@ -22276,67 +22422,81 @@ }, "@types/got": { "version": "8.3.6", + "integrity": "sha512-nvLlj+831dhdm4LR2Ly+HTpdLyBaMynoOr6wpIxS19d/bPeHQxFU5XQ6Gp6ohBpxvCWZM1uHQIC2+ySRH1rGrQ==", "requires": { "@types/node": "*" } }, "@types/http-cache-semantics": { - "version": "4.0.1" + "version": "4.0.1", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/http-proxy": { "version": "1.17.8", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "requires": { "@types/node": "*" } }, "@types/istanbul-lib-coverage": { - "version": "2.0.3" + "version": "2.0.3", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" }, "@types/istanbul-lib-report": { "version": "3.0.0", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { "version": "3.0.1", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "requires": { "@types/istanbul-lib-report": "*" } }, "@types/json-schema": { "version": "7.0.9", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/json5": { "version": "0.0.29", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "@types/keyv": { "version": "3.1.3", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "requires": { "@types/node": "*" } }, "@types/mdast": { "version": "3.0.10", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, "requires": { "@types/unist": "*" } }, "@types/minimatch": { - "version": "3.0.5" + "version": "3.0.5", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "@types/minimist": { "version": "1.2.2", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/node": { - "version": "17.0.0" + "version": "17.0.0", + "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" }, "@types/node-fetch": { "version": "2.5.12", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -22344,6 +22504,7 @@ "dependencies": { "form-data": { "version": "3.0.1", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -22353,10 +22514,12 @@ } }, "@types/normalize-package-data": { - "version": "2.4.1" + "version": "2.4.1", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "@types/parse-json": { "version": "4.0.0", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "@types/resolve": { @@ -22369,28 +22532,34 @@ }, "@types/responselike": { "version": "1.0.0", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "requires": { "@types/node": "*" } }, "@types/semver": { - "version": "7.3.9" + "version": "7.3.9", + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" }, "@types/unist": { "version": "2.0.6", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, "@types/yargs": { "version": "15.0.14", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.1" + "version": "20.2.1", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@typescript-eslint/eslint-plugin": { "version": "5.7.0", + "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", "dev": true, "requires": { "@typescript-eslint/experimental-utils": "5.7.0", @@ -22405,6 +22574,7 @@ }, "@typescript-eslint/experimental-utils": { "version": "5.7.0", + "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -22417,6 +22587,7 @@ }, "@typescript-eslint/parser": { "version": "5.7.0", + "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.7.0", @@ -22427,6 +22598,7 @@ }, "@typescript-eslint/scope-manager": { "version": "5.7.0", + "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", @@ -22435,10 +22607,12 @@ }, "@typescript-eslint/types": { "version": "5.7.0", + "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.7.0", + "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", @@ -22452,6 +22626,7 @@ }, "@typescript-eslint/visitor-keys": { "version": "5.7.0", + "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", "dev": true, "requires": { "@typescript-eslint/types": "5.7.0", @@ -22460,12 +22635,14 @@ "dependencies": { "eslint-visitor-keys": { "version": "3.1.0", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true } } }, "@vercel/nft": { "version": "0.17.1", + "integrity": "sha512-z3zknfI7JaE0PPmmYDQVtf/TCEnAYT5Y2XrCO/BfAD1sP2Wdmg1PO0L1VRIyt0zjpr6PpBYitC0Nmy0rh+qEDA==", "requires": { "@mapbox/node-pre-gyp": "^1.0.5", "acorn": "^8.6.0", @@ -22483,6 +22660,7 @@ "dependencies": { "mkdirp": { "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" } @@ -22562,17 +22740,20 @@ "dev": true }, "abbrev": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { "mime-types": "~2.1.24", "negotiator": "0.6.2" } }, "acorn": { - "version": "8.6.0" + "version": "8.6.0", + "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" }, "acorn-globals": { "version": "4.3.4", @@ -22600,32 +22781,38 @@ }, "acorn-jsx": { "version": "5.3.2", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-walk": { - "version": "8.2.0" + "version": "8.2.0", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "agent-base": { "version": "6.0.2", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" } }, "aggregate-error": { "version": "3.1.0", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" }, "dependencies": { "clean-stack": { - "version": "2.2.0" + "version": "2.2.0", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" } } }, "ajv": { "version": "8.8.2", + "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -22635,6 +22822,7 @@ }, "all-node-versions": { "version": "8.0.0", + "integrity": "sha512-cF8ibgj23U7ai4qjSFzpeccwDXUlPFMzKe0Z6qf6gChR+9S0JMyzYz6oYz4n0nHi/FLH9BJIefsONsMH/WDM2w==", "requires": { "fetch-node-website": "^5.0.3", "filter-obj": "^2.0.1", @@ -22648,6 +22836,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", @@ -22657,6 +22846,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" @@ -22664,15 +22854,18 @@ }, "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -22680,24 +22873,29 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "get-stream": { "version": "5.2.0", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } }, "jest-get-type": { - "version": "25.2.6" + "version": "25.2.6", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", "camelcase": "^5.3.1", @@ -22709,6 +22907,7 @@ }, "pretty-format": { "version": "25.5.0", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", "ansi-regex": "^5.0.0", @@ -22717,10 +22916,12 @@ } }, "react-is": { - "version": "16.13.1" + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -22729,31 +22930,38 @@ }, "ansi-align": { "version": "3.0.1", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { "string-width": "^4.1.0" } }, "ansi-colors": { "version": "4.1.1", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "5.0.0", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "requires": { "type-fest": "^1.0.2" } }, "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "5.2.0" + "version": "5.2.0", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "any-observable": { - "version": "0.3.0" + "version": "0.3.0", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" }, "anymatch": { "version": "3.1.2", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -22766,21 +22974,25 @@ "dev": true }, "aproba": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "archive-type": { "version": "4.0.0", + "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "requires": { "file-type": "^4.2.0" }, "dependencies": { "file-type": { - "version": "4.4.0" + "version": "4.4.0", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" } } }, "archiver": { "version": "5.3.0", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "requires": { "archiver-utils": "^2.1.0", "async": "^3.2.0", @@ -22793,6 +23005,7 @@ }, "archiver-utils": { "version": "2.1.0", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "requires": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", @@ -22808,6 +23021,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -22820,6 +23034,7 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -22828,25 +23043,31 @@ }, "are-we-there-yet": { "version": "2.0.0", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "arg": { - "version": "4.1.3" + "version": "4.1.3", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { - "version": "3.1.0" + "version": "3.1.0", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-equal": { "version": "1.0.0", @@ -22856,17 +23077,21 @@ }, "array-find-index": { "version": "1.0.2", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, "array-flatten": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-ify": { "version": "1.0.0", + "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, "array-includes": { "version": "3.1.4", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -22877,16 +23102,20 @@ } }, "array-union": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array-uniq": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { - "version": "0.3.2" + "version": "0.3.2", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flat": { "version": "1.2.5", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -22896,6 +23125,7 @@ }, "array.prototype.flatmap": { "version": "1.2.5", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -22905,13 +23135,16 @@ }, "arrgv": { "version": "1.0.2", + "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", "dev": true }, "arrify": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, "ascii-table": { - "version": "0.0.9" + "version": "0.0.9", + "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" }, "asn1": { "version": "0.2.6", @@ -22929,23 +23162,29 @@ "dev": true }, "assign-symbols": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-module-types": { - "version": "2.7.1" + "version": "2.7.1", + "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==" }, "astral-regex": { "version": "2.0.0", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { - "version": "3.2.3" + "version": "3.2.3", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "asynckit": { - "version": "0.4.0" + "version": "0.4.0", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.1.2" + "version": "2.1.2", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "atomic-sleep": { "version": "1.0.0", @@ -22955,6 +23194,7 @@ }, "ava": { "version": "3.15.0", + "integrity": "sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==", "dev": true, "requires": { "@concordance/react": "^2.0.0", @@ -23017,14 +23257,17 @@ "dependencies": { "ci-info": { "version": "2.0.0", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "get-caller-file": { "version": "2.0.5", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "yargs": { "version": "16.2.0", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -23094,15 +23337,18 @@ }, "backoff": { "version": "2.5.0", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "requires": { "precond": "0.2" } }, "balanced-match": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -23115,6 +23361,7 @@ "dependencies": { "define-property": { "version": "1.0.0", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" } @@ -23122,7 +23369,8 @@ } }, "base64-js": { - "version": "1.5.1" + "version": "1.5.1", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -23140,25 +23388,30 @@ "dev": true }, "before-after-hook": { - "version": "2.2.2" + "version": "2.2.2", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, "better-opn": { "version": "3.0.1", + "integrity": "sha512-u7pU4QnwLQ+wCDLHdvtWbI/41pSRayJ+UHyAqpb5sr42FGnqzBlEyWdCklfaSzXqbmnXDBzCvWcaZmL3qp0xGA==", "requires": { "open": "^8.0.4" } }, "binary-extensions": { - "version": "2.2.0" + "version": "2.2.0", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bindings": { "version": "1.5.0", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "requires": { "file-uri-to-path": "1.0.0" } }, "bl": { "version": "4.1.0", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -23166,7 +23419,8 @@ } }, "blueimp-md5": { - "version": "2.19.0" + "version": "2.19.0", + "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, "body-parser": { "version": "1.19.1", @@ -23207,6 +23461,7 @@ }, "boxen": { "version": "5.1.2", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -23219,12 +23474,14 @@ }, "dependencies": { "type-fest": { - "version": "0.20.2" + "version": "0.20.2", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, "brace-expansion": { "version": "1.1.11", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -23232,6 +23489,7 @@ }, "braces": { "version": "3.0.2", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { "fill-range": "^7.0.1" } @@ -23244,6 +23502,7 @@ }, "browserslist": { "version": "4.19.1", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "requires": { "caniuse-lite": "^1.0.30001286", "electron-to-chromium": "^1.4.17", @@ -23254,6 +23513,7 @@ }, "buffer": { "version": "5.7.1", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -23261,19 +23521,23 @@ }, "buffer-alloc": { "version": "1.2.0", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "requires": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" } }, "buffer-alloc-unsafe": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, "buffer-crc32": { - "version": "0.2.13" + "version": "0.2.13", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-equal-constant-time": { "version": "1.0.1", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, "buffer-es6": { @@ -23282,19 +23546,24 @@ "integrity": "sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ=" }, "buffer-fill": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, "buffer-from": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtin-modules": { - "version": "3.2.0" + "version": "3.2.0", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" }, "builtins": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" }, "byline": { - "version": "5.0.0" + "version": "5.0.0", + "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" }, "bytes": { "version": "3.0.0", @@ -23304,6 +23573,7 @@ }, "c8": { "version": "7.11.0", + "integrity": "sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", @@ -23322,10 +23592,12 @@ "dependencies": { "get-caller-file": { "version": "2.0.5", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "yargs": { "version": "16.2.0", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -23341,6 +23613,7 @@ }, "cache-base": { "version": "1.0.1", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -23355,10 +23628,12 @@ }, "cacheable-lookup": { "version": "5.0.4", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true }, "cacheable-request": { "version": "7.0.2", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -23371,6 +23646,7 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } @@ -23378,30 +23654,37 @@ } }, "cachedir": { - "version": "2.3.0" + "version": "2.3.0", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==" }, "call-bind": { "version": "1.0.2", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" } }, "call-me-maybe": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "callsite": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" }, "callsites": { "version": "3.1.0", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { - "version": "6.2.1" + "version": "6.2.1", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" }, "camelcase-keys": { "version": "6.2.2", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -23411,16 +23694,19 @@ "dependencies": { "camelcase": { "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "quick-lru": { "version": "4.0.1", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true } } }, "caniuse-lite": { - "version": "1.0.30001287" + "version": "1.0.30001287", + "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" }, "caseless": { "version": "0.12.0", @@ -23430,6 +23716,7 @@ }, "chalk": { "version": "4.1.2", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23437,21 +23724,25 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -23460,21 +23751,26 @@ }, "character-entities": { "version": "1.2.4", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-legacy": { "version": "1.1.4", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { "version": "1.1.4", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chardet": { - "version": "0.7.0" + "version": "0.7.0", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { "version": "3.5.2", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -23487,21 +23783,26 @@ } }, "chownr": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chunkd": { "version": "2.0.1", + "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", "dev": true }, "ci-info": { - "version": "3.3.0" + "version": "3.3.0", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "ci-parallel-vars": { "version": "1.0.1", + "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", "dev": true }, "class-utils": { "version": "0.3.6", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -23511,18 +23812,21 @@ "dependencies": { "define-property": { "version": "0.2.5", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -23531,12 +23835,14 @@ }, "is-data-descriptor": { "version": "0.1.4", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -23545,6 +23851,7 @@ }, "is-descriptor": { "version": "0.1.6", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -23552,12 +23859,14 @@ } }, "kind-of": { - "version": "5.1.0" + "version": "5.1.0", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "clean-deep": { "version": "3.4.0", + "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", "requires": { "lodash.isempty": "^4.4.0", "lodash.isplainobject": "^4.0.6", @@ -23566,6 +23875,7 @@ }, "clean-regexp": { "version": "1.0.0", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -23573,41 +23883,49 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true } } }, "clean-stack": { "version": "3.0.1", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "requires": { "escape-string-regexp": "4.0.0" } }, "clean-yaml-object": { "version": "0.1.0", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", "dev": true }, "cli-boxes": { - "version": "2.2.1" + "version": "2.2.1", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, "cli-cursor": { "version": "3.1.0", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { "restore-cursor": "^3.1.0" } }, "cli-progress": { "version": "3.9.1", + "integrity": "sha512-AXxiCe2a0Lm0VN+9L0jzmfQSkcZm5EYspfqXKaSIQKqIk+0hnkZ3/v1E9B39mkD6vYhKih3c/RPsJBSwq9O99Q==", "requires": { "colors": "^1.1.2", "string-width": "^4.2.0" } }, "cli-spinners": { - "version": "2.6.1" + "version": "2.6.1", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, "cli-truncate": { "version": "2.1.0", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { "slice-ansi": "^3.0.0", @@ -23615,19 +23933,19 @@ } }, "cli-width": { - "version": "2.2.1" + "version": "2.2.1", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "clipanion": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-3.1.0.tgz", "integrity": "sha512-v025Hz+IDQ15FpOyK8p02h5bFznMu6rLFsJSyOPR+7WrbSnZ1Ek6pblPukV7K5tC/dsWfncQPIrJ4iUy2PXkbw==", "dev": true, - "requires": { - "typanion": "^3.3.1" - } + "requires": {} }, "cliui": { "version": "7.0.4", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -23635,26 +23953,31 @@ } }, "clone": { - "version": "1.0.4" + "version": "1.0.4", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "clone-response": { "version": "1.0.2", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { "mimic-response": "^1.0.0" } }, "code-excerpt": { "version": "3.0.0", + "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", "dev": true, "requires": { "convert-to-spaces": "^1.0.1" } }, "code-point-at": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -23662,6 +23985,7 @@ }, "color": { "version": "3.2.1", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -23669,28 +23993,34 @@ }, "color-convert": { "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.3" + "version": "1.1.3", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "1.9.0", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, "color-support": { - "version": "1.1.3" + "version": "1.1.3", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, "colors": { - "version": "1.4.0" + "version": "1.4.0", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "colorspace": { "version": "1.1.4", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -23698,15 +24028,18 @@ }, "combined-stream": { "version": "1.0.8", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "8.3.0" + "version": "8.3.0", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "common-path-prefix": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "commondir": { "version": "1.0.1", @@ -23715,6 +24048,7 @@ }, "compare-func": { "version": "2.0.0", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "requires": { "array-ify": "^1.0.0", @@ -23723,6 +24057,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -23731,10 +24066,12 @@ } }, "component-emitter": { - "version": "1.3.0" + "version": "1.3.0", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compress-commons": { "version": "4.1.1", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "requires": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", @@ -23784,10 +24121,12 @@ } }, "concat-map": { - "version": "0.0.1" + "version": "0.0.1", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concordance": { "version": "5.0.4", + "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", "requires": { "date-time": "^3.1.0", "esutils": "^2.0.3", @@ -23801,6 +24140,7 @@ }, "configstore": { "version": "5.0.1", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -23812,6 +24152,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" } @@ -23819,7 +24160,8 @@ } }, "console-control-strings": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { "version": "0.5.4", @@ -23837,10 +24179,12 @@ } }, "content-type": { - "version": "1.0.4" + "version": "1.0.4", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "conventional-changelog-angular": { "version": "5.0.13", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -23849,6 +24193,7 @@ }, "conventional-changelog-conventionalcommits": { "version": "4.6.1", + "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -23858,6 +24203,7 @@ }, "conventional-commits-parser": { "version": "3.2.4", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "requires": { "is-text-path": "^1.0.1", @@ -23870,22 +24216,27 @@ }, "convert-source-map": { "version": "1.8.0", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" } }, "convert-to-spaces": { "version": "1.0.2", + "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=", "dev": true }, "cookie": { - "version": "0.4.1" + "version": "0.4.1", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { - "version": "1.0.6" + "version": "1.0.6", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { "version": "2.1.3", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, "cookies": { @@ -23907,10 +24258,12 @@ } }, "copy-descriptor": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-template-dir": { "version": "1.4.0", + "integrity": "sha512-xkXSJhvKz4MfLbVkZ7GyCaFo4ciB3uKI/HHzkGwj1eyTH5+7RTFxW5CE0irWAZgV5oFcO9hd6+NVXAtY9hlo7Q==", "requires": { "end-of-stream": "^1.1.0", "graceful-fs": "^4.1.3", @@ -23925,6 +24278,7 @@ "dependencies": { "braces": { "version": "2.3.2", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -23940,6 +24294,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } @@ -23948,6 +24303,7 @@ }, "fill-range": { "version": "4.0.0", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -23957,6 +24313,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } @@ -23964,16 +24321,19 @@ } }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-number": { "version": "3.0.0", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -23982,6 +24342,7 @@ }, "micromatch": { "version": "3.1.10", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -24000,12 +24361,14 @@ }, "mkdirp": { "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" } }, "pump": { "version": "1.0.3", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -24013,6 +24376,7 @@ }, "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -24025,6 +24389,7 @@ }, "readdirp": { "version": "2.2.1", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -24033,12 +24398,14 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "to-regex-range": { "version": "2.1.1", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -24063,7 +24430,8 @@ } }, "core-util-is": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { "version": "2.8.5", @@ -24077,6 +24445,7 @@ }, "cosmiconfig": { "version": "7.0.1", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -24088,14 +24457,15 @@ }, "cosmiconfig-typescript-loader": { "version": "1.0.2", + "integrity": "sha512-27ZehvijYqAKVzta5xtZBS3PAliC8CmnWkGXN0vgxAZz7yqxpMjf3aG7flxF5rEiu8FAD7nZZXtOI+xUGn+bVg==", "dev": true, "requires": { - "cosmiconfig": "^7", "ts-node": "^10.4.0" } }, "cp-file": { "version": "9.1.0", + "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", "requires": { "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", @@ -24105,6 +24475,7 @@ }, "cpy": { "version": "8.1.2", + "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "requires": { "arrify": "^2.0.1", "cp-file": "^7.0.0", @@ -24118,16 +24489,19 @@ }, "dependencies": { "@nodelib/fs.stat": { - "version": "1.1.3" + "version": "1.1.3", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, "array-union": { "version": "1.0.2", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { "array-uniq": "^1.0.1" } }, "braces": { "version": "2.3.2", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -24143,6 +24517,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } @@ -24151,6 +24526,7 @@ }, "cp-file": { "version": "7.0.0", + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "requires": { "graceful-fs": "^4.1.2", "make-dir": "^3.0.0", @@ -24160,12 +24536,14 @@ }, "dir-glob": { "version": "2.2.2", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "requires": { "path-type": "^3.0.0" } }, "fast-glob": { "version": "2.2.7", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", "@nodelib/fs.stat": "^1.1.2", @@ -24177,6 +24555,7 @@ }, "fill-range": { "version": "4.0.0", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -24186,6 +24565,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } @@ -24194,6 +24574,7 @@ }, "glob-parent": { "version": "3.1.0", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -24201,6 +24582,7 @@ "dependencies": { "is-glob": { "version": "3.1.0", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { "is-extglob": "^2.1.0" } @@ -24209,6 +24591,7 @@ }, "globby": { "version": "9.2.0", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "requires": { "@types/glob": "^7.1.1", "array-union": "^1.0.2", @@ -24221,19 +24604,23 @@ } }, "ignore": { - "version": "4.0.6" + "version": "4.0.6", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-number": { "version": "3.0.0", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -24242,6 +24629,7 @@ }, "micromatch": { "version": "3.1.10", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -24260,26 +24648,31 @@ }, "p-map": { "version": "3.0.0", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "requires": { "aggregate-error": "^3.0.0" } }, "path-type": { "version": "3.0.0", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "slash": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, "to-regex-range": { "version": "2.1.1", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -24289,6 +24682,7 @@ }, "crc-32": { "version": "1.2.0", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "requires": { "exit-on-epipe": "~1.0.1", "printj": "~1.1.0" @@ -24296,6 +24690,7 @@ }, "crc32-stream": { "version": "4.0.2", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "requires": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" @@ -24303,22 +24698,26 @@ }, "create-eslint-index": { "version": "1.0.0", + "integrity": "sha1-2VQ3LYbVeS/NZ+nyt5GxqxYkEbs=", "dev": true, "requires": { "lodash.get": "^4.3.0" } }, "create-require": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "cron-parser": { "version": "4.2.0", + "integrity": "sha512-pHDdek1iV87R9iG1edv5P2aImDOO1+y2VqCm0V3t0g3JtT/o0V0wAnX/6J2bsF8XEDvR7iqL3Co/3RBj2AhPFQ==", "requires": { "luxon": "^1.28.0" } }, "cross-env": { "version": "7.0.3", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "requires": { "cross-spawn": "^7.0.1" @@ -24326,6 +24725,7 @@ }, "cross-spawn": { "version": "7.0.3", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -24333,7 +24733,8 @@ } }, "crypto-random-string": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "cssom": { "version": "0.4.4", @@ -24360,13 +24761,15 @@ }, "currently-unhandled": { "version": "0.4.1", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { "array-find-index": "^1.0.1" } }, "cyclist": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "d": { "version": "1.0.1", @@ -24380,6 +24783,7 @@ }, "dargs": { "version": "7.0.0", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, "dashdash": { @@ -24431,10 +24835,12 @@ } }, "date-fns": { - "version": "1.30.1" + "version": "1.30.1", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" }, "date-time": { "version": "3.1.0", + "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "requires": { "time-zone": "^1.0.0" } @@ -24447,26 +24853,31 @@ }, "debug": { "version": "4.3.3", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" }, "dependencies": { "ms": { - "version": "2.1.2" + "version": "2.1.2", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "decache": { "version": "4.6.1", + "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", "requires": { "callsite": "^1.0.0" } }, "decamelize": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decamelize-keys": { "version": "1.1.0", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -24475,15 +24886,18 @@ "dependencies": { "map-obj": { "version": "1.0.1", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } } }, "decode-uri-component": { - "version": "0.2.0" + "version": "0.2.0", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { "version": "4.2.1", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -24497,22 +24911,26 @@ "dependencies": { "make-dir": { "version": "1.3.0", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { "pify": "^3.0.0" }, "dependencies": { "pify": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "pify": { - "version": "2.3.0" + "version": "2.3.0", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "decompress-response": { "version": "6.0.0", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { "mimic-response": "^3.1.0" @@ -24520,12 +24938,14 @@ "dependencies": { "mimic-response": { "version": "3.1.0", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true } } }, "decompress-tar": { "version": "4.1.1", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "requires": { "file-type": "^5.2.0", "is-stream": "^1.1.0", @@ -24534,19 +24954,23 @@ "dependencies": { "bl": { "version": "1.2.3", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "file-type": { - "version": "5.2.0" + "version": "5.2.0", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, "is-stream": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -24559,12 +24983,14 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "tar-stream": { "version": "1.6.2", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "requires": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -24579,6 +25005,7 @@ }, "decompress-tarbz2": { "version": "4.1.1", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "requires": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -24588,15 +25015,18 @@ }, "dependencies": { "file-type": { - "version": "6.2.0" + "version": "6.2.0", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" }, "is-stream": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" } } }, "decompress-targz": { "version": "4.1.1", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "requires": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", @@ -24604,15 +25034,18 @@ }, "dependencies": { "file-type": { - "version": "5.2.0" + "version": "5.2.0", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, "is-stream": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" } } }, "decompress-unzip": { "version": "4.0.1", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "requires": { "file-type": "^3.8.0", "get-stream": "^2.2.0", @@ -24621,49 +25054,60 @@ }, "dependencies": { "file-type": { - "version": "3.9.0" + "version": "3.9.0", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" }, "get-stream": { "version": "2.3.1", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "requires": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" } }, "pify": { - "version": "2.3.0" + "version": "2.3.0", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "deep-extend": { - "version": "0.6.0" + "version": "0.6.0", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { - "version": "0.1.4" + "version": "0.1.4", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { - "version": "4.2.2" + "version": "4.2.2", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "defaults": { "version": "1.0.3", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { "clone": "^1.0.2" } }, "defer-to-connect": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-lazy-prop": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { "version": "1.1.3", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { "object-keys": "^1.0.12" } }, "define-property": { "version": "2.0.2", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -24671,6 +25115,7 @@ }, "del": { "version": "6.0.0", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "requires": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -24683,16 +25128,20 @@ } }, "delayed-stream": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "deprecation": { - "version": "2.3.1" + "version": "2.3.1", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "destroy": { "version": "1.0.4", @@ -24700,10 +25149,12 @@ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, "detect-libc": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "detective-amd": { "version": "3.1.0", + "integrity": "sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==", "requires": { "ast-module-types": "^2.7.0", "escodegen": "^2.0.0", @@ -24713,6 +25164,7 @@ }, "detective-cjs": { "version": "3.1.1", + "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==", "requires": { "ast-module-types": "^2.4.0", "node-source-walk": "^4.0.0" @@ -24720,12 +25172,14 @@ }, "detective-es6": { "version": "2.2.1", + "integrity": "sha512-22z7MblxkhsIQGuALeGwCKEfqNy4WmgDGmfJCwdXbfDkVYIiIDmY513hiIWBvX3kCmzvvWE7RR7kAYxs01wwKQ==", "requires": { "node-source-walk": "^4.0.0" } }, "detective-less": { "version": "1.0.2", + "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", "requires": { "debug": "^4.0.0", "gonzales-pe": "^4.2.3", @@ -24734,6 +25188,7 @@ }, "detective-postcss": { "version": "4.0.0", + "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", "requires": { "debug": "^4.1.1", "is-url": "^1.2.4", @@ -24743,6 +25198,7 @@ }, "detective-sass": { "version": "3.0.1", + "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==", "requires": { "debug": "^4.1.1", "gonzales-pe": "^4.2.3", @@ -24751,6 +25207,7 @@ }, "detective-scss": { "version": "2.0.1", + "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==", "requires": { "debug": "^4.1.1", "gonzales-pe": "^4.2.3", @@ -24758,10 +25215,12 @@ } }, "detective-stylus": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=" }, "detective-typescript": { "version": "7.0.0", + "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==", "requires": { "@typescript-eslint/typescript-estree": "^4.8.2", "ast-module-types": "^2.7.1", @@ -24770,10 +25229,12 @@ }, "dependencies": { "@typescript-eslint/types": { - "version": "4.33.0" + "version": "4.33.0", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" }, "@typescript-eslint/typescript-estree": { "version": "4.33.0", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "requires": { "@typescript-eslint/types": "4.33.0", "@typescript-eslint/visitor-keys": "4.33.0", @@ -24786,28 +25247,33 @@ }, "@typescript-eslint/visitor-keys": { "version": "4.33.0", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "requires": { "@typescript-eslint/types": "4.33.0", "eslint-visitor-keys": "^2.0.0" } }, "typescript": { - "version": "3.9.10" + "version": "3.9.10", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" } } }, "diff": { "version": "5.0.0", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dir-glob": { "version": "3.0.1", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { "path-type": "^4.0.0" } }, "doctrine": { "version": "3.0.0", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -24815,6 +25281,7 @@ }, "dom-serializer": { "version": "1.3.2", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -24824,12 +25291,14 @@ "dependencies": { "entities": { "version": "2.2.0", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } } }, "domelementtype": { "version": "2.2.0", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domexception": { @@ -24851,6 +25320,7 @@ }, "domhandler": { "version": "4.3.0", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -24864,6 +25334,7 @@ }, "domutils": { "version": "2.8.0", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -24873,15 +25344,18 @@ }, "dot-prop": { "version": "6.0.1", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "requires": { "is-obj": "^2.0.0" } }, "dotenv": { - "version": "10.0.0" + "version": "10.0.0", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" }, "download": { "version": "8.0.0", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "requires": { "archive-type": "^4.0.0", "content-disposition": "^0.5.2", @@ -24897,10 +25371,12 @@ }, "dependencies": { "@sindresorhus/is": { - "version": "0.7.0" + "version": "0.7.0", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, "cacheable-request": { "version": "2.1.4", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "requires": { "clone-response": "1.0.2", "get-stream": "3.0.0", @@ -24912,27 +25388,32 @@ }, "dependencies": { "get-stream": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "lowercase-keys": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" } } }, "decompress-response": { "version": "3.3.0", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" } }, "get-stream": { "version": "4.1.0", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" } }, "got": { "version": "8.3.2", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "requires": { "@sindresorhus/is": "^0.7.0", "cacheable-request": "^2.1.1", @@ -24954,33 +25435,41 @@ }, "dependencies": { "get-stream": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "pify": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "http-cache-semantics": { - "version": "3.8.1" + "version": "3.8.1", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "is-plain-obj": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, "json-buffer": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "keyv": { "version": "3.0.0", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "requires": { "json-buffer": "3.0.0" } }, "lowercase-keys": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "make-dir": { "version": "2.1.0", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "requires": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -24988,6 +25477,7 @@ }, "normalize-url": { "version": "2.0.1", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "requires": { "prepend-http": "^2.0.0", "query-string": "^5.0.1", @@ -24995,31 +25485,37 @@ } }, "p-cancelable": { - "version": "0.4.1" + "version": "0.4.1", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" }, "p-event": { "version": "2.3.1", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", "requires": { "p-timeout": "^2.0.1" } }, "p-timeout": { "version": "2.0.1", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "requires": { "p-finally": "^1.0.0" } }, "responselike": { "version": "1.0.2", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { "lowercase-keys": "^1.0.0" } }, "semver": { - "version": "5.7.1" + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "sort-keys": { "version": "2.0.0", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "requires": { "is-plain-obj": "^1.0.0" } @@ -25027,7 +25523,8 @@ } }, "duplexer3": { - "version": "0.1.4" + "version": "0.1.4", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, "ecc-jsbn": { "version": "0.1.2", @@ -25041,44 +25538,55 @@ }, "ecdsa-sig-formatter": { "version": "1.0.11", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "ee-first": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.20" + "version": "1.4.20", + "integrity": "sha512-N7ZVNrdzX8NE90OXEFBMsBf3fp8P/vVDUER3WCUZjzC7OkNTXHVoF6W9qVhq8+dA8tGnbDajzUpj2ISNVVyj+Q==" }, "elegant-spinner": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" }, "elf-cam": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha512-tKSFTWOp5OwJSp6MKyQDX7umYDkvUuI8rxHXw8BuUQ63d9Trj9xLeo6SHyoTGSoZNNZVitFa+RuHHXuoAzN3Rw==" }, "emittery": { "version": "0.8.1", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "enabled": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encodeurl": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { "version": "1.4.4", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" } }, "enhance-visitors": { "version": "1.0.0", + "integrity": "sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=", "dev": true, "requires": { "lodash": "^4.13.1" @@ -25086,6 +25594,7 @@ }, "enquirer": { "version": "2.3.6", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { "ansi-colors": "^4.1.1" @@ -25093,32 +25602,39 @@ }, "entities": { "version": "3.0.1", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, "env-paths": { - "version": "2.2.1" + "version": "2.2.1", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "envinfo": { - "version": "7.8.1" + "version": "7.8.1", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" }, "equal-length": { "version": "1.0.1", + "integrity": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", "dev": true }, "error-ex": { "version": "1.3.2", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" } }, "error-stack-parser": { "version": "2.0.6", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "requires": { "stackframe": "^1.1.1" } }, "es-abstract": { "version": "1.19.1", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -25144,10 +25660,12 @@ } }, "es-module-lexer": { - "version": "0.9.3" + "version": "0.9.3", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-to-primitive": { "version": "1.2.1", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -25186,7 +25704,8 @@ } }, "es6-promisify": { - "version": "6.1.1" + "version": "6.1.1", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" }, "es6-symbol": { "version": "3.1.3", @@ -25211,19 +25730,24 @@ } }, "escalade": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-goat": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { "version": "2.0.0", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "requires": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -25234,6 +25758,7 @@ "dependencies": { "levn": { "version": "0.3.0", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -25241,6 +25766,7 @@ }, "optionator": { "version": "0.8.3", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -25251,14 +25777,17 @@ } }, "prelude-ls": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "source-map": { "version": "0.6.1", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, "type-check": { "version": "0.3.2", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { "prelude-ls": "~1.1.2" } @@ -25267,6 +25796,7 @@ }, "eslint": { "version": "7.32.0", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", @@ -25313,6 +25843,7 @@ "dependencies": { "@babel/code-frame": { "version": "7.12.11", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" @@ -25320,6 +25851,7 @@ }, "ajv": { "version": "6.12.6", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -25330,6 +25862,7 @@ }, "argparse": { "version": "1.0.10", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -25337,6 +25870,7 @@ }, "eslint-utils": { "version": "2.1.0", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -25344,12 +25878,14 @@ "dependencies": { "eslint-visitor-keys": { "version": "1.3.0", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } }, "globals": { "version": "13.12.0", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -25357,10 +25893,12 @@ }, "ignore": { "version": "4.0.6", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "js-yaml": { "version": "3.14.1", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -25369,16 +25907,19 @@ }, "json-schema-traverse": { "version": "0.4.1", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "type-fest": { "version": "0.20.2", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "eslint-ast-utils": { "version": "1.1.0", + "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", "dev": true, "requires": { "lodash.get": "^4.4.2", @@ -25387,16 +25928,19 @@ }, "eslint-config-prettier": { "version": "8.3.0", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "requires": {} }, "eslint-config-standard": { "version": "16.0.3", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.6", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { "debug": "^3.2.7", @@ -25405,6 +25949,7 @@ "dependencies": { "debug": { "version": "3.2.7", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -25414,6 +25959,7 @@ }, "eslint-import-resolver-typescript": { "version": "2.5.0", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "requires": { "debug": "^4.3.1", @@ -25425,6 +25971,7 @@ }, "eslint-module-utils": { "version": "2.7.1", + "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", "dev": true, "requires": { "debug": "^3.2.7", @@ -25434,6 +25981,7 @@ "dependencies": { "debug": { "version": "3.2.7", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -25441,6 +25989,7 @@ }, "find-up": { "version": "2.1.0", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" @@ -25448,6 +25997,7 @@ }, "locate-path": { "version": "2.0.0", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -25456,6 +26006,7 @@ }, "p-limit": { "version": "1.3.0", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" @@ -25463,6 +26014,7 @@ }, "p-locate": { "version": "2.0.0", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -25470,14 +26022,17 @@ }, "p-try": { "version": "1.0.0", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "path-exists": { "version": "3.0.0", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "pkg-dir": { "version": "2.0.0", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { "find-up": "^2.1.0" @@ -25487,6 +26042,7 @@ }, "eslint-plugin-ava": { "version": "13.1.0", + "integrity": "sha512-Bdwyqv4Xh+4ekqbk601HcZNcx8+9ClNGz5GdbC2hv977jUPHQPDMx2arTD3zi1EeyOnOG2Kx22Ow3wecbPCRjQ==", "dev": true, "requires": { "enhance-visitors": "^1.0.0", @@ -25501,10 +26057,12 @@ "dependencies": { "eslint-visitor-keys": { "version": "3.1.0", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", "dev": true }, "espree": { "version": "9.2.0", + "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", "dev": true, "requires": { "acorn": "^8.6.0", @@ -25516,6 +26074,7 @@ }, "eslint-plugin-cypress": { "version": "2.12.1", + "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", "dev": true, "requires": { "globals": "^11.12.0" @@ -25523,6 +26082,7 @@ }, "eslint-plugin-es": { "version": "3.0.1", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { "eslint-utils": "^2.0.0", @@ -25531,6 +26091,7 @@ "dependencies": { "eslint-utils": { "version": "2.1.0", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -25538,12 +26099,14 @@ }, "eslint-visitor-keys": { "version": "1.3.0", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } }, "eslint-plugin-eslint-comments": { "version": "3.2.0", + "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5", @@ -25552,12 +26115,14 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true } } }, "eslint-plugin-fp": { "version": "2.3.0", + "integrity": "sha1-N20qEIcQ6YGYC9w4deO5kg2gSJw=", "dev": true, "requires": { "create-eslint-index": "^1.0.0", @@ -25568,6 +26133,7 @@ }, "eslint-plugin-html": { "version": "6.2.0", + "integrity": "sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==", "dev": true, "requires": { "htmlparser2": "^7.1.2" @@ -25575,6 +26141,7 @@ }, "eslint-plugin-import": { "version": "2.25.3", + "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -25594,6 +26161,7 @@ "dependencies": { "debug": { "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -25601,6 +26169,7 @@ }, "doctrine": { "version": "2.1.0", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -25608,12 +26177,14 @@ }, "ms": { "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "eslint-plugin-markdown": { "version": "2.2.1", + "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", "dev": true, "requires": { "mdast-util-from-markdown": "^0.8.5" @@ -25621,6 +26192,7 @@ }, "eslint-plugin-node": { "version": "11.1.0", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "requires": { "eslint-plugin-es": "^3.0.0", @@ -25633,6 +26205,7 @@ "dependencies": { "eslint-utils": { "version": "2.1.0", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" @@ -25640,21 +26213,25 @@ }, "eslint-visitor-keys": { "version": "1.3.0", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "semver": { "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "eslint-plugin-promise": { "version": "5.2.0", + "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", "dev": true, "requires": {} }, "eslint-plugin-react": { "version": "7.27.1", + "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -25675,6 +26252,7 @@ "dependencies": { "doctrine": { "version": "2.1.0", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -25682,6 +26260,7 @@ }, "resolve": { "version": "2.0.0-next.3", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { "is-core-module": "^2.2.0", @@ -25690,12 +26269,14 @@ }, "semver": { "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "eslint-plugin-sort-destructure-keys": { "version": "1.4.0", + "integrity": "sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q==", "dev": true, "requires": { "natural-compare-lite": "^1.4.0" @@ -25703,6 +26284,7 @@ }, "eslint-plugin-unicorn": { "version": "40.0.0", + "integrity": "sha512-5GRXISfBk8jMmYk1eeNDw8zSRnWTxBjWkzx2Prre6E2/yLu2twozZ3EomLWCBu9nWms/ZE361BItyMQwfnG1qA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", @@ -25723,6 +26305,7 @@ }, "eslint-plugin-you-dont-need-lodash-underscore": { "version": "6.12.0", + "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==", "dev": true, "requires": { "kebab-case": "^1.0.0" @@ -25730,6 +26313,7 @@ }, "eslint-scope": { "version": "5.1.1", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -25738,22 +26322,26 @@ "dependencies": { "estraverse": { "version": "4.3.0", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } } }, "eslint-utils": { "version": "3.0.0", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" } }, "eslint-visitor-keys": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "espree": { "version": "7.3.1", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { "acorn": "^7.4.0", @@ -25763,23 +26351,28 @@ "dependencies": { "acorn": { "version": "7.4.1", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "eslint-visitor-keys": { "version": "1.3.0", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } }, "esprima": { - "version": "4.0.1" + "version": "4.0.1", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "espurify": { "version": "2.1.1", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", "dev": true }, "esquery": { "version": "1.4.0", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -25787,19 +26380,23 @@ }, "esrecurse": { "version": "4.3.0", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" } }, "estraverse": { - "version": "5.3.0" + "version": "5.3.0", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-walker": { - "version": "2.0.2" + "version": "2.0.2", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "esutils": { - "version": "2.0.3" + "version": "2.0.3", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -25817,10 +26414,12 @@ } }, "eventemitter3": { - "version": "4.0.7" + "version": "4.0.7", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "execa": { "version": "5.1.1", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -25834,10 +26433,12 @@ } }, "exit-on-epipe": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" }, "expand-brackets": { "version": "2.1.4", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -25850,30 +26451,35 @@ "dependencies": { "debug": { "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "define-property": { "version": "0.2.5", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -25882,12 +26488,14 @@ }, "is-data-descriptor": { "version": "0.1.4", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -25896,6 +26504,7 @@ }, "is-descriptor": { "version": "0.1.6", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -25903,13 +26512,16 @@ } }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "kind-of": { - "version": "5.1.0" + "version": "5.1.0", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -25974,6 +26586,7 @@ }, "express-logging": { "version": "1.1.1", + "integrity": "sha1-YoOWGMurW7NhDxocFIU1L+nSbCo=", "requires": { "on-headers": "^1.0.0" } @@ -26003,12 +26616,14 @@ }, "ext-list": { "version": "2.2.2", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "requires": { "mime-db": "^1.28.0" } }, "ext-name": { "version": "5.0.0", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "requires": { "ext-list": "^2.0.0", "sort-keys-length": "^1.0.0" @@ -26022,6 +26637,7 @@ }, "extend-shallow": { "version": "3.0.2", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -26029,6 +26645,7 @@ }, "external-editor": { "version": "3.1.0", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -26037,6 +26654,7 @@ }, "extglob": { "version": "2.0.4", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -26050,18 +26668,21 @@ "dependencies": { "define-property": { "version": "1.0.0", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" } }, "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" } } }, @@ -26072,16 +26693,20 @@ "dev": true }, "fast-deep-equal": { - "version": "3.1.3" + "version": "3.1.3", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-equals": { - "version": "2.0.4" + "version": "2.0.4", + "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==" }, "fast-glob": { "version": "3.2.10", + "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -26092,10 +26717,12 @@ }, "fast-json-stable-stringify": { "version": "2.1.0", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { - "version": "2.0.6" + "version": "2.0.6", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-redact": { "version": "3.0.2", @@ -26104,7 +26731,8 @@ "dev": true }, "fast-safe-stringify": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fastify-warning": { "version": "0.2.0", @@ -26114,21 +26742,25 @@ }, "fastq": { "version": "1.13.0", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } }, "fd-slicer": { "version": "1.1.0", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "requires": { "pend": "~1.2.0" } }, "fecha": { - "version": "4.2.1" + "version": "4.2.1", + "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, "fetch-node-website": { "version": "5.0.3", + "integrity": "sha512-O86T46FUWSOq4AWON39oaT8H90QFKAbmjfOVBhgaS87AFfeW00txz73KTv7QopPWtHBbGdI1S8cIT1VK1OQYLg==", "requires": { "chalk": "^4.0.0", "cli-progress": "^3.7.0", @@ -26140,6 +26772,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", @@ -26149,6 +26782,7 @@ "dependencies": { "chalk": { "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -26157,10 +26791,12 @@ } }, "@sindresorhus/is": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==" }, "@types/istanbul-reports": { "version": "1.1.2", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" @@ -26168,43 +26804,51 @@ }, "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "cacheable-lookup": { "version": "2.0.1", + "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "requires": { "@types/keyv": "^3.1.1", "keyv": "^4.0.0" } }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "decompress-response": { "version": "5.0.0", + "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", "requires": { "mimic-response": "^2.0.0" } }, "get-stream": { "version": "5.2.0", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } }, "got": { "version": "10.7.0", + "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "requires": { "@sindresorhus/is": "^2.0.0", "@szmarczak/http-timer": "^4.0.0", @@ -26224,10 +26868,12 @@ } }, "jest-get-type": { - "version": "25.2.6" + "version": "25.2.6", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", "camelcase": "^5.3.1", @@ -26239,6 +26885,7 @@ "dependencies": { "chalk": { "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -26247,10 +26894,12 @@ } }, "mimic-response": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" }, "pretty-format": { "version": "25.5.0", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", "ansi-regex": "^5.0.0", @@ -26259,51 +26908,62 @@ } }, "react-is": { - "version": "16.13.1" + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } }, "type-fest": { - "version": "0.10.0" + "version": "0.10.0", + "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==" } } }, "figures": { "version": "3.2.0", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" }, "dependencies": { "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "file-entry-cache": { "version": "6.0.1", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "file-size": { - "version": "0.0.5" + "version": "0.0.5", + "integrity": "sha1-BX1Dw6Ptc12j+Q1gUqs4Dx5tXjs=" }, "file-type": { - "version": "11.1.0" + "version": "11.1.0", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==" }, "file-uri-to-path": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "filename-reserved-regex": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" }, "filenamify": { "version": "3.0.0", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "requires": { "filename-reserved-regex": "^2.0.0", "strip-outer": "^1.0.0", @@ -26312,15 +26972,18 @@ }, "fill-range": { "version": "7.0.1", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { "to-regex-range": "^5.0.1" } }, "filter-obj": { - "version": "2.0.2" + "version": "2.0.2", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==" }, "finalhandler": { "version": "1.1.2", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -26333,20 +26996,24 @@ "dependencies": { "debug": { "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "statuses": { - "version": "1.5.0" + "version": "1.5.0", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, "find-up": { "version": "5.0.0", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -26354,6 +27021,7 @@ }, "flat-cache": { "version": "3.0.4", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -26368,35 +27036,43 @@ }, "flatted": { "version": "3.2.4", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "flatten": { - "version": "1.0.3" + "version": "1.0.3", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" }, "flush-write-stream": { "version": "2.0.0", + "integrity": "sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==", "requires": { "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "fn.name": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "folder-walker": { "version": "3.2.0", + "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", "requires": { "from2": "^2.1.0" } }, "follow-redirects": { - "version": "1.14.6" + "version": "1.14.6", + "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" }, "for-in": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "foreground-child": { "version": "2.0.0", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -26411,6 +27087,7 @@ }, "form-data": { "version": "4.0.0", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -26420,13 +27097,16 @@ }, "formidable": { "version": "1.2.6", + "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", "dev": true }, "forwarded": { - "version": "0.2.0" + "version": "0.2.0", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fragment-cache": { "version": "0.2.1", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { "map-cache": "^0.2.2" } @@ -26438,6 +27118,7 @@ }, "from2": { "version": "2.3.0", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -26445,6 +27126,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -26457,6 +27139,7 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -26465,15 +27148,18 @@ }, "from2-array": { "version": "0.0.4", + "integrity": "sha1-6vwWtl9uJxm81X/cGGkAWsEzLNY=", "requires": { "from2": "^2.0.3" } }, "fs-constants": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { "version": "10.0.0", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -26483,29 +27169,36 @@ }, "fs-minipass": { "version": "2.1.0", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { "minipass": "^3.0.0" } }, "fs.realpath": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "fuzzy": { - "version": "0.1.3" + "version": "0.1.3", + "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" }, "gauge": { "version": "3.0.2", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -26519,10 +27212,12 @@ } }, "gensync": { - "version": "1.0.0-beta.2" + "version": "1.0.0-beta.2", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-amd-module-type": { "version": "3.0.0", + "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==", "requires": { "ast-module-types": "^2.3.2", "node-source-walk": "^4.0.0" @@ -26530,10 +27225,12 @@ }, "get-caller-file": { "version": "1.0.3", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-intrinsic": { "version": "1.1.1", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -26541,13 +27238,16 @@ } }, "get-port": { - "version": "5.1.1" + "version": "5.1.1", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" }, "get-stream": { - "version": "6.0.1" + "version": "6.0.1", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { "version": "1.0.0", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -26555,7 +27255,8 @@ } }, "get-value": { - "version": "2.0.6" + "version": "2.0.6", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { "version": "0.1.7", @@ -26568,6 +27269,7 @@ }, "gh-release-fetch": { "version": "3.0.0", + "integrity": "sha512-P7Anj35Y4kI3RBoQ+M8Z2U9ittORYyRNLb55+5yGGXmm3Mazgkq4MPqsHH9S7+pNWFpE2BtAWeF6twzz6JY3Bw==", "requires": { "@types/download": "^8.0.0", "@types/node-fetch": "^2.1.6", @@ -26579,6 +27281,7 @@ }, "git-raw-commits": { "version": "2.0.11", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "requires": { "dargs": "^7.0.0", @@ -26589,21 +27292,25 @@ } }, "git-repo-info": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==" }, "gitconfiglocal": { "version": "2.1.0", + "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", "requires": { "ini": "^1.3.2" }, "dependencies": { "ini": { - "version": "1.3.8" + "version": "1.3.8", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" } } }, "glob": { "version": "7.2.0", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -26615,15 +27322,18 @@ }, "glob-parent": { "version": "5.1.2", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" } }, "glob-to-regexp": { - "version": "0.3.0" + "version": "0.3.0", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, "global-cache-dir": { "version": "2.0.0", + "integrity": "sha512-30pvU3e8muclEhc9tt+jRMaywOS3QfNdURflJ5Zv0bohjhcVQpBe5bwRHghGSJORLOKW81/n+3iJvHRHs+/S1Q==", "requires": { "cachedir": "^2.3.0", "path-exists": "^4.0.0" @@ -26631,6 +27341,7 @@ }, "global-dirs": { "version": "0.1.1", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { "ini": "^1.3.4" @@ -26638,15 +27349,18 @@ "dependencies": { "ini": { "version": "1.3.8", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true } } }, "globals": { - "version": "11.12.0" + "version": "11.12.0", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { "version": "11.0.4", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -26658,12 +27372,14 @@ }, "gonzales-pe": { "version": "4.3.0", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "requires": { "minimist": "^1.2.5" } }, "got": { "version": "11.8.3", + "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", "dev": true, "requires": { "@sindresorhus/is": "^4.0.0", @@ -26680,13 +27396,16 @@ } }, "graceful-fs": { - "version": "4.2.8" + "version": "4.2.8", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "graphql": { - "version": "16.1.0" + "version": "16.1.0", + "integrity": "sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw==" }, "graphviz": { "version": "0.0.9", + "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", "dev": true, "requires": { "temp": "~0.4.0" @@ -26751,40 +27470,48 @@ }, "hard-rejection": { "version": "2.1.0", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has": { "version": "1.0.3", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "has-bigints": { "version": "1.0.1", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-glob": { "version": "1.0.0", + "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "requires": { "is-glob": "^3.0.0" }, "dependencies": { "is-glob": { "version": "3.1.0", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { "is-extglob": "^2.1.0" } @@ -26792,29 +27519,35 @@ } }, "has-symbol-support-x": { - "version": "1.4.2" + "version": "1.4.2", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-to-string-tag-x": { "version": "1.4.1", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { "has-symbol-support-x": "^1.4.1" } }, "has-tostringtag": { "version": "1.0.0", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { "has-symbols": "^1.0.2" } }, "has-unicode": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -26823,6 +27556,7 @@ }, "has-values": { "version": "1.0.0", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -26830,12 +27564,14 @@ "dependencies": { "is-number": { "version": "3.0.0", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -26844,6 +27580,7 @@ }, "kind-of": { "version": "4.0.0", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { "is-buffer": "^1.1.5" } @@ -26851,33 +27588,39 @@ } }, "has-yarn": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, "hasbin": { "version": "1.2.3", + "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=", "requires": { "async": "~1.5" }, "dependencies": { "async": { - "version": "1.5.2" + "version": "1.5.2", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" } } }, "hasha": { "version": "5.2.2", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "requires": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" }, "dependencies": { "type-fest": { - "version": "0.8.1" + "version": "0.8.1", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, "hosted-git-info": { "version": "4.0.2", + "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -26894,10 +27637,12 @@ }, "html-escaper": { "version": "2.0.2", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlparser2": { "version": "7.2.0", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -26907,7 +27652,8 @@ } }, "http-cache-semantics": { - "version": "4.1.0" + "version": "4.1.0", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { "version": "1.8.1", @@ -26930,6 +27676,7 @@ }, "http-proxy": { "version": "1.18.1", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -26938,6 +27685,7 @@ }, "http-proxy-middleware": { "version": "2.0.1", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "requires": { "@types/http-proxy": "^1.17.5", "http-proxy": "^1.18.1", @@ -26965,6 +27713,7 @@ }, "http2-wrapper": { "version": "1.0.3", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { "quick-lru": "^5.1.1", @@ -26973,13 +27722,15 @@ }, "https-proxy-agent": { "version": "5.0.0", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { "agent-base": "6", "debug": "4" } }, "human-signals": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "husky": { "version": "7.0.4", @@ -26989,28 +27740,34 @@ }, "iconv-lite": { "version": "0.4.24", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { - "version": "1.2.1" + "version": "1.2.1", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.1.9" + "version": "5.1.9", + "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" }, "ignore-by-default": { "version": "2.0.0", + "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", "dev": true }, "ignore-walk": { "version": "3.0.4", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "requires": { "minimatch": "^3.0.4" } }, "import-fresh": { "version": "3.3.0", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -27019,15 +27776,18 @@ "dependencies": { "resolve-from": { "version": "4.0.0", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } }, "import-lazy": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "import-local": { "version": "3.0.3", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -27036,6 +27796,7 @@ "dependencies": { "find-up": { "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", @@ -27044,6 +27805,7 @@ }, "locate-path": { "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" @@ -27051,6 +27813,7 @@ }, "p-limit": { "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -27058,6 +27821,7 @@ }, "p-locate": { "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" @@ -27065,6 +27829,7 @@ }, "pkg-dir": { "version": "4.2.0", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" @@ -27074,32 +27839,40 @@ }, "import-modules": { "version": "2.1.0", + "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", "dev": true }, "imurmurhash": { - "version": "0.1.4" + "version": "0.1.4", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "indexes-of": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "inflight": { "version": "1.0.6", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.4" + "version": "2.0.4", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" }, "inquirer": { "version": "6.5.2", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "requires": { "ansi-escapes": "^3.2.0", "chalk": "^2.4.2", @@ -27117,19 +27890,23 @@ }, "dependencies": { "ansi-escapes": { - "version": "3.2.0" + "version": "3.2.0", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { - "version": "4.1.0" + "version": "4.1.0", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -27138,36 +27915,44 @@ }, "cli-cursor": { "version": "2.1.0", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" } }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "2.0.0", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { "escape-string-regexp": "^1.0.5" } }, "has-flag": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "is-fullwidth-code-point": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "mimic-fn": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" } }, "restore-cursor": { "version": "2.0.0", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -27175,16 +27960,19 @@ }, "string-width": { "version": "2.1.1", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" } @@ -27193,12 +27981,14 @@ }, "strip-ansi": { "version": "5.2.0", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" } }, "supports-color": { "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -27207,6 +27997,7 @@ }, "inquirer-autocomplete-prompt": { "version": "1.4.0", + "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", "requires": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", @@ -27217,17 +28008,20 @@ "dependencies": { "ansi-escapes": { "version": "4.3.2", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" } }, "type-fest": { - "version": "0.21.3" + "version": "0.21.3", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "internal-slot": { "version": "1.0.3", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { "get-intrinsic": "^1.1.0", @@ -27237,6 +28031,7 @@ }, "into-stream": { "version": "3.1.0", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "requires": { "from2": "^2.1.1", "p-is-promise": "^1.1.0" @@ -27249,24 +28044,29 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.1" + "version": "1.9.1", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "irregular-plurals": { "version": "3.3.0", + "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true }, "is-accessor-descriptor": { "version": "1.0.0", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { "kind-of": "^6.0.0" } }, "is-alphabetical": { "version": "1.0.4", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumerical": { "version": "1.0.4", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -27274,10 +28074,12 @@ } }, "is-arrayish": { - "version": "0.2.1" + "version": "0.2.1", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-bigint": { "version": "1.0.4", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { "has-bigints": "^1.0.1" @@ -27285,12 +28087,14 @@ }, "is-binary-path": { "version": "2.1.0", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.1.2", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -27298,20 +28102,24 @@ } }, "is-buffer": { - "version": "1.1.6" + "version": "1.1.6", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "3.1.0", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", "requires": { "builtin-modules": "^3.0.0" } }, "is-callable": { "version": "1.2.4", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-ci": { "version": "3.0.1", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { "ci-info": "^3.2.0" @@ -27319,18 +28127,21 @@ }, "is-core-module": { "version": "2.8.0", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } }, "is-data-descriptor": { "version": "1.0.0", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { "kind-of": "^6.0.0" } }, "is-date-object": { "version": "1.0.5", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -27338,10 +28149,12 @@ }, "is-decimal": { "version": "1.0.4", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { "version": "1.0.2", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -27349,20 +28162,24 @@ } }, "is-docker": { - "version": "2.2.1" + "version": "2.2.1", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-error": { "version": "2.2.2", + "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", "dev": true }, "is-extendable": { "version": "1.0.1", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { "is-plain-object": "^2.0.4" }, "dependencies": { "is-plain-object": { "version": "2.0.4", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" } @@ -27370,23 +28187,28 @@ } }, "is-extglob": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } }, "is-hexadecimal": { "version": "1.0.4", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-installed-globally": { "version": "0.4.0", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -27394,6 +28216,7 @@ "dependencies": { "global-dirs": { "version": "3.0.0", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "requires": { "ini": "2.0.0" } @@ -27401,7 +28224,8 @@ } }, "is-interactive": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-module": { "version": "1.0.0", @@ -27409,51 +28233,64 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=" }, "is-natural-number": { - "version": "4.0.1" + "version": "4.0.1", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "is-negative-zero": { "version": "2.0.2", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-npm": { - "version": "5.0.0" + "version": "5.0.0", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" }, "is-number": { - "version": "7.0.0" + "version": "7.0.0", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.6", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-obj": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-object": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" }, "is-observable": { "version": "1.1.0", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "requires": { "symbol-observable": "^1.1.0" } }, "is-path-cwd": { - "version": "2.2.0" + "version": "2.2.0", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, "is-path-inside": { - "version": "3.0.3" + "version": "3.0.3", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, "is-plain-object": { - "version": "5.0.0" + "version": "5.0.0", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" }, "is-promise": { "version": "4.0.0", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "dev": true }, "is-reference": { @@ -27466,6 +28303,7 @@ }, "is-regex": { "version": "1.1.4", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -27473,17 +28311,21 @@ } }, "is-retry-allowed": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, "is-shared-array-buffer": { "version": "1.0.1", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-stream": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -27491,6 +28333,7 @@ }, "is-symbol": { "version": "1.0.4", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { "has-symbols": "^1.0.2" @@ -27498,50 +28341,62 @@ }, "is-text-path": { "version": "1.0.1", + "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { "text-extensions": "^1.0.0" } }, "is-typedarray": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unicode-supported": { - "version": "0.1.0" + "version": "0.1.0", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-url": { - "version": "1.2.4" + "version": "1.2.4", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, "is-weakref": { "version": "1.0.2", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { "call-bind": "^1.0.2" } }, "is-windows": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { "version": "2.2.0", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { "is-docker": "^2.0.0" } }, "is-yarn-global": { - "version": "0.3.0" + "version": "0.3.0", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "iserror": { - "version": "0.0.2" + "version": "0.0.2", + "integrity": "sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U=" }, "isexe": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { - "version": "3.0.1" + "version": "3.0.1", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { "version": "0.1.2", @@ -27551,10 +28406,12 @@ }, "istanbul-lib-coverage": { "version": "3.2.0", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-report": { "version": "3.0.0", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", @@ -27564,6 +28421,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -27573,6 +28431,7 @@ }, "istanbul-reports": { "version": "3.1.1", + "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -27581,16 +28440,19 @@ }, "isurl": { "version": "1.0.0", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { "has-to-string-tag-x": "^1.2.0", "is-object": "^1.0.1" } }, "jest-get-type": { - "version": "26.3.0" + "version": "26.3.0", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" }, "jest-validate": { "version": "26.6.2", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "requires": { "@jest/types": "^26.6.2", "camelcase": "^6.0.0", @@ -27621,13 +28483,16 @@ } }, "js-string-escape": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, "js-tokens": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" } @@ -27772,17 +28637,21 @@ } }, "jsesc": { - "version": "2.5.2" + "version": "2.5.2", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { - "version": "3.0.1" + "version": "3.0.1", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-parse-better-errors": { "version": "1.0.2", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-parse-even-better-errors": { - "version": "2.3.1" + "version": "2.3.1", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { "version": "0.4.0", @@ -27791,10 +28660,12 @@ "dev": true }, "json-schema-traverse": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json-stringify-safe": { @@ -27805,12 +28676,14 @@ }, "json5": { "version": "2.2.0", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" } }, "jsonfile": { "version": "6.1.0", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", @@ -27819,10 +28692,12 @@ }, "jsonparse": { "version": "1.3.1", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { "version": "1.3.5", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", @@ -27831,6 +28706,7 @@ }, "jsonwebtoken": { "version": "8.5.1", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, "requires": { "jws": "^3.2.2", @@ -27847,6 +28723,7 @@ "dependencies": { "semver": { "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -27865,6 +28742,7 @@ }, "jsx-ast-utils": { "version": "3.2.1", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { "array-includes": "^3.1.3", @@ -27872,14 +28750,17 @@ } }, "junk": { - "version": "3.1.0" + "version": "3.1.0", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==" }, "just-extend": { "version": "4.2.1", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "jwa": { "version": "1.4.1", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", @@ -27889,6 +28770,7 @@ }, "jws": { "version": "3.2.2", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "requires": { "jwa": "^1.4.1", @@ -27896,14 +28778,17 @@ } }, "jwt-decode": { - "version": "3.1.2" + "version": "3.1.2", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "kebab-case": { "version": "1.0.1", + "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==", "dev": true }, "keep-func-props": { "version": "3.0.1", + "integrity": "sha512-5AsrYCiCHIUxuw/G2r7xcoTW/NTf5IFwAe1fkwf2ifM/KZzEojaTylh1Pppu60oEixww1rfcWJaRGLi3eAJsrQ==", "requires": { "mimic-fn": "^3.1.0" } @@ -27919,12 +28804,14 @@ }, "keyv": { "version": "4.0.4", + "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", "requires": { "json-buffer": "3.0.1" } }, "kind-of": { - "version": "6.0.3" + "version": "6.0.3", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { "version": "4.1.4", @@ -27933,10 +28820,12 @@ "dev": true }, "kuler": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "lambda-local": { "version": "2.0.0", + "integrity": "sha512-5Z7ZEhqVYJSm3djoq7QLDkEk7Ao+jNYbARo3nk3wtjKpgCnEbzOuraxDPDWg7OlZ4JKcsRDP+wNLeORMdbF2ow==", "requires": { "commander": "^7.2.0", "dotenv": "^10.0.0", @@ -27944,24 +28833,28 @@ }, "dependencies": { "commander": { - "version": "7.2.0" + "version": "7.2.0", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, "latest-version": { "version": "5.1.0", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "requires": { "package-json": "^6.3.0" } }, "lazystream": { "version": "1.0.1", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" }, "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -27974,6 +28867,7 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -27981,10 +28875,12 @@ } }, "leven": { - "version": "3.1.0" + "version": "3.1.0", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.4.1", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -27992,10 +28888,12 @@ } }, "lines-and-columns": { - "version": "1.2.4" + "version": "1.2.4", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "listr": { "version": "0.14.3", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "requires": { "@samverschueren/stream-to-observable": "^0.3.0", "is-observable": "^1.1.0", @@ -28009,21 +28907,26 @@ }, "dependencies": { "is-promise": { - "version": "2.2.2" + "version": "2.2.2", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-stream": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "p-map": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "listr-silent-renderer": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" }, "listr-update-renderer": { "version": "0.5.0", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "requires": { "chalk": "^1.1.3", "cli-truncate": "^0.2.1", @@ -28036,16 +28939,20 @@ }, "dependencies": { "ansi-escapes": { - "version": "3.2.0" + "version": "3.2.0", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "2.2.1" + "version": "2.2.1", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "chalk": { "version": "1.1.3", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -28056,44 +28963,52 @@ }, "cli-cursor": { "version": "2.1.0", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" } }, "cli-truncate": { "version": "0.2.1", + "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", "requires": { "slice-ansi": "0.0.4", "string-width": "^1.0.1" } }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "1.7.0", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { "escape-string-regexp": "^1.0.5", "object-assign": "^4.1.0" } }, "indent-string": { - "version": "3.2.0" + "version": "3.2.0", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" }, "is-fullwidth-code-point": { "version": "1.0.0", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" } }, "log-symbols": { "version": "1.0.2", + "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "requires": { "chalk": "^1.0.0" } }, "log-update": { "version": "2.3.0", + "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "requires": { "ansi-escapes": "^3.0.0", "cli-cursor": "^2.0.0", @@ -28101,26 +29016,31 @@ } }, "mimic-fn": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" } }, "restore-cursor": { "version": "2.0.0", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" } }, "slice-ansi": { - "version": "0.0.4" + "version": "0.0.4", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" }, "string-width": { "version": "1.0.2", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -28129,28 +29049,34 @@ }, "strip-ansi": { "version": "3.0.1", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" } }, "supports-color": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "wrap-ansi": { "version": "3.0.1", + "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "is-fullwidth-code-point": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "2.1.1", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -28158,6 +29084,7 @@ }, "strip-ansi": { "version": "4.0.0", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" } @@ -28168,6 +29095,7 @@ }, "listr-verbose-renderer": { "version": "0.5.0", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", "requires": { "chalk": "^2.4.1", "cli-cursor": "^2.1.0", @@ -28177,12 +29105,14 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -28191,33 +29121,40 @@ }, "cli-cursor": { "version": "2.1.0", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" } }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "2.0.0", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { "escape-string-regexp": "^1.0.5" } }, "has-flag": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "mimic-fn": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" } }, "restore-cursor": { "version": "2.0.0", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", "signal-exit": "^3.0.2" @@ -28225,6 +29162,7 @@ }, "supports-color": { "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -28233,6 +29171,7 @@ }, "load-json-file": { "version": "5.3.0", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "requires": { "graceful-fs": "^4.1.15", @@ -28244,6 +29183,7 @@ "dependencies": { "parse-json": { "version": "4.0.0", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -28252,16 +29192,19 @@ }, "strip-bom": { "version": "3.0.0", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "type-fest": { "version": "0.3.1", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true } } }, "locate-path": { "version": "6.0.0", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { "p-locate": "^5.0.0" } @@ -28276,10 +29219,12 @@ } }, "lodash": { - "version": "4.17.21" + "version": "4.17.21", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { - "version": "4.3.0" + "version": "4.3.0", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, "lodash.debounce": { "version": "4.0.8", @@ -28287,53 +29232,67 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, "lodash.deburr": { - "version": "4.1.0" + "version": "4.1.0", + "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" }, "lodash.defaults": { - "version": "4.2.0" + "version": "4.2.0", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, "lodash.difference": { - "version": "4.5.0" + "version": "4.5.0", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, "lodash.flatten": { - "version": "4.4.0" + "version": "4.4.0", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, "lodash.get": { "version": "4.4.2", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.includes": { "version": "4.3.0", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", "dev": true }, "lodash.isboolean": { "version": "3.0.3", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", "dev": true }, "lodash.isempty": { - "version": "4.4.0" + "version": "4.4.0", + "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, "lodash.isinteger": { "version": "4.0.4", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", "dev": true }, "lodash.isnumber": { "version": "3.0.3", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", "dev": true }, "lodash.isplainobject": { - "version": "4.0.6" + "version": "4.0.6", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, "lodash.isstring": { "version": "4.0.1", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, "lodash.merge": { "version": "4.6.2", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.once": { "version": "4.1.1", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, "lodash.sortby": { @@ -28343,21 +29302,26 @@ "dev": true }, "lodash.transform": { - "version": "4.6.0" + "version": "4.6.0", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" }, "lodash.truncate": { "version": "4.4.2", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "lodash.union": { - "version": "4.6.0" + "version": "4.6.0", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "lodash.zip": { "version": "4.2.0", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, "log-process-errors": { "version": "6.3.0", + "integrity": "sha512-dHwGgWFuz9LUDoLIG7E0SlDurosfZEpgNLJMPzNL9GPdyh4Wdm5RJlQbuqy3Pj2wOcbDzykeTCBEqyrwriqPnA==", "requires": { "chalk": "^4.1.0", "figures": "^3.2.0", @@ -28371,6 +29335,7 @@ }, "log-symbols": { "version": "4.1.0", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -28378,6 +29343,7 @@ }, "log-update": { "version": "5.0.0", + "integrity": "sha512-HovF3knyZX9sleS0OkSJ6f53JEpbzcbomC6/WJ3iuGK8i6CRb6WZ542gO2F3pdQK8hwlijddDefVFhlMpwkOSQ==", "requires": { "ansi-escapes": "^5.0.0", "cli-cursor": "^4.0.0", @@ -28386,25 +29352,31 @@ }, "dependencies": { "ansi-regex": { - "version": "6.0.1" + "version": "6.0.1", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { - "version": "6.1.0" + "version": "6.1.0", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" }, "cli-cursor": { "version": "4.0.0", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "requires": { "restore-cursor": "^4.0.0" } }, "emoji-regex": { - "version": "9.2.2" + "version": "9.2.2", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "is-fullwidth-code-point": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "restore-cursor": { "version": "4.0.0", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -28412,6 +29384,7 @@ }, "slice-ansi": { "version": "5.0.0", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "requires": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -28419,6 +29392,7 @@ }, "string-width": { "version": "5.0.1", + "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", "requires": { "emoji-regex": "^9.2.2", "is-fullwidth-code-point": "^4.0.0", @@ -28427,12 +29401,14 @@ }, "strip-ansi": { "version": "7.0.1", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "requires": { "ansi-regex": "^6.0.1" } }, "wrap-ansi": { "version": "8.0.1", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -28443,6 +29419,7 @@ }, "logform": { "version": "2.3.2", + "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==", "requires": { "colors": "1.4.0", "fecha": "^4.2.0", @@ -28453,6 +29430,7 @@ }, "loose-envify": { "version": "1.4.0", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -28486,10 +29464,12 @@ } }, "lowercase-keys": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "lru-cache": { "version": "6.0.0", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" } @@ -28519,10 +29499,12 @@ } }, "luxon": { - "version": "1.28.0" + "version": "1.28.0", + "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==" }, "macos-release": { - "version": "2.5.0" + "version": "2.5.0", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==" }, "magic-string": { "version": "0.25.7", @@ -28534,33 +29516,40 @@ }, "make-dir": { "version": "3.1.0", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "make-error": { - "version": "1.3.6" + "version": "1.3.6", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "map-age-cleaner": { "version": "0.1.3", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { "p-defer": "^1.0.0" } }, "map-cache": { - "version": "0.2.2" + "version": "0.2.2", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { - "version": "4.3.0" + "version": "4.3.0", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" }, "map-visit": { "version": "1.0.0", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { "object-visit": "^1.0.0" } @@ -28573,16 +29562,19 @@ }, "matcher": { "version": "3.0.0", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "requires": { "escape-string-regexp": "^4.0.0" } }, "maxstache": { - "version": "1.0.7" + "version": "1.0.7", + "integrity": "sha1-IjHVGAung9Xs/DHEX+2seuQnaYQ=" }, "maxstache-stream": { "version": "1.0.4", + "integrity": "sha1-nH9cq35f3S2Q2oYUO06WMeoygEA=", "requires": { "maxstache": "^1.0.0", "pump": "^1.0.0", @@ -28592,6 +29584,7 @@ "dependencies": { "pump": { "version": "1.0.3", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -28599,6 +29592,7 @@ }, "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -28611,18 +29605,21 @@ }, "split2": { "version": "1.1.1", + "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=", "requires": { "through2": "~2.0.0" } }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "through2": { "version": "2.0.5", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -28632,12 +29629,14 @@ }, "md5-hex": { "version": "3.0.1", + "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "requires": { "blueimp-md5": "^2.10.0" } }, "mdast-util-from-markdown": { "version": "0.8.5", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "requires": { "@types/mdast": "^3.0.0", @@ -28649,13 +29648,16 @@ }, "mdast-util-to-string": { "version": "2.0.0", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true }, "media-typer": { - "version": "0.3.0" + "version": "0.3.0", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { "version": "8.1.1", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { "map-age-cleaner": "^0.1.3", @@ -28663,7 +29665,8 @@ } }, "memoize-one": { - "version": "6.0.0" + "version": "6.0.0", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "memoizee": { "version": "0.4.15", @@ -28691,10 +29694,12 @@ }, "memorystream": { "version": "0.3.1", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, "meow": { "version": "8.1.2", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -28712,45 +29717,56 @@ "dependencies": { "type-fest": { "version": "0.18.1", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true } } }, "merge-descriptors": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-options": { "version": "3.0.4", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "requires": { "is-plain-obj": "^2.1.0" }, "dependencies": { "is-plain-obj": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" } } }, "merge-stream": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { - "version": "1.4.1" + "version": "1.4.1", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micro-api-client": { - "version": "3.3.0" + "version": "3.3.0", + "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==" }, "micro-memoize": { - "version": "4.0.9" + "version": "4.0.9", + "integrity": "sha512-Z2uZi/IUMGQDCXASdujXRqrXXEwSY0XffUrAOllhqzQI3wpUyZbiZTiE2JuYC0HSG2G7DbCS5jZmsEKEGZuemg==" }, "micro-spelling-correcter": { "version": "1.1.1", + "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", "dev": true }, "micromark": { "version": "2.11.4", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "requires": { "debug": "^4.0.0", @@ -28759,44 +29775,54 @@ }, "micromatch": { "version": "4.0.4", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" } }, "mime": { - "version": "1.6.0" + "version": "1.6.0", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.51.0" + "version": "1.51.0", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { "version": "2.1.34", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { "mime-db": "1.51.0" } }, "mimic-fn": { - "version": "3.1.0" + "version": "3.1.0", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" }, "mimic-response": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "min-indent": { "version": "1.0.1", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "minimatch": { "version": "3.0.4", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.5" + "version": "1.2.5", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.1.0", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -28806,22 +29832,26 @@ "dependencies": { "arrify": { "version": "1.0.1", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "is-plain-obj": { "version": "1.1.0", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true } } }, "minipass": { "version": "3.1.6", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "requires": { "yallist": "^4.0.0" } }, "minizlib": { "version": "2.1.2", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -28829,20 +29859,24 @@ }, "mixin-deep": { "version": "1.3.2", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" } }, "mkdirp": { - "version": "1.0.4" + "version": "1.0.4", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mock-fs": { "version": "5.1.2", + "integrity": "sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A==", "dev": true }, "mock-require": { "version": "3.0.3", + "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", "dev": true, "requires": { "get-caller-file": "^1.0.2", @@ -28851,6 +29885,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -28860,6 +29895,7 @@ }, "module-definition": { "version": "3.3.1", + "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==", "requires": { "ast-module-types": "^2.7.1", "node-source-walk": "^4.0.0" @@ -28867,6 +29903,7 @@ }, "moize": { "version": "6.1.0", + "integrity": "sha512-WrMcM+C2Jy+qyOC/UMhA3BCHGowxV34dhDZnDNfxsREW/8N+33SFjmc23Q61Xv1WUthUA1vYopTitP1sZ5jkeg==", "requires": { "fast-equals": "^2.0.1", "micro-memoize": "^4.0.9" @@ -28874,15 +29911,18 @@ }, "move-file": { "version": "2.1.0", + "integrity": "sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA==", "requires": { "path-exists": "^4.0.0" } }, "ms": { - "version": "2.1.3" + "version": "2.1.3", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multiparty": { "version": "4.2.2", + "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==", "requires": { "http-errors": "~1.8.0", "safe-buffer": "5.2.1", @@ -28890,12 +29930,14 @@ }, "dependencies": { "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "mute-stream": { - "version": "0.0.7" + "version": "0.0.7", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "mv": { "version": "2.1.1", @@ -28942,10 +29984,12 @@ } }, "nanoid": { - "version": "3.1.30" + "version": "3.1.30", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" }, "nanomatch": { "version": "1.2.13", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -28962,10 +30006,12 @@ }, "natural-compare": { "version": "1.4.0", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "natural-compare-lite": { "version": "1.4.0", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", "dev": true }, "ncp": { @@ -28976,6 +30022,7 @@ }, "needle": { "version": "2.9.1", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -28984,6 +30031,7 @@ "dependencies": { "debug": { "version": "3.2.7", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -28991,7 +30039,8 @@ } }, "negotiator": { - "version": "0.6.2" + "version": "0.6.2", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { "version": "2.6.2", @@ -29000,7 +30049,8 @@ "dev": true }, "nested-error-stacks": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "netlify": { "version": "10.1.2", @@ -29038,11 +30088,20 @@ } }, "netlify-onegraph-internal": { - "version": "0.0.10", + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/netlify-onegraph-internal/-/netlify-onegraph-internal-0.0.15.tgz", + "integrity": "sha512-PlUro29zk/D+9/8NLQOx8Qw58KWvZo/42uR+7YMqSx9pMtgvtqKWqpAGGf0iCy4eAwe/XLT/eCQR6k/dIBbZHw==", "requires": { - "graphql": "16.1.0", + "graphql": "16.0.0", "node-fetch": "^2.6.0", "uuid": "^8.3.2" + }, + "dependencies": { + "graphql": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.0.0.tgz", + "integrity": "sha512-n9NxoRfwnpYBZB/WJ7L166gyrShuZ8qYgVaX8oxVyELcJfAwkvwPt6WlYIl90WRlzqDjaNWvLmNOSnKs5llZWQ==" + } } }, "netlify-redirect-parser": { @@ -29057,7 +30116,8 @@ } }, "netlify-redirector": { - "version": "0.2.1" + "version": "0.2.1", + "integrity": "sha512-17vDR9p1Loanp+vd57y+b6WlKb5X+qb0LZ44oTYsKJbdonz4Md+Ybv1lzH1w1aKm5YWWXHR8LMpWyY9bjlAJKw==" }, "next-tick": { "version": "1.1.0", @@ -29067,10 +30127,12 @@ }, "nice-try": { "version": "1.0.5", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nise": { "version": "5.1.0", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0", @@ -29082,6 +30144,7 @@ "dependencies": { "@sinonjs/fake-timers": { "version": "7.1.2", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { "@sinonjs/commons": "^1.7.0" @@ -29089,10 +30152,12 @@ }, "isarray": { "version": "0.0.1", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "path-to-regexp": { "version": "1.8.0", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { "isarray": "0.0.1" @@ -29102,15 +30167,18 @@ }, "node-fetch": { "version": "2.6.6", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", "requires": { "whatwg-url": "^5.0.0" } }, "node-gyp-build": { - "version": "4.3.0" + "version": "4.3.0", + "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" }, "node-pre-gyp": { "version": "0.13.0", + "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", @@ -29125,29 +30193,35 @@ }, "dependencies": { "ansi-regex": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "aproba": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { "version": "1.1.7", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "chownr": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "fs-minipass": { "version": "1.2.7", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { "minipass": "^2.6.0" } }, "gauge": { "version": "2.7.4", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -29161,12 +30235,14 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" } }, "minipass": { "version": "2.9.0", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -29174,18 +30250,21 @@ }, "minizlib": { "version": "1.3.3", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { "minipass": "^2.9.0" } }, "mkdirp": { "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" } }, "nopt": { "version": "4.0.3", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -29193,6 +30272,7 @@ }, "npmlog": { "version": "4.1.2", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -29202,6 +30282,7 @@ }, "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -29214,21 +30295,25 @@ }, "rimraf": { "version": "2.7.1", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } }, "semver": { - "version": "5.7.1" + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "string-width": { "version": "1.0.2", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -29237,12 +30322,14 @@ }, "strip-ansi": { "version": "3.0.1", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" } }, "tar": { "version": "4.4.19", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "requires": { "chownr": "^1.1.4", "fs-minipass": "^1.2.7", @@ -29254,26 +30341,31 @@ }, "dependencies": { "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "yallist": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "node-releases": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "node-source-walk": { "version": "4.2.0", + "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==", "requires": { "@babel/parser": "^7.0.0" } }, "node-version-alias": { "version": "1.0.1", + "integrity": "sha512-E9EhoJkpIIZyYplB298W8ZfhcojQrnKnUPcaOgJqVqICUZwPZkuj10nTzEscwdziOOj545v4tGPvNBG3ieUbSw==", "requires": { "all-node-versions": "^8.0.0", "filter-obj": "^2.0.1", @@ -29285,6 +30377,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", @@ -29294,6 +30387,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" @@ -29301,15 +30395,18 @@ }, "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -29317,18 +30414,22 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "jest-get-type": { - "version": "25.2.6" + "version": "25.2.6", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", "camelcase": "^5.3.1", @@ -29340,6 +30441,7 @@ }, "pretty-format": { "version": "25.5.0", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", "ansi-regex": "^5.0.0", @@ -29348,10 +30450,12 @@ } }, "react-is": { - "version": "16.13.1" + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -29359,16 +30463,19 @@ } }, "noop2": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-S2NgFemIK1R4PAK0EvaZ2MXNCls=" }, "nopt": { "version": "5.0.0", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { "abbrev": "1" } }, "normalize-node-version": { "version": "10.0.0", + "integrity": "sha512-/gVbS/qAnowVxr2fJy3F0MxmCvx8QdXJDl8XUE7HT3vsDeDjQfZkX9OiPahF+51Hgy93cKG1hP6uyBjQsMCvWQ==", "requires": { "all-node-versions": "^8.0.0", "filter-obj": "^2.0.1", @@ -29378,6 +30485,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", @@ -29387,6 +30495,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", "@types/istanbul-lib-report": "*" @@ -29394,15 +30503,18 @@ }, "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -29410,18 +30522,22 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "jest-get-type": { - "version": "25.2.6" + "version": "25.2.6", + "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", "camelcase": "^5.3.1", @@ -29433,6 +30549,7 @@ }, "pretty-format": { "version": "25.5.0", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", "ansi-regex": "^5.0.0", @@ -29441,10 +30558,12 @@ } }, "react-is": { - "version": "16.13.1" + "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -29453,6 +30572,7 @@ }, "normalize-package-data": { "version": "3.0.3", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -29462,22 +30582,27 @@ } }, "normalize-path": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { - "version": "6.1.0" + "version": "6.1.0", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-bundled": { "version": "1.1.2", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "requires": { "npm-normalize-package-bin": "^1.0.1" } }, "npm-normalize-package-bin": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "npm-packlist": { "version": "1.4.8", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -29486,6 +30611,7 @@ }, "npm-run-all": { "version": "4.1.5", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -29501,6 +30627,7 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -29508,6 +30635,7 @@ }, "chalk": { "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -29517,6 +30645,7 @@ }, "cross-spawn": { "version": "6.0.5", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { "nice-try": "^1.0.4", @@ -29528,18 +30657,22 @@ }, "escape-string-regexp": { "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "hosted-git-info": { "version": "2.8.9", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "load-json-file": { "version": "4.0.0", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -29550,6 +30683,7 @@ }, "normalize-package-data": { "version": "2.5.0", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -29560,6 +30694,7 @@ }, "parse-json": { "version": "4.0.0", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -29568,10 +30703,12 @@ }, "path-key": { "version": "2.0.1", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-type": { "version": "3.0.0", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" @@ -29579,14 +30716,17 @@ }, "pidtree": { "version": "0.3.1", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true }, "pify": { "version": "3.0.0", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "read-pkg": { "version": "3.0.0", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -29596,10 +30736,12 @@ }, "semver": { "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "shebang-command": { "version": "1.2.0", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -29607,14 +30749,17 @@ }, "shebang-regex": { "version": "1.0.0", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "strip-bom": { "version": "3.0.0", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "supports-color": { "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -29622,6 +30767,7 @@ }, "which": { "version": "1.3.1", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -29631,12 +30777,14 @@ }, "npm-run-path": { "version": "4.0.1", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { "path-key": "^3.0.0" } }, "npmlog": { "version": "5.0.1", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "requires": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -29645,7 +30793,8 @@ } }, "number-is-nan": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { "version": "2.2.0", @@ -29660,10 +30809,12 @@ "dev": true }, "object-assign": { - "version": "4.1.1" + "version": "4.1.1", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-copy": { "version": "0.1.0", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -29672,24 +30823,28 @@ "dependencies": { "define-property": { "version": "0.2.5", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" } }, "is-data-descriptor": { "version": "0.1.4", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" } }, "is-descriptor": { "version": "0.1.6", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -29697,12 +30852,14 @@ }, "dependencies": { "kind-of": { - "version": "5.1.0" + "version": "5.1.0", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -29710,19 +30867,23 @@ } }, "object-inspect": { - "version": "1.11.1" + "version": "1.11.1", + "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==" }, "object-keys": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { "isobject": "^3.0.0" } }, "object.assign": { "version": "4.1.2", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -29732,6 +30893,7 @@ }, "object.entries": { "version": "1.1.5", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29741,6 +30903,7 @@ }, "object.fromentries": { "version": "2.0.5", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29750,6 +30913,7 @@ }, "object.hasown": { "version": "1.1.0", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -29758,12 +30922,14 @@ }, "object.pick": { "version": "1.3.0", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "^3.0.1" } }, "object.values": { "version": "1.1.5", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -29772,42 +30938,50 @@ } }, "omit.js": { - "version": "2.0.2" + "version": "2.0.2", + "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" }, "on-finished": { "version": "2.3.0", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" } }, "on-headers": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" } }, "one-time": { "version": "1.0.0", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "requires": { "fn.name": "1.x.x" } }, "onetime": { "version": "5.1.2", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" }, "dependencies": { "mimic-fn": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" } } }, "open": { "version": "8.4.0", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -29816,17 +30990,20 @@ }, "opn": { "version": "5.5.0", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "requires": { "is-wsl": "^1.1.0" }, "dependencies": { "is-wsl": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" } } }, "optionator": { "version": "0.9.1", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -29839,6 +31016,7 @@ }, "ora": { "version": "5.4.1", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -29852,20 +31030,24 @@ } }, "os-homedir": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-name": { "version": "4.0.1", + "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", "requires": { "macos-release": "^2.5.0", "windows-release": "^4.0.0" } }, "os-tmpdir": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -29873,30 +31055,36 @@ }, "p-all": { "version": "2.1.0", + "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "requires": { "p-map": "^2.0.0" }, "dependencies": { "p-map": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-cancelable": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-defer": { "version": "1.0.0", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, "p-event": { "version": "4.2.0", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "requires": { "p-timeout": "^3.1.0" }, "dependencies": { "p-timeout": { "version": "3.2.0", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" } @@ -29905,68 +31093,82 @@ }, "p-every": { "version": "2.0.0", + "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", "requires": { "p-map": "^2.0.0" }, "dependencies": { "p-map": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-filter": { "version": "2.1.0", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "requires": { "p-map": "^2.0.0" }, "dependencies": { "p-map": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-finally": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" }, "p-limit": { "version": "3.1.0", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { "p-limit": "^3.0.2" } }, "p-map": { "version": "4.0.0", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "requires": { "aggregate-error": "^3.0.0" } }, "p-reduce": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" }, "p-timeout": { "version": "4.1.0", + "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", "dev": true }, "p-try": { - "version": "2.2.0" + "version": "2.2.0", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "p-wait-for": { "version": "3.2.0", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", "requires": { "p-timeout": "^3.0.0" }, "dependencies": { "p-timeout": { "version": "3.2.0", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" } @@ -29975,6 +31177,7 @@ }, "package-json": { "version": "6.5.0", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -29983,16 +31186,19 @@ }, "dependencies": { "@sindresorhus/is": { - "version": "0.14.0" + "version": "0.14.0", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@szmarczak/http-timer": { "version": "1.1.2", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "requires": { "defer-to-connect": "^1.0.1" } }, "cacheable-request": { "version": "6.1.0", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -30005,6 +31211,7 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } @@ -30013,21 +31220,25 @@ }, "decompress-response": { "version": "3.3.0", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" } }, "defer-to-connect": { - "version": "1.1.3" + "version": "1.1.3", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "get-stream": { "version": "4.1.0", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" } }, "got": { "version": "9.6.0", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -30043,46 +31254,56 @@ }, "dependencies": { "lowercase-keys": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" } } }, "json-buffer": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "keyv": { "version": "3.1.0", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "requires": { "json-buffer": "3.0.0" } }, "normalize-url": { - "version": "4.5.1" + "version": "4.5.1", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "p-cancelable": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "responselike": { "version": "1.0.2", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { "lowercase-keys": "^1.0.0" }, "dependencies": { "lowercase-keys": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" } } }, "semver": { - "version": "6.3.0" + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "to-readable-stream": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" } } }, "parallel-transform": { "version": "1.2.0", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "requires": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -30091,6 +31312,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -30103,6 +31325,7 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } @@ -30111,6 +31334,7 @@ }, "parent-module": { "version": "1.0.1", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -30118,6 +31342,7 @@ }, "parse-entities": { "version": "2.0.0", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -30129,13 +31354,16 @@ } }, "parse-github-url": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==" }, "parse-gitignore": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==" }, "parse-json": { "version": "5.2.0", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -30144,7 +31372,8 @@ } }, "parse-ms": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" }, "parse5": { "version": "5.1.0", @@ -30153,34 +31382,44 @@ "dev": true }, "parseurl": { - "version": "1.3.3" + "version": "1.3.3", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-dirname": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { - "version": "1.0.7" + "version": "1.0.7", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { - "version": "0.1.7" + "version": "0.1.7", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pend": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "performance-now": { "version": "2.1.0", @@ -30189,19 +31428,24 @@ "dev": true }, "picocolors": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.0" + "version": "2.3.0", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pify": { - "version": "4.0.1" + "version": "4.0.1", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "pinkie": { - "version": "2.0.4" + "version": "2.0.4", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "^2.0.0" } @@ -30229,6 +31473,7 @@ }, "pkg-conf": { "version": "3.1.0", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, "requires": { "find-up": "^3.0.0", @@ -30237,6 +31482,7 @@ "dependencies": { "find-up": { "version": "3.0.0", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -30244,6 +31490,7 @@ }, "locate-path": { "version": "3.0.0", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -30252,6 +31499,7 @@ }, "p-limit": { "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -30259,6 +31507,7 @@ }, "p-locate": { "version": "3.0.0", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -30266,12 +31515,14 @@ }, "path-exists": { "version": "3.0.0", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "pkg-dir": { "version": "5.0.0", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "requires": { "find-up": "^5.0.0" } @@ -30284,6 +31535,7 @@ }, "plur": { "version": "4.0.0", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "requires": { "irregular-plurals": "^3.2.0" @@ -30291,6 +31543,7 @@ }, "pluralize": { "version": "8.0.0", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, "pn": { @@ -30300,10 +31553,12 @@ "dev": true }, "posix-character-classes": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { "version": "8.4.5", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "requires": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -30312,6 +31567,7 @@ }, "postcss-values-parser": { "version": "2.0.1", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "requires": { "flatten": "^1.0.2", "indexes-of": "^1.0.1", @@ -30320,6 +31576,7 @@ }, "precinct": { "version": "8.3.0", + "integrity": "sha512-+NPlVGgm+SVfQeClQQt9q4L7Aq7Lym2EhoLU8Ocs1T131hLJ0LAOMigHILSf5kVH2/rym5c80bUdBPkZ1HPKFA==", "requires": { "commander": "^2.20.3", "debug": "^4.3.1", @@ -30337,22 +31594,27 @@ }, "dependencies": { "commander": { - "version": "2.20.3" + "version": "2.20.3", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, "precond": { - "version": "0.2.3" + "version": "0.2.3", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" }, "prelude-ls": { "version": "1.2.1", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prettier": { "version": "2.5.1", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, "prettier-bytes": { @@ -30363,6 +31625,7 @@ }, "pretty-format": { "version": "26.6.2", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "requires": { "@jest/types": "^26.6.2", "ansi-regex": "^5.0.0", @@ -30372,36 +31635,42 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "pretty-ms": { "version": "7.0.1", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "requires": { "parse-ms": "^2.1.0" } }, "prettyjson": { "version": "1.2.5", + "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", "requires": { "colors": "1.4.0", "minimist": "^1.2.0" } }, "printj": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" }, "process-es6": { "version": "0.11.6", @@ -30409,14 +31678,17 @@ "integrity": "sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g=" }, "process-nextick-args": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prop-types": { "version": "15.7.2", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { "loose-envify": "^1.4.0", @@ -30426,19 +31698,22 @@ "dependencies": { "react-is": { "version": "16.13.1", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true } } }, "proxy-addr": { "version": "2.0.7", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "ps-list": { - "version": "7.2.0" + "version": "7.2.0", + "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==" }, "psl": { "version": "1.8.0", @@ -30448,22 +31723,26 @@ }, "pump": { "version": "3.0.0", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "punycode": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.1.1", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "requires": { "escape-goat": "^2.0.0" } }, "q": { "version": "1.5.1", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qs": { @@ -30473,6 +31752,7 @@ }, "query-string": { "version": "5.1.1", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", @@ -30480,7 +31760,8 @@ } }, "queue-microtask": { - "version": "1.2.3" + "version": "1.2.3", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-format-unescaped": { "version": "4.0.4", @@ -30490,13 +31771,16 @@ }, "quick-lru": { "version": "5.1.1", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, "random-bytes": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "randombytes": { "version": "2.1.0", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } @@ -30508,6 +31792,7 @@ }, "raw-body": { "version": "2.4.2", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { "bytes": "3.1.1", "http-errors": "1.8.1", @@ -30516,12 +31801,14 @@ }, "dependencies": { "bytes": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" } } }, "rc": { "version": "1.2.8", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -30530,18 +31817,22 @@ }, "dependencies": { "ini": { - "version": "1.3.8" + "version": "1.3.8", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, "react-is": { - "version": "17.0.2" + "version": "17.0.2", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "read-package-json-fast": { "version": "2.0.3", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "requires": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -30549,6 +31840,7 @@ }, "read-pkg": { "version": "5.2.0", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "requires": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -30557,10 +31849,12 @@ }, "dependencies": { "hosted-git-info": { - "version": "2.8.9" + "version": "2.8.9", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "normalize-package-data": { "version": "2.5.0", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -30569,15 +31863,18 @@ } }, "semver": { - "version": "5.7.1" + "version": "5.7.1", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "type-fest": { - "version": "0.6.0" + "version": "0.6.0", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" } } }, "read-pkg-up": { "version": "7.0.1", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "requires": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -30586,6 +31883,7 @@ "dependencies": { "find-up": { "version": "4.1.0", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -30593,29 +31891,34 @@ }, "locate-path": { "version": "5.0.0", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "p-limit": { "version": "2.3.0", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "type-fest": { - "version": "0.8.1" + "version": "0.8.1", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, "readable-stream": { "version": "3.6.0", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -30624,18 +31927,21 @@ }, "readdir-glob": { "version": "1.1.1", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "requires": { "minimatch": "^3.0.4" } }, "readdirp": { "version": "3.6.0", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } }, "redent": { "version": "3.0.0", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { "indent-string": "^4.0.0", @@ -30670,6 +31976,7 @@ }, "regex-not": { "version": "1.0.2", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -30677,6 +31984,7 @@ "dependencies": { "safe-regex": { "version": "1.1.0", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" } @@ -30685,10 +31993,12 @@ }, "regexp-tree": { "version": "0.1.24", + "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, "regexp.prototype.flags": { "version": "1.3.1", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -30697,6 +32007,7 @@ }, "regexpp": { "version": "3.2.0", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { @@ -30714,12 +32025,14 @@ }, "registry-auth-token": { "version": "4.2.1", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "requires": { "rc": "^1.2.8" } }, "registry-url": { "version": "5.1.0", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "requires": { "rc": "^1.2.8" } @@ -30745,16 +32058,20 @@ } }, "remove-trailing-separator": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" }, "repeat-string": { - "version": "1.6.1" + "version": "1.6.1", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "req-all": { "version": "0.1.0", + "integrity": "sha1-EwBR4qzligLqy/ydRIV3pzapJzo=", "dev": true }, "request": { @@ -30859,22 +32176,28 @@ } }, "require-directory": { - "version": "2.1.1" + "version": "2.1.1", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { - "version": "2.0.2" + "version": "2.0.2", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "require-package-name": { - "version": "2.0.1" + "version": "2.0.1", + "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=" }, "requires-port": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { "version": "1.20.0", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -30882,52 +32205,63 @@ }, "resolve-alpn": { "version": "1.2.1", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "resolve-cwd": { "version": "3.0.0", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" } }, "resolve-from": { - "version": "5.0.0" + "version": "5.0.0", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-global": { "version": "1.0.0", + "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "requires": { "global-dirs": "^0.1.1" } }, "resolve-url": { - "version": "0.2.1" + "version": "0.2.1", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "responselike": { "version": "2.0.0", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "requires": { "lowercase-keys": "^2.0.0" } }, "restore-cursor": { "version": "3.1.0", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "ret": { - "version": "0.1.15" + "version": "0.1.15", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "reusify": { - "version": "1.0.4" + "version": "1.0.4", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { - "version": "1.3.0" + "version": "1.3.0", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { "version": "3.0.2", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -30988,56 +32322,68 @@ }, "rollup-pluginutils": { "version": "2.8.2", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "requires": { "estree-walker": "^0.6.1" }, "dependencies": { "estree-walker": { - "version": "0.6.1" + "version": "0.6.1", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" } } }, "run-async": { - "version": "2.4.1" + "version": "2.4.1", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { "version": "1.2.0", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "requires": { "queue-microtask": "^1.2.2" } }, "rxjs": { "version": "6.6.7", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-json-stringify": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" }, "safe-regex": { "version": "2.1.1", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "requires": { "regexp-tree": "~0.1.1" } }, "safe-stable-stringify": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, "safer-buffer": { - "version": "2.1.2" + "version": "2.1.2", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { - "version": "1.2.4" + "version": "1.2.4", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "saxes": { "version": "3.1.11", @@ -31050,33 +32396,39 @@ }, "seedrandom": { "version": "3.0.5", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true }, "seek-bzip": { "version": "1.0.6", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "requires": { "commander": "^2.8.1" }, "dependencies": { "commander": { - "version": "2.20.3" + "version": "2.20.3", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, "semver": { "version": "7.3.5", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" } }, "semver-diff": { "version": "3.1.1", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.3.0" + "version": "6.3.0", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -31124,6 +32476,7 @@ }, "serialize-error": { "version": "7.0.1", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "requires": { "type-fest": "^0.13.1" @@ -31131,12 +32484,14 @@ "dependencies": { "type-fest": { "version": "0.13.1", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true } } }, "serialize-javascript": { "version": "6.0.0", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -31154,10 +32509,12 @@ } }, "set-blocking": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.1", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -31167,15 +32524,18 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-plain-object": { "version": "2.0.4", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" } @@ -31189,19 +32549,23 @@ }, "shebang-command": { "version": "2.0.0", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.3", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { "version": "1.0.4", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -31209,21 +32573,25 @@ } }, "signal-exit": { - "version": "3.0.6" + "version": "3.0.6", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-swizzle": { "version": "0.2.2", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { "is-arrayish": "^0.3.1" }, "dependencies": { "is-arrayish": { - "version": "0.3.2" + "version": "0.3.2", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, "sinon": { "version": "12.0.1", + "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", "dev": true, "requires": { "@sinonjs/commons": "^1.8.3", @@ -31236,6 +32604,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -31244,10 +32613,12 @@ } }, "slash": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "3.0.0", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -31257,6 +32628,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -31264,6 +32636,7 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -31271,12 +32644,14 @@ }, "color-name": { "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, "snapdragon": { "version": "0.8.2", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -31290,30 +32665,35 @@ "dependencies": { "debug": { "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, "define-property": { "version": "0.2.5", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -31322,12 +32702,14 @@ }, "is-data-descriptor": { "version": "0.1.4", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -31336,6 +32718,7 @@ }, "is-descriptor": { "version": "0.1.6", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -31343,18 +32726,22 @@ } }, "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "kind-of": { - "version": "5.1.0" + "version": "5.1.0", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "snapdragon-node": { "version": "2.1.1", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -31363,6 +32750,7 @@ "dependencies": { "define-property": { "version": "1.0.0", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" } @@ -31371,12 +32759,14 @@ }, "snapdragon-util": { "version": "3.0.1", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -31395,23 +32785,27 @@ }, "sort-keys": { "version": "1.1.2", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "requires": { "is-plain-obj": "^1.0.0" }, "dependencies": { "is-plain-obj": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" } } }, "sort-keys-length": { "version": "1.0.1", + "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", "requires": { "sort-keys": "^1.0.0" } }, "sort-on": { "version": "4.1.1", + "integrity": "sha512-nj8myvTCEErLMMWnye61z1pV5osa7njoosoQNdylD8WyPYHoHCBQx/xn7mGJL6h4oThvGpYSIAxfm8VUr75qTQ==", "dev": true, "requires": { "arrify": "^2.0.1", @@ -31420,6 +32814,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -31428,13 +32823,16 @@ } }, "source-map": { - "version": "0.5.7" + "version": "0.5.7", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-js": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" }, "source-map-resolve": { "version": "0.5.3", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -31445,18 +32843,21 @@ }, "source-map-support": { "version": "0.5.21", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.6.1" + "version": "0.6.1", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "source-map-url": { - "version": "0.4.1" + "version": "0.4.1", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "sourcemap-codec": { "version": "1.4.8", @@ -31465,32 +32866,38 @@ }, "spdx-correct": { "version": "3.1.1", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { - "version": "2.3.0" + "version": "2.3.0", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.1", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.11" + "version": "3.0.11", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" }, "split-string": { "version": "3.1.0", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { "extend-shallow": "^3.0.0" } }, "split2": { "version": "3.2.2", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { "readable-stream": "^3.0.0" @@ -31498,6 +32905,7 @@ }, "sprintf-js": { "version": "1.0.3", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "sshpk": { @@ -31519,15 +32927,18 @@ }, "stack-generator": { "version": "2.0.5", + "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", "requires": { "stackframe": "^1.1.1" } }, "stack-trace": { - "version": "0.0.10" + "version": "0.0.10", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "stack-utils": { "version": "2.0.5", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { "escape-string-regexp": "^2.0.0" @@ -31535,15 +32946,18 @@ "dependencies": { "escape-string-regexp": { "version": "2.0.0", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } } }, "stackframe": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" }, "static-extend": { "version": "0.1.2", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -31551,18 +32965,21 @@ "dependencies": { "define-property": { "version": "0.2.5", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -31571,12 +32988,14 @@ }, "is-data-descriptor": { "version": "0.1.4", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -31585,6 +33004,7 @@ }, "is-descriptor": { "version": "0.1.6", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -31592,12 +33012,14 @@ } }, "kind-of": { - "version": "5.1.0" + "version": "5.1.0", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "static-server": { "version": "2.2.1", + "integrity": "sha512-j5eeW6higxYNmXMIT8iHjsdiViTpQDthg7o+SHsRtqdbxscdHqBHXwrXjHC8hL3F0Tsu34ApUpDkwzMBPBsrLw==", "requires": { "chalk": "^0.5.1", "commander": "^2.3.0", @@ -31607,13 +33029,16 @@ }, "dependencies": { "ansi-regex": { - "version": "0.2.1" + "version": "0.2.1", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" }, "ansi-styles": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=" }, "chalk": { "version": "0.5.1", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "requires": { "ansi-styles": "^1.1.0", "escape-string-regexp": "^1.0.0", @@ -31623,33 +33048,40 @@ } }, "commander": { - "version": "2.20.3" + "version": "2.20.3", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-ansi": { "version": "0.1.0", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "requires": { "ansi-regex": "^0.2.0" } }, "strip-ansi": { "version": "0.3.0", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "requires": { "ansi-regex": "^0.2.1" } }, "supports-color": { - "version": "0.2.0" + "version": "0.2.0", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=" } } }, "statsd-client": { - "version": "0.4.7" + "version": "0.4.7", + "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==" }, "statuses": { "version": "2.0.1", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "stealthy-require": { @@ -31668,24 +33100,29 @@ } }, "strict-uri-encode": { - "version": "1.1.0" + "version": "1.1.0", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string_decoder": { "version": "1.3.0", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" }, "dependencies": { "safe-buffer": { - "version": "5.2.1" + "version": "5.2.1", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "string-similarity": { - "version": "4.0.4" + "version": "4.0.4", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "string-width": { "version": "4.2.3", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -31694,6 +33131,7 @@ }, "string.prototype.matchall": { "version": "4.0.6", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -31708,6 +33146,7 @@ }, "string.prototype.padend": { "version": "3.1.3", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -31717,6 +33156,7 @@ }, "string.prototype.trimend": { "version": "1.0.4", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -31725,6 +33165,7 @@ }, "string.prototype.trimstart": { "version": "1.0.4", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -31733,24 +33174,29 @@ }, "strip-ansi": { "version": "6.0.1", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "strip-ansi-control-characters": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-Q0/k5orrVGeaOlIOUn1gybGU0IcAbgHQT1faLo5hik4DqClKVSaka5xOhNNoRgtfztHVxCYxi7j71mrWom0bIw==" }, "strip-dirs": { "version": "2.1.0", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "requires": { "is-natural-number": "^4.0.1" } }, "strip-final-newline": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { "version": "3.0.0", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { "min-indent": "^1.0.0" @@ -31758,21 +33204,25 @@ }, "strip-json-comments": { "version": "3.1.1", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "strip-outer": { "version": "1.0.1", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "requires": { "escape-string-regexp": "^1.0.2" }, "dependencies": { "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "superagent": { "version": "6.1.0", + "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", "dev": true, "requires": { "component-emitter": "^1.3.0", @@ -31790,6 +33240,7 @@ "dependencies": { "form-data": { "version": "3.0.1", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -31799,10 +33250,12 @@ }, "mime": { "version": "2.6.0", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "qs": { "version": "6.10.2", + "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -31812,6 +33265,7 @@ }, "supertap": { "version": "2.0.0", + "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", "dev": true, "requires": { "arrify": "^2.0.1", @@ -31823,6 +33277,7 @@ "dependencies": { "argparse": { "version": "1.0.10", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -31830,6 +33285,7 @@ }, "js-yaml": { "version": "3.14.1", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -31840,6 +33296,7 @@ }, "supertest": { "version": "6.1.6", + "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", "dev": true, "requires": { "methods": "^1.1.2", @@ -31848,12 +33305,14 @@ }, "supports-color": { "version": "8.1.1", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { "has-flag": "^4.0.0" } }, "supports-hyperlinks": { "version": "2.2.0", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -31861,6 +33320,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -31868,7 +33328,8 @@ } }, "symbol-observable": { - "version": "1.2.0" + "version": "1.2.0", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "symbol-tree": { "version": "3.2.4", @@ -31878,6 +33339,7 @@ }, "table": { "version": "6.7.5", + "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -31889,6 +33351,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -31896,6 +33359,7 @@ }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -31903,10 +33367,12 @@ }, "color-name": { "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "slice-ansi": { "version": "4.0.0", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -31918,6 +33384,7 @@ }, "tabtab": { "version": "3.0.2", + "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", "requires": { "debug": "^4.0.1", "es6-promisify": "^6.0.0", @@ -31929,6 +33396,7 @@ "dependencies": { "mkdirp": { "version": "0.5.5", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { "minimist": "^1.2.5" } @@ -31937,6 +33405,7 @@ }, "tar": { "version": "6.1.11", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -31948,6 +33417,7 @@ }, "tar-stream": { "version": "2.2.0", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -31958,13 +33428,16 @@ }, "temp": { "version": "0.4.0", + "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=", "dev": true }, "temp-dir": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, "tempy": { "version": "1.0.1", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "requires": { "del": "^6.0.0", "is-stream": "^2.0.0", @@ -31974,12 +33447,14 @@ }, "dependencies": { "type-fest": { - "version": "0.16.0" + "version": "0.16.0", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" } } }, "terminal-link": { "version": "2.1.1", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -31987,12 +33462,14 @@ "dependencies": { "ansi-escapes": { "version": "4.3.2", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" } }, "type-fest": { - "version": "0.21.3" + "version": "0.21.3", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, @@ -32020,6 +33497,7 @@ }, "test-exclude": { "version": "6.0.0", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", @@ -32029,20 +33507,25 @@ }, "text-extensions": { "version": "1.9.0", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "text-hex": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "text-table": { "version": "0.2.0", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { - "version": "2.3.8" + "version": "2.3.8", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "4.0.2", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" @@ -32050,6 +33533,7 @@ }, "through2-filter": { "version": "3.0.0", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "requires": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -32057,6 +33541,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -32069,12 +33554,14 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "through2": { "version": "2.0.5", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -32084,6 +33571,7 @@ }, "through2-map": { "version": "3.0.0", + "integrity": "sha1-psMCbOY7SJipl9VAUGtm/9lw8nE=", "requires": { "through2": "~2.0.0", "xtend": "^4.0.0" @@ -32091,6 +33579,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -32103,12 +33592,14 @@ }, "string_decoder": { "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" } }, "through2": { "version": "2.0.5", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -32117,10 +33608,12 @@ } }, "time-zone": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=" }, "timed-out": { - "version": "4.0.1" + "version": "4.0.1", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timers-ext": { "version": "0.1.7", @@ -32134,18 +33627,21 @@ }, "tmp": { "version": "0.0.33", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" } }, "tmp-promise": { "version": "3.0.3", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "requires": { "tmp": "^0.2.0" }, "dependencies": { "tmp": { "version": "0.2.1", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { "rimraf": "^3.0.0" } @@ -32153,19 +33649,23 @@ } }, "to-buffer": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, "to-fast-properties": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" } @@ -32173,10 +33673,12 @@ } }, "to-readable-stream": { - "version": "2.1.0" + "version": "2.1.0", + "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" }, "to-regex": { "version": "3.0.2", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -32186,6 +33688,7 @@ "dependencies": { "safe-regex": { "version": "1.1.0", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" } @@ -32194,6 +33697,7 @@ }, "to-regex-range": { "version": "5.0.1", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" } @@ -32204,10 +33708,12 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "toml": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" }, "tomlify-j0.4": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==" }, "tough-cookie": { "version": "3.0.1", @@ -32221,36 +33727,44 @@ } }, "tr46": { - "version": "0.0.3" + "version": "0.0.3", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "tree-kill": { "version": "1.2.2", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "trim-newlines": { "version": "3.0.1", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "trim-off-newlines": { "version": "1.0.3", + "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true }, "trim-repeated": { "version": "1.0.0", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "requires": { "escape-string-regexp": "^1.0.2" }, "dependencies": { "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "triple-beam": { - "version": "1.3.0" + "version": "1.3.0", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "ts-node": { "version": "10.4.0", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "requires": { "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", @@ -32267,12 +33781,14 @@ }, "dependencies": { "diff": { - "version": "4.0.2" + "version": "4.0.2", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" } } }, "tsconfig-paths": { "version": "3.12.0", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -32283,6 +33799,7 @@ "dependencies": { "json5": { "version": "1.0.1", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -32290,6 +33807,7 @@ }, "strip-bom": { "version": "3.0.0", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } @@ -32302,12 +33820,14 @@ }, "tsutils": { "version": "3.21.0", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "requires": { "tslib": "^1.8.1" }, "dependencies": { "tslib": { - "version": "1.14.1" + "version": "1.14.1", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -32330,7 +33850,8 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.7.1.tgz", "integrity": "sha512-g2QDI/ZLpuEor9EnJ1b7s9S2QSJgNCPBw9ZCSkQdqXNjg5ZQs4mASgW/elVifSxISFwBeMaIAmMBP5luAOIKAw==", - "dev": true + "dev": true, + "peer": true }, "type": { "version": "1.2.0", @@ -32340,6 +33861,7 @@ }, "type-check": { "version": "0.4.0", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -32347,13 +33869,16 @@ }, "type-detect": { "version": "4.0.8", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { - "version": "1.4.0" + "version": "1.4.0", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "type-is": { "version": "1.6.18", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -32361,12 +33886,14 @@ }, "typedarray-to-buffer": { "version": "3.1.5", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.5.4" + "version": "4.5.4", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" }, "uglify-js": { "version": "3.14.5", @@ -32377,12 +33904,14 @@ }, "uid-safe": { "version": "2.1.5", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { "random-bytes": "~1.0.0" } }, "unbox-primitive": { "version": "1.0.1", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -32393,6 +33922,7 @@ }, "unbzip2-stream": { "version": "1.4.3", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -32424,6 +33954,7 @@ }, "union-value": { "version": "1.0.1", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -32432,31 +33963,37 @@ }, "dependencies": { "is-extendable": { - "version": "0.1.1" + "version": "0.1.1", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" } } }, "uniq": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "unique-string": { "version": "2.0.0", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { "crypto-random-string": "^2.0.0" } }, "unist-util-stringify-position": { "version": "2.0.3", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { "@types/unist": "^2.0.2" } }, "universal-user-agent": { - "version": "6.0.0" + "version": "6.0.0", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" }, "universalify": { "version": "2.0.0", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unix-crypt-td-js": { @@ -32467,12 +34004,14 @@ }, "unixify": { "version": "1.0.0", + "integrity": "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=", "requires": { "normalize-path": "^2.1.1" }, "dependencies": { "normalize-path": { "version": "2.1.1", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { "remove-trailing-separator": "^1.0.1" } @@ -32480,10 +34019,12 @@ } }, "unpipe": { - "version": "1.0.0" + "version": "1.0.0", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "unset-value": { "version": "1.0.0", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -32491,6 +34032,7 @@ "dependencies": { "has-value": { "version": "0.3.1", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -32499,6 +34041,7 @@ "dependencies": { "isobject": { "version": "2.1.0", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "requires": { "isarray": "1.0.0" } @@ -32506,15 +34049,18 @@ } }, "has-values": { - "version": "0.1.4" + "version": "0.1.4", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, "untildify": { - "version": "3.0.3" + "version": "3.0.3", + "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" }, "update-notifier": { "version": "5.1.0", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "requires": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -32533,10 +34079,12 @@ }, "dependencies": { "ci-info": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "is-ci": { "version": "2.0.0", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { "ci-info": "^2.0.0" } @@ -32545,40 +34093,50 @@ }, "uri-js": { "version": "4.4.1", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" } }, "urix": { - "version": "0.1.0" + "version": "0.1.0", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url-parse-lax": { "version": "3.0.0", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { "prepend-http": "^2.0.0" } }, "url-to-options": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, "use": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { - "version": "1.0.1" + "version": "1.0.1", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "8.3.2" + "version": "8.3.2", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { "version": "8.1.0", + "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -32588,12 +34146,14 @@ "dependencies": { "source-map": { "version": "0.7.3", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "validate-npm-package-license": { "version": "3.0.4", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -32601,6 +34161,7 @@ }, "validate-npm-package-name": { "version": "3.0.0", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "requires": { "builtins": "^1.0.3" } @@ -32612,7 +34173,8 @@ "dev": true }, "vary": { - "version": "1.1.2" + "version": "1.1.2", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "verdaccio": { "version": "5.4.0", @@ -32975,6 +34537,7 @@ }, "wait-port": { "version": "0.2.9", + "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", "requires": { "chalk": "^2.4.2", "commander": "^3.0.2", @@ -32983,12 +34546,14 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -32996,16 +34561,20 @@ } }, "commander": { - "version": "3.0.2" + "version": "3.0.2", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "escape-string-regexp": { - "version": "1.0.5" + "version": "1.0.5", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-flag": { - "version": "3.0.0" + "version": "3.0.0", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -33014,15 +34583,18 @@ }, "wcwidth": { "version": "1.0.1", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "requires": { "defaults": "^1.0.3" } }, "webidl-conversions": { - "version": "3.0.1" + "version": "3.0.1", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, "well-known-symbols": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==" }, "whatwg-encoding": { "version": "1.0.5", @@ -33041,6 +34613,7 @@ }, "whatwg-url": { "version": "5.0.0", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -33048,12 +34621,14 @@ }, "which": { "version": "2.0.2", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.0.2", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { "is-bigint": "^1.0.1", @@ -33064,28 +34639,33 @@ } }, "which-module": { - "version": "2.0.0" + "version": "2.0.0", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { "version": "1.1.5", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "widest-line": { "version": "3.1.0", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { "string-width": "^4.0.0" } }, "windows-release": { "version": "4.0.0", + "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", "requires": { "execa": "^4.0.2" }, "dependencies": { "execa": { "version": "4.1.0", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -33100,17 +34680,20 @@ }, "get-stream": { "version": "5.2.0", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" } }, "human-signals": { - "version": "1.1.1" + "version": "1.1.1", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" } } }, "winston": { "version": "3.3.4", + "integrity": "sha512-zWJrfmqE+2IXtVJ125vxpA2m303TjwchLhfRbcnma7c76Qd4pv80JIp37l8uGnWbCoG4X6PMz3vAQeh+vH1CtA==", "requires": { "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", @@ -33125,6 +34708,7 @@ }, "winston-transport": { "version": "4.4.2", + "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==", "requires": { "logform": "^2.3.2", "readable-stream": "^3.4.0", @@ -33132,7 +34716,8 @@ } }, "word-wrap": { - "version": "1.2.3" + "version": "1.2.3", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", @@ -33142,6 +34727,7 @@ }, "wrap-ansi": { "version": "7.0.0", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -33150,26 +34736,31 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "wrappy": { - "version": "1.0.2" + "version": "1.0.2", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -33185,7 +34776,8 @@ "requires": {} }, "xdg-basedir": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "xml-name-validator": { "version": "3.0.0", @@ -33200,16 +34792,20 @@ "dev": true }, "xtend": { - "version": "4.0.2" + "version": "4.0.2", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "5.0.8" + "version": "5.0.8", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { - "version": "4.0.0" + "version": "4.0.0", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { @@ -33237,23 +34833,28 @@ } }, "yargs-parser": { - "version": "20.2.9" + "version": "20.2.9", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yauzl": { "version": "2.10.0", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "yn": { - "version": "3.1.1" + "version": "3.1.1", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "yocto-queue": { - "version": "0.1.0" + "version": "0.1.0", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "zip-stream": { "version": "4.1.0", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "requires": { "archiver-utils": "^2.1.0", "compress-commons": "^4.1.0", diff --git a/package.json b/package.json index 73dd474161f..ee457cb86b6 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "multiparty": "^4.2.1", "netlify": "^10.1.2", "netlify-headers-parser": "^6.0.1", - "netlify-onegraph-internal": "0.0.10", + "netlify-onegraph-internal": "0.0.15", "netlify-redirect-parser": "^13.0.1", "netlify-redirector": "^0.2.1", "node-fetch": "^2.6.0", diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index 03be9e358ad..f75d156dd05 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -109,12 +109,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() + }) }) - }) return commandProcess } @@ -308,6 +308,9 @@ const dev = async (options, command) => { const netlifyToken = await command.authenticate() await OneGraphCliClient.ensureAppForSite(netlifyToken, site.id) const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) + + log(`Starting Netlify Graph session, to edit your library run \`netlify graph:edit\` in another tab`) + startOneGraphCLISession({ netlifyGraphConfig, netlifyToken, site, state }) } diff --git a/src/commands/graph/graph-edit.js b/src/commands/graph/graph-edit.js index c0c5102fa22..f779eded761 100644 --- a/src/commands/graph/graph-edit.js +++ b/src/commands/graph/graph-edit.js @@ -1,10 +1,9 @@ -const process = require('process') - const gitRepoInfo = require('git-repo-info') const { OneGraphCliClient, generateSessionName, loadCLISession } = require('../../lib/one-graph/cli-client') const { defaultExampleOperationsDoc, + getGraphEditUrlBySiteName, getNetlifyGraphConfig, readGraphQLOperationsSourceFile, } = require('../../lib/one-graph/cli-netlify-graph') @@ -20,7 +19,7 @@ const { createCLISession, createPersistedQuery, ensureAppForSite, updateCLISessi * @returns */ const graphEdit = async (options, command) => { - const { api, site, state } = command.netlify + const { api, site, siteInfo, state } = command.netlify const siteId = site.id if (!site.id) { @@ -30,9 +29,6 @@ const graphEdit = async (options, command) => { )} or ${chalk.yellow('netlify link')}`, ) } - - const siteData = await api.getSite({ siteId }) - const netlifyGraphConfig = await getNetlifyGraphConfig({ command, options }) const { branch } = gitRepoInfo() @@ -64,10 +60,19 @@ const graphEdit = async (options, command) => { await updateCLISessionMetadata(netlifyToken, siteId, oneGraphSessionId, { docId: persistedDoc.id }) - const host = 'app.netlify.com' || process.env.NETLIFY_APP_HOST + let siteName = siteInfo.name + + if (!siteName) { + const siteData = await api.getSite({ siteId }) + siteName = siteData.name + if (!siteName) { + error(`No site name found for siteId ${siteId}`) + } + } + + const graphEditUrl = getGraphEditUrlBySiteName({ siteName, oneGraphSessionId }) - const url = `http://${host}/sites/${siteData.name}/graph/explorer?cliSessionId=${oneGraphSessionId}` - await openBrowser({ url }) + await openBrowser({ url: graphEditUrl }) } /** diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 59bf6b9d352..09589c70579 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -1,5 +1,6 @@ const fs = require('fs') const path = require('path') +const process = require('process') const { GraphQL, InternalConsole, NetlifyGraph } = require('netlify-onegraph-internal') @@ -40,27 +41,40 @@ const getNetlifyGraphConfig = async ({ command, options }) => { try { settings = await detectServerSettings(devConfig, options, site.root) } catch (detectServerSettingsError) { - error(detectServerSettingsError.message) + error(detectServerSettingsError) } + const siteRoot = [path.sep, ...site.root.split(path.sep).filter((part) => part !== '')] + + const tsConfig = 'tsconfig.json' + const autodetectedLanguage = fs.existsSync(tsConfig) ? 'typescript' : 'javascript' + const framework = settings.framework || userSpecifiedConfig.framework const isNextjs = framework === 'Next.js' const detectedFunctionsPathString = getFunctionsDir({ config, options }) const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null - const functionsPath = isNextjs ? ['pages', 'api'] : detectedFunctionsPath || [`functions`] + const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, detectedFunctionsPath] || [...siteRoot, 'functions'] + const netlifyGraphPath = isNextjs ? [...siteRoot, 'lib', 'netlifyGraph'] : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] const baseConfig = { ...NetlifyGraph.defaultNetlifyGraphConfig, ...userSpecifiedConfig } - const netlifyGraphImplementationFilename = [...baseConfig.netlifyGraphPath, `index.${baseConfig.extension}`] - const netlifyGraphTypeDefinitionsFilename = [...baseConfig.netlifyGraphPath, `index.d.ts`] - const graphQLOperationsSourceFilename = [...baseConfig.netlifyGraphPath, NetlifyGraph.defaultSourceOperationsFilename] + const netlifyGraphImplementationFilename = [...netlifyGraphPath, `index.${baseConfig.extension}`] + const netlifyGraphTypeDefinitionsFilename = [...netlifyGraphPath, `index.d.ts`] + const graphQLOperationsSourceFilename = [...netlifyGraphPath, NetlifyGraph.defaultSourceOperationsFilename] + const graphQLSchemaFilename = [...netlifyGraphPath, NetlifyGraph.defaultGraphQLSchemaFilename] const netlifyGraphRequirePath = isNextjs ? ['..', '..', 'lib', 'netlifyGraph'] : [`./netlifyGraph`] + const language = userSpecifiedConfig.language || autodetectedLanguage + const moduleType = baseConfig.moduleType || isNextjs ? 'esm' : 'commonjs' const fullConfig = { ...baseConfig, functionsPath, + netlifyGraphPath, netlifyGraphImplementationFilename, netlifyGraphTypeDefinitionsFilename, graphQLOperationsSourceFilename, + graphQLSchemaFilename, netlifyGraphRequirePath, framework, + language, + moduleType } return fullConfig @@ -71,7 +85,7 @@ const getNetlifyGraphConfig = async ({ command, options }) => { * @param {NetlifyGraphConfig} netlifyGraphConfig */ const ensureNetlifyGraphPath = (netlifyGraphConfig) => { - fs.mkdirSync(path.join(...netlifyGraphConfig.netlifyGraphPath), { recursive: true }) + fs.mkdirSync(path.resolve(...netlifyGraphConfig.netlifyGraphPath), { recursive: true }) } /** @@ -79,7 +93,7 @@ const ensureNetlifyGraphPath = (netlifyGraphConfig) => { * @param {NetlifyGraphConfig} netlifyGraphConfig */ const ensureFunctionsPath = (netlifyGraphConfig) => { - fs.mkdirSync(path.join(...netlifyGraphConfig.functionsPath), { recursive: true }) + fs.mkdirSync(path.resolve(...netlifyGraphConfig.functionsPath), { recursive: true }) } /** @@ -98,8 +112,8 @@ const generateFunctionsFile = (netlifyGraphConfig, schema, operationsDoc, querie ) ensureNetlifyGraphPath(netlifyGraphConfig) - fs.writeFileSync(path.join(...netlifyGraphConfig.netlifyGraphImplementationFilename), clientSource, 'utf8') - fs.writeFileSync(path.join(...netlifyGraphConfig.netlifyGraphTypeDefinitionsFilename), typeDefinitionsSource, 'utf8') + fs.writeFileSync(path.resolve(...netlifyGraphConfig.netlifyGraphImplementationFilename), clientSource, 'utf8') + fs.writeFileSync(path.resolve(...netlifyGraphConfig.netlifyGraphTypeDefinitionsFilename), typeDefinitionsSource, 'utf8') } /** @@ -110,7 +124,7 @@ const generateFunctionsFile = (netlifyGraphConfig, schema, operationsDoc, querie const readGraphQLOperationsSourceFile = (netlifyGraphConfig) => { ensureNetlifyGraphPath(netlifyGraphConfig) - const fullFilename = path.join(...netlifyGraphConfig.graphQLOperationsSourceFilename) + const fullFilename = path.resolve(...netlifyGraphConfig.graphQLOperationsSourceFilename) if (!fs.existsSync(fullFilename)) { fs.writeFileSync(fullFilename, '') fs.closeSync(fs.openSync(fullFilename, 'w')) @@ -130,7 +144,7 @@ const writeGraphQLOperationsSourceFile = (netlifyGraphConfig, operationDocString const graphqlSource = operationDocString ensureNetlifyGraphPath(netlifyGraphConfig) - fs.writeFileSync(path.join(...netlifyGraphConfig.graphQLOperationsSourceFilename), graphqlSource, 'utf8') + fs.writeFileSync(path.resolve(...netlifyGraphConfig.graphQLOperationsSourceFilename), graphqlSource, 'utf8') } /** @@ -142,7 +156,7 @@ const writeGraphQLSchemaFile = (netlifyGraphConfig, schema) => { const graphqlSource = printSchema(schema) ensureNetlifyGraphPath(netlifyGraphConfig) - fs.writeFileSync(path.join(...netlifyGraphConfig.graphQLSchemaFilename), graphqlSource, 'utf8') + fs.writeFileSync(path.resolve(...netlifyGraphConfig.graphQLSchemaFilename), graphqlSource, 'utf8') } /** @@ -152,7 +166,7 @@ const writeGraphQLSchemaFile = (netlifyGraphConfig, schema) => { */ const readGraphQLSchemaFile = (netlifyGraphConfig) => { ensureNetlifyGraphPath(netlifyGraphConfig) - return fs.readFileSync(path.join(...netlifyGraphConfig.graphQLSchemaFilename), 'utf8') + return fs.readFileSync(path.resolve(...netlifyGraphConfig.graphQLSchemaFilename), 'utf8') } /** @@ -169,7 +183,7 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions currentOperationsDoc = NetlifyGraph.defaultExampleOperationsDoc } - const handlerSource = NetlifyGraph.generateHandlerSource({ + const result = NetlifyGraph.generateHandlerSource({ handlerOptions, schema, netlifyGraphConfig, @@ -177,28 +191,59 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions operationsDoc: currentOperationsDoc, }) - if (!(handlerSource && handlerSource.source)) { + if (!(result)) { + warn(`No handler was generated for operationId ${operationId}`) return } - const { operation, source } = handlerSource + const { exportedFiles, operation } = result - const operationName = (operation.name && operation.name.value) || 'Unnamed' + ensureFunctionsPath(netlifyGraphConfig) - const filenameArr = [ - path.sep, - ...netlifyGraphConfig.functionsPath, - `${operationName}.${netlifyGraphConfig.extension}`, - ] - const absoluteFilename = path.resolve(...filenameArr) + exportedFiles?.forEach((exportedFile) => { + const { content } = exportedFile + const isNamed = exportedFile.kind === "NamedExportedFile" - ensureFunctionsPath(netlifyGraphConfig) - fs.writeFileSync(absoluteFilename, source) + let filenameArr + + if (isNamed) { + filenameArr = [...exportedFile.name] + } else { + const operationName = (operation.name && operation.name.value) || 'Unnamed' + const fileExtension = netlifyGraphConfig.language === 'typescript' ? 'ts' : netlifyGraphConfig.extension + const defaultBaseFilename = `${operationName}.${fileExtension}` + const baseFilename = defaultBaseFilename; + + filenameArr = [ + ...netlifyGraphConfig.functionsPath, + baseFilename + ] + } + + const absoluteFilename = path.resolve(...filenameArr) + + fs.writeFileSync(absoluteFilename, content); + }); } // Export the minimal set of functions that are required for Netlify Graph const { buildSchema, parse } = GraphQL +/** + * + * @param {object} options + * @param {string} options.siteName The name of the site as used in the Netlify UI url scheme + * @param {string} options.oneGraphSessionId The oneGraph session id to use when generating the graph-edit link + * @returns {string} The url to the Netlify Graph UI for the current session + */ +const getGraphEditUrlBySiteName = ({ oneGraphSessionId, siteName }) => { + const host = 'app.netlify.com' || process.env.NETLIFY_APP_HOST + // http because app.netlify.com will redirect to https, and localhost will still work for development + const url = `http://${host}/sites/${siteName}/graph/explorer?cliSessionId=${oneGraphSessionId}` + + return url +} + module.exports = { buildSchema, defaultExampleOperationsDoc: NetlifyGraph.defaultExampleOperationsDoc, @@ -207,6 +252,7 @@ module.exports = { generateFunctionsFile, generateHandlerSource: NetlifyGraph.generateHandlerSource, generateHandler, + getGraphEditUrlBySiteName, getNetlifyGraphConfig, parse, readGraphQLOperationsSourceFile, From 58ade51bdf52e4badfeb99b1cdb91be6f23e7acb Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Tue, 18 Jan 2022 22:39:31 -0800 Subject: [PATCH 50/58] feat: add next.js support --- src/commands/dev/dev.js | 10 ++++---- src/commands/graph/graph-pull.js | 2 +- src/lib/one-graph/cli-netlify-graph.js | 33 +++++++++++++++----------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index f75d156dd05..289c1a99f4e 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -109,12 +109,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } diff --git a/src/commands/graph/graph-pull.js b/src/commands/graph/graph-pull.js index 6bca0e86d5f..6423b0af4f4 100644 --- a/src/commands/graph/graph-pull.js +++ b/src/commands/graph/graph-pull.js @@ -46,7 +46,7 @@ const graphPull = async (options, command) => { try { schema = buildSchema(schemaString) } catch (buildSchemaError) { - error(`Error parsing schema: ${buildSchemaError.message}`) + error(`Error parsing schema: ${buildSchemaError}`) } if (!schema) { diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 09589c70579..23010022503 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -53,8 +53,12 @@ const getNetlifyGraphConfig = async ({ command, options }) => { const isNextjs = framework === 'Next.js' const detectedFunctionsPathString = getFunctionsDir({ config, options }) const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null - const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, detectedFunctionsPath] || [...siteRoot, 'functions'] - const netlifyGraphPath = isNextjs ? [...siteRoot, 'lib', 'netlifyGraph'] : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] + const functionsPath = isNextjs + ? [...siteRoot, 'pages', 'api'] + : [...siteRoot, detectedFunctionsPath] || [...siteRoot, 'functions'] + const netlifyGraphPath = isNextjs + ? [...siteRoot, 'lib', 'netlifyGraph'] + : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] const baseConfig = { ...NetlifyGraph.defaultNetlifyGraphConfig, ...userSpecifiedConfig } const netlifyGraphImplementationFilename = [...netlifyGraphPath, `index.${baseConfig.extension}`] const netlifyGraphTypeDefinitionsFilename = [...netlifyGraphPath, `index.d.ts`] @@ -74,7 +78,7 @@ const getNetlifyGraphConfig = async ({ command, options }) => { netlifyGraphRequirePath, framework, language, - moduleType + moduleType, } return fullConfig @@ -113,7 +117,11 @@ const generateFunctionsFile = (netlifyGraphConfig, schema, operationsDoc, querie ensureNetlifyGraphPath(netlifyGraphConfig) fs.writeFileSync(path.resolve(...netlifyGraphConfig.netlifyGraphImplementationFilename), clientSource, 'utf8') - fs.writeFileSync(path.resolve(...netlifyGraphConfig.netlifyGraphTypeDefinitionsFilename), typeDefinitionsSource, 'utf8') + fs.writeFileSync( + path.resolve(...netlifyGraphConfig.netlifyGraphTypeDefinitionsFilename), + typeDefinitionsSource, + 'utf8', + ) } /** @@ -191,7 +199,7 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions operationsDoc: currentOperationsDoc, }) - if (!(result)) { + if (!result) { warn(`No handler was generated for operationId ${operationId}`) return } @@ -202,7 +210,7 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions exportedFiles?.forEach((exportedFile) => { const { content } = exportedFile - const isNamed = exportedFile.kind === "NamedExportedFile" + const isNamed = exportedFile.kind === 'NamedExportedFile' let filenameArr @@ -212,25 +220,22 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions const operationName = (operation.name && operation.name.value) || 'Unnamed' const fileExtension = netlifyGraphConfig.language === 'typescript' ? 'ts' : netlifyGraphConfig.extension const defaultBaseFilename = `${operationName}.${fileExtension}` - const baseFilename = defaultBaseFilename; + const baseFilename = defaultBaseFilename - filenameArr = [ - ...netlifyGraphConfig.functionsPath, - baseFilename - ] + filenameArr = [...netlifyGraphConfig.functionsPath, baseFilename] } const absoluteFilename = path.resolve(...filenameArr) - fs.writeFileSync(absoluteFilename, content); - }); + fs.writeFileSync(absoluteFilename, content) + }) } // Export the minimal set of functions that are required for Netlify Graph const { buildSchema, parse } = GraphQL /** - * + * * @param {object} options * @param {string} options.siteName The name of the site as used in the Netlify UI url scheme * @param {string} options.oneGraphSessionId The oneGraph session id to use when generating the graph-edit link From 668c9a91005ce94d60b5532550793f3df189aabe Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Wed, 19 Jan 2022 07:42:20 -0800 Subject: [PATCH 51/58] chore: fix formatting and support node 12 --- src/lib/one-graph/cli-netlify-graph.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 23010022503..946b275834b 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -53,9 +53,7 @@ const getNetlifyGraphConfig = async ({ command, options }) => { const isNextjs = framework === 'Next.js' const detectedFunctionsPathString = getFunctionsDir({ config, options }) const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null - const functionsPath = isNextjs - ? [...siteRoot, 'pages', 'api'] - : [...siteRoot, detectedFunctionsPath] || [...siteRoot, 'functions'] + const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, detectedFunctionsPath] const netlifyGraphPath = isNextjs ? [...siteRoot, 'lib', 'netlifyGraph'] : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] @@ -208,7 +206,11 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions ensureFunctionsPath(netlifyGraphConfig) - exportedFiles?.forEach((exportedFile) => { + if (!exportedFiles) { + return + } + + exportedFiles.forEach((exportedFile) => { const { content } = exportedFile const isNamed = exportedFile.kind === 'NamedExportedFile' From b8b591044eaa2e1a31b4392a691f90a7d83ac215 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 20 Jan 2022 08:28:25 -0800 Subject: [PATCH 52/58] chore: fix tests --- tests/graph-codegen.test.js | 44 +++++++++++++++++++-- tests/snapshots/command.graph.test.js.md | 4 +- tests/snapshots/command.graph.test.js.snap | Bin 502 -> 507 bytes tests/snapshots/graph-codegen.test.js.md | 4 +- tests/snapshots/graph-codegen.test.js.snap | Bin 3330 -> 3332 bytes 5 files changed, 45 insertions(+), 7 deletions(-) diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js index da5bb18dc65..ea13d454198 100644 --- a/tests/graph-codegen.test.js +++ b/tests/graph-codegen.test.js @@ -17,7 +17,7 @@ const netlifyGraphConfig = { extension: 'js', netlifyGraphPath: 'netlify', moduleType: 'commonjs', - functionsPath: 'functions', + functionsPath: ['functions'], netlifyGraphImplementationFilename: 'dummy/index.js', netlifyGraphTypeDefinitionsFilename: 'dummy/index.d.ts', graphQLOperationsSourceFilename: 'dummy/netlifyGraphOperationsLibrary.graphql', @@ -50,7 +50,7 @@ test('netlify graph handler codegen', (t) => { // From the asset GraphQL file const operationId = 'd86699fb-ddfc-4833-9d9a-f3497cb7c992' const handlerOptions = {} - const generatedHandler = generateHandlerSource({ + const result = generateHandlerSource({ netlifyGraphConfig, schema, operationsDoc: appOperationsDoc, @@ -58,5 +58,43 @@ test('netlify graph handler codegen', (t) => { handlerOptions, }) - t.snapshot(normalize(JSON.stringify(generatedHandler))) + if (!result) { + return + } + + const { exportedFiles, operation } = result + + if (!exportedFiles) { + return + } + + const sources = [] + + exportedFiles.forEach((exportedFile) => { + const { content } = exportedFile + const isNamed = exportedFile.kind === 'NamedExportedFile' + + let filenameArr + + if (isNamed) { + filenameArr = [...exportedFile.name] + } else { + const operationName = (operation.name && operation.name.value) || 'Unnamed' + const fileExtension = netlifyGraphConfig.language === 'typescript' ? 'ts' : netlifyGraphConfig.extension + const defaultBaseFilename = `${operationName}.${fileExtension}` + const baseFilename = defaultBaseFilename + + filenameArr = [...netlifyGraphConfig.functionsPath, baseFilename] + } + + const dummyPath = filenameArr.join('|') + + sources.push([dummyPath, content]) + }) + + const textualSource = sources.sort( + ([filenameA], [filenameB]) => filenameA[0].localeCompare(filenameB[0]) + ).map(([filename, content]) => `${filename}: ${content}`).join('/-----------------/') + + t.snapshot(normalize(JSON.stringify(textualSource))) }) diff --git a/tests/snapshots/command.graph.test.js.md b/tests/snapshots/command.graph.test.js.md index 8f3ba385e1e..3d137590b47 100644 --- a/tests/snapshots/command.graph.test.js.md +++ b/tests/snapshots/command.graph.test.js.md @@ -25,7 +25,7 @@ Generated by [AVA](https://avajs.dev). ␊ COMMANDS␊ $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ - $ graph:pull Pull down your local Netlify Graph schema, and process Graph edit events␊ + $ graph:pull Pull down your local Netlify Graph schema, and process pending Graph edit events␊ ` ## netlify graph completion @@ -49,5 +49,5 @@ Generated by [AVA](https://avajs.dev). ␊ COMMANDS␊ $ graph:edit Launch the browser to edit your local graph functions from Netlify␊ - $ graph:pull Pull down your local Netlify Graph schema, and process Graph edit events␊ + $ graph:pull Pull down your local Netlify Graph schema, and process pending Graph edit events␊ ` diff --git a/tests/snapshots/command.graph.test.js.snap b/tests/snapshots/command.graph.test.js.snap index 4c6ee256d789b50e6f92b5eac4bfe8f45c9a59b5..0d166d75649f31a856d5cacdc9f1dd810402d420 100644 GIT binary patch literal 507 zcmV*-hmb9DKcQM3@}T{_{dgB0djfr}oY4{-M;M`# zqFBPdVKs-stIP?lEEL+LdghHm<-iJul)jku_6HQ;5vX-vnfhkBPHo4OjwgrD$D?Tg zb@?`QyBuW=8zL9BmTU3asCUhxO2|@*?ibY+ChdWnK zj6Pe!jODpOYmfiJ6EPOeDH>QK!D%qsI|PF#9<2)*9ug&gdYikC#)(2?%;7U3QLzeP zR)oLRtVS7PHu8Flu;8e|qm{z2{-E94_+?Nxv`{)Y>J29cgX!-F*r~mge@J649Hss7 zaM&B|t@?fy{=Lov7QDcd2j)gEf`%wI^)0nGAa%y%`uq*s7+wAJRAXF}x8Zsbk?VzO xvfnnR%{W$U8-g+7VzPLb8dV-wwL&CycpCg_>7DiOtpA@{{|4uoG@>vD005&f@5cZD literal 502 zcmVvb#3oB0l^B$P}m3%$qlFXWkAWq)krr+mC0TzPx&O?(eZ`citi~ zuG)lL?6J?UKfJu|{5X35=HcbnR?2?w5VA$?CseCL9<;x;AMc`LPoS@rGg^Y<2qSb- z6ie7QtmaU7l{ul6g+iND&%80H99ZFy(ihX-{(u5J0=4cdQ{PP2sqL83@#OINcr*>5 zF5iZ3m!qsE<~1AGCWLzYOYz7D@+4z2W3wF#Y`iJGGbc4{6MWqqILB z4tt}$Ro}0|zt?%df){x5z})CX&=AF@zNPjCq|TUJpTA)nqpP2uYK)8WHe4?va=lPZ s_S@#P8OMrkLoh~MOcw95sw7o-8hmQ$o#pQ=|DRd@250Z%s2~Oa0R9g0`v3p{ diff --git a/tests/snapshots/graph-codegen.test.js.md b/tests/snapshots/graph-codegen.test.js.md index 71c48e7eced..b5843f754aa 100644 --- a/tests/snapshots/graph-codegen.test.js.md +++ b/tests/snapshots/graph-codegen.test.js.md @@ -8,10 +8,10 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 - '{"clientSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIFY_GRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIFY_GRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated NetlifyGraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/"package/": string},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","definition":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/"package/": string}","returnSignature":"{/**/n * Any data retrieved by the function will be returned here/n *//n /"data/": {/n /**/n * The root for npm queries/n *//n /"npm/": {/n /**/n * Find a npm package member by its npm name, e.g. `/"fela/"`/n *//n /"package/": {/n /**/n * The package name, used as an ID in CouchDB/n *//n /"id/": string, /**/n * The first 64K of the README data for the most-recently published version of the package/n *//n /"readme/": string, /**/n * The license for this package/n *//n /"license/": {/n /**/n * A url for the full license/n *//n /"url/": string/n }/n }/n }/n }, /**/n * Any errors in the function will be returned here/n *//n /"errors/": Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netlify","loc":{"start":39,"end":46}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":47,"end":49}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":51,"end":89}},"loc":{"start":47,"end":89}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":91,"end":94}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":96,"end":122}},"loc":{"start":91,"end":122}}],"loc":{"start":38,"end":123}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":128,"end":131}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":138,"end":145}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":146,"end":150}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":153,"end":160}},"loc":{"start":152,"end":160}},"loc":{"start":146,"end":160}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":170,"end":172}},"arguments":[],"directives":[],"loc":{"start":170,"end":172}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":179,"end":185}},"arguments":[],"directives":[],"loc":{"start":179,"end":185}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":192,"end":199}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":210,"end":213}},"arguments":[],"directives":[],"loc":{"start":210,"end":213}}],"loc":{"start":200,"end":221}},"loc":{"start":192,"end":221}}],"loc":{"start":162,"end":227}},"loc":{"start":138,"end":227}}],"loc":{"start":132,"end":231}},"loc":{"start":128,"end":231}}],"loc":{"start":124,"end":233}},"loc":{"start":0,"end":233}}}]}' + '{"clientSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/nconst https = require(/"https/")/nconst crypto = require(/"crypto/")/n/nexports.verifySignature = (input) => {/n const secret = input.secret/n const body = input.body/n const signature = input.signature/n/n if (!signature) {/n console.error(\'Missing signature\')/n return false/n }/n/n const sig = {}/n for (const pair of signature.split(\',\')) {/n const [k, v] = pair.split(\'=\')/n sig[k] = v/n }/n/n if (!sig.t || !sig.hmac_sha256) {/n console.error(\'Invalid signature header\')/n return false/n }/n/n const hash = crypto/n .createHmac(\'sha256\', secret)/n .update(sig.t)/n .update(\'.\')/n .update(body)/n .digest(\'hex\')/n/n if (/n !crypto.timingSafeEqual(/n Buffer.from(hash, \'hex\'),/n Buffer.from(sig.hmac_sha256, \'hex\')/n )/n ) {/n console.error(\'Invalid signature\')/n return false/n }/n/n if (parseInt(sig.t, 10) < Date.now() / 1000 - 300 /* 5 minutes */) {/n console.error(\'Request is too old\')/n return false/n }/n/n return true/n}/n/nconst operationsDoc = `query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}`/n/n/nconst fetch = (appId, options) => {/n var reqBody = options.body || null/n const userHeaders = options.headers || {}/n const headers = {/n ...userHeaders,/n \'Content-Type\': \'application/json\',/n \'Content-Length\': reqBody.length,/n }/n/n var reqOptions = {/n method: \'POST\',/n headers: headers,/n timeout: 88888,/n }/n/n const url = \'https://serve.onegraph.com/graphql?app_id=\' + appId/n/n const respBody = []/n/n return new Promise((resolve, reject) => {/n var req = https.request(url, reqOptions, (res) => {/n if (res.statusCode < 200 || res.statusCode > 299) {/n return reject(/n new Error(/n /"Netlify OneGraph return non - OK HTTP status code/" + res.statusCode,/n ),/n )/n }/n/n res.on(\'data\', (chunk) => respBody.push(chunk))/n/n res.on(\'end\', () => {/n const resString = Buffer.concat(respBody).toString()/n resolve(resString)/n })/n })/n/n req.on(\'error\', (e) => {/n console.error(\'Error making request to Netlify OneGraph: \', e)/n })/n/n req.on(\'timeout\', () => {/n req.destroy()/n reject(new Error(\'Request to Netlify OneGraph timed out\'))/n })/n/n req.write(reqBody)/n req.end()/n })/n}/n/nconst fetchOneGraphPersisted = async function fetchOneGraphPersisted(/n accessToken,/n docId,/n operationName,/n variables,/n) {/n const payload = {/n doc_id: docId,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/nconst fetchOneGraph = async function fetchOneGraph(/n accessToken,/n query,/n operationName,/n variables,/n) {/n const payload = {/n query: query,/n variables: variables,/n operationName: operationName,/n }/n/n const result = await fetch(/n process.env.SITE_ID,/n {/n method: \'POST\',/n headers: {/n Authorization: accessToken ? /"Bearer /" + accessToken : \'\',/n },/n body: JSON.stringify(payload),/n },/n )/n/n // @ts-ignore/n return JSON.parse(result)/n}/n/n/nexports.verifyRequestSignature = (request) => {/n const event = request.event/n const secret = process.env.NETLIFY_GRAPH_WEBHOOK_SECRET/n const signature = event.headers[\'x-onegraph-signature\']/n const body = event.body/n/n if (!secret) {/n console.error(/n \'NETLIFY_GRAPH_WEBHOOK_SECRET is not set, cannot verify incoming webhook request\'/n )/n return false/n }/n/n return verifySignature({ secret, signature, body: body || \'\' })/n}/n/nexports.fetchExampleQuery = (/n variables,/n accessToken,/n) => {/n return fetchOneGraph(accessToken, operationsDoc, /"ExampleQuery/", variables)/n}/n/n/n /n/**/n * The generated NetlifyGraph library with your operations/n *//nconst functions = {/n /**/n * A test query to snapshot/n *//n fetchExampleQuery: exports.fetchExampleQuery/n}/n/nexports.default = functions/n/nexports.handler = async (event, context) => {/n // return a 401 json response/n return {/n statusCode: 401,/n body: JSON.stringify({/n message: \'Unauthorized\',/n }),/n }/n}","typeDefinitionsSource":"// GENERATED VIA NETLIFY AUTOMATED DEV TOOLS, EDIT WITH CAUTION!/n/**/n * A test query to snapshot/n *//nexport function fetchExampleQuery(/n variables: {/"package/": string},/n accessToken?: string/n): Promise}/n>;/n","functionDefinitions":[{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","operationString":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","description":"A test query to snapshot","fnName":"fetchExampleQuery","safeBody":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}","kind":"query","variableSignature":"{/"package/": string}","returnSignature":"{/**/n * Any data retrieved by the function will be returned here/n *//n /"data/": {/n /**/n * The root for npm queries/n *//n /"npm/": {/n /**/n * Find a npm package member by its npm name, e.g. `/"fela/"`/n *//n /"package/": {/n /**/n * The package name, used as an ID in CouchDB/n *//n /"id/": string, /**/n * The first 64K of the README data for the most-recently published version of the package/n *//n /"readme/": string, /**/n * The license for this package/n *//n /"license/": {/n /**/n * A url for the full license/n *//n /"url/": string/n }/n }/n }/n }, /**/n * Any errors in the function will be returned here/n *//n /"errors/": Array}","operationName":"ExampleQuery","parsedOperation":{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ExampleQuery","loc":{"start":6,"end":18}},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":20,"end":27}},"loc":{"start":19,"end":27}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String","loc":{"start":29,"end":35}},"loc":{"start":29,"end":35}},"loc":{"start":29,"end":36}},"directives":[],"loc":{"start":19,"end":36}}],"directives":[{"kind":"Directive","name":{"kind":"Name","value":"netlify","loc":{"start":39,"end":46}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id","loc":{"start":47,"end":49}},"value":{"kind":"StringValue","value":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","block":false,"loc":{"start":51,"end":89}},"loc":{"start":47,"end":89}},{"kind":"Argument","name":{"kind":"Name","value":"doc","loc":{"start":91,"end":94}},"value":{"kind":"StringValue","value":"A test query to snapshot","block":false,"loc":{"start":96,"end":122}},"loc":{"start":91,"end":122}}],"loc":{"start":38,"end":123}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"npm","loc":{"start":128,"end":131}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"package","loc":{"start":138,"end":145}},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"name","loc":{"start":146,"end":150}},"value":{"kind":"Variable","name":{"kind":"Name","value":"package","loc":{"start":153,"end":160}},"loc":{"start":152,"end":160}},"loc":{"start":146,"end":160}}],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id","loc":{"start":170,"end":172}},"arguments":[],"directives":[],"loc":{"start":170,"end":172}},{"kind":"Field","name":{"kind":"Name","value":"readme","loc":{"start":179,"end":185}},"arguments":[],"directives":[],"loc":{"start":179,"end":185}},{"kind":"Field","name":{"kind":"Name","value":"license","loc":{"start":192,"end":199}},"arguments":[],"directives":[],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"url","loc":{"start":210,"end":213}},"arguments":[],"directives":[],"loc":{"start":210,"end":213}}],"loc":{"start":200,"end":221}},"loc":{"start":192,"end":221}}],"loc":{"start":162,"end":227}},"loc":{"start":138,"end":227}}],"loc":{"start":132,"end":231}},"loc":{"start":128,"end":231}}],"loc":{"start":124,"end":233}},"loc":{"start":0,"end":233}},"operationStringWithoutNetlifyDirective":"query ExampleQuery($package: String!) {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}]}' ## netlify graph handler codegen > Snapshot 1 - '{"source":"const { getSecrets } = require(/"@netlify/functions/");/nconst NetlifyGraph = require(/"./netlifyGraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await NetlifyGraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.js`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n/n","operation":{"id":"d88888fb-ddfc-4833-9d9a-f3497cb7c992","name":"ExampleQuery","description":"A test query to snapshot","operation":"query","query":"query ExampleQuery($package: String!) @netlify(id: /"d88888fb-ddfc-4833-9d9a-f3497cb7c992/", doc: /"A test query to snapshot/") {/n npm {/n package(name: $package) {/n id/n readme/n license {/n url/n }/n }/n }/n}"}}' + '"functions|ExampleQuery.js: const { getSecrets } = require(/"@netlify/functions/");/nconst NetlifyGraph = require(/"./netlifyGraph/")/n/nexports.handler = async (event, context) => {/n // By default, all API calls use no authentication/n let accessToken = null;/n/n //// If you want to use the client\'s accessToken when making API calls on the user\'s behalf:/n // accessToken = event.headers[/"authorization/"]?.split(/" /")[1]/n/n //// If you want to use the API with your own access token:/n // accessToken = (await getSecrets(event))?.oneGraph?.bearerToken;/n /n const eventBodyJson = JSON.parse(event.body || /"{}/");/n/n const _package = event.queryStringParameters?.package;/n/n if (_package === undefined || _package === null) {/n return {/n statusCode: 422,/n body: JSON.stringify({/n error: \'You must supply parameters for: `package`\'/n }),/n };/n }/n/n const { errors: ExampleQueryErrors, data: ExampleQueryData } =/n await NetlifyGraph.fetchExampleQuery({ package: _package }, accessToken);/n/n if (ExampleQueryErrors) {/n console.error(JSON.stringify(ExampleQueryErrors, null, 2));/n }/n/n console.log(JSON.stringify(ExampleQueryData, null, 2));/n/n return {/n statusCode: 200,/n body: JSON.stringify({/n success: true,/n ExampleQueryErrors: ExampleQueryErrors,/n ExampleQueryData: ExampleQueryData/n }),/n headers: {/n \'content-type\': \'application/json\',/n },/n };/n};/n/n/** /n * Client-side invocations:/n * Call your Netlify function from the browser (after saving/n * the code to `ExampleQuery.js`) with these helpers:/n *//n/n/**/nasync function fetchExampleQuery(params) {/n const {package} = params || {};/n const resp = await fetch(`/.netlify/functions/ExampleQuery?package=${package}`,/n {/n method: /"GET/"/n });/n/n const text = await resp.text();/n/n return JSON.parse(text);/n}/n*//n"' diff --git a/tests/snapshots/graph-codegen.test.js.snap b/tests/snapshots/graph-codegen.test.js.snap index 4d7b45ff4739075d5066cf418dedf66ab8d4f91f..7870c642fa6d797e6112c3b068a185a6fec5046d 100644 GIT binary patch literal 3332 zcmV+f4g2yzRzV0V>k2y z8Uulw%)=qk>5PV{iOQt(b!w39hvd=@39)UmHzyt)xmf^kHweh?VUG;qLqf8Ik}x7} zmX3kiAG)X=QUx?6?r=zxq#vEr5X6L85Zt#z&JvjRMr0mkl3K<1Z#(+PdV>cK%Lglh-b~kHGU601eOS^&kMzQ~6u5ROa$4aJw zpMuQ@nCWHn_MJPl94#-@thVEXteyaGH8{IH=tSF?+OFPzpx-pFz z$$jL4|L`w&HY3=Jy!nSoge*TiI(TMH-8i9~mo)$w`SMG+$K`@YNkM!vb%*Ef8O<&7 z3S;mnjlr&mZtPBI3ijEt1e&1rM?^0ux3@_aLNxdx^-xX;f<88Q*boTBG>b#|jgTaD z(=2%udDJ1Bt(GazQDcW+Bw?yR#OgT}AvBJo*df|y;Dt#B*GRJIG?2VgGpM3QN1^E38J&Bc;H3L9FVx|Ox2aGjSXSt zs~wqS?A{JZ#n(fw34htAJoutTd;UMsaHJf&(~EgT^$N;>D267V6m{ujPfrT1>K}k&z`b zLBuBZ91h03zT`Q>QDT}*u~V?9XH4}|+p2dZRn(4PyZvr1;8a*P_XVWyIPx4QR*$=V zyCHoiVoplOew0f`RV+Nw3p5d&N-bn93_WLuXq`r>8~;$dZ16U71b!OQhSPvj{kZ$A z`+T?G-6t=4yX0B7|FrkPXJq%2{=vuWbiez8^bZc69+{-O-|Lf4d;KTm5x{!~&u+N8cbw8YDN@M2y64pro%%B$k zT7X$QkU;#RP%69yu{^(Hz$ zp1M9X(^0`pG-l1zjFJK=d3kP<*)fY*KbC0QQaCVpd5+MTB3fR^N-@IOr}4xco+M+p zwRLCJ1$*Jl4SY|r7cVL|y64zUa3~WlX80C($W7@JkgRK5v}OuF3YJzjg$_h@rfcO) zv$VX)|{uxcc5M%mUGm2Yt=q;{>mHHF#*pWM;-B+0#=rSGmveAgf7S<^p6*mdz zV=hCeSWn_|RQBh_2EE3TcmbByy)fk_F-dd7AP)!>d}@W!g>DcVjy5*PI%&iI_HD97 z;Eq{J6DW_X6nPFQ2-YG#PHhp10`D44#4&a-R$F9JM^K7+6WEW2;OY0f_we6nut)d$V(QIJi6PbXs-;hLdQB=(|uD zK{gi!B_#>nX)=ydC?x#8;dCM|E@bN=OiT`usu)Ej_C5Itg43H&`3*WF4WZpA^H>%K z`G6%VwlLA+lrEL0S*nHysj+~Xxmfb#(sCy*kKaL9kcd%1!u zx;yVzO48+sLT$^k6b2%kwMSwQ=wCAk<826!)Q#>VOsnGin0x3p!NVPkvWmz*Mnfo=!UGXDUW8 z2{KU$c}l~fRSc4l%`i!#CoAU-MZ<#&ZC zX`LK=M4t5fhhnZ}6Bw+5?^RSWRi=jW%~0~8NTURNqHDNGKzY}P<19R9Mv#WLrdcu; z=SH27h91(D?WQ=7R}nD2D9QkU*wrO>!%8ELq8qB|m^byDzEIte(^oN7z2b_XK~WW2 z)}>NRncd}*ErHSCLUmX!V;2B5r;zl9{3cu$yeTih2SRO&{#!~qg zv7e%CSaKW1IkZ=-EN7HfK106# zkoVJM9fp)Brb>BK)(mcnD}v&hSXdeYtf7DH5MW#!h1quz@Sl%>>iQ;%QE7`4rLnrl zu?IP^76RB}-azO{oh-P6CQ^bUvIW?^)@zRsEHxzVYH5aQ{TzFUNSW0^pxx74>5Y4JEocD7< zMVR4}FnjPJw@H6Y$r%li2{fP5uK|HSh+WWFd8p2X+5F*16fOCLBMS&;4%}C683?uU z|C)guveI@H+lpTmKxpxX^e_HKA?)mu&5b6(>7C74z)(%xCC`_Dexv8h2{?>xZ`voJ z{P}=-`CFkOtK_0#Ht=O}AD_s5cBOygE0gs36<$H7a06cT4p<6ctho)b6WR@j@ar$C zalIoU5Z{j65FQ}XWf3mnoIReS#bY1*<&nXhJ!|I5T=+pi22}V25XO{OR~}BV2jeqt zqtpm;{uu0W1cd@0jc~z56ZkYy>EU=4`3HXJL5v`we375f$pB&uwDi-2L2yZi5!E`g z$f?~J(EzkLRRt)fTBW1p&UwM|31SoChNQO-#f?0Qvf+4tPh|=lcy4;L%xvVx;Osk_ zAK}v&+VXjKcmLxqH#8ao&n8iluE!MC^%Q>`$p(R+j6v)S=S?uXAeFi+lEucqO1gXk z;DVrLFJU2YR#{}1?W|JM5p4F7tI7l)78*s2vAkOPM^O;tjsK8?W_`0b<8&x;H;&!; z12>#M1Q8GK+aV;eo?668l zG(4L+0jE~A0GPNVird+@+LW+jd(r^#Ro3x*)B)Jif)2Pm8OoU7)$Z?V_y0xhRx7Tk zA(isMmNxG|A~l>#nN0avQSViDO1g!Nb56(vVG;(}5`jT9L|m9S#ktttTw4H1Da=#4rM#CrmC zwPvC{))bSn+go+TZV0@CK+lKdO8pr{10S!vA|fAGuyd97<>|Gz5gn&?owk&-$&_;A zvupwxUy`yb4zCpgV@Q?%=3U9Z!^4YV<_x%zU$E1H&kZM;0f;(pIBeCf%H3)Tx%WDC zPvlB5;G5qQ8gcES9VxK0dGm{2F>zdVxlW$5tycYZxh4!+i>&s&9NcE$ga(vVxFedX z8mq?&Rw*<-@M+*(AAHkE&0ft`u1C9B4ZUi>|5vnJRf?L0#WuITev*XzYemLp?$WJ| zW%2X13u<$#EhXI9SW;5AT33P#{Sf?(_-9FVY2KA>qItJ&4S^44Y!Z`a8;%D~Ew|EZsjqbwEAu*J}D(|z@u+A0^v Oi+=*58)V(>E&u@4_-OS2 literal 3330 zcmV+d4gK;#RzVaQA}P%bIo8P1h#tuvOUjTQmupIvK%yza0s#&dX&9M@ z9J2gGs&dLXmt67(sY>~jpGf7DQ?7Zh7oY)`|p58qi?`GfVFuZ`aL_ka1>@6PRC|GD=TTOBzoE8koB z0mFLh`zt?sd*z)gEs3&tNVSeOjKU-(SLBSQJvxkOnvgl!Br$!R`7t#d?Sqh}fj^o# zqbwYzKA=0A`Pd0L;QpWBpO7mjB*byZ&Ww0;m`|h9D-)g5a?ea+bh!e?(?cMlRhjC27Ps0TVI|eBh)fCF)DyPA2ZTAD$_~ zqmWSmWeoTOI(CCmN2pwu&Gu%Gsq4`=dF5!RZxs7K{KHS~Y(}sX zd9#m_2w8sAJ3O$bZk$lg%N_uXeDxLV<7&>Mq#!<-y2Eq#jOG@3ozZyKOJlI>ksG@c znu2|{Y=I_d{Sh$=%FRuZg%AyXNIjHOf}oF09ySC5G0oyo{vsqv-84&{Mjq{u^=8wO z>!@*uZzN%=K*Sn36(KZ^qqsx#&%q0m47QPE(`hgx(_CXRLWEPH$*C@B=cW)cXO^6+ zwz%SalMd;=aVOJ&{se8&Wos7k+|(^Yc3}n6k~8FvR5Q;W(R4UgDU2&3H0l&qnp5y zWBcxqG|p)5{JQoF9kK|0ccG7j!=>j%&UcD1)LDfK)75k~r8>lw3(+Ji*O!o0x(pij ziJ>!RMsV)m$3(nOp0X0Pn)n_ies~da+N8sQSRh$V5Ya(o(I%rfny}h2h@(p=T2K#0 z5WXaFFThxgnpHqBD^{9Qb!+yQ$*IW;4&Xoy8q;8k8$&WjsON;dmKPFhG0BofMwZ9~ z5u14Ca4_ce70(%t64PXgCk2ao#?&}1XI;`bIa4U32I?u7;iZ6YyBi9ntRV%nb~gI6K*BL}MFI z4g(dp2achI#U`gBnE42Gz%1vUC#+pgqCvXH)JB%(3lQ^)nwnkP- z3;sLz$p(QvW>AaZz*?rr3rImMRzCL85s3ot22I2=_7tqz%cRbWZn7HE zS_5Gec5<^hWIEmVEHDzYP*K1x+!(9i4lhvxoR1XP6Bc=dW7i(&01q%&i@1Y+Z_WF9YT^yGb zgY=|PmUak>2bH_9MH~QQot-Ql$AOJqP#o#b*kmw_CJy`dI@p38o%r6SPTnKT2`U$C zZG`Dx9hbs8q?hCfQrw5u#sIV^xS$pQzobLu_{sMQ445i*%+tvL{Vc@@7C|N|Ax~*o zw2RgrvKe}N^kilI32C<5rW$}kO|FnptP`d=>)}hQFwttVJw6nZZ@yRPTUW{9$7HYH zKN6D$>xp4Ff3Kp7r7|^@U#5}|MH(gG6GO+@4$8YR9B1JVsWcJ%^{pcUbirvH&59j~7%2Rn*YpLFSz>tvxtj~+U&ellwqeO_ z7VF>&E)vn_l?o@hA3*~9NeTkwC0BVcs^PI1RmO7`P*B^UR^qq(OgVs>ZHe0AyMusY zohZ#zQ+F0bu2)nW;BtazO2JK`?vxlIs3fYhK=Qm&IIshG&vKpt=^k;O1E2EkkUKs>WZ*LRbjxp;5)zm;zwA{EDhnNypJOvq{%8Y zDN#(7@~8}c+!WUY#SO8rFa+3v{*6O`ap@?`zKei=e*{#=H&KjAQ=BM`)j5t`k&3Yp zz&886V9ZkuEQZvRXD_yo_D(+Q?(7{NetgpFK7G;cFP`(tSJV2NRoOPI7R~r^ZF(&3 zdeu3K4=jsYYiV-*Iu)_+4kO$fz67`-e&=?Bc@)|hJV-9-U>rr~(k!|%Ufk5BS0-rV zN*K{9EMke6kUgia7bRYLvUaP5PORo)HH!=HN*zmSuOgR+2MeNE6^8wOE~p4IyrgGW zaO6Jek108$Au@r(r}RD(_=DI5jg_Z^T$sbJ@+muj+raOS{$>6C#`2mjX$)FDf4 zSFx>l=K-O`t=>QRY9#FJlJ&I)!S0>)S-?g?Ap?uJxUVeLP z$|^b6EDi5^ck$7}XIuIg-ZDv_U*i>Y3OC?&H?ySx#+s{%nb6TXgl~Udjq5E5f%xvo z3E_Q2x+=mYoU!K&w0P`;zdSOSv5V$hnM*$i$bbr;0K%B^>dM0j=3u;7*GdOL&L4w4 zj-XKBr4bIeXab)mDm^SOBmdA3J%|w`ly4*xIvGHWftG%nFbEFG(4yLBHaT^)5e-0_ zQ&oUss%1J#?wl74pCC3NZb;Mycg($$#4xSry3RW=CxWDH_2u-^o;3sR}OB3VrQ%cRRI04@k>_5v0H zXPHH|*~}_69l>NTxvEU?VnHinjOEqB4@E(YH~zGSX1!aSaXJ*a9mnqMeK(vv0TE9g zvkQF5M@eL@^XhJQ`Cd-@Exvuf!{fz>HJpG`D_8(b+!4jW>|1S0n65qLWk;6qyvqUD z!decvJP*p4-<9p}%J%<7*;ZdZ4;H?lvU$xrRG(!=0jAg3~aPZ zKOc_h3DEVL@oHUHOv-L;)D^oW@BsonACfEeFDM%LcFN~yclNAfE)QGTP^t9 zvWXdhsB^8urtGTRjfRl>s9pC&t`q~_eV=d;*EZUg0^94i-{>_R$90=)=Q-PK)_0d{ z!l1RtYCX!qEe1|#Kv{+B(Nxt~T~@G4q4A+l1MlYGn@(!>YBX~_T8(PxRRjJ%qUEwu z)F>>rzVXeIB;-FUGS+jKZmcbepKn}H8yhVt;lbL1lDg5n7F_6u;Qxw$7F3tULwQUz z9yV_gMAuW_Q6JvsEYPW)pQyEPxrI(;>O1Nrx}dsJ?cBZX_Wwk-L336=TO0YQ-)P<0 zbQS74d@YAJ8;hEXrV6fm=0O2p)RW{@f`RMgt(?5INP1ol8Msc~T+iXHI{BIkoFC8s M0Zc29OQ0_R00&=MBme*a From 107dfe268946c28e185c76828827527463194116 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Thu, 20 Jan 2022 08:30:08 -0800 Subject: [PATCH 53/58] chore: fix formatting --- tests/graph-codegen.test.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/graph-codegen.test.js b/tests/graph-codegen.test.js index ea13d454198..06d004645dd 100644 --- a/tests/graph-codegen.test.js +++ b/tests/graph-codegen.test.js @@ -92,9 +92,10 @@ test('netlify graph handler codegen', (t) => { sources.push([dummyPath, content]) }) - const textualSource = sources.sort( - ([filenameA], [filenameB]) => filenameA[0].localeCompare(filenameB[0]) - ).map(([filename, content]) => `${filename}: ${content}`).join('/-----------------/') + const textualSource = sources + .sort(([filenameA], [filenameB]) => filenameA[0].localeCompare(filenameB[0])) + .map(([filename, content]) => `${filename}: ${content}`) + .join('/-----------------/') t.snapshot(normalize(JSON.stringify(textualSource))) }) From 068a1b87cd90aca976b536bcb83b3f8e2ea9c197 Mon Sep 17 00:00:00 2001 From: Lukas Holzer Date: Fri, 21 Jan 2022 11:33:39 +0100 Subject: [PATCH 54/58] chore: regenerate lock file --- npm-shrinkwrap.json | 6230 ++++++++++++++++++++++++++++++++----------- 1 file changed, 4680 insertions(+), 1550 deletions(-) diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index b2d35d4c8db..4aa9ad16bfc 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -155,6 +155,7 @@ }, "node_modules/@babel/code-frame": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dependencies": { "@babel/highlight": "^7.16.7" @@ -172,18 +173,19 @@ } }, "node_modules/@babel/core": { - "version": "7.16.5", - "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.5", - "@babel/helper-compilation-targets": "^7.16.3", - "@babel/helper-module-transforms": "^7.16.5", - "@babel/helpers": "^7.16.5", - "@babel/parser": "^7.16.5", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.5", - "@babel/types": "^7.16.0", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.10.tgz", + "integrity": "sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA==", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -201,6 +203,7 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" @@ -208,6 +211,7 @@ }, "node_modules/@babel/eslint-parser": { "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz", "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==", "dev": true, "dependencies": { @@ -225,6 +229,7 @@ }, "node_modules/@babel/eslint-parser/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { @@ -246,6 +251,7 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dependencies": { "@babel/types": "^7.16.7" @@ -285,15 +291,16 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", + "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", @@ -343,6 +350,22 @@ "@babel/core": "^7.4.0-0" } }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -353,6 +376,7 @@ }, "node_modules/@babel/helper-environment-visitor": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "dependencies": { "@babel/types": "^7.16.7" @@ -374,6 +398,7 @@ }, "node_modules/@babel/helper-function-name": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dependencies": { "@babel/helper-get-function-arity": "^7.16.7", @@ -386,6 +411,7 @@ }, "node_modules/@babel/helper-get-function-arity": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dependencies": { "@babel/types": "^7.16.7" @@ -396,6 +422,7 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dependencies": { "@babel/types": "^7.16.7" @@ -417,6 +444,7 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dependencies": { "@babel/types": "^7.16.7" @@ -456,6 +484,7 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "engines": { "node": ">=6.9.0" @@ -513,6 +542,7 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dependencies": { "@babel/types": "^7.16.7" @@ -523,6 +553,7 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "engines": { "node": ">=6.9.0" @@ -530,6 +561,7 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "engines": { "node": ">=6.9.0" @@ -550,20 +582,22 @@ } }, "node_modules/@babel/helpers": { - "version": "7.16.5", - "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.5", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.7", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -575,6 +609,7 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" @@ -585,6 +620,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", @@ -597,6 +633,7 @@ }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -604,6 +641,7 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" @@ -611,6 +649,7 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" @@ -620,9 +659,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.10.tgz", + "integrity": "sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -847,11 +886,11 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.10", "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { @@ -964,6 +1003,7 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", "dev": true, "dependencies": { @@ -1418,6 +1458,7 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", "dev": true, "dependencies": { @@ -1432,6 +1473,7 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", "dev": true, "dependencies": { @@ -1450,6 +1492,7 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", "dev": true, "dependencies": { @@ -1464,6 +1507,7 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", "dev": true, "dependencies": { @@ -1606,9 +1650,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", - "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", "dependencies": { "@babel/compat-data": "^7.16.8", "@babel/helper-compilation-targets": "^7.16.7", @@ -1628,7 +1672,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.16.7", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", "@babel/plugin-proposal-private-property-in-object": "^7.16.7", "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -1717,6 +1761,7 @@ }, "node_modules/@babel/preset-react": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "dependencies": { @@ -1747,6 +1792,7 @@ }, "node_modules/@babel/template": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dependencies": { "@babel/code-frame": "^7.16.7", @@ -1758,9 +1804,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.16.8", @@ -1768,7 +1814,7 @@ "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", + "@babel/parser": "^7.16.10", "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1791,19 +1837,22 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "node_modules/@bugsnag/browser": { - "version": "7.14.1", - "integrity": "sha512-xenvisYx6xFNuh7GGR/SCLcRs2H6AXn58Ha/u/Yhk+typ1oE5EFAy15+2vdGMDmZp0GsAEgrOTsEZ30uSKdC1w==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.15.1.tgz", + "integrity": "sha512-9JyoadlU4Tj5wnu2NnSfvYX2n31FC7jBdsMF0JdWrrOMFH0htmjUL9JMDv3zXFtOfeez2GMDivwc/dJPXTUEkA==", "dependencies": { - "@bugsnag/core": "^7.14.0" + "@bugsnag/core": "^7.15.1" } }, "node_modules/@bugsnag/core": { - "version": "7.14.0", - "integrity": "sha512-DKN7hNEA6zEOgnucihgNEiMmx4GVaFHD9dJUYQFiouAIL19R/TLgG6B+pGC+QAqHVYsCUt5XDnG8jD+J+3fKOA==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.15.1.tgz", + "integrity": "sha512-fwEYdQEYQhLqFYz8ZoWFCfSVGE5rEhdu/7TtHRDCNs9VwVabb3iAfFwYS8ShLeMPf0K6NaLQ1UC531cI5KEFVA==", "dependencies": { "@bugsnag/cuid": "^3.0.0", "@bugsnag/safe-json-stringify": "^6.0.0", @@ -1814,21 +1863,24 @@ }, "node_modules/@bugsnag/cuid": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.0.tgz", "integrity": "sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg==" }, "node_modules/@bugsnag/js": { - "version": "7.14.1", - "integrity": "sha512-ygykhixXByzolFpOsUGr72ENgiL1t4TkvKvka2rhoSHOr5kul9TierjvmwBKNpkPdUpDNkgqw3y349jYzzjk+w==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.15.1.tgz", + "integrity": "sha512-+RjoaWFPnN9TO3oiMdFVmrQQS5ywnNGp/4aFr+UNcOgvB9V8AqwQi9yNqnbvqAPwXFvPYI3obq2n0VMiiHAPXA==", "dependencies": { - "@bugsnag/browser": "^7.14.1", - "@bugsnag/node": "^7.14.1" + "@bugsnag/browser": "^7.15.1", + "@bugsnag/node": "^7.15.1" } }, "node_modules/@bugsnag/node": { - "version": "7.14.1", - "integrity": "sha512-QhdFez60rTlEueg5rA0W6x8UrTcEnssv4XVPgfooGe2fYh6O89RFjI7zVVdw8QXUyqdf7w4WzyAsCir3XEhCqQ==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.15.1.tgz", + "integrity": "sha512-8yBXQqQumu35endZToKKEOPWZAGZ6BA1IHNI0ivW4u4sym9KnROED1uxYCyXlOPj6BNIdwUKKLhU8jGzdxppJQ==", "dependencies": { - "@bugsnag/core": "^7.14.0", + "@bugsnag/core": "^7.15.1", "byline": "^5.0.0", "error-stack-parser": "^2.0.2", "iserror": "^0.0.2", @@ -1838,16 +1890,18 @@ }, "node_modules/@bugsnag/safe-json-stringify": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" }, "node_modules/@commitlint/cli": { - "version": "16.0.1", - "integrity": "sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-x5L1knvA3isRWBRVQx+Q6D45pA9139a2aZQYpxkljMG0dj4UHZkCnsYWpnGalxPxASI7nrI0KedKfS2YeQ55cQ==", "dev": true, "dependencies": { "@commitlint/format": "^16.0.0", "@commitlint/lint": "^16.0.0", - "@commitlint/load": "^16.0.0", + "@commitlint/load": "^16.1.0", "@commitlint/read": "^16.0.0", "@commitlint/types": "^16.0.0", "lodash": "^4.17.19", @@ -1864,6 +1918,7 @@ }, "node_modules/@commitlint/config-conventional": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-16.0.0.tgz", "integrity": "sha512-mN7J8KlKFn0kROd+q9PB01sfDx/8K/R25yITspL1No8PB4oj9M1p77xWjP80hPydqZG9OvQq+anXK3ZWeR7s3g==", "dev": true, "dependencies": { @@ -1874,8 +1929,9 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "16.0.0", - "integrity": "sha512-i80DGlo1FeC5jZpuoNV9NIjQN/m2dDV3jYGWg+1Wr+KldptkUHXj+6GY1Akll66lJ3D8s6aUGi3comPLHPtWHg==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-16.1.0.tgz", + "integrity": "sha512-2cHeZPNTuf1JWbMqyA46MkExor5HMSgv8JrdmzEakUbJHUreh35/wN00FJf57qGs134exQW2thiSQ1IJUsVx2Q==", "dev": true, "dependencies": { "@commitlint/types": "^16.0.0", @@ -1885,28 +1941,9 @@ "node": ">=v12" } }, - "node_modules/@commitlint/config-validator/node_modules/ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/@commitlint/ensure": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-16.0.0.tgz", "integrity": "sha512-WdMySU8DCTaq3JPf0tZFCKIUhqxaL54mjduNhu8v4D2AMUVIIQKYMGyvXn94k8begeW6iJkTf9cXBArayskE7Q==", "dev": true, "dependencies": { @@ -1919,6 +1956,7 @@ }, "node_modules/@commitlint/execute-rule": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-16.0.0.tgz", "integrity": "sha512-8edcCibmBb386x5JTHSPHINwA5L0xPkHQFY8TAuDEt5QyRZY/o5DF8OPHSa5Hx2xJvGaxxuIz4UtAT6IiRDYkw==", "dev": true, "engines": { @@ -1927,6 +1965,7 @@ }, "node_modules/@commitlint/format": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-16.0.0.tgz", "integrity": "sha512-9yp5NCquXL1jVMKL0ZkRwJf/UHdebvCcMvICuZV00NQGYSAL89O398nhqrqxlbjBhM5EZVq0VGcV5+7r3D4zAA==", "dev": true, "dependencies": { @@ -1939,6 +1978,7 @@ }, "node_modules/@commitlint/is-ignored": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-16.0.0.tgz", "integrity": "sha512-gmAQcwIGC/R/Lp0CEb2b5bfGC7MT5rPe09N8kOGjO/NcdNmfFSZMquwrvNJsq9hnAP0skRdHIsqwlkENkN4Lag==", "dev": true, "dependencies": { @@ -1951,6 +1991,7 @@ }, "node_modules/@commitlint/lint": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-16.0.0.tgz", "integrity": "sha512-HNl15bRC0h+pLzbMzQC3tM0j1aESXsLYhElqKnXcf5mnCBkBkHzu6WwJW8rZbfxX+YwJmNljN62cPhmdBo8x0A==", "dev": true, "dependencies": { @@ -1964,13 +2005,14 @@ } }, "node_modules/@commitlint/load": { - "version": "16.0.0", - "integrity": "sha512-7WhrGCkP6K/XfjBBguLkkI2XUdiiIyMGlNsSoSqgRNiD352EiffhFEApMy1/XOU+viwBBm/On0n5p0NC7e9/4A==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-16.1.0.tgz", + "integrity": "sha512-MtlEhKjP8jAF85jjX4mw8DUUwCxKsCgAc865hhpnwxjrfBcmGP7Up2AFE/M3ZMGDmSl1X1TMybQk/zohj8Cqdg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^16.0.0", + "@commitlint/config-validator": "^16.1.0", "@commitlint/execute-rule": "^16.0.0", - "@commitlint/resolve-extends": "^16.0.0", + "@commitlint/resolve-extends": "^16.1.0", "@commitlint/types": "^16.0.0", "chalk": "^4.0.0", "cosmiconfig": "^7.0.0", @@ -1985,6 +2027,7 @@ }, "node_modules/@commitlint/message": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-16.0.0.tgz", "integrity": "sha512-CmK2074SH1Ws6kFMEKOKH/7hMekGVbOD6vb4alCOo2+33ZSLUIX8iNkDYyrw38Jwg6yWUhLjyQLUxREeV+QIUA==", "dev": true, "engines": { @@ -1993,6 +2036,7 @@ }, "node_modules/@commitlint/parse": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-16.0.0.tgz", "integrity": "sha512-F9EjFlMw4MYgBEqoRrWZZKQBzdiJzPBI0qFDFqwUvfQsMmXEREZ242T4R5bFwLINWaALFLHEIa/FXEPa6QxCag==", "dev": true, "dependencies": { @@ -2006,6 +2050,7 @@ }, "node_modules/@commitlint/read": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-16.0.0.tgz", "integrity": "sha512-H4T2zsfmYQK9B+JtoQaCXWBHUhgIJyOzWZjSfuIV9Ce69/OgHoffNpLZPF2lX6yKuDrS1SQFhI/kUCjVc/e4ew==", "dev": true, "dependencies": { @@ -2019,11 +2064,12 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "16.0.0", - "integrity": "sha512-Z/w9MAQUcxeawpCLtjmkVNXAXOmB2nhW+LYmHEZcx9O6UTauF/1+uuZ2/r0MtzTe1qw2JD+1QHVhEWYHVPlkdA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-16.1.0.tgz", + "integrity": "sha512-8182s6AFoUFX6+FT1PgQDt15nO2ogdR/EN8SYVAdhNXw1rLz8kT5saB/ICw567GuRAUgFTUMGCXy3ctMOXPEDg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^16.0.0", + "@commitlint/config-validator": "^16.1.0", "@commitlint/types": "^16.0.0", "import-fresh": "^3.0.0", "lodash": "^4.17.19", @@ -2036,6 +2082,7 @@ }, "node_modules/@commitlint/rules": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-16.0.0.tgz", "integrity": "sha512-AOl0y2SBTdJ1bvIv8nwHvQKRT/jC1xb09C5VZwzHoT8sE8F54KDeEzPCwHQFgUcWdGLyS10kkOTAH2MyA8EIlg==", "dev": true, "dependencies": { @@ -2051,6 +2098,7 @@ }, "node_modules/@commitlint/to-lines": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-16.0.0.tgz", "integrity": "sha512-iN/qU38TCKU7uKOg6RXLpD49wNiuI0TqMqybHbjefUeP/Jmzxa8ishryj0uLyVdrAl1ZjGeD1ukXGMTtvqz8iA==", "dev": true, "engines": { @@ -2059,6 +2107,7 @@ }, "node_modules/@commitlint/top-level": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-16.0.0.tgz", "integrity": "sha512-/Jt6NLxyFkpjL5O0jxurZPCHURZAm7cQCqikgPCwqPAH0TLgwqdHjnYipl8J+AGnAMGDip4FNLoYrtgIpZGBYw==", "dev": true, "dependencies": { @@ -2070,6 +2119,7 @@ }, "node_modules/@commitlint/types": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-16.0.0.tgz", "integrity": "sha512-+0FvYOAS39bJ4aKjnYn/7FD4DfWkmQ6G/06I4F0Gvu4KS5twirEg8mIcLhmeRDOOKn4Tp8PwpLwBiSA6npEMQA==", "dev": true, "dependencies": { @@ -2081,6 +2131,7 @@ }, "node_modules/@concordance/react": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@concordance/react/-/react-2.0.0.tgz", "integrity": "sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==", "dev": true, "dependencies": { @@ -2092,6 +2143,7 @@ }, "node_modules/@concordance/react/node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { @@ -2100,6 +2152,7 @@ }, "node_modules/@cspotcode/source-map-consumer": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "engines": { "node": ">= 12" @@ -2107,6 +2160,7 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" @@ -2117,6 +2171,7 @@ }, "node_modules/@dabh/diagnostics": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", "dependencies": { "colorspace": "1.1.x", @@ -2126,6 +2181,7 @@ }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { @@ -2143,23 +2199,9 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { @@ -2168,6 +2210,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { @@ -2182,6 +2225,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { @@ -2190,6 +2234,7 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { @@ -2200,13 +2245,9 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { @@ -2218,6 +2259,7 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "dependencies": { @@ -2231,11 +2273,13 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "engines": { @@ -2244,6 +2288,7 @@ }, "node_modules/@jest/types": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -2258,6 +2303,7 @@ }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "dependencies": { "detect-libc": "^1.0.3", @@ -2276,6 +2322,7 @@ }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dependencies": { "call-me-maybe": "^1.0.1", @@ -2353,6 +2400,7 @@ }, "node_modules/@netlify/build/node_modules/@sindresorhus/is": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", "engines": { "node": ">=10" @@ -2361,13 +2409,9 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@netlify/build/node_modules/@types/node": { - "version": "16.11.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" - }, "node_modules/@netlify/build/node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" @@ -2381,6 +2425,7 @@ }, "node_modules/@netlify/build/node_modules/cacheable-lookup": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "dependencies": { "@types/keyv": "^3.1.1", @@ -2392,6 +2437,7 @@ }, "node_modules/@netlify/build/node_modules/decompress-response": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", "dependencies": { "mimic-response": "^2.0.0" @@ -2402,6 +2448,7 @@ }, "node_modules/@netlify/build/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -2415,6 +2462,7 @@ }, "node_modules/@netlify/build/node_modules/got": { "version": "10.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "dependencies": { "@sindresorhus/is": "^2.0.0", @@ -2442,6 +2490,7 @@ }, "node_modules/@netlify/build/node_modules/got/node_modules/type-fest": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", "engines": { "node": ">=8" @@ -2452,6 +2501,7 @@ }, "node_modules/@netlify/build/node_modules/mimic-response": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "engines": { "node": ">=8" @@ -2460,19 +2510,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@netlify/build/node_modules/resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@netlify/build/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" @@ -2481,50 +2521,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@netlify/build/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@netlify/build/node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@netlify/build/node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "engines": { - "node": ">=12" - } - }, "node_modules/@netlify/cache-utils": { - "version": "4.0.0", - "integrity": "sha512-8BNDYMkkrkmlfwNaSeRqOhGu8lETc2ixM6bmvDAXuE5TcNNAActWcWurocwS419HNwyTw1kSEUKLp6Vx5/wiBg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-4.1.2.tgz", + "integrity": "sha512-CRqJLmoyBipU2fjaOeBmH9VgNGnm2kp6yuoN5PoEgzPFnB4t1mBCtEw7hes00jb5KJqBON7ESLS+4pSKr7W61Q==", "dependencies": { "cpy": "^8.1.0", - "del": "^5.1.0", + "del": "^6.0.0", "get-stream": "^6.0.0", "globby": "^11.0.0", "junk": "^3.1.0", "locate-path": "^6.0.0", - "make-dir": "^3.1.0", "move-file": "^2.0.0", "path-exists": "^4.0.0", "readdirp": "^3.4.0" @@ -2533,58 +2540,15 @@ "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, - "node_modules/@netlify/cache-utils/node_modules/del": { - "version": "5.1.0", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "dependencies": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/cache-utils/node_modules/del/node_modules/globby": { - "version": "10.0.2", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/cache-utils/node_modules/p-map": { - "version": "3.0.0", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@netlify/config": { - "version": "17.0.3", - "integrity": "sha512-u1x//PEqKvsExPQtRMG4x786mKcAV6ykwqiN102szLlr5Dojb7X5y+6vb9wi4JJ/KNiVURP7Wna/sMxGvFi/Tw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@netlify/config/-/config-17.0.6.tgz", + "integrity": "sha512-fX9C/FCsIq+8KfiHEo+PtAV7ZL8GxCzLYjAPQosdTg+CledhPtKnEvM1i20YAaJnpeV1UJ4l3tIMQ11zfTdH7g==", "dependencies": { "chalk": "^4.1.2", "cron-parser": "^4.1.0", "deepmerge": "^4.2.2", - "dot-prop": "^5.3.0", + "dot-prop": "^6.0.0", "execa": "^5.1.1", "fast-safe-stringify": "^2.0.7", "figures": "^3.2.0", @@ -2593,11 +2557,10 @@ "indent-string": "^4.0.0", "is-plain-obj": "^3.0.0", "js-yaml": "^4.0.0", - "make-dir": "^3.1.0", "map-obj": "^4.0.0", - "netlify": "^10.1.1", - "netlify-headers-parser": "^6.0.0", - "netlify-redirect-parser": "^13.0.0", + "netlify": "^10.1.2", + "netlify-headers-parser": "^6.0.1", + "netlify-redirect-parser": "^13.0.1", "omit.js": "^2.0.2", "p-locate": "^5.0.0", "path-exists": "^4.0.0", @@ -2605,7 +2568,7 @@ "toml": "^3.0.0", "tomlify-j0.4": "^3.0.0", "validate-npm-package-name": "^3.0.0", - "yargs": "^15.3.0" + "yargs": "^17.3.1" }, "bin": { "netlify-config": "src/bin/main.js" @@ -2614,159 +2577,9 @@ "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, - "node_modules/@netlify/config/node_modules/ansi-styles": { - "version": "4.3.0", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@netlify/config/node_modules/camelcase": { - "version": "5.3.1", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@netlify/config/node_modules/cliui": { - "version": "6.0.0", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/@netlify/config/node_modules/color-convert": { - "version": "2.0.1", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@netlify/config/node_modules/color-name": { - "version": "1.1.4", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@netlify/config/node_modules/dot-prop": { - "version": "5.3.0", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/config/node_modules/get-caller-file": { - "version": "2.0.5", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/@netlify/config/node_modules/locate-path": { - "version": "5.0.0", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/config/node_modules/locate-path/node_modules/p-locate": { - "version": "4.1.0", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/config/node_modules/p-limit": { - "version": "2.3.0", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@netlify/config/node_modules/wrap-ansi": { - "version": "6.2.0", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/config/node_modules/y18n": { - "version": "4.0.3", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "node_modules/@netlify/config/node_modules/yargs": { - "version": "15.4.1", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@netlify/config/node_modules/yargs-parser": { - "version": "18.1.3", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@netlify/config/node_modules/yargs/node_modules/find-up": { - "version": "4.1.0", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@netlify/esbuild": { "version": "0.13.6", + "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.13.6.tgz", "integrity": "sha512-tiKmDcHM2riSVN79c0mJY/67EBDafXQAMitHuLiCDAMdtz3kfv+NqdVG5krgf5lWR8Uf8AeZrUW5Q9RP25REvw==", "hasInstallScript": true, "bin": { @@ -2837,11 +2650,32 @@ "node": "^12.20.0 || ^14.14.0 || >=16.0.0" } }, + "node_modules/@netlify/framework-info/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@netlify/framework-info/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/@netlify/functions-utils": { - "version": "4.0.3", - "integrity": "sha512-HOhBYUymE2zQGCEN0fi5evxX0GsqqiZf2MQGZqE/9OFghacX5EqjeH7fwYKhqxzfO1lba6QvDJhApFepXeGFIQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-4.1.4.tgz", + "integrity": "sha512-uXL2rhJd8Yz4c5GwcvjfAv2G84ru47YSBr9k8KevHPZwbk6be1SoNQLlizGFClDeVvSuSMRtrLkQdMKjJpfi2Q==", "dependencies": { - "@netlify/zip-it-and-ship-it": "^5.4.0", + "@netlify/zip-it-and-ship-it": "^5.5.0", "cpy": "^8.1.0", "path-exists": "^4.0.0" }, @@ -2850,8 +2684,9 @@ } }, "node_modules/@netlify/git-utils": { - "version": "4.0.0", - "integrity": "sha512-CZGyItsvmX9dBbzoxS6JUSKJzYKM/RfLQHeq18dombL1sk0jxsWcXdwKfZUGqw98T11uGz6JDPQUp/oUw2rNuA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-4.1.0.tgz", + "integrity": "sha512-WseJxFYY6rgQcRX7GuHIhG7XZg1dz88pGSjO5nZCwqL7VAB0FSbholuZBUWqetCFVsW4ICIArDaA04WTvWyS+A==", "dependencies": { "execa": "^5.1.1", "map-obj": "^4.0.0", @@ -2865,6 +2700,7 @@ }, "node_modules/@netlify/local-functions-proxy": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-1.1.1.tgz", "integrity": "sha512-eXSsayLT6PMvjzFQpjC9nkg2Otc3lZ5GoYele9M6f8PmsvWpaXRhwjNQ0NYhQQ2UZbLMIiO2dH8dbRsT3bMkFw==", "optionalDependencies": { "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", @@ -2881,8 +2717,24 @@ "@netlify/local-functions-proxy-win32-x64": "1.1.1" } }, + "node_modules/@netlify/local-functions-proxy-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-arm64/-/local-functions-proxy-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, "node_modules/@netlify/local-functions-proxy-darwin-x64": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-x64/-/local-functions-proxy-darwin-x64-1.1.1.tgz", "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", "cpu": [ "x64" @@ -2895,8 +2747,159 @@ "local-functions-proxy": "bin/local-functions-proxy" } }, + "node_modules/@netlify/local-functions-proxy-freebsd-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-arm64/-/local-functions-proxy-freebsd-arm64-1.1.1.tgz", + "integrity": "sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-x64/-/local-functions-proxy-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-linux-arm": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm/-/local-functions-proxy-linux-arm-1.1.1.tgz", + "integrity": "sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-linux-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm64/-/local-functions-proxy-linux-arm64-1.1.1.tgz", + "integrity": "sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-linux-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ia32/-/local-functions-proxy-linux-ia32-1.1.1.tgz", + "integrity": "sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-linux-ppc64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ppc64/-/local-functions-proxy-linux-ppc64-1.1.1.tgz", + "integrity": "sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-linux-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-x64/-/local-functions-proxy-linux-x64-1.1.1.tgz", + "integrity": "sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-openbsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-openbsd-x64/-/local-functions-proxy-openbsd-x64-1.1.1.tgz", + "integrity": "sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "bin": { + "local-functions-proxy": "bin/local-functions-proxy" + } + }, + "node_modules/@netlify/local-functions-proxy-win32-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-ia32/-/local-functions-proxy-win32-ia32-1.1.1.tgz", + "integrity": "sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "local-functions-proxy.exe": "bin/local-functions-proxy.exe" + } + }, + "node_modules/@netlify/local-functions-proxy-win32-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-x64/-/local-functions-proxy-win32-x64-1.1.1.tgz", + "integrity": "sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "bin": { + "local-functions-proxy.exe": "bin/local-functions-proxy.exe" + } + }, "node_modules/@netlify/open-api": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.8.0.tgz", "integrity": "sha512-lfNB/QYDgaP07pwm/nWEaWPvRAAGyhxvJqNzvxMijc7A4uwquMjlbYve8yYyd0LJXPwgBpGobwiQj5RA76xzUQ==" }, "node_modules/@netlify/plugin-edge-handlers": { @@ -2937,6 +2940,7 @@ }, "node_modules/@netlify/routing-local-proxy": { "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy/-/routing-local-proxy-0.34.1.tgz", "integrity": "sha512-FuzgxdxC7wJXUT08qPTtHiKwjFDHh3ViCDZwxwjm8CjOKYz+9NjhmIffkbEFl6R+uH6IV/3R6gVDL5Fb5hwRbQ==", "optionalDependencies": { "@netlify/routing-local-proxy-darwin-arm64": "^0.34.1", @@ -2945,8 +2949,21 @@ "@netlify/routing-local-proxy-win32-x64": "^0.34.1" } }, + "node_modules/@netlify/routing-local-proxy-darwin-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-darwin-arm64/-/routing-local-proxy-darwin-arm64-0.34.1.tgz", + "integrity": "sha512-QswoXdmvmwx76bNdA0TcwfbK1NUIo5BjcS4bpE96wtUPr3SNn4pSoOip9/Tae2JbLGl7efdEkgBE1J6rMiu/kA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/@netlify/routing-local-proxy-darwin-x64": { "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-darwin-x64/-/routing-local-proxy-darwin-x64-0.34.1.tgz", "integrity": "sha512-x5mukoDWGl+jpVsyNZjRBrP1m93AFrVI/afodQbu45nyW78fpNALhqJPGoI2ixe/Z5HKaYl+ItvI+J4wAVFseQ==", "cpu": [ "x64" @@ -2956,8 +2973,33 @@ "darwin" ] }, + "node_modules/@netlify/routing-local-proxy-linux-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-linux-x64/-/routing-local-proxy-linux-x64-0.34.1.tgz", + "integrity": "sha512-dquodOP1VC2RtJcr2bp/DzTq0JXtk2cZDtJmaasMxxbxZmwL9R+63ypWsgdvGTSdZDKkwzzHAg3a7qGHVIl4ow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@netlify/routing-local-proxy-win32-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-win32-x64/-/routing-local-proxy-win32-x64-0.34.1.tgz", + "integrity": "sha512-Dy1OPqlHXCDIJoEor709Ysx76UiAgrse1GF5wdieTVtWnQ7culo8+LVCwubwQezVCCbdjTke9LfMWbP91zBojg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@netlify/run-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-4.0.0.tgz", "integrity": "sha512-ZeQFp1VmSMfrKaV2A13HJ2b7UJBHf7DUvzAcNjjJdbugD8wCDs5l00rRZeLhyl48AIZl9ki+RpsATZ/j6qKn+g==", "dependencies": { "execa": "^5.1.1" @@ -3013,24 +3055,15 @@ }, "node_modules/@netlify/zip-it-and-ship-it/node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@netlify/zip-it-and-ship-it/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { "cliui": "^7.0.2", @@ -3047,6 +3080,7 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -3058,6 +3092,7 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" @@ -3065,6 +3100,7 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -3076,6 +3112,7 @@ }, "node_modules/@octokit/auth-token": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "dependencies": { "@octokit/types": "^6.0.3" @@ -3083,6 +3120,7 @@ }, "node_modules/@octokit/core": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", "dependencies": { "@octokit/auth-token": "^2.4.4", @@ -3096,6 +3134,7 @@ }, "node_modules/@octokit/endpoint": { "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "dependencies": { "@octokit/types": "^6.0.3", @@ -3105,6 +3144,7 @@ }, "node_modules/@octokit/graphql": { "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "dependencies": { "@octokit/request": "^5.6.0", @@ -3114,10 +3154,12 @@ }, "node_modules/@octokit/openapi-types": { "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "dependencies": { "@octokit/types": "^6.34.0" @@ -3128,6 +3170,7 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "peerDependencies": { "@octokit/core": ">=3" @@ -3135,6 +3178,7 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "dependencies": { "@octokit/types": "^6.34.0", @@ -3146,6 +3190,7 @@ }, "node_modules/@octokit/request": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "dependencies": { "@octokit/endpoint": "^6.0.1", @@ -3158,6 +3203,7 @@ }, "node_modules/@octokit/request-error": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "dependencies": { "@octokit/types": "^6.0.3", @@ -3167,6 +3213,7 @@ }, "node_modules/@octokit/rest": { "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "dependencies": { "@octokit/core": "^3.5.1", @@ -3177,6 +3224,7 @@ }, "node_modules/@octokit/types": { "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dependencies": { "@octokit/openapi-types": "^11.2.0" @@ -3224,6 +3272,22 @@ "rollup": "^2.38.3" } }, + "node_modules/@rollup/plugin-commonjs/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@rollup/plugin-inject": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", @@ -3267,6 +3331,22 @@ "rollup": "^1.20.0||^2.0.0" } }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -3290,6 +3370,7 @@ }, "node_modules/@samverschueren/stream-to-observable": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "dependencies": { "any-observable": "^0.3.0" @@ -3307,8 +3388,9 @@ } }, "node_modules/@sindresorhus/is": { - "version": "4.2.0", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz", + "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ==", "dev": true, "engines": { "node": ">=10" @@ -3319,6 +3401,7 @@ }, "node_modules/@sindresorhus/slugify": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", "dependencies": { "@sindresorhus/transliterate": "^0.1.1", @@ -3333,6 +3416,7 @@ }, "node_modules/@sindresorhus/transliterate": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "dependencies": { "escape-string-regexp": "^2.0.0", @@ -3347,6 +3431,7 @@ }, "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "engines": { "node": ">=8" @@ -3354,6 +3439,7 @@ }, "node_modules/@sinonjs/commons": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "dependencies": { @@ -3362,6 +3448,7 @@ }, "node_modules/@sinonjs/fake-timers": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "dependencies": { @@ -3370,6 +3457,7 @@ }, "node_modules/@sinonjs/samsam": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, "dependencies": { @@ -3380,11 +3468,13 @@ }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dependencies": { "defer-to-connect": "^2.0.0" @@ -3395,22 +3485,27 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" }, "node_modules/@tsconfig/node12": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" }, "node_modules/@tsconfig/node14": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" }, "node_modules/@tsconfig/node16": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, "node_modules/@types/cacheable-request": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dependencies": { "@types/http-cache-semantics": "*", @@ -3421,6 +3516,7 @@ }, "node_modules/@types/decompress": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", "dependencies": { "@types/node": "*" @@ -3428,6 +3524,7 @@ }, "node_modules/@types/download": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.1.tgz", "integrity": "sha512-t5DjMD6Y1DxjXtEHl7Kt+nQn9rOmVLYD8p4Swrcc5QpgyqyqR2gXTIK6RwwMnNeFJ+ZIiIW789fQKzCrK7AOFA==", "dependencies": { "@types/decompress": "*", @@ -3442,6 +3539,7 @@ }, "node_modules/@types/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dependencies": { "@types/minimatch": "*", @@ -3450,6 +3548,7 @@ }, "node_modules/@types/got": { "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.6.tgz", "integrity": "sha512-nvLlj+831dhdm4LR2Ly+HTpdLyBaMynoOr6wpIxS19d/bPeHQxFU5XQ6Gp6ohBpxvCWZM1uHQIC2+ySRH1rGrQ==", "dependencies": { "@types/node": "*" @@ -3457,21 +3556,25 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "node_modules/@types/http-proxy": { "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -3479,6 +3582,7 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dependencies": { "@types/istanbul-lib-report": "*" @@ -3486,16 +3590,19 @@ }, "node_modules/@types/json-schema": { "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "node_modules/@types/keyv": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "dependencies": { "@types/node": "*" @@ -3503,6 +3610,7 @@ }, "node_modules/@types/mdast": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, "dependencies": { @@ -3511,19 +3619,23 @@ }, "node_modules/@types/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "node_modules/@types/minimist": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "node_modules/@types/node": { - "version": "17.0.0", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + "version": "16.11.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", + "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" }, "node_modules/@types/node-fetch": { "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", "dependencies": { "@types/node": "*", @@ -3532,6 +3644,7 @@ }, "node_modules/@types/node-fetch/node_modules/form-data": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dependencies": { "asynckit": "^0.4.0", @@ -3544,10 +3657,12 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "node_modules/@types/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, @@ -3561,6 +3676,7 @@ }, "node_modules/@types/responselike": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dependencies": { "@types/node": "*" @@ -3568,15 +3684,18 @@ }, "node_modules/@types/semver": { "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" }, "node_modules/@types/unist": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, "node_modules/@types/yargs": { "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dependencies": { "@types/yargs-parser": "*" @@ -3584,15 +3703,18 @@ }, "node_modules/@types/yargs-parser": { "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.7.0", - "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==", "dev": true, "dependencies": { - "@typescript-eslint/experimental-utils": "5.7.0", - "@typescript-eslint/scope-manager": "5.7.0", + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/type-utils": "5.10.0", + "@typescript-eslint/utils": "5.10.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -3617,17 +3739,16 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.7.0", - "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", + "node_modules/@typescript-eslint/parser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz", + "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/typescript-estree": "5.10.0", + "debug": "^4.3.2" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3637,18 +3758,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.7.0", - "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz", + "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", - "debug": "^4.3.2" + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/visitor-keys": "5.10.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3656,23 +3781,17 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.7.0", - "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz", + "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0" + "@typescript-eslint/utils": "5.10.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3680,11 +3799,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "5.7.0", - "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz", + "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3695,12 +3823,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.7.0", - "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz", + "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/visitor-keys": "5.10.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -3720,12 +3849,37 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz", + "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/typescript-estree": "5.10.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.7.0", - "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz", + "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/types": "5.10.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -3737,25 +3891,26 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@vercel/nft": { - "version": "0.17.1", - "integrity": "sha512-z3zknfI7JaE0PPmmYDQVtf/TCEnAYT5Y2XrCO/BfAD1sP2Wdmg1PO0L1VRIyt0zjpr6PpBYitC0Nmy0rh+qEDA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.17.3.tgz", + "integrity": "sha512-fdGzXF8dVrHliAzk4p2TOfG78K7MgWleDZ0+ztDQe6TdBw31c3S6Fvg6rdcV8g4Y20HTFtPzKua3uj3PGRagZg==", "dependencies": { "@mapbox/node-pre-gyp": "^1.0.5", "acorn": "^8.6.0", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^7.1.3", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.2", - "mkdirp": "^0.5.1", "node-gyp-build": "^4.2.2", "node-pre-gyp": "^0.13.0", "resolve-from": "^5.0.0", @@ -3765,16 +3920,6 @@ "nft": "out/cli.js" } }, - "node_modules/@vercel/nft/node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/@verdaccio/commons-api": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/@verdaccio/commons-api/-/commons-api-10.1.0.tgz", @@ -3837,6 +3982,18 @@ "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", "dev": true }, + "node_modules/@verdaccio/local-storage/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@verdaccio/readme": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/@verdaccio/readme/-/readme-10.2.0.tgz", @@ -3880,10 +4037,12 @@ }, "node_modules/abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "node_modules/accepts": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dependencies": { "mime-types": "~2.1.24", @@ -3894,8 +4053,9 @@ } }, "node_modules/acorn": { - "version": "8.6.0", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "bin": { "acorn": "bin/acorn" }, @@ -3936,6 +4096,7 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { @@ -3944,6 +4105,7 @@ }, "node_modules/acorn-walk": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "engines": { "node": ">=0.4.0" @@ -3951,6 +4113,7 @@ }, "node_modules/agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dependencies": { "debug": "4" @@ -3961,6 +4124,7 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { "clean-stack": "^2.0.0", @@ -3972,18 +4136,21 @@ }, "node_modules/aggregate-error/node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "engines": { "node": ">=6" } }, "node_modules/ajv": { - "version": "8.8.2", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { @@ -3993,6 +4160,7 @@ }, "node_modules/all-node-versions": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/all-node-versions/-/all-node-versions-8.0.0.tgz", "integrity": "sha512-cF8ibgj23U7ai4qjSFzpeccwDXUlPFMzKe0Z6qf6gChR+9S0JMyzYz6oYz4n0nHi/FLH9BJIefsONsMH/WDM2w==", "dependencies": { "fetch-node-website": "^5.0.3", @@ -4010,6 +4178,7 @@ }, "node_modules/all-node-versions/node_modules/@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -4023,6 +4192,7 @@ }, "node_modules/all-node-versions/node_modules/@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dependencies": { "@types/istanbul-lib-coverage": "*", @@ -4031,6 +4201,7 @@ }, "node_modules/all-node-versions/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -4044,6 +4215,7 @@ }, "node_modules/all-node-versions/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" @@ -4051,6 +4223,7 @@ }, "node_modules/all-node-versions/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { "ansi-styles": "^4.1.0", @@ -4062,6 +4235,7 @@ }, "node_modules/all-node-versions/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -4072,10 +4246,12 @@ }, "node_modules/all-node-versions/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/all-node-versions/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -4089,6 +4265,7 @@ }, "node_modules/all-node-versions/node_modules/jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "engines": { "node": ">= 8.3" @@ -4096,6 +4273,7 @@ }, "node_modules/all-node-versions/node_modules/jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -4111,6 +4289,7 @@ }, "node_modules/all-node-versions/node_modules/pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -4124,10 +4303,12 @@ }, "node_modules/all-node-versions/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/all-node-versions/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -4138,6 +4319,7 @@ }, "node_modules/ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "dependencies": { "string-width": "^4.1.0" @@ -4145,6 +4327,7 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { @@ -4153,6 +4336,7 @@ }, "node_modules/ansi-escapes": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dependencies": { "type-fest": "^1.0.2" @@ -4166,6 +4350,7 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" @@ -4173,6 +4358,7 @@ }, "node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "engines": { "node": ">=10" @@ -4183,6 +4369,7 @@ }, "node_modules/any-observable": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "engines": { "node": ">=6" @@ -4190,6 +4377,7 @@ }, "node_modules/anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { "normalize-path": "^3.0.0", @@ -4210,10 +4398,12 @@ }, "node_modules/aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "node_modules/archive-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "dependencies": { "file-type": "^4.2.0" @@ -4224,6 +4414,7 @@ }, "node_modules/archive-type/node_modules/file-type": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", "engines": { "node": ">=4" @@ -4231,6 +4422,7 @@ }, "node_modules/archiver": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "dependencies": { "archiver-utils": "^2.1.0", @@ -4247,6 +4439,7 @@ }, "node_modules/archiver-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dependencies": { "glob": "^7.1.4", @@ -4266,6 +4459,7 @@ }, "node_modules/archiver-utils/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -4279,6 +4473,7 @@ }, "node_modules/archiver-utils/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -4286,6 +4481,7 @@ }, "node_modules/are-we-there-yet": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "dependencies": { "delegates": "^1.0.0", @@ -4297,14 +4493,17 @@ }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/arr-diff": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "engines": { "node": ">=0.10.0" @@ -4312,6 +4511,7 @@ }, "node_modules/arr-flatten": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "engines": { "node": ">=0.10.0" @@ -4319,6 +4519,7 @@ }, "node_modules/arr-union": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "engines": { "node": ">=0.10.0" @@ -4332,6 +4533,7 @@ }, "node_modules/array-find-index": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true, "engines": { @@ -4340,15 +4542,18 @@ }, "node_modules/array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "node_modules/array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, "node_modules/array-includes": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "dependencies": { @@ -4367,6 +4572,7 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "engines": { "node": ">=8" @@ -4374,6 +4580,7 @@ }, "node_modules/array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "engines": { "node": ">=0.10.0" @@ -4381,6 +4588,7 @@ }, "node_modules/array-unique": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "engines": { "node": ">=0.10.0" @@ -4388,6 +4596,7 @@ }, "node_modules/array.prototype.flat": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "dependencies": { @@ -4404,6 +4613,7 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "dependencies": { @@ -4420,6 +4630,7 @@ }, "node_modules/arrgv": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", "dev": true, "engines": { @@ -4428,13 +4639,21 @@ }, "node_modules/arrify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "engines": { "node": ">=8" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, "node_modules/ascii-table": { "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" }, "node_modules/asn1": { @@ -4457,6 +4676,7 @@ }, "node_modules/assign-symbols": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "engines": { "node": ">=0.10.0" @@ -4464,10 +4684,12 @@ }, "node_modules/ast-module-types": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==" }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "engines": { @@ -4476,14 +4698,17 @@ }, "node_modules/async": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/atob": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "bin": { "atob": "bin/atob.js" @@ -4503,6 +4728,7 @@ }, "node_modules/ava": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz", "integrity": "sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==", "dev": true, "dependencies": { @@ -4572,11 +4798,13 @@ }, "node_modules/ava/node_modules/ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "node_modules/ava/node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { @@ -4585,6 +4813,7 @@ }, "node_modules/ava/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { @@ -4669,6 +4898,7 @@ }, "node_modules/backoff": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "dependencies": { "precond": "0.2" @@ -4679,10 +4909,12 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base": { "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dependencies": { "cache-base": "^1.0.1", @@ -4699,6 +4931,7 @@ }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { "is-descriptor": "^1.0.0" @@ -4709,6 +4942,7 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { @@ -4742,10 +4976,12 @@ }, "node_modules/before-after-hook": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, "node_modules/better-opn": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.1.tgz", "integrity": "sha512-u7pU4QnwLQ+wCDLHdvtWbI/41pSRayJ+UHyAqpb5sr42FGnqzBlEyWdCklfaSzXqbmnXDBzCvWcaZmL3qp0xGA==", "dependencies": { "open": "^8.0.4" @@ -4756,6 +4992,7 @@ }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "engines": { "node": ">=8" @@ -4763,6 +5000,7 @@ }, "node_modules/bindings": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dependencies": { "file-uri-to-path": "1.0.0" @@ -4770,6 +5008,7 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", @@ -4779,6 +5018,7 @@ }, "node_modules/blueimp-md5": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, "node_modules/body-parser": { @@ -4801,14 +5041,6 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4824,6 +5056,7 @@ }, "node_modules/boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "dependencies": { "ansi-align": "^3.0.0", @@ -4844,6 +5077,7 @@ }, "node_modules/boxen/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "engines": { "node": ">=10" @@ -4854,6 +5088,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dependencies": { "balanced-match": "^1.0.0", @@ -4862,6 +5097,7 @@ }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dependencies": { "fill-range": "^7.0.1" @@ -4878,6 +5114,7 @@ }, "node_modules/browserslist": { "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dependencies": { "caniuse-lite": "^1.0.30001286", @@ -4899,6 +5136,7 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { @@ -4921,6 +5159,7 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", @@ -4929,10 +5168,12 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "engines": { "node": "*" @@ -4940,6 +5181,7 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, @@ -4950,14 +5192,17 @@ }, "node_modules/buffer-fill": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtin-modules": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "engines": { "node": ">=6" @@ -4968,26 +5213,28 @@ }, "node_modules/builtins": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" }, "node_modules/byline": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", "engines": { "node": ">=0.10.0" } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { "version": "7.11.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", "integrity": "sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==", "dev": true, "dependencies": { @@ -5013,6 +5260,7 @@ }, "node_modules/c8/node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { @@ -5021,6 +5269,7 @@ }, "node_modules/c8/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { @@ -5038,6 +5287,7 @@ }, "node_modules/cache-base": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dependencies": { "collection-visit": "^1.0.0", @@ -5056,6 +5306,7 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, "engines": { @@ -5064,6 +5315,7 @@ }, "node_modules/cacheable-request": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dependencies": { "clone-response": "^1.0.2", @@ -5080,6 +5332,7 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -5093,6 +5346,7 @@ }, "node_modules/cachedir": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "engines": { "node": ">=6" @@ -5100,6 +5354,7 @@ }, "node_modules/call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dependencies": { "function-bind": "^1.1.1", @@ -5111,10 +5366,12 @@ }, "node_modules/call-me-maybe": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "node_modules/callsite": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "engines": { "node": "*" @@ -5122,6 +5379,7 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { @@ -5129,8 +5387,9 @@ } }, "node_modules/camelcase": { - "version": "6.2.1", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "engines": { "node": ">=10" }, @@ -5140,6 +5399,7 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "dependencies": { @@ -5156,6 +5416,7 @@ }, "node_modules/camelcase-keys/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { @@ -5164,6 +5425,7 @@ }, "node_modules/camelcase-keys/node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "engines": { @@ -5171,8 +5433,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001287", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==", + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/browserslist" @@ -5186,6 +5449,7 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", @@ -5200,6 +5464,7 @@ }, "node_modules/chalk/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -5213,6 +5478,7 @@ }, "node_modules/chalk/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -5223,10 +5489,12 @@ }, "node_modules/chalk/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -5237,6 +5505,7 @@ }, "node_modules/character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, "funding": { @@ -5246,6 +5515,7 @@ }, "node_modules/character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, "funding": { @@ -5255,6 +5525,7 @@ }, "node_modules/character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, "funding": { @@ -5264,11 +5535,19 @@ }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/chokidar": { - "version": "3.5.2", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5287,6 +5566,7 @@ }, "node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" @@ -5294,20 +5574,24 @@ }, "node_modules/chunkd": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", "dev": true }, "node_modules/ci-info": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "node_modules/ci-parallel-vars": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", "dev": true }, "node_modules/class-utils": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dependencies": { "arr-union": "^3.1.0", @@ -5321,6 +5605,7 @@ }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { "is-descriptor": "^0.1.0" @@ -5331,6 +5616,7 @@ }, "node_modules/class-utils/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { "kind-of": "^3.0.2" @@ -5341,6 +5627,7 @@ }, "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -5351,6 +5638,7 @@ }, "node_modules/class-utils/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { "kind-of": "^3.0.2" @@ -5361,6 +5649,7 @@ }, "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -5371,6 +5660,7 @@ }, "node_modules/class-utils/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { "is-accessor-descriptor": "^0.1.6", @@ -5383,6 +5673,7 @@ }, "node_modules/class-utils/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" @@ -5390,6 +5681,7 @@ }, "node_modules/clean-deep": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", "dependencies": { "lodash.isempty": "^4.4.0", @@ -5402,6 +5694,7 @@ }, "node_modules/clean-regexp": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "dependencies": { @@ -5413,6 +5706,7 @@ }, "node_modules/clean-regexp/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { @@ -5421,6 +5715,7 @@ }, "node_modules/clean-stack": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "dependencies": { "escape-string-regexp": "4.0.0" @@ -5434,6 +5729,7 @@ }, "node_modules/clean-yaml-object": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", "dev": true, "engines": { @@ -5442,6 +5738,7 @@ }, "node_modules/cli-boxes": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "engines": { "node": ">=6" @@ -5452,6 +5749,7 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dependencies": { "restore-cursor": "^3.1.0" @@ -5461,10 +5759,10 @@ } }, "node_modules/cli-progress": { - "version": "3.9.1", - "integrity": "sha512-AXxiCe2a0Lm0VN+9L0jzmfQSkcZm5EYspfqXKaSIQKqIk+0hnkZ3/v1E9B39mkD6vYhKih3c/RPsJBSwq9O99Q==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", "dependencies": { - "colors": "^1.1.2", "string-width": "^4.2.0" }, "engines": { @@ -5473,6 +5771,7 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "engines": { "node": ">=6" @@ -5483,6 +5782,7 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "dependencies": { @@ -5498,6 +5798,7 @@ }, "node_modules/cli-width": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "node_modules/clipanion": { @@ -5514,6 +5815,7 @@ }, "node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", @@ -5523,6 +5825,7 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "engines": { "node": ">=0.8" @@ -5530,6 +5833,7 @@ }, "node_modules/clone-response": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "dependencies": { "mimic-response": "^1.0.0" @@ -5537,6 +5841,7 @@ }, "node_modules/code-excerpt": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", "dev": true, "dependencies": { @@ -5548,6 +5853,7 @@ }, "node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "engines": { "node": ">=0.10.0" @@ -5555,6 +5861,7 @@ }, "node_modules/collection-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dependencies": { "map-visit": "^1.0.0", @@ -5566,6 +5873,7 @@ }, "node_modules/color": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dependencies": { "color-convert": "^1.9.3", @@ -5574,6 +5882,7 @@ }, "node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { "color-name": "1.1.3" @@ -5581,10 +5890,12 @@ }, "node_modules/color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/color-string": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "dependencies": { "color-name": "^1.0.0", @@ -5593,6 +5904,7 @@ }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "bin": { "color-support": "bin.js" @@ -5600,6 +5912,7 @@ }, "node_modules/colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "engines": { "node": ">=0.1.90" @@ -5607,6 +5920,7 @@ }, "node_modules/colorspace": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dependencies": { "color": "^3.1.3", @@ -5615,6 +5929,7 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" @@ -5625,6 +5940,7 @@ }, "node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { "node": ">= 12" @@ -5632,6 +5948,7 @@ }, "node_modules/common-path-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "node_modules/commondir": { @@ -5641,6 +5958,7 @@ }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "dependencies": { @@ -5650,6 +5968,7 @@ }, "node_modules/compare-func/node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { @@ -5661,10 +5980,12 @@ }, "node_modules/component-emitter": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "node_modules/compress-commons": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dependencies": { "buffer-crc32": "^0.2.13", @@ -5706,6 +6027,15 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -5723,10 +6053,12 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/concordance": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", "dependencies": { "date-time": "^3.1.0", @@ -5744,6 +6076,7 @@ }, "node_modules/configstore": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "dependencies": { "dot-prop": "^5.2.0", @@ -5759,6 +6092,7 @@ }, "node_modules/configstore/node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { "is-obj": "^2.0.0" @@ -5769,6 +6103,7 @@ }, "node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "node_modules/content-disposition": { @@ -5803,6 +6138,7 @@ }, "node_modules/content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "engines": { "node": ">= 0.6" @@ -5810,6 +6146,7 @@ }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "dependencies": { @@ -5821,8 +6158,9 @@ } }, "node_modules/conventional-changelog-conventionalcommits": { - "version": "4.6.1", - "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "dependencies": { "compare-func": "^2.0.0", @@ -5835,6 +6173,7 @@ }, "node_modules/conventional-commits-parser": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "dependencies": { @@ -5854,6 +6193,7 @@ }, "node_modules/convert-source-map": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dependencies": { "safe-buffer": "~5.1.1" @@ -5861,6 +6201,7 @@ }, "node_modules/convert-to-spaces": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=", "dev": true, "engines": { @@ -5869,6 +6210,7 @@ }, "node_modules/cookie": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "engines": { "node": ">= 0.6" @@ -5876,10 +6218,12 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "node_modules/cookiejar": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, @@ -5907,6 +6251,7 @@ }, "node_modules/copy-descriptor": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "engines": { "node": ">=0.10.0" @@ -5914,6 +6259,7 @@ }, "node_modules/copy-template-dir": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/copy-template-dir/-/copy-template-dir-1.4.0.tgz", "integrity": "sha512-xkXSJhvKz4MfLbVkZ7GyCaFo4ciB3uKI/HHzkGwj1eyTH5+7RTFxW5CE0irWAZgV5oFcO9hd6+NVXAtY9hlo7Q==", "dependencies": { "end-of-stream": "^1.1.0", @@ -5929,6 +6275,7 @@ }, "node_modules/copy-template-dir/node_modules/braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { "arr-flatten": "^1.1.0", @@ -5948,6 +6295,7 @@ }, "node_modules/copy-template-dir/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -5958,6 +6306,7 @@ }, "node_modules/copy-template-dir/node_modules/fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { "extend-shallow": "^2.0.1", @@ -5971,6 +6320,7 @@ }, "node_modules/copy-template-dir/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -5981,6 +6331,7 @@ }, "node_modules/copy-template-dir/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -5988,6 +6339,7 @@ }, "node_modules/copy-template-dir/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { "kind-of": "^3.0.2" @@ -5998,6 +6350,7 @@ }, "node_modules/copy-template-dir/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -6008,6 +6361,7 @@ }, "node_modules/copy-template-dir/node_modules/micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { "arr-diff": "^4.0.0", @@ -6028,18 +6382,9 @@ "node": ">=0.10.0" } }, - "node_modules/copy-template-dir/node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/copy-template-dir/node_modules/pump": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dependencies": { "end-of-stream": "^1.1.0", @@ -6048,6 +6393,7 @@ }, "node_modules/copy-template-dir/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -6061,6 +6407,7 @@ }, "node_modules/copy-template-dir/node_modules/readdirp": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dependencies": { "graceful-fs": "^4.1.11", @@ -6073,6 +6420,7 @@ }, "node_modules/copy-template-dir/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -6080,6 +6428,7 @@ }, "node_modules/copy-template-dir/node_modules/to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { "is-number": "^3.0.0", @@ -6111,8 +6460,9 @@ } }, "node_modules/core-util-is": { - "version": "1.0.3", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/cors": { "version": "2.8.5", @@ -6129,6 +6479,7 @@ }, "node_modules/cosmiconfig": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "dependencies": { @@ -6143,8 +6494,9 @@ } }, "node_modules/cosmiconfig-typescript-loader": { - "version": "1.0.2", - "integrity": "sha512-27ZehvijYqAKVzta5xtZBS3PAliC8CmnWkGXN0vgxAZz7yqxpMjf3aG7flxF5rEiu8FAD7nZZXtOI+xUGn+bVg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.3.tgz", + "integrity": "sha512-ARo21VjxdacJUcHxgVMEYNIoVPYiuKOEwWBIYej4M22+pEbe3LzKgmht2UPM+0u7/T/KnZf2r/5IzHv2Nwz+/w==", "dev": true, "dependencies": { "cosmiconfig": "^7", @@ -6162,6 +6514,7 @@ }, "node_modules/cp-file": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", "dependencies": { "graceful-fs": "^4.1.2", @@ -6178,6 +6531,7 @@ }, "node_modules/cpy": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "dependencies": { "arrify": "^2.0.1", @@ -6199,6 +6553,7 @@ }, "node_modules/cpy/node_modules/@nodelib/fs.stat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "engines": { "node": ">= 6" @@ -6206,6 +6561,7 @@ }, "node_modules/cpy/node_modules/array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dependencies": { "array-uniq": "^1.0.1" @@ -6216,6 +6572,7 @@ }, "node_modules/cpy/node_modules/braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dependencies": { "arr-flatten": "^1.1.0", @@ -6235,6 +6592,7 @@ }, "node_modules/cpy/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -6245,6 +6603,7 @@ }, "node_modules/cpy/node_modules/cp-file": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "dependencies": { "graceful-fs": "^4.1.2", @@ -6258,6 +6617,7 @@ }, "node_modules/cpy/node_modules/dir-glob": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dependencies": { "path-type": "^3.0.0" @@ -6268,6 +6628,7 @@ }, "node_modules/cpy/node_modules/fast-glob": { "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dependencies": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -6283,6 +6644,7 @@ }, "node_modules/cpy/node_modules/fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dependencies": { "extend-shallow": "^2.0.1", @@ -6296,6 +6658,7 @@ }, "node_modules/cpy/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -6306,6 +6669,7 @@ }, "node_modules/cpy/node_modules/glob-parent": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dependencies": { "is-glob": "^3.1.0", @@ -6314,6 +6678,7 @@ }, "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dependencies": { "is-extglob": "^2.1.0" @@ -6324,6 +6689,7 @@ }, "node_modules/cpy/node_modules/globby": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dependencies": { "@types/glob": "^7.1.1", @@ -6341,6 +6707,7 @@ }, "node_modules/cpy/node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "engines": { "node": ">= 4" @@ -6348,6 +6715,7 @@ }, "node_modules/cpy/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -6355,6 +6723,7 @@ }, "node_modules/cpy/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { "kind-of": "^3.0.2" @@ -6365,6 +6734,7 @@ }, "node_modules/cpy/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -6375,6 +6745,7 @@ }, "node_modules/cpy/node_modules/micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dependencies": { "arr-diff": "^4.0.0", @@ -6397,6 +6768,7 @@ }, "node_modules/cpy/node_modules/p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dependencies": { "aggregate-error": "^3.0.0" @@ -6407,6 +6779,7 @@ }, "node_modules/cpy/node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dependencies": { "pify": "^3.0.0" @@ -6417,6 +6790,7 @@ }, "node_modules/cpy/node_modules/path-type/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "engines": { "node": ">=4" @@ -6424,6 +6798,7 @@ }, "node_modules/cpy/node_modules/slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "engines": { "node": ">=6" @@ -6431,6 +6806,7 @@ }, "node_modules/cpy/node_modules/to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dependencies": { "is-number": "^3.0.0", @@ -6442,6 +6818,7 @@ }, "node_modules/crc-32": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "dependencies": { "exit-on-epipe": "~1.0.1", @@ -6456,6 +6833,7 @@ }, "node_modules/crc32-stream": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dependencies": { "crc-32": "^1.2.0", @@ -6467,6 +6845,7 @@ }, "node_modules/create-eslint-index": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", "integrity": "sha1-2VQ3LYbVeS/NZ+nyt5GxqxYkEbs=", "dev": true, "dependencies": { @@ -6478,11 +6857,13 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cron-parser": { - "version": "4.2.0", - "integrity": "sha512-pHDdek1iV87R9iG1edv5P2aImDOO1+y2VqCm0V3t0g3JtT/o0V0wAnX/6J2bsF8XEDvR7iqL3Co/3RBj2AhPFQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.2.1.tgz", + "integrity": "sha512-5sJBwDYyCp+0vU5b7POl8zLWfgV5fOHxlc45FWoWdHecGC7MQHCjx0CHivCMRnGFovghKhhyYM+Zm9DcY5qcHg==", "dependencies": { "luxon": "^1.28.0" }, @@ -6492,6 +6873,7 @@ }, "node_modules/cross-env": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "dependencies": { @@ -6509,6 +6891,7 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { "path-key": "^3.1.0", @@ -6521,6 +6904,7 @@ }, "node_modules/crypto-random-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { "node": ">=8" @@ -6552,6 +6936,7 @@ }, "node_modules/currently-unhandled": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "dependencies": { @@ -6563,6 +6948,7 @@ }, "node_modules/cyclist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "node_modules/d": { @@ -6577,6 +6963,7 @@ }, "node_modules/dargs": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "engines": { @@ -6615,12 +7002,6 @@ "punycode": "^2.1.0" } }, - "node_modules/data-urls/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/data-urls/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -6634,10 +7015,12 @@ }, "node_modules/date-fns": { "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" }, "node_modules/date-time": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "dependencies": { "time-zone": "^1.0.0" @@ -6654,6 +7037,7 @@ }, "node_modules/debug": { "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dependencies": { "ms": "2.1.2" @@ -6669,10 +7053,12 @@ }, "node_modules/debug/node_modules/ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decache": { "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", "dependencies": { "callsite": "^1.0.0" @@ -6680,13 +7066,16 @@ }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "dependencies": { @@ -6699,6 +7088,7 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, "engines": { @@ -6707,6 +7097,7 @@ }, "node_modules/decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "engines": { "node": ">=0.10" @@ -6714,6 +7105,7 @@ }, "node_modules/decompress": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dependencies": { "decompress-tar": "^4.0.0", @@ -6731,6 +7123,7 @@ }, "node_modules/decompress-response": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { @@ -6745,6 +7138,7 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "engines": { @@ -6756,6 +7150,7 @@ }, "node_modules/decompress-tar": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dependencies": { "file-type": "^5.2.0", @@ -6768,6 +7163,7 @@ }, "node_modules/decompress-tar/node_modules/bl": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dependencies": { "readable-stream": "^2.3.5", @@ -6776,6 +7172,7 @@ }, "node_modules/decompress-tar/node_modules/file-type": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "engines": { "node": ">=4" @@ -6783,6 +7180,7 @@ }, "node_modules/decompress-tar/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "engines": { "node": ">=0.10.0" @@ -6790,6 +7188,7 @@ }, "node_modules/decompress-tar/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -6803,6 +7202,7 @@ }, "node_modules/decompress-tar/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -6810,6 +7210,7 @@ }, "node_modules/decompress-tar/node_modules/tar-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dependencies": { "bl": "^1.0.0", @@ -6826,6 +7227,7 @@ }, "node_modules/decompress-tarbz2": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dependencies": { "decompress-tar": "^4.1.0", @@ -6840,6 +7242,7 @@ }, "node_modules/decompress-tarbz2/node_modules/file-type": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "engines": { "node": ">=4" @@ -6847,6 +7250,7 @@ }, "node_modules/decompress-tarbz2/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "engines": { "node": ">=0.10.0" @@ -6854,6 +7258,7 @@ }, "node_modules/decompress-targz": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dependencies": { "decompress-tar": "^4.1.1", @@ -6866,6 +7271,7 @@ }, "node_modules/decompress-targz/node_modules/file-type": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", "engines": { "node": ">=4" @@ -6873,6 +7279,7 @@ }, "node_modules/decompress-targz/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "engines": { "node": ">=0.10.0" @@ -6880,6 +7287,7 @@ }, "node_modules/decompress-unzip": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dependencies": { "file-type": "^3.8.0", @@ -6893,6 +7301,7 @@ }, "node_modules/decompress-unzip/node_modules/file-type": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", "engines": { "node": ">=0.10.0" @@ -6900,6 +7309,7 @@ }, "node_modules/decompress-unzip/node_modules/get-stream": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dependencies": { "object-assign": "^4.0.1", @@ -6911,6 +7321,7 @@ }, "node_modules/decompress-unzip/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "engines": { "node": ">=0.10.0" @@ -6918,6 +7329,7 @@ }, "node_modules/decompress/node_modules/make-dir": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dependencies": { "pify": "^3.0.0" @@ -6928,6 +7340,7 @@ }, "node_modules/decompress/node_modules/make-dir/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "engines": { "node": ">=4" @@ -6935,6 +7348,7 @@ }, "node_modules/decompress/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "engines": { "node": ">=0.10.0" @@ -6942,6 +7356,7 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" @@ -6949,10 +7364,12 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "engines": { "node": ">=0.10.0" @@ -6960,6 +7377,7 @@ }, "node_modules/defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dependencies": { "clone": "^1.0.2" @@ -6967,6 +7385,7 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "engines": { "node": ">=10" @@ -6974,6 +7393,7 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { "node": ">=8" @@ -6981,6 +7401,7 @@ }, "node_modules/define-properties": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dependencies": { "object-keys": "^1.0.12" @@ -6991,6 +7412,7 @@ }, "node_modules/define-property": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dependencies": { "is-descriptor": "^1.0.2", @@ -7002,6 +7424,7 @@ }, "node_modules/del": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dependencies": { "globby": "^11.0.1", @@ -7022,6 +7445,7 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "engines": { "node": ">=0.4.0" @@ -7029,10 +7453,12 @@ }, "node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "engines": { "node": ">= 0.6" @@ -7040,6 +7466,7 @@ }, "node_modules/deprecation": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "node_modules/destroy": { @@ -7049,6 +7476,7 @@ }, "node_modules/detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "bin": { "detect-libc": "bin/detect-libc.js" @@ -7059,6 +7487,7 @@ }, "node_modules/detective-amd": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.0.tgz", "integrity": "sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==", "dependencies": { "ast-module-types": "^2.7.0", @@ -7075,6 +7504,7 @@ }, "node_modules/detective-cjs": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz", "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==", "dependencies": { "ast-module-types": "^2.4.0", @@ -7086,6 +7516,7 @@ }, "node_modules/detective-es6": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.1.tgz", "integrity": "sha512-22z7MblxkhsIQGuALeGwCKEfqNy4WmgDGmfJCwdXbfDkVYIiIDmY513hiIWBvX3kCmzvvWE7RR7kAYxs01wwKQ==", "dependencies": { "node-source-walk": "^4.0.0" @@ -7096,6 +7527,7 @@ }, "node_modules/detective-less": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", "dependencies": { "debug": "^4.0.0", @@ -7108,6 +7540,7 @@ }, "node_modules/detective-postcss": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", "dependencies": { "debug": "^4.1.1", @@ -7121,6 +7554,7 @@ }, "node_modules/detective-sass": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz", "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==", "dependencies": { "debug": "^4.1.1", @@ -7133,6 +7567,7 @@ }, "node_modules/detective-scss": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz", "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==", "dependencies": { "debug": "^4.1.1", @@ -7145,10 +7580,12 @@ }, "node_modules/detective-stylus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz", "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=" }, "node_modules/detective-typescript": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz", "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==", "dependencies": { "@typescript-eslint/typescript-estree": "^4.8.2", @@ -7162,6 +7599,7 @@ }, "node_modules/detective-typescript/node_modules/@typescript-eslint/types": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -7173,6 +7611,7 @@ }, "node_modules/detective-typescript/node_modules/@typescript-eslint/typescript-estree": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dependencies": { "@typescript-eslint/types": "4.33.0", @@ -7198,6 +7637,7 @@ }, "node_modules/detective-typescript/node_modules/@typescript-eslint/visitor-keys": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dependencies": { "@typescript-eslint/types": "4.33.0", @@ -7213,6 +7653,7 @@ }, "node_modules/detective-typescript/node_modules/typescript": { "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", "bin": { "tsc": "bin/tsc", @@ -7222,8 +7663,19 @@ "node": ">=4.2.0" } }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, "engines": { @@ -7232,6 +7684,7 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { "path-type": "^4.0.0" @@ -7242,6 +7695,7 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { @@ -7253,6 +7707,7 @@ }, "node_modules/dom-serializer": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { @@ -7266,6 +7721,7 @@ }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "funding": { @@ -7274,6 +7730,7 @@ }, "node_modules/domelementtype": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ @@ -7292,14 +7749,9 @@ "webidl-conversions": "^4.0.2" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/domhandler": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { @@ -7320,6 +7772,7 @@ }, "node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { @@ -7333,6 +7786,7 @@ }, "node_modules/dot-prop": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "dependencies": { "is-obj": "^2.0.0" @@ -7346,6 +7800,7 @@ }, "node_modules/dotenv": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "engines": { "node": ">=10" @@ -7353,6 +7808,7 @@ }, "node_modules/download": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "dependencies": { "archive-type": "^4.0.0", @@ -7373,6 +7829,7 @@ }, "node_modules/download/node_modules/@sindresorhus/is": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "engines": { "node": ">=4" @@ -7380,6 +7837,7 @@ }, "node_modules/download/node_modules/cacheable-request": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "dependencies": { "clone-response": "1.0.2", @@ -7393,6 +7851,7 @@ }, "node_modules/download/node_modules/cacheable-request/node_modules/get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "engines": { "node": ">=4" @@ -7400,6 +7859,7 @@ }, "node_modules/download/node_modules/cacheable-request/node_modules/lowercase-keys": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", "engines": { "node": ">=0.10.0" @@ -7407,6 +7867,7 @@ }, "node_modules/download/node_modules/decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dependencies": { "mimic-response": "^1.0.0" @@ -7417,6 +7878,7 @@ }, "node_modules/download/node_modules/get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { "pump": "^3.0.0" @@ -7427,6 +7889,7 @@ }, "node_modules/download/node_modules/got": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dependencies": { "@sindresorhus/is": "^0.7.0", @@ -7453,6 +7916,7 @@ }, "node_modules/download/node_modules/got/node_modules/get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "engines": { "node": ">=4" @@ -7460,6 +7924,7 @@ }, "node_modules/download/node_modules/got/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "engines": { "node": ">=4" @@ -7467,10 +7932,12 @@ }, "node_modules/download/node_modules/http-cache-semantics": { "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "node_modules/download/node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "engines": { "node": ">=0.10.0" @@ -7478,10 +7945,12 @@ }, "node_modules/download/node_modules/json-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "node_modules/download/node_modules/keyv": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "dependencies": { "json-buffer": "3.0.0" @@ -7489,6 +7958,7 @@ }, "node_modules/download/node_modules/lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { "node": ">=0.10.0" @@ -7496,6 +7966,7 @@ }, "node_modules/download/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dependencies": { "pify": "^4.0.1", @@ -7507,6 +7978,7 @@ }, "node_modules/download/node_modules/normalize-url": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dependencies": { "prepend-http": "^2.0.0", @@ -7519,6 +7991,7 @@ }, "node_modules/download/node_modules/p-cancelable": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", "engines": { "node": ">=4" @@ -7526,6 +7999,7 @@ }, "node_modules/download/node_modules/p-event": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", "dependencies": { "p-timeout": "^2.0.1" @@ -7536,6 +8010,7 @@ }, "node_modules/download/node_modules/p-timeout": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dependencies": { "p-finally": "^1.0.0" @@ -7546,6 +8021,7 @@ }, "node_modules/download/node_modules/responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dependencies": { "lowercase-keys": "^1.0.0" @@ -7553,6 +8029,7 @@ }, "node_modules/download/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { "semver": "bin/semver" @@ -7560,6 +8037,7 @@ }, "node_modules/download/node_modules/sort-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "dependencies": { "is-plain-obj": "^1.0.0" @@ -7570,8 +8048,14 @@ }, "node_modules/duplexer3": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -7584,6 +8068,7 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "dependencies": { @@ -7592,14 +8077,17 @@ }, "node_modules/ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.4.20", - "integrity": "sha512-N7ZVNrdzX8NE90OXEFBMsBf3fp8P/vVDUER3WCUZjzC7OkNTXHVoF6W9qVhq8+dA8tGnbDajzUpj2ISNVVyj+Q==" + "version": "1.4.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz", + "integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==" }, "node_modules/elegant-spinner": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=", "engines": { "node": ">=0.10.0" @@ -7607,10 +8095,12 @@ }, "node_modules/elf-cam": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/elf-cam/-/elf-cam-0.1.1.tgz", "integrity": "sha512-tKSFTWOp5OwJSp6MKyQDX7umYDkvUuI8rxHXw8BuUQ63d9Trj9xLeo6SHyoTGSoZNNZVitFa+RuHHXuoAzN3Rw==" }, "node_modules/emittery": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, "engines": { @@ -7622,14 +8112,17 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/enabled": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "engines": { "node": ">= 0.8" @@ -7637,6 +8130,7 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" @@ -7644,6 +8138,7 @@ }, "node_modules/enhance-visitors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", "integrity": "sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=", "dev": true, "dependencies": { @@ -7655,6 +8150,7 @@ }, "node_modules/enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { @@ -7666,6 +8162,7 @@ }, "node_modules/entities": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true, "engines": { @@ -7677,6 +8174,7 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "engines": { "node": ">=6" @@ -7684,6 +8182,7 @@ }, "node_modules/envinfo": { "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "bin": { "envinfo": "dist/cli.js" @@ -7694,6 +8193,7 @@ }, "node_modules/equal-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", "integrity": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", "dev": true, "engines": { @@ -7702,6 +8202,7 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { "is-arrayish": "^0.2.1" @@ -7709,6 +8210,7 @@ }, "node_modules/error-stack-parser": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "dependencies": { "stackframe": "^1.1.1" @@ -7716,6 +8218,7 @@ }, "node_modules/es-abstract": { "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { @@ -7749,10 +8252,12 @@ }, "node_modules/es-module-lexer": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { @@ -7797,6 +8302,7 @@ }, "node_modules/es6-promisify": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" }, "node_modules/es6-symbol": { @@ -7823,6 +8329,7 @@ }, "node_modules/escalade": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { "node": ">=6" @@ -7830,6 +8337,7 @@ }, "node_modules/escape-goat": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { "node": ">=8" @@ -7837,10 +8345,12 @@ }, "node_modules/escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" @@ -7851,6 +8361,7 @@ }, "node_modules/escodegen": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dependencies": { "esprima": "^4.0.1", @@ -7871,6 +8382,7 @@ }, "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dependencies": { "prelude-ls": "~1.1.2", @@ -7882,6 +8394,7 @@ }, "node_modules/escodegen/node_modules/optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dependencies": { "deep-is": "~0.1.3", @@ -7897,6 +8410,7 @@ }, "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "engines": { "node": ">= 0.8.0" @@ -7904,6 +8418,7 @@ }, "node_modules/escodegen/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true, "engines": { @@ -7912,6 +8427,7 @@ }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dependencies": { "prelude-ls": "~1.1.2" @@ -7922,6 +8438,7 @@ }, "node_modules/eslint": { "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { @@ -7978,6 +8495,7 @@ }, "node_modules/eslint-ast-utils": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", "dev": true, "dependencies": { @@ -7990,6 +8508,7 @@ }, "node_modules/eslint-config-prettier": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "bin": { @@ -8001,6 +8520,7 @@ }, "node_modules/eslint-config-standard": { "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", "dev": true, "funding": [ @@ -8026,6 +8546,7 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "dependencies": { @@ -8035,14 +8556,33 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-import-resolver-typescript": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "dependencies": { @@ -8060,14 +8600,31 @@ "eslint-plugin-import": "*" } }, + "node_modules/eslint-import-resolver-typescript/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-module-utils": { - "version": "2.7.1", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", "dev": true, "dependencies": { "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" + "find-up": "^2.1.0" }, "engines": { "node": ">=4" @@ -8075,6 +8632,7 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { @@ -8083,6 +8641,7 @@ }, "node_modules/eslint-module-utils/node_modules/find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "dependencies": { @@ -8094,6 +8653,7 @@ }, "node_modules/eslint-module-utils/node_modules/locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "dependencies": { @@ -8106,6 +8666,7 @@ }, "node_modules/eslint-module-utils/node_modules/p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "dependencies": { @@ -8117,6 +8678,7 @@ }, "node_modules/eslint-module-utils/node_modules/p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "dependencies": { @@ -8126,36 +8688,19 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-module-utils/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-ava": { - "version": "13.1.0", - "integrity": "sha512-Bdwyqv4Xh+4ekqbk601HcZNcx8+9ClNGz5GdbC2hv977jUPHQPDMx2arTD3zi1EeyOnOG2Kx22Ow3wecbPCRjQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-13.2.0.tgz", + "integrity": "sha512-i5B5izsEdERKQLruk1nIWzTTE7C26/ju8qQf7JeyRv32XT2lRMW0zMFZNhIrEf5/5VvpSz2rqrV7UcjClGbKsw==", "dev": true, "dependencies": { "enhance-visitors": "^1.0.0", @@ -8175,19 +8720,21 @@ } }, "node_modules/eslint-plugin-ava/node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-plugin-ava/node_modules/espree": { - "version": "9.2.0", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "dependencies": { - "acorn": "^8.6.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.1.0" }, @@ -8197,6 +8744,7 @@ }, "node_modules/eslint-plugin-cypress": { "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", "dev": true, "dependencies": { @@ -8208,6 +8756,7 @@ }, "node_modules/eslint-plugin-es": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "dependencies": { @@ -8226,6 +8775,7 @@ }, "node_modules/eslint-plugin-es/node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { @@ -8240,6 +8790,7 @@ }, "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { @@ -8248,6 +8799,7 @@ }, "node_modules/eslint-plugin-eslint-comments": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, "dependencies": { @@ -8266,6 +8818,7 @@ }, "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { @@ -8274,6 +8827,7 @@ }, "node_modules/eslint-plugin-fp": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", "integrity": "sha1-N20qEIcQ6YGYC9w4deO5kg2gSJw=", "dev": true, "dependencies": { @@ -8291,6 +8845,7 @@ }, "node_modules/eslint-plugin-html": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.2.0.tgz", "integrity": "sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==", "dev": true, "dependencies": { @@ -8298,8 +8853,9 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.3", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "dependencies": { "array-includes": "^3.1.4", @@ -8307,14 +8863,14 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "tsconfig-paths": "^3.12.0" }, "engines": { "node": ">=4" @@ -8325,6 +8881,7 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { @@ -8333,6 +8890,7 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { @@ -8344,11 +8902,30 @@ }, "node_modules/eslint-plugin-import/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-markdown": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", "dev": true, "dependencies": { @@ -8363,6 +8940,7 @@ }, "node_modules/eslint-plugin-node": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "dependencies": { @@ -8382,6 +8960,7 @@ }, "node_modules/eslint-plugin-node/node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { @@ -8396,14 +8975,33 @@ }, "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { "node": ">=4" } }, + "node_modules/eslint-plugin-node/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/eslint-plugin-node/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { @@ -8412,6 +9010,7 @@ }, "node_modules/eslint-plugin-promise": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", "dev": true, "engines": { @@ -8422,8 +9021,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.27.1", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "dependencies": { "array-includes": "^3.1.4", @@ -8450,6 +9050,7 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { @@ -8459,20 +9060,9 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "bin": { @@ -8481,6 +9071,7 @@ }, "node_modules/eslint-plugin-sort-destructure-keys": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.4.0.tgz", "integrity": "sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q==", "dev": true, "dependencies": { @@ -8494,8 +9085,9 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "40.0.0", - "integrity": "sha512-5GRXISfBk8jMmYk1eeNDw8zSRnWTxBjWkzx2Prre6E2/yLu2twozZ3EomLWCBu9nWms/ZE361BItyMQwfnG1qA==", + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", + "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.15.7", @@ -8525,6 +9117,7 @@ }, "node_modules/eslint-plugin-you-dont-need-lodash-underscore": { "version": "6.12.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz", "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==", "dev": true, "dependencies": { @@ -8536,6 +9129,7 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { @@ -8548,6 +9142,7 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { @@ -8556,6 +9151,7 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { @@ -8573,6 +9169,7 @@ }, "node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "engines": { "node": ">=10" @@ -8580,29 +9177,16 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "dependencies": { "@babel/highlight": "^7.10.4" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { @@ -8611,6 +9195,7 @@ }, "node_modules/eslint/node_modules/eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { @@ -8625,6 +9210,7 @@ }, "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { @@ -8633,6 +9219,7 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "dependencies": { @@ -8647,6 +9234,7 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { @@ -8655,6 +9243,7 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { @@ -8665,13 +9254,9 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { @@ -8683,6 +9268,7 @@ }, "node_modules/espree": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { @@ -8696,6 +9282,7 @@ }, "node_modules/espree/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, "bin": { @@ -8707,6 +9294,7 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { @@ -8715,6 +9303,7 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", @@ -8726,11 +9315,13 @@ }, "node_modules/espurify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", "dev": true }, "node_modules/esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { @@ -8742,6 +9333,7 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { @@ -8753,6 +9345,7 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { "node": ">=4.0" @@ -8760,10 +9353,12 @@ }, "node_modules/estree-walker": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { "node": ">=0.10.0" @@ -8789,10 +9384,12 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { "cross-spawn": "^7.0.3", @@ -8814,6 +9411,7 @@ }, "node_modules/exit-on-epipe": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", "engines": { "node": ">=0.8" @@ -8821,6 +9419,7 @@ }, "node_modules/expand-brackets": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dependencies": { "debug": "^2.3.3", @@ -8837,6 +9436,7 @@ }, "node_modules/expand-brackets/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" @@ -8844,6 +9444,7 @@ }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { "is-descriptor": "^0.1.0" @@ -8854,6 +9455,7 @@ }, "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -8864,6 +9466,7 @@ }, "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { "kind-of": "^3.0.2" @@ -8874,6 +9477,7 @@ }, "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -8884,6 +9488,7 @@ }, "node_modules/expand-brackets/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { "kind-of": "^3.0.2" @@ -8894,6 +9499,7 @@ }, "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -8904,6 +9510,7 @@ }, "node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { "is-accessor-descriptor": "^0.1.6", @@ -8916,6 +9523,7 @@ }, "node_modules/expand-brackets/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -8923,6 +9531,7 @@ }, "node_modules/expand-brackets/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" @@ -8930,6 +9539,7 @@ }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/express": { @@ -8974,6 +9584,7 @@ }, "node_modules/express-logging": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/express-logging/-/express-logging-1.1.1.tgz", "integrity": "sha1-YoOWGMurW7NhDxocFIU1L+nSbCo=", "dependencies": { "on-headers": "^1.0.0" @@ -8990,6 +9601,7 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" @@ -8997,6 +9609,7 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/express/node_modules/safe-buffer": { @@ -9020,6 +9633,7 @@ }, "node_modules/express/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "engines": { "node": ">= 0.6" @@ -9036,6 +9650,7 @@ }, "node_modules/ext-list": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dependencies": { "mime-db": "^1.28.0" @@ -9046,6 +9661,7 @@ }, "node_modules/ext-name": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dependencies": { "ext-list": "^2.0.0", @@ -9069,6 +9685,7 @@ }, "node_modules/extend-shallow": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dependencies": { "assign-symbols": "^1.0.0", @@ -9080,6 +9697,7 @@ }, "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dependencies": { "chardet": "^0.7.0", @@ -9092,6 +9710,7 @@ }, "node_modules/extglob": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dependencies": { "array-unique": "^0.3.2", @@ -9109,6 +9728,7 @@ }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { "is-descriptor": "^1.0.0" @@ -9119,6 +9739,7 @@ }, "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -9129,6 +9750,7 @@ }, "node_modules/extglob/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -9145,19 +9767,23 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "node_modules/fast-equals": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz", "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==" }, "node_modules/fast-glob": { - "version": "3.2.10", - "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9171,17 +9797,19 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "node_modules/fast-redact": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", - "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.0.tgz", + "integrity": "sha512-dir8LOnvialLxiXDPESMDHGp82CHi6ZEYTVkcvdn5d7psdv9ZkkButXrOeXST4aqreIRR+N7CYlsrwFuorurVg==", "dev": true, "engines": { "node": ">=6" @@ -9189,6 +9817,7 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastify-warning": { @@ -9199,6 +9828,7 @@ }, "node_modules/fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dependencies": { "reusify": "^1.0.4" @@ -9206,6 +9836,7 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dependencies": { "pend": "~1.2.0" @@ -9213,10 +9844,12 @@ }, "node_modules/fecha": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, "node_modules/fetch-node-website": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/fetch-node-website/-/fetch-node-website-5.0.3.tgz", "integrity": "sha512-O86T46FUWSOq4AWON39oaT8H90QFKAbmjfOVBhgaS87AFfeW00txz73KTv7QopPWtHBbGdI1S8cIT1VK1OQYLg==", "dependencies": { "chalk": "^4.0.0", @@ -9232,6 +9865,7 @@ }, "node_modules/fetch-node-website/node_modules/@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -9245,6 +9879,7 @@ }, "node_modules/fetch-node-website/node_modules/@jest/types/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { "ansi-styles": "^4.1.0", @@ -9256,6 +9891,7 @@ }, "node_modules/fetch-node-website/node_modules/@sindresorhus/is": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", "engines": { "node": ">=10" @@ -9266,6 +9902,7 @@ }, "node_modules/fetch-node-website/node_modules/@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dependencies": { "@types/istanbul-lib-coverage": "*", @@ -9274,6 +9911,7 @@ }, "node_modules/fetch-node-website/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -9287,6 +9925,7 @@ }, "node_modules/fetch-node-website/node_modules/cacheable-lookup": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "dependencies": { "@types/keyv": "^3.1.1", @@ -9298,6 +9937,7 @@ }, "node_modules/fetch-node-website/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" @@ -9305,6 +9945,7 @@ }, "node_modules/fetch-node-website/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -9315,10 +9956,12 @@ }, "node_modules/fetch-node-website/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/fetch-node-website/node_modules/decompress-response": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", "dependencies": { "mimic-response": "^2.0.0" @@ -9329,6 +9972,7 @@ }, "node_modules/fetch-node-website/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -9342,6 +9986,7 @@ }, "node_modules/fetch-node-website/node_modules/got": { "version": "10.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "dependencies": { "@sindresorhus/is": "^2.0.0", @@ -9369,6 +10014,7 @@ }, "node_modules/fetch-node-website/node_modules/jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "engines": { "node": ">= 8.3" @@ -9376,6 +10022,7 @@ }, "node_modules/fetch-node-website/node_modules/jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -9391,6 +10038,7 @@ }, "node_modules/fetch-node-website/node_modules/jest-validate/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { "ansi-styles": "^4.1.0", @@ -9402,6 +10050,7 @@ }, "node_modules/fetch-node-website/node_modules/mimic-response": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "engines": { "node": ">=8" @@ -9412,6 +10061,7 @@ }, "node_modules/fetch-node-website/node_modules/pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -9425,10 +10075,12 @@ }, "node_modules/fetch-node-website/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/fetch-node-website/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -9439,6 +10091,7 @@ }, "node_modules/fetch-node-website/node_modules/type-fest": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", "engines": { "node": ">=8" @@ -9449,6 +10102,7 @@ }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -9462,6 +10116,7 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -9469,6 +10124,7 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { @@ -9480,10 +10136,12 @@ }, "node_modules/file-size": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/file-size/-/file-size-0.0.5.tgz", "integrity": "sha1-BX1Dw6Ptc12j+Q1gUqs4Dx5tXjs=" }, "node_modules/file-type": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", "engines": { "node": ">=6" @@ -9491,10 +10149,12 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "node_modules/filename-reserved-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", "engines": { "node": ">=4" @@ -9502,6 +10162,7 @@ }, "node_modules/filenamify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "dependencies": { "filename-reserved-regex": "^2.0.0", @@ -9527,6 +10188,7 @@ }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { "to-regex-range": "^5.0.1" @@ -9537,6 +10199,7 @@ }, "node_modules/filter-obj": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", "engines": { "node": ">=8" @@ -9544,6 +10207,7 @@ }, "node_modules/finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dependencies": { "debug": "2.6.9", @@ -9560,6 +10224,7 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" @@ -9567,10 +10232,12 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/finalhandler/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "engines": { "node": ">= 0.6" @@ -9578,6 +10245,7 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { "locate-path": "^6.0.0", @@ -9592,6 +10260,7 @@ }, "node_modules/flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { @@ -9610,16 +10279,19 @@ }, "node_modules/flatted": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "node_modules/flatten": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash." }, "node_modules/flush-write-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-2.0.0.tgz", "integrity": "sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==", "dependencies": { "inherits": "^2.0.3", @@ -9628,18 +10300,21 @@ }, "node_modules/fn.name": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/folder-walker": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/folder-walker/-/folder-walker-3.2.0.tgz", "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", "dependencies": { "from2": "^2.1.0" } }, "node_modules/follow-redirects": { - "version": "1.14.6", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "funding": [ { "type": "individual", @@ -9657,6 +10332,7 @@ }, "node_modules/for-in": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "engines": { "node": ">=0.10.0" @@ -9664,6 +10340,7 @@ }, "node_modules/foreground-child": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "dependencies": { @@ -9685,6 +10362,7 @@ }, "node_modules/form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "dependencies": { @@ -9697,16 +10375,35 @@ } }, "node_modules/formidable": { - "version": "1.2.6", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", "dev": true, + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" @@ -9714,6 +10411,7 @@ }, "node_modules/fragment-cache": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dependencies": { "map-cache": "^0.2.2" @@ -9732,6 +10430,7 @@ }, "node_modules/from2": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dependencies": { "inherits": "^2.0.1", @@ -9740,6 +10439,7 @@ }, "node_modules/from2-array": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/from2-array/-/from2-array-0.0.4.tgz", "integrity": "sha1-6vwWtl9uJxm81X/cGGkAWsEzLNY=", "dependencies": { "from2": "^2.0.3" @@ -9747,6 +10447,7 @@ }, "node_modules/from2/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -9760,6 +10461,7 @@ }, "node_modules/from2/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -9767,10 +10469,12 @@ }, "node_modules/fs-constants": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { @@ -9784,6 +10488,7 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { "minipass": "^3.0.0" @@ -9794,10 +10499,12 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "optional": true, @@ -9810,15 +10517,18 @@ }, "node_modules/function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "node_modules/fuzzy": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=", "engines": { "node": ">= 0.6.0" @@ -9826,6 +10536,7 @@ }, "node_modules/gauge": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -9844,6 +10555,7 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "engines": { "node": ">=6.9.0" @@ -9851,6 +10563,7 @@ }, "node_modules/get-amd-module-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz", "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==", "dependencies": { "ast-module-types": "^2.3.2", @@ -9862,10 +10575,13 @@ }, "node_modules/get-caller-file": { "version": "1.0.3", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "node_modules/get-intrinsic": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dependencies": { "function-bind": "^1.1.1", @@ -9878,6 +10594,7 @@ }, "node_modules/get-port": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "engines": { "node": ">=8" @@ -9888,6 +10605,7 @@ }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { "node": ">=10" @@ -9898,6 +10616,7 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "dependencies": { @@ -9913,6 +10632,7 @@ }, "node_modules/get-value": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "engines": { "node": ">=0.10.0" @@ -9928,8 +10648,9 @@ } }, "node_modules/gh-release-fetch": { - "version": "3.0.0", - "integrity": "sha512-P7Anj35Y4kI3RBoQ+M8Z2U9ittORYyRNLb55+5yGGXmm3Mazgkq4MPqsHH9S7+pNWFpE2BtAWeF6twzz6JY3Bw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gh-release-fetch/-/gh-release-fetch-3.0.1.tgz", + "integrity": "sha512-gV6V6+T0kKppzh/+YXpI/jl8ZgvjMY4oyWR3DAmPsqk9ILhk8TEneLFjBBM3kO7OfZ3dWCvuQu5M0DSh/Hz21w==", "dependencies": { "@types/download": "^8.0.0", "@types/node-fetch": "^2.1.6", @@ -9944,6 +10665,7 @@ }, "node_modules/git-raw-commits": { "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "dependencies": { @@ -9962,6 +10684,7 @@ }, "node_modules/git-repo-info": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==", "engines": { "node": ">= 4.0" @@ -9969,6 +10692,7 @@ }, "node_modules/gitconfiglocal": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz", "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", "dependencies": { "ini": "^1.3.2" @@ -9976,10 +10700,12 @@ }, "node_modules/gitconfiglocal/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", @@ -9998,6 +10724,7 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" @@ -10008,10 +10735,12 @@ }, "node_modules/glob-to-regexp": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, "node_modules/global-cache-dir": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-cache-dir/-/global-cache-dir-2.0.0.tgz", "integrity": "sha512-30pvU3e8muclEhc9tt+jRMaywOS3QfNdURflJ5Zv0bohjhcVQpBe5bwRHghGSJORLOKW81/n+3iJvHRHs+/S1Q==", "dependencies": { "cachedir": "^2.3.0", @@ -10023,6 +10752,7 @@ }, "node_modules/global-dirs": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "dependencies": { @@ -10034,25 +10764,28 @@ }, "node_modules/global-dirs/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { "node": ">=4" } }, "node_modules/globby": { - "version": "11.0.4", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -10064,6 +10797,7 @@ }, "node_modules/gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dependencies": { "minimist": "^1.2.5" @@ -10077,6 +10811,7 @@ }, "node_modules/got": { "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", "dev": true, "dependencies": { @@ -10100,18 +10835,21 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.8", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/graphql": { - "version": "16.1.0", - "integrity": "sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.2.0.tgz", + "integrity": "sha512-MuQd7XXrdOcmfwuLwC2jNvx0n3rxIuNYOxUtiee5XOmfrWo613ar2U8pE7aHAKh8VwfpifubpD9IP+EdEAEOsA==", "engines": { "node": "^12.22.0 || ^14.16.0 || >=16.0.0" } }, "node_modules/graphviz": { "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", "dev": true, "dependencies": { @@ -10174,30 +10912,9 @@ "node": ">=6" } }, - "node_modules/har-validator/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/har-validator/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "node_modules/hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "engines": { @@ -10206,6 +10923,7 @@ }, "node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { "function-bind": "^1.1.1" @@ -10216,6 +10934,7 @@ }, "node_modules/has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dependencies": { "ansi-regex": "^2.0.0" @@ -10226,6 +10945,7 @@ }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { "node": ">=0.10.0" @@ -10233,6 +10953,7 @@ }, "node_modules/has-bigints": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "funding": { @@ -10241,6 +10962,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" @@ -10248,6 +10970,7 @@ }, "node_modules/has-glob": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "dependencies": { "is-glob": "^3.0.0" @@ -10258,6 +10981,7 @@ }, "node_modules/has-glob/node_modules/is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dependencies": { "is-extglob": "^2.1.0" @@ -10268,6 +10992,7 @@ }, "node_modules/has-symbol-support-x": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "engines": { "node": "*" @@ -10275,6 +11000,7 @@ }, "node_modules/has-symbols": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "engines": { "node": ">= 0.4" @@ -10285,6 +11011,7 @@ }, "node_modules/has-to-string-tag-x": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dependencies": { "has-symbol-support-x": "^1.4.1" @@ -10295,6 +11022,7 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "dependencies": { @@ -10309,10 +11037,12 @@ }, "node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "node_modules/has-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dependencies": { "get-value": "^2.0.6", @@ -10325,6 +11055,7 @@ }, "node_modules/has-values": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dependencies": { "is-number": "^3.0.0", @@ -10336,6 +11067,7 @@ }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dependencies": { "kind-of": "^3.0.2" @@ -10346,6 +11078,7 @@ }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -10356,6 +11089,7 @@ }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dependencies": { "is-buffer": "^1.1.5" @@ -10366,6 +11100,7 @@ }, "node_modules/has-yarn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "engines": { "node": ">=8" @@ -10373,6 +11108,7 @@ }, "node_modules/hasbin": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz", "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=", "dependencies": { "async": "~1.5" @@ -10383,10 +11119,12 @@ }, "node_modules/hasbin/node_modules/async": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "node_modules/hasha": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dependencies": { "is-stream": "^2.0.0", @@ -10401,14 +11139,25 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "engines": { "node": ">=8" } }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/hosted-git-info": { - "version": "4.0.2", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -10428,11 +11177,13 @@ }, "node_modules/html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/htmlparser2": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "funding": [ @@ -10451,6 +11202,7 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "node_modules/http-errors": { @@ -10478,6 +11230,7 @@ }, "node_modules/http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { "eventemitter3": "^4.0.0", @@ -10490,6 +11243,7 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dependencies": { "@types/http-proxy": "^1.17.5", @@ -10525,6 +11279,7 @@ }, "node_modules/http2-wrapper": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "dependencies": { @@ -10537,6 +11292,7 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "dependencies": { "agent-base": "6", @@ -10548,6 +11304,7 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { "node": ">=10.17.0" @@ -10570,6 +11327,7 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -10580,6 +11338,7 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { @@ -10597,14 +11356,16 @@ ] }, "node_modules/ignore": { - "version": "5.1.9", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } }, "node_modules/ignore-by-default": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", "dev": true, "engines": { @@ -10613,6 +11374,7 @@ }, "node_modules/ignore-walk": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "dependencies": { "minimatch": "^3.0.4" @@ -10620,6 +11382,7 @@ }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { @@ -10635,6 +11398,7 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "engines": { @@ -10643,14 +11407,16 @@ }, "node_modules/import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", "engines": { "node": ">=4" } }, "node_modules/import-local": { - "version": "3.0.3", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -10661,10 +11427,14 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { @@ -10677,6 +11447,7 @@ }, "node_modules/import-local/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { @@ -10688,6 +11459,7 @@ }, "node_modules/import-local/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { @@ -10702,6 +11474,7 @@ }, "node_modules/import-local/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { @@ -10711,8 +11484,18 @@ "node": ">=8" } }, + "node_modules/import-local/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/import-local/node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { @@ -10724,6 +11507,7 @@ }, "node_modules/import-modules": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", "dev": true, "engines": { @@ -10735,6 +11519,7 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "engines": { "node": ">=0.8.19" @@ -10742,6 +11527,7 @@ }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "engines": { "node": ">=8" @@ -10749,10 +11535,12 @@ }, "node_modules/indexes-of": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dependencies": { "once": "^1.3.0", @@ -10761,10 +11549,12 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "engines": { "node": ">=10" @@ -10772,6 +11562,7 @@ }, "node_modules/inquirer": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dependencies": { "ansi-escapes": "^3.2.0", @@ -10794,6 +11585,7 @@ }, "node_modules/inquirer-autocomplete-prompt": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", "dependencies": { "ansi-escapes": "^4.3.1", @@ -10811,6 +11603,7 @@ }, "node_modules/inquirer-autocomplete-prompt/node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" @@ -10824,6 +11617,7 @@ }, "node_modules/inquirer-autocomplete-prompt/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" @@ -10834,6 +11628,7 @@ }, "node_modules/inquirer/node_modules/ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "engines": { "node": ">=4" @@ -10841,6 +11636,7 @@ }, "node_modules/inquirer/node_modules/ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "engines": { "node": ">=6" @@ -10848,6 +11644,7 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" @@ -10858,6 +11655,7 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", @@ -10870,6 +11668,7 @@ }, "node_modules/inquirer/node_modules/cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dependencies": { "restore-cursor": "^2.0.0" @@ -10880,6 +11679,7 @@ }, "node_modules/inquirer/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -10887,6 +11687,7 @@ }, "node_modules/inquirer/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -10897,6 +11698,7 @@ }, "node_modules/inquirer/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" @@ -10904,6 +11706,7 @@ }, "node_modules/inquirer/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { "node": ">=4" @@ -10911,6 +11714,7 @@ }, "node_modules/inquirer/node_modules/mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { "node": ">=4" @@ -10918,6 +11722,7 @@ }, "node_modules/inquirer/node_modules/onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dependencies": { "mimic-fn": "^1.0.0" @@ -10928,6 +11733,7 @@ }, "node_modules/inquirer/node_modules/restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dependencies": { "onetime": "^2.0.0", @@ -10939,6 +11745,7 @@ }, "node_modules/inquirer/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -10950,6 +11757,7 @@ }, "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "engines": { "node": ">=4" @@ -10957,6 +11765,7 @@ }, "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dependencies": { "ansi-regex": "^3.0.0" @@ -10967,6 +11776,7 @@ }, "node_modules/inquirer/node_modules/strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dependencies": { "ansi-regex": "^4.1.0" @@ -10977,6 +11787,7 @@ }, "node_modules/inquirer/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" @@ -10987,6 +11798,7 @@ }, "node_modules/internal-slot": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "dependencies": { @@ -11000,6 +11812,7 @@ }, "node_modules/into-stream": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "dependencies": { "from2": "^2.1.1", @@ -11020,6 +11833,7 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { "node": ">= 0.10" @@ -11027,6 +11841,7 @@ }, "node_modules/irregular-plurals": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true, "engines": { @@ -11035,6 +11850,7 @@ }, "node_modules/is-accessor-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dependencies": { "kind-of": "^6.0.0" @@ -11045,6 +11861,7 @@ }, "node_modules/is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, "funding": { @@ -11054,6 +11871,7 @@ }, "node_modules/is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "dependencies": { @@ -11067,10 +11885,12 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "node_modules/is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "dependencies": { @@ -11082,6 +11902,7 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" @@ -11092,6 +11913,7 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "dependencies": { @@ -11107,10 +11929,12 @@ }, "node_modules/is-buffer": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "node_modules/is-builtin-module": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", "dependencies": { "builtin-modules": "^3.0.0" @@ -11121,6 +11945,7 @@ }, "node_modules/is-callable": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "engines": { @@ -11132,6 +11957,7 @@ }, "node_modules/is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "dependencies": { @@ -11142,8 +11968,9 @@ } }, "node_modules/is-core-module": { - "version": "2.8.0", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dependencies": { "has": "^1.0.3" }, @@ -11153,6 +11980,7 @@ }, "node_modules/is-data-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dependencies": { "kind-of": "^6.0.0" @@ -11163,6 +11991,7 @@ }, "node_modules/is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { @@ -11177,6 +12006,7 @@ }, "node_modules/is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, "funding": { @@ -11186,6 +12016,7 @@ }, "node_modules/is-descriptor": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dependencies": { "is-accessor-descriptor": "^1.0.0", @@ -11198,6 +12029,7 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "bin": { "is-docker": "cli.js" @@ -11211,11 +12043,13 @@ }, "node_modules/is-error": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", "dev": true }, "node_modules/is-extendable": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dependencies": { "is-plain-object": "^2.0.4" @@ -11226,6 +12060,7 @@ }, "node_modules/is-extendable/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { "isobject": "^3.0.1" @@ -11236,6 +12071,7 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "engines": { "node": ">=0.10.0" @@ -11243,6 +12079,7 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" @@ -11250,6 +12087,7 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" @@ -11260,6 +12098,7 @@ }, "node_modules/is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, "funding": { @@ -11269,6 +12108,7 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dependencies": { "global-dirs": "^3.0.0", @@ -11283,6 +12123,7 @@ }, "node_modules/is-installed-globally/node_modules/global-dirs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dependencies": { "ini": "2.0.0" @@ -11296,6 +12137,7 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "engines": { "node": ">=8" @@ -11308,10 +12150,12 @@ }, "node_modules/is-natural-number": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "node_modules/is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { @@ -11323,6 +12167,7 @@ }, "node_modules/is-npm": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", "engines": { "node": ">=10" @@ -11333,6 +12178,7 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" @@ -11340,6 +12186,7 @@ }, "node_modules/is-number-object": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "dependencies": { @@ -11354,6 +12201,7 @@ }, "node_modules/is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "engines": { "node": ">=8" @@ -11361,6 +12209,7 @@ }, "node_modules/is-object": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11368,6 +12217,7 @@ }, "node_modules/is-observable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "dependencies": { "symbol-observable": "^1.1.0" @@ -11378,6 +12228,7 @@ }, "node_modules/is-path-cwd": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "engines": { "node": ">=6" @@ -11385,6 +12236,7 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "engines": { "node": ">=8" @@ -11392,6 +12244,7 @@ }, "node_modules/is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { "node": ">=10" @@ -11402,6 +12255,7 @@ }, "node_modules/is-plain-object": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "engines": { "node": ">=0.10.0" @@ -11409,6 +12263,7 @@ }, "node_modules/is-promise": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "dev": true }, @@ -11422,6 +12277,7 @@ }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { @@ -11437,6 +12293,7 @@ }, "node_modules/is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "engines": { "node": ">=0.10.0" @@ -11444,6 +12301,7 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true, "funding": { @@ -11452,6 +12310,7 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" @@ -11462,6 +12321,7 @@ }, "node_modules/is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "dependencies": { @@ -11476,6 +12336,7 @@ }, "node_modules/is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { @@ -11490,6 +12351,7 @@ }, "node_modules/is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "dependencies": { @@ -11501,10 +12363,12 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "engines": { "node": ">=10" @@ -11515,10 +12379,12 @@ }, "node_modules/is-url": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, "node_modules/is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { @@ -11530,6 +12396,7 @@ }, "node_modules/is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "engines": { "node": ">=0.10.0" @@ -11537,6 +12404,7 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dependencies": { "is-docker": "^2.0.0" @@ -11547,22 +12415,27 @@ }, "node_modules/is-yarn-global": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "node_modules/isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/iserror": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", "integrity": "sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U=" }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "engines": { "node": ">=0.10.0" @@ -11576,6 +12449,7 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { @@ -11584,6 +12458,7 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "dependencies": { @@ -11597,6 +12472,7 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { @@ -11607,8 +12483,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.1", - "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -11620,6 +12497,7 @@ }, "node_modules/isurl": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dependencies": { "has-to-string-tag-x": "^1.2.0", @@ -11631,6 +12509,7 @@ }, "node_modules/jest-get-type": { "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", "engines": { "node": ">= 10.14.2" @@ -11638,6 +12517,7 @@ }, "node_modules/jest-validate": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dependencies": { "@jest/types": "^26.6.2", @@ -11677,6 +12557,7 @@ }, "node_modules/js-string-escape": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", "engines": { "node": ">= 0.8" @@ -11684,10 +12565,12 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dependencies": { "argparse": "^2.0.1" @@ -11860,12 +12743,6 @@ "node": ">= 0.8.0" } }, - "node_modules/jsdom/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/jsdom/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -11879,6 +12756,7 @@ }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "bin": { "jsesc": "bin/jsesc" @@ -11889,15 +12767,18 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema": { @@ -11907,11 +12788,14 @@ "dev": true }, "node_modules/json-schema-traverse": { - "version": "1.0.0", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, @@ -11923,6 +12807,7 @@ }, "node_modules/json5": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dependencies": { "minimist": "^1.2.5" @@ -11936,6 +12821,7 @@ }, "node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { @@ -11947,6 +12833,7 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ @@ -11955,6 +12842,7 @@ }, "node_modules/JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "dependencies": { @@ -11970,6 +12858,7 @@ }, "node_modules/jsonwebtoken": { "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, "dependencies": { @@ -11991,6 +12880,7 @@ }, "node_modules/jsonwebtoken/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { @@ -12014,6 +12904,7 @@ }, "node_modules/jsx-ast-utils": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "dependencies": { @@ -12026,6 +12917,7 @@ }, "node_modules/junk": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "engines": { "node": ">=8" @@ -12033,11 +12925,13 @@ }, "node_modules/just-extend": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "node_modules/jwa": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "dependencies": { @@ -12048,6 +12942,7 @@ }, "node_modules/jws": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "dependencies": { @@ -12057,15 +12952,18 @@ }, "node_modules/jwt-decode": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "node_modules/kebab-case": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz", "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==", "dev": true }, "node_modules/keep-func-props": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keep-func-props/-/keep-func-props-3.0.1.tgz", "integrity": "sha512-5AsrYCiCHIUxuw/G2r7xcoTW/NTf5IFwAe1fkwf2ifM/KZzEojaTylh1Pppu60oEixww1rfcWJaRGLi3eAJsrQ==", "dependencies": { "mimic-fn": "^3.1.0" @@ -12087,14 +12985,16 @@ } }, "node_modules/keyv": { - "version": "4.0.4", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz", + "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "engines": { "node": ">=0.10.0" @@ -12111,10 +13011,12 @@ }, "node_modules/kuler": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "node_modules/lambda-local": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.0.0.tgz", "integrity": "sha512-5Z7ZEhqVYJSm3djoq7QLDkEk7Ao+jNYbARo3nk3wtjKpgCnEbzOuraxDPDWg7OlZ4JKcsRDP+wNLeORMdbF2ow==", "dependencies": { "commander": "^7.2.0", @@ -12130,6 +13032,7 @@ }, "node_modules/lambda-local/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { "node": ">= 10" @@ -12137,6 +13040,7 @@ }, "node_modules/latest-version": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "dependencies": { "package-json": "^6.3.0" @@ -12147,6 +13051,7 @@ }, "node_modules/lazystream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dependencies": { "readable-stream": "^2.0.5" @@ -12157,6 +13062,7 @@ }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -12170,6 +13076,7 @@ }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -12177,6 +13084,7 @@ }, "node_modules/leven": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "engines": { "node": ">=6" @@ -12184,6 +13092,7 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { @@ -12196,10 +13105,12 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/listr": { "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "dependencies": { "@samverschueren/stream-to-observable": "^0.3.0", @@ -12218,6 +13129,7 @@ }, "node_modules/listr-silent-renderer": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=", "engines": { "node": ">=4" @@ -12225,6 +13137,7 @@ }, "node_modules/listr-update-renderer": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "dependencies": { "chalk": "^1.1.3", @@ -12245,6 +13158,7 @@ }, "node_modules/listr-update-renderer/node_modules/ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "engines": { "node": ">=4" @@ -12252,6 +13166,7 @@ }, "node_modules/listr-update-renderer/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { "node": ">=0.10.0" @@ -12259,6 +13174,7 @@ }, "node_modules/listr-update-renderer/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "engines": { "node": ">=0.10.0" @@ -12266,6 +13182,7 @@ }, "node_modules/listr-update-renderer/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dependencies": { "ansi-styles": "^2.2.1", @@ -12280,6 +13197,7 @@ }, "node_modules/listr-update-renderer/node_modules/cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dependencies": { "restore-cursor": "^2.0.0" @@ -12290,6 +13208,7 @@ }, "node_modules/listr-update-renderer/node_modules/cli-truncate": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", "dependencies": { "slice-ansi": "0.0.4", @@ -12301,6 +13220,7 @@ }, "node_modules/listr-update-renderer/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -12308,6 +13228,7 @@ }, "node_modules/listr-update-renderer/node_modules/figures": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dependencies": { "escape-string-regexp": "^1.0.5", @@ -12319,6 +13240,7 @@ }, "node_modules/listr-update-renderer/node_modules/indent-string": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", "engines": { "node": ">=4" @@ -12326,6 +13248,7 @@ }, "node_modules/listr-update-renderer/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dependencies": { "number-is-nan": "^1.0.0" @@ -12336,6 +13259,7 @@ }, "node_modules/listr-update-renderer/node_modules/log-symbols": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dependencies": { "chalk": "^1.0.0" @@ -12346,6 +13270,7 @@ }, "node_modules/listr-update-renderer/node_modules/log-update": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "dependencies": { "ansi-escapes": "^3.0.0", @@ -12358,6 +13283,7 @@ }, "node_modules/listr-update-renderer/node_modules/mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { "node": ">=4" @@ -12365,6 +13291,7 @@ }, "node_modules/listr-update-renderer/node_modules/onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dependencies": { "mimic-fn": "^1.0.0" @@ -12375,6 +13302,7 @@ }, "node_modules/listr-update-renderer/node_modules/restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dependencies": { "onetime": "^2.0.0", @@ -12386,6 +13314,7 @@ }, "node_modules/listr-update-renderer/node_modules/slice-ansi": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", "engines": { "node": ">=0.10.0" @@ -12393,6 +13322,7 @@ }, "node_modules/listr-update-renderer/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dependencies": { "code-point-at": "^1.0.0", @@ -12405,6 +13335,7 @@ }, "node_modules/listr-update-renderer/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { "ansi-regex": "^2.0.0" @@ -12415,6 +13346,7 @@ }, "node_modules/listr-update-renderer/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "engines": { "node": ">=0.8.0" @@ -12422,6 +13354,7 @@ }, "node_modules/listr-update-renderer/node_modules/wrap-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "dependencies": { "string-width": "^2.1.1", @@ -12433,6 +13366,7 @@ }, "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "engines": { "node": ">=4" @@ -12440,6 +13374,7 @@ }, "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "engines": { "node": ">=4" @@ -12447,6 +13382,7 @@ }, "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dependencies": { "is-fullwidth-code-point": "^2.0.0", @@ -12458,6 +13394,7 @@ }, "node_modules/listr-update-renderer/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dependencies": { "ansi-regex": "^3.0.0" @@ -12468,6 +13405,7 @@ }, "node_modules/listr-verbose-renderer": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", "dependencies": { "chalk": "^2.4.1", @@ -12481,6 +13419,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" @@ -12491,6 +13430,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", @@ -12503,6 +13443,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dependencies": { "restore-cursor": "^2.0.0" @@ -12513,6 +13454,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -12520,6 +13462,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -12530,6 +13473,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" @@ -12537,6 +13481,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "engines": { "node": ">=4" @@ -12544,6 +13489,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dependencies": { "mimic-fn": "^1.0.0" @@ -12554,6 +13500,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dependencies": { "onetime": "^2.0.0", @@ -12565,6 +13512,7 @@ }, "node_modules/listr-verbose-renderer/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" @@ -12575,10 +13523,12 @@ }, "node_modules/listr/node_modules/is-promise": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "node_modules/listr/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "engines": { "node": ">=0.10.0" @@ -12586,6 +13536,7 @@ }, "node_modules/listr/node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "engines": { "node": ">=6" @@ -12593,6 +13544,7 @@ }, "node_modules/load-json-file": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "dependencies": { @@ -12608,6 +13560,7 @@ }, "node_modules/load-json-file/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { @@ -12618,16 +13571,9 @@ "node": ">=4" } }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, "engines": { @@ -12636,6 +13582,7 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { "p-locate": "^5.0.0" @@ -12658,10 +13605,12 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, "node_modules/lodash.debounce": { @@ -12671,65 +13620,79 @@ }, "node_modules/lodash.deburr": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" }, "node_modules/lodash.defaults": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, "node_modules/lodash.difference": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, "node_modules/lodash.flatten": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, "node_modules/lodash.get": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "node_modules/lodash.includes": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", "dev": true }, "node_modules/lodash.isboolean": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", "dev": true }, "node_modules/lodash.isempty": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, "node_modules/lodash.isinteger": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", "dev": true }, "node_modules/lodash.isnumber": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, "node_modules/lodash.isstring": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, @@ -12741,24 +13704,29 @@ }, "node_modules/lodash.transform": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" }, "node_modules/lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "node_modules/lodash.union": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "node_modules/lodash.zip": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, "node_modules/log-process-errors": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-6.3.0.tgz", "integrity": "sha512-dHwGgWFuz9LUDoLIG7E0SlDurosfZEpgNLJMPzNL9GPdyh4Wdm5RJlQbuqy3Pj2wOcbDzykeTCBEqyrwriqPnA==", "dependencies": { "chalk": "^4.1.0", @@ -12776,6 +13744,7 @@ }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dependencies": { "chalk": "^4.1.0", @@ -12790,6 +13759,7 @@ }, "node_modules/log-update": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.0.tgz", "integrity": "sha512-HovF3knyZX9sleS0OkSJ6f53JEpbzcbomC6/WJ3iuGK8i6CRb6WZ542gO2F3pdQK8hwlijddDefVFhlMpwkOSQ==", "dependencies": { "ansi-escapes": "^5.0.0", @@ -12806,6 +13776,7 @@ }, "node_modules/log-update/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "engines": { "node": ">=12" @@ -12816,6 +13787,7 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", "engines": { "node": ">=12" @@ -12826,6 +13798,7 @@ }, "node_modules/log-update/node_modules/cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dependencies": { "restore-cursor": "^4.0.0" @@ -12839,10 +13812,12 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "engines": { "node": ">=12" @@ -12853,6 +13828,7 @@ }, "node_modules/log-update/node_modules/restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dependencies": { "onetime": "^5.1.0", @@ -12867,6 +13843,7 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dependencies": { "ansi-styles": "^6.0.0", @@ -12880,11 +13857,12 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "5.0.1", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dependencies": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" }, "engines": { @@ -12896,6 +13874,7 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dependencies": { "ansi-regex": "^6.0.1" @@ -12909,6 +13888,7 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", "dependencies": { "ansi-styles": "^6.1.0", @@ -12924,6 +13904,7 @@ }, "node_modules/logform": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.2.tgz", "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==", "dependencies": { "colors": "1.4.0", @@ -12935,6 +13916,7 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { @@ -12977,6 +13959,7 @@ }, "node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { "node": ">=8" @@ -12984,6 +13967,7 @@ }, "node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { "yallist": "^4.0.0" @@ -13018,6 +14002,7 @@ }, "node_modules/luxon": { "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==", "engines": { "node": "*" @@ -13025,6 +14010,7 @@ }, "node_modules/macos-release": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", "engines": { "node": ">=6" @@ -13043,6 +14029,7 @@ }, "node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dependencies": { "semver": "^6.0.0" @@ -13056,6 +14043,7 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" @@ -13063,10 +14051,12 @@ }, "node_modules/make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/map-age-cleaner": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "dependencies": { @@ -13078,6 +14068,7 @@ }, "node_modules/map-cache": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "engines": { "node": ">=0.10.0" @@ -13085,6 +14076,7 @@ }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "engines": { "node": ">=8" @@ -13095,6 +14087,7 @@ }, "node_modules/map-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dependencies": { "object-visit": "^1.0.0" @@ -13117,6 +14110,7 @@ }, "node_modules/matcher": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "dependencies": { @@ -13128,10 +14122,12 @@ }, "node_modules/maxstache": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/maxstache/-/maxstache-1.0.7.tgz", "integrity": "sha1-IjHVGAung9Xs/DHEX+2seuQnaYQ=" }, "node_modules/maxstache-stream": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/maxstache-stream/-/maxstache-stream-1.0.4.tgz", "integrity": "sha1-nH9cq35f3S2Q2oYUO06WMeoygEA=", "dependencies": { "maxstache": "^1.0.0", @@ -13142,6 +14138,7 @@ }, "node_modules/maxstache-stream/node_modules/pump": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dependencies": { "end-of-stream": "^1.1.0", @@ -13150,6 +14147,7 @@ }, "node_modules/maxstache-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -13163,6 +14161,7 @@ }, "node_modules/maxstache-stream/node_modules/split2": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=", "dependencies": { "through2": "~2.0.0" @@ -13170,6 +14169,7 @@ }, "node_modules/maxstache-stream/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -13177,6 +14177,7 @@ }, "node_modules/maxstache-stream/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { "readable-stream": "~2.3.6", @@ -13185,6 +14186,7 @@ }, "node_modules/md5-hex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "dependencies": { "blueimp-md5": "^2.10.0" @@ -13195,6 +14197,7 @@ }, "node_modules/mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "dependencies": { @@ -13211,6 +14214,7 @@ }, "node_modules/mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, "funding": { @@ -13220,6 +14224,7 @@ }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "engines": { "node": ">= 0.6" @@ -13227,6 +14232,7 @@ }, "node_modules/mem": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "dependencies": { @@ -13242,6 +14248,7 @@ }, "node_modules/memoize-one": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "node_modules/memoizee": { @@ -13268,6 +14275,7 @@ }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true, "engines": { @@ -13276,6 +14284,7 @@ }, "node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "dependencies": { @@ -13300,6 +14309,7 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "engines": { @@ -13311,10 +14321,12 @@ }, "node_modules/merge-descriptors": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "node_modules/merge-options": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "dependencies": { "is-plain-obj": "^2.1.0" @@ -13325,6 +14337,7 @@ }, "node_modules/merge-options/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "engines": { "node": ">=8" @@ -13332,10 +14345,12 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" @@ -13343,6 +14358,7 @@ }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "engines": { "node": ">= 0.6" @@ -13350,19 +14366,23 @@ }, "node_modules/micro-api-client": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==" }, "node_modules/micro-memoize": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.9.tgz", "integrity": "sha512-Z2uZi/IUMGQDCXASdujXRqrXXEwSY0XffUrAOllhqzQI3wpUyZbiZTiE2JuYC0HSG2G7DbCS5jZmsEKEGZuemg==" }, "node_modules/micro-spelling-correcter": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", "dev": true }, "node_modules/micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "funding": [ @@ -13382,6 +14402,7 @@ }, "node_modules/micromatch": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dependencies": { "braces": "^3.0.1", @@ -13393,6 +14414,7 @@ }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" @@ -13403,6 +14425,7 @@ }, "node_modules/mime-db": { "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" @@ -13410,6 +14433,7 @@ }, "node_modules/mime-types": { "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { "mime-db": "1.51.0" @@ -13420,6 +14444,7 @@ }, "node_modules/mimic-fn": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "engines": { "node": ">=8" @@ -13427,6 +14452,7 @@ }, "node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { "node": ">=4" @@ -13434,6 +14460,7 @@ }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "engines": { @@ -13442,6 +14469,7 @@ }, "node_modules/minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dependencies": { "brace-expansion": "^1.1.7" @@ -13452,10 +14480,12 @@ }, "node_modules/minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "dependencies": { @@ -13469,6 +14499,7 @@ }, "node_modules/minimist-options/node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { @@ -13477,6 +14508,7 @@ }, "node_modules/minimist-options/node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, "engines": { @@ -13485,6 +14517,7 @@ }, "node_modules/minipass": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "dependencies": { "yallist": "^4.0.0" @@ -13495,6 +14528,7 @@ }, "node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", @@ -13506,6 +14540,7 @@ }, "node_modules/mixin-deep": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dependencies": { "for-in": "^1.0.2", @@ -13516,17 +14551,19 @@ } }, "node_modules/mkdirp": { - "version": "1.0.4", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, "bin": { "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/mock-fs": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.1.2.tgz", "integrity": "sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A==", "dev": true, "engines": { @@ -13535,6 +14572,7 @@ }, "node_modules/mock-require": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", "dev": true, "dependencies": { @@ -13547,6 +14585,7 @@ }, "node_modules/mock-require/node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "dependencies": { @@ -13558,6 +14597,7 @@ }, "node_modules/module-definition": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz", "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==", "dependencies": { "ast-module-types": "^2.7.1", @@ -13578,6 +14618,7 @@ }, "node_modules/moize": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.0.tgz", "integrity": "sha512-WrMcM+C2Jy+qyOC/UMhA3BCHGowxV34dhDZnDNfxsREW/8N+33SFjmc23Q61Xv1WUthUA1vYopTitP1sZ5jkeg==", "dependencies": { "fast-equals": "^2.0.1", @@ -13586,6 +14627,7 @@ }, "node_modules/move-file": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/move-file/-/move-file-2.1.0.tgz", "integrity": "sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA==", "dependencies": { "path-exists": "^4.0.0" @@ -13599,13 +14641,15 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multiparty": { - "version": "4.2.2", - "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz", + "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==", "dependencies": { - "http-errors": "~1.8.0", + "http-errors": "~1.8.1", "safe-buffer": "5.2.1", "uid-safe": "2.1.5" }, @@ -13615,6 +14659,7 @@ }, "node_modules/multiparty/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { @@ -13633,6 +14678,7 @@ }, "node_modules/mute-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "node_modules/mv": { @@ -13665,18 +14711,6 @@ "node": "*" } }, - "node_modules/mv/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mv/node_modules/rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", @@ -13690,8 +14724,9 @@ } }, "node_modules/nanoid": { - "version": "3.1.30", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13701,6 +14736,7 @@ }, "node_modules/nanomatch": { "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dependencies": { "arr-diff": "^4.0.0", @@ -13721,11 +14757,13 @@ }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "node_modules/natural-compare-lite": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", "dev": true }, @@ -13740,6 +14778,7 @@ }, "node_modules/needle": { "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dependencies": { "debug": "^3.2.6", @@ -13755,6 +14794,7 @@ }, "node_modules/needle/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" @@ -13762,6 +14802,7 @@ }, "node_modules/negotiator": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "engines": { "node": ">= 0.6" @@ -13775,6 +14816,7 @@ }, "node_modules/nested-error-stacks": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "node_modules/netlify": { @@ -13843,21 +14885,9 @@ }, "node_modules/netlify-redirector": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.2.1.tgz", "integrity": "sha512-17vDR9p1Loanp+vd57y+b6WlKb5X+qb0LZ44oTYsKJbdonz4Md+Ybv1lzH1w1aKm5YWWXHR8LMpWyY9bjlAJKw==" }, - "node_modules/netlify/node_modules/qs": { - "version": "6.10.2", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", @@ -13866,11 +14896,13 @@ }, "node_modules/nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "node_modules/nise": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, "dependencies": { @@ -13883,6 +14915,7 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "dependencies": { @@ -13891,11 +14924,13 @@ }, "node_modules/nise/node_modules/isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "node_modules/nise/node_modules/path-to-regexp": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "dependencies": { @@ -13903,17 +14938,27 @@ } }, "node_modules/node-fetch": { - "version": "2.6.6", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dependencies": { "whatwg-url": "^5.0.0" }, "engines": { "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, "node_modules/node-gyp-build": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", "bin": { "node-gyp-build": "bin.js", @@ -13923,6 +14968,7 @@ }, "node_modules/node-pre-gyp": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", "deprecated": "Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future", "dependencies": { @@ -13943,6 +14989,7 @@ }, "node_modules/node-pre-gyp/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "engines": { "node": ">=0.10.0" @@ -13950,10 +14997,12 @@ }, "node_modules/node-pre-gyp/node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "node_modules/node-pre-gyp/node_modules/are-we-there-yet": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dependencies": { "delegates": "^1.0.0", @@ -13962,10 +15011,12 @@ }, "node_modules/node-pre-gyp/node_modules/chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/node-pre-gyp/node_modules/fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dependencies": { "minipass": "^2.6.0" @@ -13973,6 +15024,7 @@ }, "node_modules/node-pre-gyp/node_modules/gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dependencies": { "aproba": "^1.0.3", @@ -13987,6 +15039,7 @@ }, "node_modules/node-pre-gyp/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dependencies": { "number-is-nan": "^1.0.0" @@ -13997,6 +15050,7 @@ }, "node_modules/node-pre-gyp/node_modules/minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dependencies": { "safe-buffer": "^5.1.2", @@ -14005,23 +15059,15 @@ }, "node_modules/node-pre-gyp/node_modules/minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dependencies": { "minipass": "^2.9.0" } }, - "node_modules/node-pre-gyp/node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/node-pre-gyp/node_modules/nopt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "dependencies": { "abbrev": "1", @@ -14033,6 +15079,7 @@ }, "node_modules/node-pre-gyp/node_modules/npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dependencies": { "are-we-there-yet": "~1.1.2", @@ -14043,6 +15090,7 @@ }, "node_modules/node-pre-gyp/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -14056,6 +15104,7 @@ }, "node_modules/node-pre-gyp/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dependencies": { "glob": "^7.1.3" @@ -14066,6 +15115,7 @@ }, "node_modules/node-pre-gyp/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { "semver": "bin/semver" @@ -14073,6 +15123,7 @@ }, "node_modules/node-pre-gyp/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -14080,6 +15131,7 @@ }, "node_modules/node-pre-gyp/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dependencies": { "code-point-at": "^1.0.0", @@ -14092,6 +15144,7 @@ }, "node_modules/node-pre-gyp/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dependencies": { "ansi-regex": "^2.0.0" @@ -14102,6 +15155,7 @@ }, "node_modules/node-pre-gyp/node_modules/tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "dependencies": { "chownr": "^1.1.4", @@ -14118,6 +15172,7 @@ }, "node_modules/node-pre-gyp/node_modules/tar/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { @@ -14136,14 +15191,17 @@ }, "node_modules/node-pre-gyp/node_modules/yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/node-releases": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "node_modules/node-source-walk": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz", "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==", "dependencies": { "@babel/parser": "^7.0.0" @@ -14154,6 +15212,7 @@ }, "node_modules/node-version-alias": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-version-alias/-/node-version-alias-1.0.1.tgz", "integrity": "sha512-E9EhoJkpIIZyYplB298W8ZfhcojQrnKnUPcaOgJqVqICUZwPZkuj10nTzEscwdziOOj545v4tGPvNBG3ieUbSw==", "dependencies": { "all-node-versions": "^8.0.0", @@ -14169,6 +15228,7 @@ }, "node_modules/node-version-alias/node_modules/@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14182,6 +15242,7 @@ }, "node_modules/node-version-alias/node_modules/@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dependencies": { "@types/istanbul-lib-coverage": "*", @@ -14190,6 +15251,7 @@ }, "node_modules/node-version-alias/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -14203,6 +15265,7 @@ }, "node_modules/node-version-alias/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" @@ -14210,6 +15273,7 @@ }, "node_modules/node-version-alias/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { "ansi-styles": "^4.1.0", @@ -14221,6 +15285,7 @@ }, "node_modules/node-version-alias/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -14231,10 +15296,12 @@ }, "node_modules/node-version-alias/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/node-version-alias/node_modules/jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "engines": { "node": ">= 8.3" @@ -14242,6 +15309,7 @@ }, "node_modules/node-version-alias/node_modules/jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -14257,6 +15325,7 @@ }, "node_modules/node-version-alias/node_modules/pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -14270,10 +15339,12 @@ }, "node_modules/node-version-alias/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/node-version-alias/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -14284,10 +15355,12 @@ }, "node_modules/noop2": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/noop2/-/noop2-2.0.0.tgz", "integrity": "sha1-S2NgFemIK1R4PAK0EvaZ2MXNCls=" }, "node_modules/nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dependencies": { "abbrev": "1" @@ -14301,6 +15374,7 @@ }, "node_modules/normalize-node-version": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/normalize-node-version/-/normalize-node-version-10.0.0.tgz", "integrity": "sha512-/gVbS/qAnowVxr2fJy3F0MxmCvx8QdXJDl8XUE7HT3vsDeDjQfZkX9OiPahF+51Hgy93cKG1hP6uyBjQsMCvWQ==", "dependencies": { "all-node-versions": "^8.0.0", @@ -14314,6 +15388,7 @@ }, "node_modules/normalize-node-version/node_modules/@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -14327,6 +15402,7 @@ }, "node_modules/normalize-node-version/node_modules/@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dependencies": { "@types/istanbul-lib-coverage": "*", @@ -14335,6 +15411,7 @@ }, "node_modules/normalize-node-version/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -14348,6 +15425,7 @@ }, "node_modules/normalize-node-version/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" @@ -14355,6 +15433,7 @@ }, "node_modules/normalize-node-version/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { "ansi-styles": "^4.1.0", @@ -14366,6 +15445,7 @@ }, "node_modules/normalize-node-version/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -14376,10 +15456,12 @@ }, "node_modules/normalize-node-version/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/normalize-node-version/node_modules/jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==", "engines": { "node": ">= 8.3" @@ -14387,6 +15469,7 @@ }, "node_modules/normalize-node-version/node_modules/jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -14402,6 +15485,7 @@ }, "node_modules/normalize-node-version/node_modules/pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dependencies": { "@jest/types": "^25.5.0", @@ -14415,10 +15499,12 @@ }, "node_modules/normalize-node-version/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/normalize-node-version/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -14429,6 +15515,7 @@ }, "node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "dependencies": { @@ -14443,6 +15530,7 @@ }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" @@ -14450,6 +15538,7 @@ }, "node_modules/normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "engines": { "node": ">=10" @@ -14460,6 +15549,7 @@ }, "node_modules/npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dependencies": { "npm-normalize-package-bin": "^1.0.1" @@ -14467,10 +15557,12 @@ }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "node_modules/npm-packlist": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "dependencies": { "ignore-walk": "^3.0.1", @@ -14480,6 +15572,7 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "dependencies": { @@ -14504,6 +15597,7 @@ }, "node_modules/npm-run-all/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { @@ -14515,6 +15609,7 @@ }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { @@ -14528,6 +15623,7 @@ }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { @@ -14543,6 +15639,7 @@ }, "node_modules/npm-run-all/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { @@ -14551,6 +15648,7 @@ }, "node_modules/npm-run-all/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, "engines": { @@ -14559,11 +15657,13 @@ }, "node_modules/npm-run-all/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "node_modules/npm-run-all/node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "dependencies": { @@ -14578,6 +15678,7 @@ }, "node_modules/npm-run-all/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "dependencies": { @@ -14589,6 +15690,7 @@ }, "node_modules/npm-run-all/node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "dependencies": { @@ -14601,6 +15703,7 @@ }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, "engines": { @@ -14609,6 +15712,7 @@ }, "node_modules/npm-run-all/node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "dependencies": { @@ -14618,19 +15722,9 @@ "node": ">=4" } }, - "node_modules/npm-run-all/node_modules/pidtree": { - "version": "0.3.1", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/npm-run-all/node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, "engines": { @@ -14639,6 +15733,7 @@ }, "node_modules/npm-run-all/node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "dependencies": { @@ -14650,8 +15745,26 @@ "node": ">=4" } }, + "node_modules/npm-run-all/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/npm-run-all/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "bin": { @@ -14660,6 +15773,7 @@ }, "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "dependencies": { @@ -14671,22 +15785,16 @@ }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/npm-run-all/node_modules/strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/npm-run-all/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { @@ -14698,6 +15806,7 @@ }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { @@ -14709,6 +15818,7 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dependencies": { "path-key": "^3.0.0" @@ -14719,6 +15829,7 @@ }, "node_modules/npmlog": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "dependencies": { "are-we-there-yet": "^2.0.0", @@ -14729,6 +15840,7 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "engines": { "node": ">=0.10.0" @@ -14751,6 +15863,7 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "engines": { "node": ">=0.10.0" @@ -14758,6 +15871,7 @@ }, "node_modules/object-copy": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dependencies": { "copy-descriptor": "^0.1.0", @@ -14770,6 +15884,7 @@ }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { "is-descriptor": "^0.1.0" @@ -14780,6 +15895,7 @@ }, "node_modules/object-copy/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { "kind-of": "^3.0.2" @@ -14790,6 +15906,7 @@ }, "node_modules/object-copy/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { "kind-of": "^3.0.2" @@ -14800,6 +15917,7 @@ }, "node_modules/object-copy/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { "is-accessor-descriptor": "^0.1.6", @@ -14812,6 +15930,7 @@ }, "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" @@ -14819,6 +15938,7 @@ }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -14828,14 +15948,17 @@ } }, "node_modules/object-inspect": { - "version": "1.11.1", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { "node": ">= 0.4" @@ -14843,6 +15966,7 @@ }, "node_modules/object-visit": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dependencies": { "isobject": "^3.0.0" @@ -14853,6 +15977,7 @@ }, "node_modules/object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dependencies": { "call-bind": "^1.0.0", @@ -14869,6 +15994,7 @@ }, "node_modules/object.entries": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "dependencies": { @@ -14882,6 +16008,7 @@ }, "node_modules/object.fromentries": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "dependencies": { @@ -14898,6 +16025,7 @@ }, "node_modules/object.hasown": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "dependencies": { @@ -14910,6 +16038,7 @@ }, "node_modules/object.pick": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dependencies": { "isobject": "^3.0.1" @@ -14920,6 +16049,7 @@ }, "node_modules/object.values": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "dependencies": { @@ -14936,10 +16066,12 @@ }, "node_modules/omit.js": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" }, "node_modules/on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dependencies": { "ee-first": "1.1.1" @@ -14950,6 +16082,7 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { "node": ">= 0.8" @@ -14957,6 +16090,7 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dependencies": { "wrappy": "1" @@ -14964,6 +16098,7 @@ }, "node_modules/one-time": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dependencies": { "fn.name": "1.x.x" @@ -14971,6 +16106,7 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dependencies": { "mimic-fn": "^2.1.0" @@ -14984,6 +16120,7 @@ }, "node_modules/onetime/node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "engines": { "node": ">=6" @@ -14991,6 +16128,7 @@ }, "node_modules/open": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -15006,6 +16144,7 @@ }, "node_modules/opn": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dependencies": { "is-wsl": "^1.1.0" @@ -15016,6 +16155,7 @@ }, "node_modules/opn/node_modules/is-wsl": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", "engines": { "node": ">=4" @@ -15023,6 +16163,7 @@ }, "node_modules/optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "dependencies": { @@ -15039,6 +16180,7 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dependencies": { "bl": "^4.1.0", @@ -15060,6 +16202,7 @@ }, "node_modules/os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "engines": { "node": ">=0.10.0" @@ -15067,6 +16210,7 @@ }, "node_modules/os-name": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", "dependencies": { "macos-release": "^2.5.0", @@ -15081,6 +16225,7 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "engines": { "node": ">=0.10.0" @@ -15088,6 +16233,7 @@ }, "node_modules/osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dependencies": { "os-homedir": "^1.0.0", @@ -15096,6 +16242,7 @@ }, "node_modules/p-all": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "dependencies": { "p-map": "^2.0.0" @@ -15106,6 +16253,7 @@ }, "node_modules/p-all/node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "engines": { "node": ">=6" @@ -15113,6 +16261,7 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "engines": { "node": ">=8" @@ -15120,6 +16269,7 @@ }, "node_modules/p-defer": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true, "engines": { @@ -15128,6 +16278,7 @@ }, "node_modules/p-event": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dependencies": { "p-timeout": "^3.1.0" @@ -15141,6 +16292,7 @@ }, "node_modules/p-event/node_modules/p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dependencies": { "p-finally": "^1.0.0" @@ -15151,6 +16303,7 @@ }, "node_modules/p-every": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-every/-/p-every-2.0.0.tgz", "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", "dependencies": { "p-map": "^2.0.0" @@ -15161,6 +16314,7 @@ }, "node_modules/p-every/node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "engines": { "node": ">=6" @@ -15168,6 +16322,7 @@ }, "node_modules/p-filter": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dependencies": { "p-map": "^2.0.0" @@ -15178,6 +16333,7 @@ }, "node_modules/p-filter/node_modules/p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "engines": { "node": ">=6" @@ -15185,6 +16341,7 @@ }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "engines": { "node": ">=4" @@ -15192,6 +16349,7 @@ }, "node_modules/p-is-promise": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", "engines": { "node": ">=4" @@ -15199,6 +16357,7 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dependencies": { "yocto-queue": "^0.1.0" @@ -15212,6 +16371,7 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dependencies": { "p-limit": "^3.0.2" @@ -15225,6 +16385,7 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dependencies": { "aggregate-error": "^3.0.0" @@ -15238,6 +16399,7 @@ }, "node_modules/p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "engines": { "node": ">=8" @@ -15245,6 +16407,7 @@ }, "node_modules/p-timeout": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", "dev": true, "engines": { @@ -15252,14 +16415,17 @@ } }, "node_modules/p-try": { - "version": "2.2.0", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/p-wait-for": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", "dependencies": { "p-timeout": "^3.0.0" @@ -15273,6 +16439,7 @@ }, "node_modules/p-wait-for/node_modules/p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dependencies": { "p-finally": "^1.0.0" @@ -15283,6 +16450,7 @@ }, "node_modules/package-json": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "dependencies": { "got": "^9.6.0", @@ -15296,6 +16464,7 @@ }, "node_modules/package-json/node_modules/@sindresorhus/is": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", "engines": { "node": ">=6" @@ -15303,6 +16472,7 @@ }, "node_modules/package-json/node_modules/@szmarczak/http-timer": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "dependencies": { "defer-to-connect": "^1.0.1" @@ -15313,6 +16483,7 @@ }, "node_modules/package-json/node_modules/cacheable-request": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "dependencies": { "clone-response": "^1.0.2", @@ -15329,6 +16500,7 @@ }, "node_modules/package-json/node_modules/cacheable-request/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -15342,6 +16514,7 @@ }, "node_modules/package-json/node_modules/decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dependencies": { "mimic-response": "^1.0.0" @@ -15352,10 +16525,12 @@ }, "node_modules/package-json/node_modules/defer-to-connect": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "node_modules/package-json/node_modules/get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { "pump": "^3.0.0" @@ -15366,6 +16541,7 @@ }, "node_modules/package-json/node_modules/got": { "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", "dependencies": { "@sindresorhus/is": "^0.14.0", @@ -15386,6 +16562,7 @@ }, "node_modules/package-json/node_modules/got/node_modules/lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { "node": ">=0.10.0" @@ -15393,10 +16570,12 @@ }, "node_modules/package-json/node_modules/json-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "node_modules/package-json/node_modules/keyv": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "dependencies": { "json-buffer": "3.0.0" @@ -15404,6 +16583,7 @@ }, "node_modules/package-json/node_modules/normalize-url": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", "engines": { "node": ">=8" @@ -15411,6 +16591,7 @@ }, "node_modules/package-json/node_modules/p-cancelable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", "engines": { "node": ">=6" @@ -15418,6 +16599,7 @@ }, "node_modules/package-json/node_modules/responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "dependencies": { "lowercase-keys": "^1.0.0" @@ -15425,6 +16607,7 @@ }, "node_modules/package-json/node_modules/responselike/node_modules/lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "engines": { "node": ">=0.10.0" @@ -15432,6 +16615,7 @@ }, "node_modules/package-json/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" @@ -15439,6 +16623,7 @@ }, "node_modules/package-json/node_modules/to-readable-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", "engines": { "node": ">=6" @@ -15446,6 +16631,7 @@ }, "node_modules/parallel-transform": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dependencies": { "cyclist": "^1.0.1", @@ -15455,6 +16641,7 @@ }, "node_modules/parallel-transform/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -15468,6 +16655,7 @@ }, "node_modules/parallel-transform/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -15475,6 +16663,7 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "dependencies": { @@ -15486,6 +16675,7 @@ }, "node_modules/parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "dependencies": { @@ -15503,6 +16693,7 @@ }, "node_modules/parse-github-url": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", "bin": { "parse-github-url": "cli.js" @@ -15513,6 +16704,7 @@ }, "node_modules/parse-gitignore": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-1.0.1.tgz", "integrity": "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==", "engines": { "node": ">=6" @@ -15520,6 +16712,7 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -15536,6 +16729,7 @@ }, "node_modules/parse-ms": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "engines": { "node": ">=6" @@ -15549,6 +16743,7 @@ }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" @@ -15556,6 +16751,7 @@ }, "node_modules/pascalcase": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "engines": { "node": ">=0.10.0" @@ -15563,10 +16759,12 @@ }, "node_modules/path-dirname": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" @@ -15574,6 +16772,7 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "engines": { "node": ">=0.10.0" @@ -15581,6 +16780,7 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" @@ -15588,14 +16788,17 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { "node": ">=8" @@ -15603,6 +16806,7 @@ }, "node_modules/pend": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "node_modules/performance-now": { @@ -15613,11 +16817,13 @@ }, "node_modules/picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { - "version": "2.3.0", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -15625,8 +16831,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "engines": { "node": ">=6" @@ -15634,6 +16853,7 @@ }, "node_modules/pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "engines": { "node": ">=0.10.0" @@ -15641,6 +16861,7 @@ }, "node_modules/pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dependencies": { "pinkie": "^2.0.0" @@ -15675,6 +16896,7 @@ }, "node_modules/pkg-conf": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, "dependencies": { @@ -15687,6 +16909,7 @@ }, "node_modules/pkg-conf/node_modules/find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { @@ -15698,6 +16921,7 @@ }, "node_modules/pkg-conf/node_modules/locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { @@ -15710,6 +16934,7 @@ }, "node_modules/pkg-conf/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { @@ -15724,6 +16949,7 @@ }, "node_modules/pkg-conf/node_modules/p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { @@ -15733,8 +16959,18 @@ "node": ">=6" } }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/pkg-conf/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { @@ -15743,6 +16979,7 @@ }, "node_modules/pkg-dir": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dependencies": { "find-up": "^5.0.0" @@ -15762,6 +16999,7 @@ }, "node_modules/plur": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "dependencies": { @@ -15776,6 +17014,7 @@ }, "node_modules/pluralize": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "engines": { @@ -15790,6 +17029,7 @@ }, "node_modules/posix-character-classes": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "engines": { "node": ">=0.10.0" @@ -15797,6 +17037,7 @@ }, "node_modules/postcss": { "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dependencies": { "nanoid": "^3.1.30", @@ -15813,6 +17054,7 @@ }, "node_modules/postcss-values-parser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "dependencies": { "flatten": "^1.0.2", @@ -15824,14 +17066,15 @@ } }, "node_modules/precinct": { - "version": "8.3.0", - "integrity": "sha512-+NPlVGgm+SVfQeClQQt9q4L7Aq7Lym2EhoLU8Ocs1T131hLJ0LAOMigHILSf5kVH2/rym5c80bUdBPkZ1HPKFA==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", + "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", "dependencies": { "commander": "^2.20.3", - "debug": "^4.3.1", - "detective-amd": "^3.0.1", + "debug": "^4.3.3", + "detective-amd": "^3.1.0", "detective-cjs": "^3.1.1", - "detective-es6": "^2.2.0", + "detective-es6": "^2.2.1", "detective-less": "^1.0.2", "detective-postcss": "^4.0.0", "detective-sass": "^3.0.1", @@ -15850,10 +17093,12 @@ }, "node_modules/precinct/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/precond": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", "engines": { "node": ">= 0.6" @@ -15861,6 +17106,7 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { @@ -15869,6 +17115,7 @@ }, "node_modules/prepend-http": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", "engines": { "node": ">=4" @@ -15876,6 +17123,7 @@ }, "node_modules/prettier": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "bin": { @@ -15893,6 +17141,7 @@ }, "node_modules/pretty-format": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dependencies": { "@jest/types": "^26.6.2", @@ -15906,6 +17155,7 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -15919,6 +17169,7 @@ }, "node_modules/pretty-format/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -15929,10 +17180,12 @@ }, "node_modules/pretty-format/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/pretty-ms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dependencies": { "parse-ms": "^2.1.0" @@ -15946,6 +17199,7 @@ }, "node_modules/prettyjson": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", "dependencies": { "colors": "1.4.0", @@ -15957,6 +17211,7 @@ }, "node_modules/printj": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", "bin": { "printj": "bin/printj.njs" @@ -15972,10 +17227,12 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { @@ -15983,22 +17240,25 @@ } }, "node_modules/prop-types": { - "version": "15.7.2", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" } }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", @@ -16020,9 +17280,9 @@ } }, "node_modules/proxyquire/node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", "dev": true, "dependencies": { "is-core-module": "^2.8.0", @@ -16038,6 +17298,7 @@ }, "node_modules/ps-list": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==", "engines": { "node": ">=10" @@ -16054,6 +17315,7 @@ }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", @@ -16062,6 +17324,7 @@ }, "node_modules/punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "engines": { "node": ">=6" @@ -16069,6 +17332,7 @@ }, "node_modules/pupa": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "dependencies": { "escape-goat": "^2.0.0" @@ -16079,6 +17343,7 @@ }, "node_modules/q": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, "engines": { @@ -16099,6 +17364,7 @@ }, "node_modules/query-string": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dependencies": { "decode-uri-component": "^0.2.0", @@ -16111,6 +17377,7 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { @@ -16135,6 +17402,7 @@ }, "node_modules/quick-lru": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "engines": { @@ -16146,6 +17414,7 @@ }, "node_modules/random-bytes": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", "engines": { "node": ">= 0.8" @@ -16153,6 +17422,7 @@ }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" @@ -16168,6 +17438,7 @@ }, "node_modules/raw-body": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dependencies": { "bytes": "3.1.1", @@ -16179,15 +17450,9 @@ "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.1", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { "deep-extend": "^0.6.0", @@ -16201,10 +17466,12 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "engines": { "node": ">=0.10.0" @@ -16212,10 +17479,12 @@ }, "node_modules/react-is": { "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dependencies": { "json-parse-even-better-errors": "^2.3.0", @@ -16227,6 +17496,7 @@ }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dependencies": { "@types/normalize-package-data": "^2.4.0", @@ -16240,6 +17510,7 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dependencies": { "find-up": "^4.1.0", @@ -16255,6 +17526,7 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", @@ -16266,6 +17538,7 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" @@ -16276,6 +17549,7 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" @@ -16289,6 +17563,7 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" @@ -16297,8 +17572,17 @@ "node": ">=8" } }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "engines": { "node": ">=8" @@ -16306,10 +17590,12 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dependencies": { "hosted-git-info": "^2.1.4", @@ -16318,8 +17604,25 @@ "validate-npm-package-license": "^3.0.1" } }, + "node_modules/read-pkg/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "bin": { "semver": "bin/semver" @@ -16327,6 +17630,7 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "engines": { "node": ">=8" @@ -16334,6 +17638,7 @@ }, "node_modules/readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", @@ -16346,6 +17651,7 @@ }, "node_modules/readdir-glob": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "dependencies": { "minimatch": "^3.0.4" @@ -16353,6 +17659,7 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" @@ -16363,6 +17670,7 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "dependencies": { @@ -16404,6 +17712,7 @@ }, "node_modules/regex-not": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dependencies": { "extend-shallow": "^3.0.2", @@ -16415,6 +17724,7 @@ }, "node_modules/regex-not/node_modules/safe-regex": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dependencies": { "ret": "~0.1.10" @@ -16422,6 +17732,7 @@ }, "node_modules/regexp-tree": { "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true, "bin": { @@ -16429,8 +17740,9 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -16445,6 +17757,7 @@ }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { @@ -16472,6 +17785,7 @@ }, "node_modules/registry-auth-token": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dependencies": { "rc": "^1.2.8" @@ -16482,6 +17796,7 @@ }, "node_modules/registry-url": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "dependencies": { "rc": "^1.2.8" @@ -16516,10 +17831,12 @@ }, "node_modules/remove-trailing-separator": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "node_modules/repeat-element": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "engines": { "node": ">=0.10.0" @@ -16527,6 +17844,7 @@ }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "engines": { "node": ">=0.10" @@ -16534,6 +17852,7 @@ }, "node_modules/req-all": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", "integrity": "sha1-EwBR4qzligLqy/ydRIV3pzapJzo=", "dev": true, "engines": { @@ -16672,6 +17991,7 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "engines": { "node": ">=0.10.0" @@ -16679,26 +17999,26 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "node_modules/require-package-name": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=" }, "node_modules/requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { - "version": "1.20.0", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dependencies": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -16709,11 +18029,13 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "node_modules/resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { @@ -16725,6 +18047,7 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "engines": { "node": ">=8" @@ -16732,6 +18055,7 @@ }, "node_modules/resolve-global": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "dependencies": { @@ -16743,11 +18067,13 @@ }, "node_modules/resolve-url": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/responselike": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dependencies": { "lowercase-keys": "^2.0.0" @@ -16755,6 +18081,7 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dependencies": { "onetime": "^5.1.0", @@ -16766,6 +18093,7 @@ }, "node_modules/ret": { "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "engines": { "node": ">=0.12" @@ -16773,6 +18101,7 @@ }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "engines": { "iojs": ">=1.0.0", @@ -16781,10 +18110,12 @@ }, "node_modules/rfdc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dependencies": { "glob": "^7.1.3" @@ -16797,9 +18128,9 @@ } }, "node_modules/rollup": { - "version": "2.64.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", - "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", + "version": "2.65.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.65.0.tgz", + "integrity": "sha512-ohZVYrhtVMTqqeqH26sngfMiyGDg6gCUReOsoflXvYpzUkDHp8sVG8F9FQxjs72OfnLWpXP2nNNqQ9I0vkRovA==", "bin": { "rollup": "dist/bin/rollup" }, @@ -16858,6 +18189,7 @@ }, "node_modules/rollup-pluginutils": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dependencies": { "estree-walker": "^0.6.1" @@ -16865,10 +18197,12 @@ }, "node_modules/rollup-pluginutils/node_modules/estree-walker": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "engines": { "node": ">=0.12.0" @@ -16876,6 +18210,7 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { @@ -16897,6 +18232,7 @@ }, "node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dependencies": { "tslib": "^1.9.0" @@ -16905,20 +18241,19 @@ "npm": ">=2.0.0" } }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-json-stringify": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" }, "node_modules/safe-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "dependencies": { @@ -16927,14 +18262,17 @@ }, "node_modules/safe-stable-stringify": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "node_modules/saxes": { @@ -16951,11 +18289,13 @@ }, "node_modules/seedrandom": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true }, "node_modules/seek-bzip": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dependencies": { "commander": "^2.8.1" @@ -16967,10 +18307,12 @@ }, "node_modules/seek-bzip/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/semver": { "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dependencies": { "lru-cache": "^6.0.0" @@ -16984,6 +18326,7 @@ }, "node_modules/semver-diff": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dependencies": { "semver": "^6.3.0" @@ -16994,6 +18337,7 @@ }, "node_modules/semver-diff/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "bin": { "semver": "bin/semver.js" @@ -17045,6 +18389,7 @@ }, "node_modules/serialize-error": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "dependencies": { @@ -17059,6 +18404,7 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, "engines": { @@ -17070,6 +18416,7 @@ }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { @@ -17092,10 +18439,12 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "node_modules/set-value": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dependencies": { "extend-shallow": "^2.0.1", @@ -17109,6 +18458,7 @@ }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -17119,6 +18469,7 @@ }, "node_modules/set-value/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -17126,6 +18477,7 @@ }, "node_modules/set-value/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dependencies": { "isobject": "^3.0.1" @@ -17141,6 +18493,7 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" @@ -17151,6 +18504,7 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" @@ -17158,12 +18512,15 @@ }, "node_modules/shell-quote": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "node_modules/side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -17175,10 +18532,12 @@ }, "node_modules/signal-exit": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/simple-swizzle": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dependencies": { "is-arrayish": "^0.3.1" @@ -17186,10 +18545,12 @@ }, "node_modules/simple-swizzle/node_modules/is-arrayish": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sinon": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", "dev": true, "dependencies": { @@ -17207,6 +18568,7 @@ }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { @@ -17218,6 +18580,7 @@ }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "engines": { "node": ">=8" @@ -17225,6 +18588,7 @@ }, "node_modules/slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "dependencies": { @@ -17238,6 +18602,7 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { @@ -17252,6 +18617,7 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { @@ -17263,11 +18629,13 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/snapdragon": { "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dependencies": { "base": "^0.11.1", @@ -17285,6 +18653,7 @@ }, "node_modules/snapdragon-node": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dependencies": { "define-property": "^1.0.0", @@ -17297,6 +18666,7 @@ }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dependencies": { "is-descriptor": "^1.0.0" @@ -17307,6 +18677,7 @@ }, "node_modules/snapdragon-util": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dependencies": { "kind-of": "^3.2.0" @@ -17317,6 +18688,7 @@ }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -17327,6 +18699,7 @@ }, "node_modules/snapdragon/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" @@ -17334,6 +18707,7 @@ }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { "is-descriptor": "^0.1.0" @@ -17344,6 +18718,7 @@ }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dependencies": { "is-extendable": "^0.1.0" @@ -17354,6 +18729,7 @@ }, "node_modules/snapdragon/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { "kind-of": "^3.0.2" @@ -17364,6 +18740,7 @@ }, "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -17374,6 +18751,7 @@ }, "node_modules/snapdragon/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { "kind-of": "^3.0.2" @@ -17384,6 +18762,7 @@ }, "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -17394,6 +18773,7 @@ }, "node_modules/snapdragon/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { "is-accessor-descriptor": "^0.1.6", @@ -17406,6 +18786,7 @@ }, "node_modules/snapdragon/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -17413,6 +18794,7 @@ }, "node_modules/snapdragon/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" @@ -17420,6 +18802,7 @@ }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/sonic-boom": { @@ -17434,6 +18817,7 @@ }, "node_modules/sort-keys": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "dependencies": { "is-plain-obj": "^1.0.0" @@ -17444,6 +18828,7 @@ }, "node_modules/sort-keys-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", "dependencies": { "sort-keys": "^1.0.0" @@ -17454,6 +18839,7 @@ }, "node_modules/sort-keys/node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "engines": { "node": ">=0.10.0" @@ -17461,6 +18847,7 @@ }, "node_modules/sort-on": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-4.1.1.tgz", "integrity": "sha512-nj8myvTCEErLMMWnye61z1pV5osa7njoosoQNdylD8WyPYHoHCBQx/xn7mGJL6h4oThvGpYSIAxfm8VUr75qTQ==", "dev": true, "dependencies": { @@ -17473,6 +18860,7 @@ }, "node_modules/sort-on/node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "dependencies": { @@ -17484,20 +18872,23 @@ }, "node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.1", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-resolve": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dependencies": { @@ -17510,6 +18901,7 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", @@ -17518,6 +18910,7 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" @@ -17525,6 +18918,7 @@ }, "node_modules/source-map-url": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated" }, @@ -17535,6 +18929,7 @@ }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dependencies": { "spdx-expression-parse": "^3.0.0", @@ -17543,10 +18938,12 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dependencies": { "spdx-exceptions": "^2.1.0", @@ -17555,10 +18952,12 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" }, "node_modules/split-string": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dependencies": { "extend-shallow": "^3.0.0" @@ -17569,6 +18968,7 @@ }, "node_modules/split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "dependencies": { @@ -17577,6 +18977,7 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -17607,6 +19008,7 @@ }, "node_modules/stack-generator": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", "dependencies": { "stackframe": "^1.1.1" @@ -17614,6 +19016,7 @@ }, "node_modules/stack-trace": { "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", "engines": { "node": "*" @@ -17621,6 +19024,7 @@ }, "node_modules/stack-utils": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "dependencies": { @@ -17632,6 +19036,7 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "engines": { @@ -17640,10 +19045,12 @@ }, "node_modules/stackframe": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" }, "node_modules/static-extend": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dependencies": { "define-property": "^0.2.5", @@ -17655,6 +19062,7 @@ }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dependencies": { "is-descriptor": "^0.1.0" @@ -17665,6 +19073,7 @@ }, "node_modules/static-extend/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dependencies": { "kind-of": "^3.0.2" @@ -17675,6 +19084,7 @@ }, "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -17685,6 +19095,7 @@ }, "node_modules/static-extend/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dependencies": { "kind-of": "^3.0.2" @@ -17695,6 +19106,7 @@ }, "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -17705,6 +19117,7 @@ }, "node_modules/static-extend/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dependencies": { "is-accessor-descriptor": "^0.1.6", @@ -17717,6 +19130,7 @@ }, "node_modules/static-extend/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "engines": { "node": ">=0.10.0" @@ -17724,6 +19138,7 @@ }, "node_modules/static-server": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/static-server/-/static-server-2.2.1.tgz", "integrity": "sha512-j5eeW6higxYNmXMIT8iHjsdiViTpQDthg7o+SHsRtqdbxscdHqBHXwrXjHC8hL3F0Tsu34ApUpDkwzMBPBsrLw==", "dependencies": { "chalk": "^0.5.1", @@ -17741,6 +19156,7 @@ }, "node_modules/static-server/node_modules/ansi-regex": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", "engines": { "node": ">=0.10.0" @@ -17748,6 +19164,7 @@ }, "node_modules/static-server/node_modules/ansi-styles": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", "engines": { "node": ">=0.10.0" @@ -17755,6 +19172,7 @@ }, "node_modules/static-server/node_modules/chalk": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dependencies": { "ansi-styles": "^1.1.0", @@ -17769,10 +19187,12 @@ }, "node_modules/static-server/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/static-server/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -17780,6 +19200,7 @@ }, "node_modules/static-server/node_modules/has-ansi": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dependencies": { "ansi-regex": "^0.2.0" @@ -17793,6 +19214,7 @@ }, "node_modules/static-server/node_modules/strip-ansi": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dependencies": { "ansi-regex": "^0.2.1" @@ -17806,6 +19228,7 @@ }, "node_modules/static-server/node_modules/supports-color": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", "bin": { "supports-color": "cli.js" @@ -17816,11 +19239,13 @@ }, "node_modules/statsd-client": { "version": "0.4.7", + "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { @@ -17847,6 +19272,7 @@ }, "node_modules/strict-uri-encode": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", "engines": { "node": ">=0.10.0" @@ -17854,6 +19280,7 @@ }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" @@ -17861,6 +19288,7 @@ }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { @@ -17879,10 +19307,12 @@ }, "node_modules/string-similarity": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", @@ -17895,6 +19325,7 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "dependencies": { @@ -17913,6 +19344,7 @@ }, "node_modules/string.prototype.padend": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "dependencies": { @@ -17929,6 +19361,7 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { @@ -17941,6 +19374,7 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { @@ -17953,6 +19387,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" @@ -17963,10 +19398,21 @@ }, "node_modules/strip-ansi-control-characters": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi-control-characters/-/strip-ansi-control-characters-2.0.0.tgz", "integrity": "sha512-Q0/k5orrVGeaOlIOUn1gybGU0IcAbgHQT1faLo5hik4DqClKVSaka5xOhNNoRgtfztHVxCYxi7j71mrWom0bIw==" }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-dirs": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dependencies": { "is-natural-number": "^4.0.1" @@ -17974,6 +19420,7 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "engines": { "node": ">=6" @@ -17981,6 +19428,7 @@ }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "dependencies": { @@ -17992,6 +19440,7 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { @@ -18003,6 +19452,7 @@ }, "node_modules/strip-outer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -18013,48 +19463,37 @@ }, "node_modules/strip-outer/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" } }, "node_modules/superagent": { - "version": "6.1.0", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at . Thanks to @shadowgate15, @spence-s, and @niftylettuce. Superagent is sponsored by Forward Email at .", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", + "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", "dev": true, "dependencies": { "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", + "cookiejar": "^2.1.3", + "debug": "^4.3.3", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", + "mime": "^2.5.0", + "qs": "^6.10.1", "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 7.0.0" - } - }, - "node_modules/superagent/node_modules/form-data": { - "version": "3.0.1", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "semver": "^7.3.5" }, "engines": { - "node": ">= 6" + "node": ">=6.4.0 <13 || >=14" } }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "bin": { @@ -18065,8 +19504,9 @@ } }, "node_modules/superagent/node_modules/qs": { - "version": "6.10.2", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -18080,6 +19520,7 @@ }, "node_modules/supertap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz", "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", "dev": true, "dependencies": { @@ -18095,6 +19536,7 @@ }, "node_modules/supertap/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { @@ -18103,6 +19545,7 @@ }, "node_modules/supertap/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { @@ -18114,12 +19557,13 @@ } }, "node_modules/supertest": { - "version": "6.1.6", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz", + "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==", "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^6.1.0" + "superagent": "^7.1.0" }, "engines": { "node": ">=6.0.0" @@ -18127,6 +19571,7 @@ }, "node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { "has-flag": "^4.0.0" @@ -18140,6 +19585,7 @@ }, "node_modules/supports-hyperlinks": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dependencies": { "has-flag": "^4.0.0", @@ -18151,6 +19597,7 @@ }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" @@ -18159,8 +19606,20 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/symbol-observable": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", "engines": { "node": ">=0.10.0" @@ -18173,8 +19632,9 @@ "dev": true }, "node_modules/table": { - "version": "6.7.5", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -18187,8 +19647,25 @@ "node": ">=10.0.0" } }, + "node_modules/table/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/table/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { @@ -18203,6 +19680,7 @@ }, "node_modules/table/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { @@ -18214,11 +19692,19 @@ }, "node_modules/table/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { @@ -18235,6 +19721,7 @@ }, "node_modules/tabtab": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", "dependencies": { "debug": "^4.0.1", @@ -18245,18 +19732,9 @@ "untildify": "^3.0.3" } }, - "node_modules/tabtab/node_modules/mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/tar": { "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dependencies": { "chownr": "^2.0.0", @@ -18272,6 +19750,7 @@ }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dependencies": { "bl": "^4.0.3", @@ -18284,8 +19763,20 @@ "node": ">=6" } }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/temp": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=", "dev": true, "engines": [ @@ -18294,6 +19785,7 @@ }, "node_modules/temp-dir": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "engines": { "node": ">=8" @@ -18301,6 +19793,7 @@ }, "node_modules/tempy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dependencies": { "del": "^6.0.0", @@ -18318,6 +19811,7 @@ }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "engines": { "node": ">=10" @@ -18328,6 +19822,7 @@ }, "node_modules/terminal-link": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dependencies": { "ansi-escapes": "^4.2.1", @@ -18342,6 +19837,7 @@ }, "node_modules/terminal-link/node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dependencies": { "type-fest": "^0.21.3" @@ -18355,6 +19851,7 @@ }, "node_modules/terminal-link/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "engines": { "node": ">=10" @@ -18402,6 +19899,7 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "dependencies": { @@ -18415,6 +19913,7 @@ }, "node_modules/text-extensions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "engines": { @@ -18423,19 +19922,23 @@ }, "node_modules/text-hex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "node_modules/text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "node_modules/through2": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "dependencies": { @@ -18444,6 +19947,7 @@ }, "node_modules/through2-filter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dependencies": { "through2": "~2.0.0", @@ -18452,6 +19956,7 @@ }, "node_modules/through2-filter/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -18465,6 +19970,7 @@ }, "node_modules/through2-filter/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -18472,6 +19978,7 @@ }, "node_modules/through2-filter/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { "readable-stream": "~2.3.6", @@ -18480,6 +19987,7 @@ }, "node_modules/through2-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-map/-/through2-map-3.0.0.tgz", "integrity": "sha1-psMCbOY7SJipl9VAUGtm/9lw8nE=", "dependencies": { "through2": "~2.0.0", @@ -18488,6 +19996,7 @@ }, "node_modules/through2-map/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { "core-util-is": "~1.0.0", @@ -18501,6 +20010,7 @@ }, "node_modules/through2-map/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" @@ -18508,6 +20018,7 @@ }, "node_modules/through2-map/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { "readable-stream": "~2.3.6", @@ -18516,6 +20027,7 @@ }, "node_modules/time-zone": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=", "engines": { "node": ">=4" @@ -18523,6 +20035,7 @@ }, "node_modules/timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", "engines": { "node": ">=0.10.0" @@ -18540,6 +20053,7 @@ }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dependencies": { "os-tmpdir": "~1.0.2" @@ -18550,6 +20064,7 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dependencies": { "tmp": "^0.2.0" @@ -18557,6 +20072,7 @@ }, "node_modules/tmp-promise/node_modules/tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dependencies": { "rimraf": "^3.0.0" @@ -18567,10 +20083,12 @@ }, "node_modules/to-buffer": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, "node_modules/to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "engines": { "node": ">=4" @@ -18578,6 +20096,7 @@ }, "node_modules/to-object-path": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dependencies": { "kind-of": "^3.0.2" @@ -18588,6 +20107,7 @@ }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dependencies": { "is-buffer": "^1.1.5" @@ -18598,6 +20118,7 @@ }, "node_modules/to-readable-stream": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", "engines": { "node": ">=8" @@ -18605,6 +20126,7 @@ }, "node_modules/to-regex": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dependencies": { "define-property": "^2.0.2", @@ -18618,6 +20140,7 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" @@ -18628,6 +20151,7 @@ }, "node_modules/to-regex/node_modules/safe-regex": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dependencies": { "ret": "~0.1.10" @@ -18643,10 +20167,12 @@ }, "node_modules/toml": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" }, "node_modules/tomlify-j0.4": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==" }, "node_modules/tough-cookie": { @@ -18665,10 +20191,12 @@ }, "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "bin": { @@ -18677,6 +20205,7 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "engines": { @@ -18685,6 +20214,7 @@ }, "node_modules/trim-off-newlines": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true, "engines": { @@ -18693,6 +20223,7 @@ }, "node_modules/trim-repeated": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "dependencies": { "escape-string-regexp": "^1.0.2" @@ -18703,6 +20234,7 @@ }, "node_modules/trim-repeated/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -18710,10 +20242,12 @@ }, "node_modules/triple-beam": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "node_modules/ts-node": { "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "dependencies": { "@cspotcode/source-map-support": "0.7.0", @@ -18753,6 +20287,7 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "engines": { "node": ">=0.3.1" @@ -18760,6 +20295,7 @@ }, "node_modules/tsconfig-paths": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "dependencies": { @@ -18771,6 +20307,7 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { @@ -18780,13 +20317,10 @@ "json5": "lib/cli.js" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsscmp": { "version": "1.0.6", @@ -18799,6 +20333,7 @@ }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dependencies": { "tslib": "^1.8.1" @@ -18810,10 +20345,6 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -18836,8 +20367,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.7.1.tgz", "integrity": "sha512-g2QDI/ZLpuEor9EnJ1b7s9S2QSJgNCPBw9ZCSkQdqXNjg5ZQs4mASgW/elVifSxISFwBeMaIAmMBP5luAOIKAw==", - "dev": true, - "peer": true + "dev": true }, "node_modules/type": { "version": "1.2.0", @@ -18847,6 +20377,7 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { @@ -18858,6 +20389,7 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { @@ -18866,6 +20398,7 @@ }, "node_modules/type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "engines": { "node": ">=10" @@ -18876,6 +20409,7 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { "media-typer": "0.3.0", @@ -18887,14 +20421,16 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { - "version": "4.5.4", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -18918,6 +20454,7 @@ }, "node_modules/uid-safe": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "dependencies": { "random-bytes": "~1.0.0" @@ -18928,6 +20465,7 @@ }, "node_modules/unbox-primitive": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { @@ -18942,6 +20480,7 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dependencies": { "buffer": "^5.2.1", @@ -18986,6 +20525,7 @@ }, "node_modules/union-value": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dependencies": { "arr-union": "^3.1.0", @@ -18999,6 +20539,7 @@ }, "node_modules/union-value/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "engines": { "node": ">=0.10.0" @@ -19006,10 +20547,12 @@ }, "node_modules/uniq": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "node_modules/unique-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { "crypto-random-string": "^2.0.0" @@ -19020,6 +20563,7 @@ }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "dependencies": { @@ -19032,10 +20576,12 @@ }, "node_modules/universal-user-agent": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" }, "node_modules/universalify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { @@ -19050,6 +20596,7 @@ }, "node_modules/unixify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", "integrity": "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=", "dependencies": { "normalize-path": "^2.1.1" @@ -19060,6 +20607,7 @@ }, "node_modules/unixify/node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -19070,6 +20618,7 @@ }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "engines": { "node": ">= 0.8" @@ -19077,6 +20626,7 @@ }, "node_modules/unset-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dependencies": { "has-value": "^0.3.1", @@ -19088,6 +20638,7 @@ }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dependencies": { "get-value": "^2.0.3", @@ -19100,6 +20651,7 @@ }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dependencies": { "isarray": "1.0.0" @@ -19110,6 +20662,7 @@ }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "engines": { "node": ">=0.10.0" @@ -19117,6 +20670,7 @@ }, "node_modules/untildify": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==", "engines": { "node": ">=4" @@ -19124,6 +20678,7 @@ }, "node_modules/update-notifier": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "dependencies": { "boxen": "^5.0.0", @@ -19150,10 +20705,12 @@ }, "node_modules/update-notifier/node_modules/ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "node_modules/update-notifier/node_modules/is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dependencies": { "ci-info": "^2.0.0" @@ -19164,6 +20721,7 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" @@ -19171,11 +20729,13 @@ }, "node_modules/urix": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "deprecated": "Please see https://github.com/lydell/urix#deprecated" }, "node_modules/url-parse-lax": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "dependencies": { "prepend-http": "^2.0.0" @@ -19186,6 +20746,7 @@ }, "node_modules/url-to-options": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", "engines": { "node": ">= 4" @@ -19193,6 +20754,7 @@ }, "node_modules/use": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "engines": { "node": ">=0.10.0" @@ -19200,10 +20762,12 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "engines": { "node": ">= 0.4.0" @@ -19211,6 +20775,7 @@ }, "node_modules/uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" @@ -19218,12 +20783,14 @@ }, "node_modules/v8-compile-cache": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "node_modules/v8-to-istanbul": { - "version": "8.1.0", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -19236,6 +20803,7 @@ }, "node_modules/v8-to-istanbul/node_modules/source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, "engines": { @@ -19244,6 +20812,7 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dependencies": { "spdx-correct": "^3.0.0", @@ -19252,6 +20821,7 @@ }, "node_modules/validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dependencies": { "builtins": "^1.0.3" @@ -19268,6 +20838,7 @@ }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "engines": { "node": ">= 0.8" @@ -19482,6 +21053,18 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/verdaccio-audit/node_modules/node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, "node_modules/verdaccio-audit/node_modules/qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -19638,12 +21221,41 @@ "node": ">=4.0.0" } }, + "node_modules/verdaccio/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/verdaccio/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/verdaccio/node_modules/resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -19658,12 +21270,6 @@ "extsprintf": "^1.2.0" } }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -19684,14 +21290,9 @@ "xml-name-validator": "^3.0.0" } }, - "node_modules/w3c-xmlserializer/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "node_modules/wait-port": { "version": "0.2.9", + "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", "dependencies": { "chalk": "^2.4.2", @@ -19707,6 +21308,7 @@ }, "node_modules/wait-port/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" @@ -19717,6 +21319,7 @@ }, "node_modules/wait-port/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", @@ -19729,10 +21332,12 @@ }, "node_modules/wait-port/node_modules/commander": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "node_modules/wait-port/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "engines": { "node": ">=0.8.0" @@ -19740,6 +21345,7 @@ }, "node_modules/wait-port/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { "node": ">=4" @@ -19747,6 +21353,7 @@ }, "node_modules/wait-port/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" @@ -19757,17 +21364,21 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { - "version": "3.0.1", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true }, "node_modules/well-known-symbols": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", "engines": { "node": ">=6" @@ -19790,14 +21401,21 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" @@ -19811,6 +21429,7 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "dependencies": { @@ -19824,12 +21443,9 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-module": { - "version": "2.0.0", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -19837,6 +21453,7 @@ }, "node_modules/widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "dependencies": { "string-width": "^4.0.0" @@ -19847,6 +21464,7 @@ }, "node_modules/windows-release": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", "dependencies": { "execa": "^4.0.2" @@ -19860,6 +21478,7 @@ }, "node_modules/windows-release/node_modules/execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dependencies": { "cross-spawn": "^7.0.0", @@ -19881,6 +21500,7 @@ }, "node_modules/windows-release/node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" @@ -19894,14 +21514,16 @@ }, "node_modules/windows-release/node_modules/human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "engines": { "node": ">=8.12.0" } }, "node_modules/winston": { - "version": "3.3.4", - "integrity": "sha512-zWJrfmqE+2IXtVJ125vxpA2m303TjwchLhfRbcnma7c76Qd4pv80JIp37l8uGnWbCoG4X6PMz3vAQeh+vH1CtA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.4.0.tgz", + "integrity": "sha512-FqilVj+5HKwCfIHQzMxrrd5tBIH10JTS3koFGbLVWBODjiIYq7zir08rFyBT4rrTYG/eaTqDcfSIbcjSM78YSw==", "dependencies": { "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", @@ -19919,6 +21541,7 @@ }, "node_modules/winston-transport": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.2.tgz", "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==", "dependencies": { "logform": "^2.3.2", @@ -19931,6 +21554,7 @@ }, "node_modules/word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "engines": { "node": ">=0.10.0" @@ -19944,6 +21568,7 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", @@ -19959,6 +21584,7 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" @@ -19972,6 +21598,7 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" @@ -19982,14 +21609,17 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dependencies": { "imurmurhash": "^0.1.4", @@ -20021,6 +21651,7 @@ }, "node_modules/xdg-basedir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "engines": { "node": ">=8" @@ -20040,6 +21671,7 @@ }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { "node": ">=0.4" @@ -20047,6 +21679,7 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" @@ -20054,10 +21687,12 @@ }, "node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, "engines": { @@ -20068,7 +21703,6 @@ "version": "17.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -20084,6 +21718,7 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" @@ -20091,22 +21726,23 @@ }, "node_modules/yargs/node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "dev": true, "engines": { "node": ">=12" } }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dependencies": { "buffer-crc32": "~0.2.3", @@ -20115,6 +21751,7 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "engines": { "node": ">=6" @@ -20122,6 +21759,7 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "engines": { "node": ">=10" @@ -20132,6 +21770,7 @@ }, "node_modules/zip-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "dependencies": { "archiver-utils": "^2.1.0", @@ -20146,6 +21785,7 @@ "dependencies": { "@babel/code-frame": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "requires": { "@babel/highlight": "^7.16.7" @@ -20157,18 +21797,19 @@ "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==" }, "@babel/core": { - "version": "7.16.5", - "integrity": "sha512-wUcenlLzuWMZ9Zt8S0KmFwGlH6QKRh3vsm/dhDA3CHkiTA45YuG1XkHRcNRl73EFPXDp/d5kVOU0/y7x2w6OaQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.5", - "@babel/helper-compilation-targets": "^7.16.3", - "@babel/helper-module-transforms": "^7.16.5", - "@babel/helpers": "^7.16.5", - "@babel/parser": "^7.16.5", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.5", - "@babel/types": "^7.16.0", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.10.tgz", + "integrity": "sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA==", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -20179,12 +21820,14 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/eslint-parser": { "version": "7.16.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.16.5.tgz", "integrity": "sha512-mUqYa46lgWqHKQ33Q6LNCGp/wPR3eqOYTUixHFsfrSQqRxH0+WOzca75iEjFr5RDGH1dDz622LaHhLOzOuQRUA==", "dev": true, "requires": { @@ -20195,6 +21838,7 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } @@ -20212,6 +21856,7 @@ }, "@babel/helper-annotate-as-pure": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "requires": { "@babel/types": "^7.16.7" @@ -20239,14 +21884,15 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz", - "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", + "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", @@ -20281,6 +21927,16 @@ "semver": "^6.1.2" }, "dependencies": { + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -20290,6 +21946,7 @@ }, "@babel/helper-environment-visitor": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", "requires": { "@babel/types": "^7.16.7" @@ -20305,6 +21962,7 @@ }, "@babel/helper-function-name": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "requires": { "@babel/helper-get-function-arity": "^7.16.7", @@ -20314,6 +21972,7 @@ }, "@babel/helper-get-function-arity": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "requires": { "@babel/types": "^7.16.7" @@ -20321,6 +21980,7 @@ }, "@babel/helper-hoist-variables": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "requires": { "@babel/types": "^7.16.7" @@ -20336,6 +21996,7 @@ }, "@babel/helper-module-imports": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "requires": { "@babel/types": "^7.16.7" @@ -20366,6 +22027,7 @@ }, "@babel/helper-plugin-utils": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" }, "@babel/helper-remap-async-to-generator": { @@ -20408,6 +22070,7 @@ }, "@babel/helper-split-export-declaration": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "requires": { "@babel/types": "^7.16.7" @@ -20415,10 +22078,12 @@ }, "@babel/helper-validator-identifier": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" }, "@babel/helper-wrap-function": { @@ -20433,17 +22098,19 @@ } }, "@babel/helpers": { - "version": "7.16.5", - "integrity": "sha512-TLgi6Lh71vvMZGEkFuIxzaPsyeYCHQ5jJOOX1f0xXn0uciFuE8cEk0wyBquMcCxBXZ5BJhE2aUB7pnWTD150Tw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.5", - "@babel/types": "^7.16.0" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/highlight": { - "version": "7.16.7", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -20452,6 +22119,7 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" @@ -20459,6 +22127,7 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", @@ -20468,14 +22137,17 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" @@ -20484,9 +22156,9 @@ } }, "@babel/parser": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", - "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==" + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.10.tgz", + "integrity": "sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.16.7", @@ -20621,11 +22293,11 @@ } }, "@babel/plugin-proposal-private-methods": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz", - "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.10", "@babel/helper-plugin-utils": "^7.16.7" } }, @@ -20699,6 +22371,7 @@ }, "@babel/plugin-syntax-jsx": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", "dev": true, "requires": { @@ -20979,6 +22652,7 @@ }, "@babel/plugin-transform-react-display-name": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", "dev": true, "requires": { @@ -20987,6 +22661,7 @@ }, "@babel/plugin-transform-react-jsx": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", "dev": true, "requires": { @@ -20999,6 +22674,7 @@ }, "@babel/plugin-transform-react-jsx-development": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", "dev": true, "requires": { @@ -21007,6 +22683,7 @@ }, "@babel/plugin-transform-react-pure-annotations": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", "dev": true, "requires": { @@ -21089,9 +22766,9 @@ } }, "@babel/preset-env": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz", - "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", "requires": { "@babel/compat-data": "^7.16.8", "@babel/helper-compilation-targets": "^7.16.7", @@ -21111,7 +22788,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.16.7", "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", "@babel/plugin-proposal-private-property-in-object": "^7.16.7", "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", @@ -21190,6 +22867,7 @@ }, "@babel/preset-react": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", "dev": true, "requires": { @@ -21211,6 +22889,7 @@ }, "@babel/template": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "requires": { "@babel/code-frame": "^7.16.7", @@ -21219,9 +22898,9 @@ } }, "@babel/traverse": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", - "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", "requires": { "@babel/code-frame": "^7.16.7", "@babel/generator": "^7.16.8", @@ -21229,7 +22908,7 @@ "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.8", + "@babel/parser": "^7.16.10", "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" @@ -21246,19 +22925,22 @@ }, "@bcoe/v8-coverage": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, "@bugsnag/browser": { - "version": "7.14.1", - "integrity": "sha512-xenvisYx6xFNuh7GGR/SCLcRs2H6AXn58Ha/u/Yhk+typ1oE5EFAy15+2vdGMDmZp0GsAEgrOTsEZ30uSKdC1w==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/browser/-/browser-7.15.1.tgz", + "integrity": "sha512-9JyoadlU4Tj5wnu2NnSfvYX2n31FC7jBdsMF0JdWrrOMFH0htmjUL9JMDv3zXFtOfeez2GMDivwc/dJPXTUEkA==", "requires": { - "@bugsnag/core": "^7.14.0" + "@bugsnag/core": "^7.15.1" } }, "@bugsnag/core": { - "version": "7.14.0", - "integrity": "sha512-DKN7hNEA6zEOgnucihgNEiMmx4GVaFHD9dJUYQFiouAIL19R/TLgG6B+pGC+QAqHVYsCUt5XDnG8jD+J+3fKOA==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/core/-/core-7.15.1.tgz", + "integrity": "sha512-fwEYdQEYQhLqFYz8ZoWFCfSVGE5rEhdu/7TtHRDCNs9VwVabb3iAfFwYS8ShLeMPf0K6NaLQ1UC531cI5KEFVA==", "requires": { "@bugsnag/cuid": "^3.0.0", "@bugsnag/safe-json-stringify": "^6.0.0", @@ -21269,21 +22951,24 @@ }, "@bugsnag/cuid": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.0.0.tgz", "integrity": "sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg==" }, "@bugsnag/js": { - "version": "7.14.1", - "integrity": "sha512-ygykhixXByzolFpOsUGr72ENgiL1t4TkvKvka2rhoSHOr5kul9TierjvmwBKNpkPdUpDNkgqw3y349jYzzjk+w==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/js/-/js-7.15.1.tgz", + "integrity": "sha512-+RjoaWFPnN9TO3oiMdFVmrQQS5ywnNGp/4aFr+UNcOgvB9V8AqwQi9yNqnbvqAPwXFvPYI3obq2n0VMiiHAPXA==", "requires": { - "@bugsnag/browser": "^7.14.1", - "@bugsnag/node": "^7.14.1" + "@bugsnag/browser": "^7.15.1", + "@bugsnag/node": "^7.15.1" } }, "@bugsnag/node": { - "version": "7.14.1", - "integrity": "sha512-QhdFez60rTlEueg5rA0W6x8UrTcEnssv4XVPgfooGe2fYh6O89RFjI7zVVdw8QXUyqdf7w4WzyAsCir3XEhCqQ==", + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@bugsnag/node/-/node-7.15.1.tgz", + "integrity": "sha512-8yBXQqQumu35endZToKKEOPWZAGZ6BA1IHNI0ivW4u4sym9KnROED1uxYCyXlOPj6BNIdwUKKLhU8jGzdxppJQ==", "requires": { - "@bugsnag/core": "^7.14.0", + "@bugsnag/core": "^7.15.1", "byline": "^5.0.0", "error-stack-parser": "^2.0.2", "iserror": "^0.0.2", @@ -21293,16 +22978,18 @@ }, "@bugsnag/safe-json-stringify": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" }, "@commitlint/cli": { - "version": "16.0.1", - "integrity": "sha512-61gGRy65WiVDRsqP0dAR2fAgE3qrTBW3fgz9MySv32y5Ib3ZXXDDq6bGyQqi2dSaPuDYzNCRwwlC7mmQM73T/g==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-16.1.0.tgz", + "integrity": "sha512-x5L1knvA3isRWBRVQx+Q6D45pA9139a2aZQYpxkljMG0dj4UHZkCnsYWpnGalxPxASI7nrI0KedKfS2YeQ55cQ==", "dev": true, "requires": { "@commitlint/format": "^16.0.0", "@commitlint/lint": "^16.0.0", - "@commitlint/load": "^16.0.0", + "@commitlint/load": "^16.1.0", "@commitlint/read": "^16.0.0", "@commitlint/types": "^16.0.0", "lodash": "^4.17.19", @@ -21313,6 +23000,7 @@ }, "@commitlint/config-conventional": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-16.0.0.tgz", "integrity": "sha512-mN7J8KlKFn0kROd+q9PB01sfDx/8K/R25yITspL1No8PB4oj9M1p77xWjP80hPydqZG9OvQq+anXK3ZWeR7s3g==", "dev": true, "requires": { @@ -21320,34 +23008,18 @@ } }, "@commitlint/config-validator": { - "version": "16.0.0", - "integrity": "sha512-i80DGlo1FeC5jZpuoNV9NIjQN/m2dDV3jYGWg+1Wr+KldptkUHXj+6GY1Akll66lJ3D8s6aUGi3comPLHPtWHg==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-16.1.0.tgz", + "integrity": "sha512-2cHeZPNTuf1JWbMqyA46MkExor5HMSgv8JrdmzEakUbJHUreh35/wN00FJf57qGs134exQW2thiSQ1IJUsVx2Q==", "dev": true, "requires": { "@commitlint/types": "^16.0.0", "ajv": "^6.12.6" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } } }, "@commitlint/ensure": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-16.0.0.tgz", "integrity": "sha512-WdMySU8DCTaq3JPf0tZFCKIUhqxaL54mjduNhu8v4D2AMUVIIQKYMGyvXn94k8begeW6iJkTf9cXBArayskE7Q==", "dev": true, "requires": { @@ -21357,11 +23029,13 @@ }, "@commitlint/execute-rule": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-16.0.0.tgz", "integrity": "sha512-8edcCibmBb386x5JTHSPHINwA5L0xPkHQFY8TAuDEt5QyRZY/o5DF8OPHSa5Hx2xJvGaxxuIz4UtAT6IiRDYkw==", "dev": true }, "@commitlint/format": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-16.0.0.tgz", "integrity": "sha512-9yp5NCquXL1jVMKL0ZkRwJf/UHdebvCcMvICuZV00NQGYSAL89O398nhqrqxlbjBhM5EZVq0VGcV5+7r3D4zAA==", "dev": true, "requires": { @@ -21371,6 +23045,7 @@ }, "@commitlint/is-ignored": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-16.0.0.tgz", "integrity": "sha512-gmAQcwIGC/R/Lp0CEb2b5bfGC7MT5rPe09N8kOGjO/NcdNmfFSZMquwrvNJsq9hnAP0skRdHIsqwlkENkN4Lag==", "dev": true, "requires": { @@ -21380,6 +23055,7 @@ }, "@commitlint/lint": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-16.0.0.tgz", "integrity": "sha512-HNl15bRC0h+pLzbMzQC3tM0j1aESXsLYhElqKnXcf5mnCBkBkHzu6WwJW8rZbfxX+YwJmNljN62cPhmdBo8x0A==", "dev": true, "requires": { @@ -21390,13 +23066,14 @@ } }, "@commitlint/load": { - "version": "16.0.0", - "integrity": "sha512-7WhrGCkP6K/XfjBBguLkkI2XUdiiIyMGlNsSoSqgRNiD352EiffhFEApMy1/XOU+viwBBm/On0n5p0NC7e9/4A==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-16.1.0.tgz", + "integrity": "sha512-MtlEhKjP8jAF85jjX4mw8DUUwCxKsCgAc865hhpnwxjrfBcmGP7Up2AFE/M3ZMGDmSl1X1TMybQk/zohj8Cqdg==", "dev": true, "requires": { - "@commitlint/config-validator": "^16.0.0", + "@commitlint/config-validator": "^16.1.0", "@commitlint/execute-rule": "^16.0.0", - "@commitlint/resolve-extends": "^16.0.0", + "@commitlint/resolve-extends": "^16.1.0", "@commitlint/types": "^16.0.0", "chalk": "^4.0.0", "cosmiconfig": "^7.0.0", @@ -21408,11 +23085,13 @@ }, "@commitlint/message": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-16.0.0.tgz", "integrity": "sha512-CmK2074SH1Ws6kFMEKOKH/7hMekGVbOD6vb4alCOo2+33ZSLUIX8iNkDYyrw38Jwg6yWUhLjyQLUxREeV+QIUA==", "dev": true }, "@commitlint/parse": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-16.0.0.tgz", "integrity": "sha512-F9EjFlMw4MYgBEqoRrWZZKQBzdiJzPBI0qFDFqwUvfQsMmXEREZ242T4R5bFwLINWaALFLHEIa/FXEPa6QxCag==", "dev": true, "requires": { @@ -21423,6 +23102,7 @@ }, "@commitlint/read": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-16.0.0.tgz", "integrity": "sha512-H4T2zsfmYQK9B+JtoQaCXWBHUhgIJyOzWZjSfuIV9Ce69/OgHoffNpLZPF2lX6yKuDrS1SQFhI/kUCjVc/e4ew==", "dev": true, "requires": { @@ -21433,11 +23113,12 @@ } }, "@commitlint/resolve-extends": { - "version": "16.0.0", - "integrity": "sha512-Z/w9MAQUcxeawpCLtjmkVNXAXOmB2nhW+LYmHEZcx9O6UTauF/1+uuZ2/r0MtzTe1qw2JD+1QHVhEWYHVPlkdA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-16.1.0.tgz", + "integrity": "sha512-8182s6AFoUFX6+FT1PgQDt15nO2ogdR/EN8SYVAdhNXw1rLz8kT5saB/ICw567GuRAUgFTUMGCXy3ctMOXPEDg==", "dev": true, "requires": { - "@commitlint/config-validator": "^16.0.0", + "@commitlint/config-validator": "^16.1.0", "@commitlint/types": "^16.0.0", "import-fresh": "^3.0.0", "lodash": "^4.17.19", @@ -21447,6 +23128,7 @@ }, "@commitlint/rules": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-16.0.0.tgz", "integrity": "sha512-AOl0y2SBTdJ1bvIv8nwHvQKRT/jC1xb09C5VZwzHoT8sE8F54KDeEzPCwHQFgUcWdGLyS10kkOTAH2MyA8EIlg==", "dev": true, "requires": { @@ -21459,11 +23141,13 @@ }, "@commitlint/to-lines": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-16.0.0.tgz", "integrity": "sha512-iN/qU38TCKU7uKOg6RXLpD49wNiuI0TqMqybHbjefUeP/Jmzxa8ishryj0uLyVdrAl1ZjGeD1ukXGMTtvqz8iA==", "dev": true }, "@commitlint/top-level": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-16.0.0.tgz", "integrity": "sha512-/Jt6NLxyFkpjL5O0jxurZPCHURZAm7cQCqikgPCwqPAH0TLgwqdHjnYipl8J+AGnAMGDip4FNLoYrtgIpZGBYw==", "dev": true, "requires": { @@ -21472,6 +23156,7 @@ }, "@commitlint/types": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-16.0.0.tgz", "integrity": "sha512-+0FvYOAS39bJ4aKjnYn/7FD4DfWkmQ6G/06I4F0Gvu4KS5twirEg8mIcLhmeRDOOKn4Tp8PwpLwBiSA6npEMQA==", "dev": true, "requires": { @@ -21480,6 +23165,7 @@ }, "@concordance/react": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@concordance/react/-/react-2.0.0.tgz", "integrity": "sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==", "dev": true, "requires": { @@ -21488,6 +23174,7 @@ "dependencies": { "arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true } @@ -21495,10 +23182,12 @@ }, "@cspotcode/source-map-consumer": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==" }, "@cspotcode/source-map-support": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "requires": { "@cspotcode/source-map-consumer": "0.8.0" @@ -21506,6 +23195,7 @@ }, "@dabh/diagnostics": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz", "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==", "requires": { "colorspace": "1.1.x", @@ -21515,6 +23205,7 @@ }, "@eslint/eslintrc": { "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { @@ -21529,19 +23220,9 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { @@ -21550,6 +23231,7 @@ }, "globals": { "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { @@ -21558,11 +23240,13 @@ }, "ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { @@ -21570,13 +23254,9 @@ "esprima": "^4.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } @@ -21584,6 +23264,7 @@ }, "@humanwhocodes/config-array": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "requires": { @@ -21594,16 +23275,19 @@ }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jest/types": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -21615,6 +23299,7 @@ }, "@mapbox/node-pre-gyp": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", "requires": { "detect-libc": "^1.0.3", @@ -21630,6 +23315,7 @@ }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "requires": { "call-me-maybe": "^1.0.1", @@ -21698,15 +23384,12 @@ "dependencies": { "@sindresorhus/is": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==" }, - "@types/node": { - "version": "16.11.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", - "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" - }, "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" @@ -21714,6 +23397,7 @@ }, "cacheable-lookup": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "requires": { "@types/keyv": "^3.1.1", @@ -21722,6 +23406,7 @@ }, "decompress-response": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", "requires": { "mimic-response": "^2.0.0" @@ -21729,6 +23414,7 @@ }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -21736,6 +23422,7 @@ }, "got": { "version": "10.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "requires": { "@sindresorhus/is": "^2.0.0", @@ -21757,115 +23444,48 @@ "dependencies": { "type-fest": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==" } } }, "mimic-response": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" }, - "resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - } - }, - "yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" } } }, "@netlify/cache-utils": { - "version": "4.0.0", - "integrity": "sha512-8BNDYMkkrkmlfwNaSeRqOhGu8lETc2ixM6bmvDAXuE5TcNNAActWcWurocwS419HNwyTw1kSEUKLp6Vx5/wiBg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@netlify/cache-utils/-/cache-utils-4.1.2.tgz", + "integrity": "sha512-CRqJLmoyBipU2fjaOeBmH9VgNGnm2kp6yuoN5PoEgzPFnB4t1mBCtEw7hes00jb5KJqBON7ESLS+4pSKr7W61Q==", "requires": { "cpy": "^8.1.0", - "del": "^5.1.0", + "del": "^6.0.0", "get-stream": "^6.0.0", "globby": "^11.0.0", "junk": "^3.1.0", "locate-path": "^6.0.0", - "make-dir": "^3.1.0", "move-file": "^2.0.0", "path-exists": "^4.0.0", "readdirp": "^3.4.0" - }, - "dependencies": { - "del": { - "version": "5.1.0", - "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", - "requires": { - "globby": "^10.0.1", - "graceful-fs": "^4.2.2", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.1", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0" - }, - "dependencies": { - "globby": { - "version": "10.0.2", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - } - } - } - }, - "p-map": { - "version": "3.0.0", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - } } }, "@netlify/config": { - "version": "17.0.3", - "integrity": "sha512-u1x//PEqKvsExPQtRMG4x786mKcAV6ykwqiN102szLlr5Dojb7X5y+6vb9wi4JJ/KNiVURP7Wna/sMxGvFi/Tw==", + "version": "17.0.6", + "resolved": "https://registry.npmjs.org/@netlify/config/-/config-17.0.6.tgz", + "integrity": "sha512-fX9C/FCsIq+8KfiHEo+PtAV7ZL8GxCzLYjAPQosdTg+CledhPtKnEvM1i20YAaJnpeV1UJ4l3tIMQ11zfTdH7g==", "requires": { "chalk": "^4.1.2", "cron-parser": "^4.1.0", "deepmerge": "^4.2.2", - "dot-prop": "^5.3.0", + "dot-prop": "^6.0.0", "execa": "^5.1.1", "fast-safe-stringify": "^2.0.7", "figures": "^3.2.0", @@ -21874,11 +23494,10 @@ "indent-string": "^4.0.0", "is-plain-obj": "^3.0.0", "js-yaml": "^4.0.0", - "make-dir": "^3.1.0", "map-obj": "^4.0.0", - "netlify": "^10.1.1", - "netlify-headers-parser": "^6.0.0", - "netlify-redirect-parser": "^13.0.0", + "netlify": "^10.1.2", + "netlify-headers-parser": "^6.0.1", + "netlify-redirect-parser": "^13.0.1", "omit.js": "^2.0.2", "p-locate": "^5.0.0", "path-exists": "^4.0.0", @@ -21886,126 +23505,12 @@ "toml": "^3.0.0", "tomlify-j0.4": "^3.0.0", "validate-npm-package-name": "^3.0.0", - "yargs": "^15.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "6.0.0", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "dot-prop": { - "version": "5.3.0", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "locate-path": { - "version": "5.0.0", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - }, - "dependencies": { - "p-locate": { - "version": "4.1.0", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "p-limit": { - "version": "2.3.0", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" - }, - "yargs": { - "version": "15.4.1", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "yargs": "^17.3.1" } }, "@netlify/esbuild": { "version": "0.13.6", + "resolved": "https://registry.npmjs.org/@netlify/esbuild/-/esbuild-0.13.6.tgz", "integrity": "sha512-tiKmDcHM2riSVN79c0mJY/67EBDafXQAMitHuLiCDAMdtz3kfv+NqdVG5krgf5lWR8Uf8AeZrUW5Q9RP25REvw==" }, "@netlify/eslint-config-node": { @@ -22059,20 +23564,40 @@ "p-locate": "^5.0.0", "read-pkg-up": "^7.0.1", "semver": "^7.3.4" + }, + "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } } }, "@netlify/functions-utils": { - "version": "4.0.3", - "integrity": "sha512-HOhBYUymE2zQGCEN0fi5evxX0GsqqiZf2MQGZqE/9OFghacX5EqjeH7fwYKhqxzfO1lba6QvDJhApFepXeGFIQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@netlify/functions-utils/-/functions-utils-4.1.4.tgz", + "integrity": "sha512-uXL2rhJd8Yz4c5GwcvjfAv2G84ru47YSBr9k8KevHPZwbk6be1SoNQLlizGFClDeVvSuSMRtrLkQdMKjJpfi2Q==", "requires": { - "@netlify/zip-it-and-ship-it": "^5.4.0", + "@netlify/zip-it-and-ship-it": "^5.5.0", "cpy": "^8.1.0", "path-exists": "^4.0.0" } }, "@netlify/git-utils": { - "version": "4.0.0", - "integrity": "sha512-CZGyItsvmX9dBbzoxS6JUSKJzYKM/RfLQHeq18dombL1sk0jxsWcXdwKfZUGqw98T11uGz6JDPQUp/oUw2rNuA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@netlify/git-utils/-/git-utils-4.1.0.tgz", + "integrity": "sha512-WseJxFYY6rgQcRX7GuHIhG7XZg1dz88pGSjO5nZCwqL7VAB0FSbholuZBUWqetCFVsW4ICIArDaA04WTvWyS+A==", "requires": { "execa": "^5.1.1", "map-obj": "^4.0.0", @@ -22083,6 +23608,7 @@ }, "@netlify/local-functions-proxy": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy/-/local-functions-proxy-1.1.1.tgz", "integrity": "sha512-eXSsayLT6PMvjzFQpjC9nkg2Otc3lZ5GoYele9M6f8PmsvWpaXRhwjNQ0NYhQQ2UZbLMIiO2dH8dbRsT3bMkFw==", "requires": { "@netlify/local-functions-proxy-darwin-arm64": "1.1.1", @@ -22099,13 +23625,81 @@ "@netlify/local-functions-proxy-win32-x64": "1.1.1" } }, + "@netlify/local-functions-proxy-darwin-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-arm64/-/local-functions-proxy-darwin-arm64-1.1.1.tgz", + "integrity": "sha512-lphJ9qqZ3glnKWEqlemU1LMqXxtJ/tKf7VzakqqyjigwLscXSZSb6fupSjQfd4tR1xqxA76ylws/2HDhc/gs+Q==", + "optional": true + }, "@netlify/local-functions-proxy-darwin-x64": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-darwin-x64/-/local-functions-proxy-darwin-x64-1.1.1.tgz", "integrity": "sha512-4CRB0H+dXZzoEklq5Jpmg+chizXlVwCko94d8+UHWCgy/bA3M/rU/BJ8OLZisnJaAktHoeLABKtcLOhtRHpxZQ==", "optional": true }, + "@netlify/local-functions-proxy-freebsd-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-arm64/-/local-functions-proxy-freebsd-arm64-1.1.1.tgz", + "integrity": "sha512-u13lWTVMJDF0A6jX7V4N3HYGTIHLe5d1Z2wT43fSIHwXkTs6UXi72cGSraisajG+5JFIwHfPr7asw5vxFC0P9w==", + "optional": true + }, + "@netlify/local-functions-proxy-freebsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-freebsd-x64/-/local-functions-proxy-freebsd-x64-1.1.1.tgz", + "integrity": "sha512-g5xw4xATK5YDzvXtzJ8S1qSkWBiyF8VVRehXPMOAMzpGjCX86twYhWp8rbAk7yA1zBWmmWrWNA2Odq/MgpKJJg==", + "optional": true + }, + "@netlify/local-functions-proxy-linux-arm": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm/-/local-functions-proxy-linux-arm-1.1.1.tgz", + "integrity": "sha512-YsTpL+AbHwQrfHWXmKnwUrJBjoUON363nr6jUG1ueYnpbbv6wTUA7gI5snMi/gkGpqFusBthAA7C30e6bixfiA==", + "optional": true + }, + "@netlify/local-functions-proxy-linux-arm64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-arm64/-/local-functions-proxy-linux-arm64-1.1.1.tgz", + "integrity": "sha512-dPGu1H5n8na7mBKxiXQ+FNmthDAiA57wqgpm5JMAHtcdcmRvcXwJkwWVGvwfj8ShhYJHQaSaS9oPgO+mpKkgmA==", + "optional": true + }, + "@netlify/local-functions-proxy-linux-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ia32/-/local-functions-proxy-linux-ia32-1.1.1.tgz", + "integrity": "sha512-Ra0FlXDrmPRaq+rYH3/ttkXSrwk1D5Zx/Na7UPfJZxMY7Qo5iY4bgi/FuzjzWzlp0uuKZOhYOYzYzsIIyrSvmw==", + "optional": true + }, + "@netlify/local-functions-proxy-linux-ppc64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-ppc64/-/local-functions-proxy-linux-ppc64-1.1.1.tgz", + "integrity": "sha512-oXf1satwqwUUxz7LHS1BxbRqc4FFEKIDFTls04eXiLReFR3sqv9H/QuYNTCCDMuRcCOd92qKyDfATdnxT4HR8w==", + "optional": true + }, + "@netlify/local-functions-proxy-linux-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-linux-x64/-/local-functions-proxy-linux-x64-1.1.1.tgz", + "integrity": "sha512-bS3u4JuDg/eC0y4Na3i/29JBOxrdUvsK5JSjHfzUeZEbOcuXYf4KavTpHS5uikdvTgyczoSrvbmQJ5m0FLXfLA==", + "optional": true + }, + "@netlify/local-functions-proxy-openbsd-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-openbsd-x64/-/local-functions-proxy-openbsd-x64-1.1.1.tgz", + "integrity": "sha512-1xLef/kLRNkBTXJ+ZGoRFcwsFxd/B2H3oeJZyXaZ3CN5umd9Mv9wZuAD74NuMt/535yRva8jtAJqvEgl9xMSdA==", + "optional": true + }, + "@netlify/local-functions-proxy-win32-ia32": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-ia32/-/local-functions-proxy-win32-ia32-1.1.1.tgz", + "integrity": "sha512-4IOMDBxp2f8VbIkhZ85zGNDrZR4ey8d68fCMSOIwitjsnKav35YrCf8UmAh3UR6CNIRJdJL4MW1GYePJ7iJ8uA==", + "optional": true + }, + "@netlify/local-functions-proxy-win32-x64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@netlify/local-functions-proxy-win32-x64/-/local-functions-proxy-win32-x64-1.1.1.tgz", + "integrity": "sha512-VCBXBJWBujVxyo5f+3r8ovLc9I7wJqpmgDn3ixs1fvdrER5Ac+SzYwYH4mUug9HI08mzTSAKZErzKeuadSez3w==", + "optional": true + }, "@netlify/open-api": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.8.0.tgz", "integrity": "sha512-lfNB/QYDgaP07pwm/nWEaWPvRAAGyhxvJqNzvxMijc7A4uwquMjlbYve8yYyd0LJXPwgBpGobwiQj5RA76xzUQ==" }, "@netlify/plugin-edge-handlers": { @@ -22137,6 +23731,7 @@ }, "@netlify/routing-local-proxy": { "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy/-/routing-local-proxy-0.34.1.tgz", "integrity": "sha512-FuzgxdxC7wJXUT08qPTtHiKwjFDHh3ViCDZwxwjm8CjOKYz+9NjhmIffkbEFl6R+uH6IV/3R6gVDL5Fb5hwRbQ==", "requires": { "@netlify/routing-local-proxy-darwin-arm64": "^0.34.1", @@ -22145,13 +23740,33 @@ "@netlify/routing-local-proxy-win32-x64": "^0.34.1" } }, + "@netlify/routing-local-proxy-darwin-arm64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-darwin-arm64/-/routing-local-proxy-darwin-arm64-0.34.1.tgz", + "integrity": "sha512-QswoXdmvmwx76bNdA0TcwfbK1NUIo5BjcS4bpE96wtUPr3SNn4pSoOip9/Tae2JbLGl7efdEkgBE1J6rMiu/kA==", + "optional": true + }, "@netlify/routing-local-proxy-darwin-x64": { "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-darwin-x64/-/routing-local-proxy-darwin-x64-0.34.1.tgz", "integrity": "sha512-x5mukoDWGl+jpVsyNZjRBrP1m93AFrVI/afodQbu45nyW78fpNALhqJPGoI2ixe/Z5HKaYl+ItvI+J4wAVFseQ==", "optional": true }, + "@netlify/routing-local-proxy-linux-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-linux-x64/-/routing-local-proxy-linux-x64-0.34.1.tgz", + "integrity": "sha512-dquodOP1VC2RtJcr2bp/DzTq0JXtk2cZDtJmaasMxxbxZmwL9R+63ypWsgdvGTSdZDKkwzzHAg3a7qGHVIl4ow==", + "optional": true + }, + "@netlify/routing-local-proxy-win32-x64": { + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@netlify/routing-local-proxy-win32-x64/-/routing-local-proxy-win32-x64-0.34.1.tgz", + "integrity": "sha512-Dy1OPqlHXCDIJoEor709Ysx76UiAgrse1GF5wdieTVtWnQ7culo8+LVCwubwQezVCCbdjTke9LfMWbP91zBojg==", + "optional": true + }, "@netlify/run-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@netlify/run-utils/-/run-utils-4.0.0.tgz", "integrity": "sha512-ZeQFp1VmSMfrKaV2A13HJ2b7UJBHf7DUvzAcNjjJdbugD8wCDs5l00rRZeLhyl48AIZl9ki+RpsATZ/j6qKn+g==", "requires": { "execa": "^5.1.1" @@ -22198,18 +23813,12 @@ "dependencies": { "get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, - "resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", @@ -22225,6 +23834,7 @@ }, "@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { "@nodelib/fs.stat": "2.0.5", @@ -22233,10 +23843,12 @@ }, "@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { "@nodelib/fs.scandir": "2.1.5", @@ -22245,6 +23857,7 @@ }, "@octokit/auth-token": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "requires": { "@octokit/types": "^6.0.3" @@ -22252,6 +23865,7 @@ }, "@octokit/core": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", "requires": { "@octokit/auth-token": "^2.4.4", @@ -22265,6 +23879,7 @@ }, "@octokit/endpoint": { "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "requires": { "@octokit/types": "^6.0.3", @@ -22274,6 +23889,7 @@ }, "@octokit/graphql": { "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "requires": { "@octokit/request": "^5.6.0", @@ -22283,10 +23899,12 @@ }, "@octokit/openapi-types": { "version": "11.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==" }, "@octokit/plugin-paginate-rest": { "version": "2.17.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "requires": { "@octokit/types": "^6.34.0" @@ -22294,11 +23912,13 @@ }, "@octokit/plugin-request-log": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "requires": { "@octokit/types": "^6.34.0", @@ -22307,6 +23927,7 @@ }, "@octokit/request": { "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.2.tgz", "integrity": "sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA==", "requires": { "@octokit/endpoint": "^6.0.1", @@ -22319,6 +23940,7 @@ }, "@octokit/request-error": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "requires": { "@octokit/types": "^6.0.3", @@ -22328,6 +23950,7 @@ }, "@octokit/rest": { "version": "18.12.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "requires": { "@octokit/core": "^3.5.1", @@ -22338,6 +23961,7 @@ }, "@octokit/types": { "version": "6.34.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "requires": { "@octokit/openapi-types": "^11.2.0" @@ -22364,6 +23988,18 @@ "is-reference": "^1.2.1", "magic-string": "^0.25.7", "resolve": "^1.17.0" + }, + "dependencies": { + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, "@rollup/plugin-inject": { @@ -22395,6 +24031,18 @@ "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" + }, + "dependencies": { + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, "@rollup/pluginutils": { @@ -22416,18 +24064,21 @@ }, "@samverschueren/stream-to-observable": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", "requires": { "any-observable": "^0.3.0" } }, "@sindresorhus/is": { - "version": "4.2.0", - "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.3.0.tgz", + "integrity": "sha512-wwOvh0eO3PiTEivGJWiZ+b946SlMSb4pe+y+Ur/4S87cwo09pYi+FWHHnbrM3W9W7cBYKDqQXcrFYjYUCOJUEQ==", "dev": true }, "@sindresorhus/slugify": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-1.1.2.tgz", "integrity": "sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==", "requires": { "@sindresorhus/transliterate": "^0.1.1", @@ -22436,6 +24087,7 @@ }, "@sindresorhus/transliterate": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz", "integrity": "sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==", "requires": { "escape-string-regexp": "^2.0.0", @@ -22444,12 +24096,14 @@ "dependencies": { "escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" } } }, "@sinonjs/commons": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, "requires": { @@ -22458,6 +24112,7 @@ }, "@sinonjs/fake-timers": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, "requires": { @@ -22466,6 +24121,7 @@ }, "@sinonjs/samsam": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, "requires": { @@ -22476,11 +24132,13 @@ }, "@sinonjs/text-encoding": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, "@szmarczak/http-timer": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "requires": { "defer-to-connect": "^2.0.0" @@ -22488,22 +24146,27 @@ }, "@tsconfig/node10": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" }, "@tsconfig/node12": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==" }, "@tsconfig/node14": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==" }, "@tsconfig/node16": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==" }, "@types/cacheable-request": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "requires": { "@types/http-cache-semantics": "*", @@ -22514,6 +24177,7 @@ }, "@types/decompress": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", "requires": { "@types/node": "*" @@ -22521,6 +24185,7 @@ }, "@types/download": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.1.tgz", "integrity": "sha512-t5DjMD6Y1DxjXtEHl7Kt+nQn9rOmVLYD8p4Swrcc5QpgyqyqR2gXTIK6RwwMnNeFJ+ZIiIW789fQKzCrK7AOFA==", "requires": { "@types/decompress": "*", @@ -22535,6 +24200,7 @@ }, "@types/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "requires": { "@types/minimatch": "*", @@ -22543,6 +24209,7 @@ }, "@types/got": { "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.6.tgz", "integrity": "sha512-nvLlj+831dhdm4LR2Ly+HTpdLyBaMynoOr6wpIxS19d/bPeHQxFU5XQ6Gp6ohBpxvCWZM1uHQIC2+ySRH1rGrQ==", "requires": { "@types/node": "*" @@ -22550,21 +24217,25 @@ }, "@types/http-cache-semantics": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/http-proxy": { "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "requires": { "@types/node": "*" } }, "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "@types/istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "requires": { "@types/istanbul-lib-coverage": "*" @@ -22572,6 +24243,7 @@ }, "@types/istanbul-reports": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "requires": { "@types/istanbul-lib-report": "*" @@ -22579,16 +24251,19 @@ }, "@types/json-schema": { "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "@types/keyv": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "requires": { "@types/node": "*" @@ -22596,6 +24271,7 @@ }, "@types/mdast": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, "requires": { @@ -22604,19 +24280,23 @@ }, "@types/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "@types/minimist": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/node": { - "version": "17.0.0", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==" + "version": "16.11.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.21.tgz", + "integrity": "sha512-Pf8M1XD9i1ksZEcCP8vuSNwooJ/bZapNmIzpmsMaL+jMI+8mEYU3PKvs+xDNuQcJWF/x24WzY4qxLtB0zNow9A==" }, "@types/node-fetch": { "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", "requires": { "@types/node": "*", @@ -22625,6 +24305,7 @@ "dependencies": { "form-data": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", @@ -22636,10 +24317,12 @@ }, "@types/normalize-package-data": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" }, "@types/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, @@ -22653,6 +24336,7 @@ }, "@types/responselike": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "requires": { "@types/node": "*" @@ -22660,15 +24344,18 @@ }, "@types/semver": { "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" }, "@types/unist": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, "@types/yargs": { "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "requires": { "@types/yargs-parser": "*" @@ -22676,15 +24363,18 @@ }, "@types/yargs-parser": { "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.7.0", - "integrity": "sha512-8RTGBpNn5a9M628wBPrCbJ+v3YTEOE2qeZb7TDkGKTDXSj36KGRg92SpFFaR/0S3rSXQxM0Og/kV9EyadsYSBg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-XXVKnMsq2fuu9K2KsIxPUGqb6xAImz8MEChClbXmE3VbveFtBUU5bzM6IPVWqzyADIgdkS2Ws/6Xo7W2TeZWjQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "5.7.0", - "@typescript-eslint/scope-manager": "5.7.0", + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/type-utils": "5.10.0", + "@typescript-eslint/utils": "5.10.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -22693,51 +24383,53 @@ "tsutils": "^3.21.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "5.7.0", - "integrity": "sha512-u57eZ5FbEpzN5kSjmVrSesovWslH2ZyNPnaXQMXWgH57d5+EVHEt76W75vVuI9qKZ5BMDKNfRN+pxcPEjQjb2A==", + "@typescript-eslint/parser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.0.tgz", + "integrity": "sha512-pJB2CCeHWtwOAeIxv8CHVGJhI5FNyJAIpx5Pt72YkK3QfEzt6qAlXZuyaBmyfOdM62qU0rbxJzNToPTVeJGrQw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/typescript-estree": "5.10.0", + "debug": "^4.3.2" } }, - "@typescript-eslint/parser": { - "version": "5.7.0", - "integrity": "sha512-m/gWCCcS4jXw6vkrPQ1BjZ1vomP01PArgzvauBqzsoZ3urLbsRChexB8/YV8z9HwE3qlJM35FxfKZ1nfP/4x8g==", + "@typescript-eslint/scope-manager": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.0.tgz", + "integrity": "sha512-tgNgUgb4MhqK6DoKn3RBhyZ9aJga7EQrw+2/OiDk5hKf3pTVZWyqBi7ukP+Z0iEEDMF5FDa64LqODzlfE4O/Dg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.7.0", - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/typescript-estree": "5.7.0", - "debug": "^4.3.2" + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/visitor-keys": "5.10.0" } }, - "@typescript-eslint/scope-manager": { - "version": "5.7.0", - "integrity": "sha512-7mxR520DGq5F7sSSgM0HSSMJ+TFUymOeFRMfUfGFAVBv8BR+Jv1vHgAouYUvWRZeszVBJlLcc9fDdktxb5kmxA==", + "@typescript-eslint/type-utils": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.0.tgz", + "integrity": "sha512-TzlyTmufJO5V886N+hTJBGIfnjQDQ32rJYxPaeiyWKdjsv2Ld5l8cbS7pxim4DeNs62fKzRSt8Q14Evs4JnZyQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0" + "@typescript-eslint/utils": "5.10.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.7.0", - "integrity": "sha512-5AeYIF5p2kAneIpnLFve8g50VyAjq7udM7ApZZ9JYjdPjkz0LvODfuSHIDUVnIuUoxafoWzpFyU7Sqbxgi79mA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.0.tgz", + "integrity": "sha512-wUljCgkqHsMZbw60IbOqT/puLfyqqD5PquGiBo1u1IS3PLxdi3RDGlyf032IJyh+eQoGhz9kzhtZa+VC4eWTlQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.7.0", - "integrity": "sha512-aO1Ql+izMrTnPj5aFFlEJkpD4jRqC4Gwhygu2oHK2wfVQpmOPbyDSveJ+r/NQo+PWV43M6uEAeLVbTi09dFLhg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.0.tgz", + "integrity": "sha512-x+7e5IqfwLwsxTdliHRtlIYkgdtYXzE0CkFeV6ytAqq431ZyxCFzNMNR5sr3WOlIG/ihVZr9K/y71VHTF/DUQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", - "@typescript-eslint/visitor-keys": "5.7.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/visitor-keys": "5.10.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -22745,47 +24437,54 @@ "tsutils": "^3.21.0" } }, + "@typescript-eslint/utils": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.0.tgz", + "integrity": "sha512-IGYwlt1CVcFoE2ueW4/ioEwybR60RAdGeiJX/iDAw0t5w0wK3S7QncDwpmsM70nKgGTuVchEWB8lwZwHqPAWRg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.0", + "@typescript-eslint/types": "5.10.0", + "@typescript-eslint/typescript-estree": "5.10.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.7.0", - "integrity": "sha512-hdohahZ4lTFcglZSJ3DGdzxQHBSxsLVqHzkiOmKi7xVAWC4y2c1bIMKmPJSrA4aOEoRUPOKQ87Y/taC7yVHpFg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.0.tgz", + "integrity": "sha512-GMxj0K1uyrFLPKASLmZzCuSddmjZVbVj3Ouy5QVuIGKZopxvOr24JsS7gruz6C3GExE01mublZ3mIBOaon9zuQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.7.0", + "@typescript-eslint/types": "5.10.0", "eslint-visitor-keys": "^3.0.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true } } }, "@vercel/nft": { - "version": "0.17.1", - "integrity": "sha512-z3zknfI7JaE0PPmmYDQVtf/TCEnAYT5Y2XrCO/BfAD1sP2Wdmg1PO0L1VRIyt0zjpr6PpBYitC0Nmy0rh+qEDA==", + "version": "0.17.3", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.17.3.tgz", + "integrity": "sha512-fdGzXF8dVrHliAzk4p2TOfG78K7MgWleDZ0+ztDQe6TdBw31c3S6Fvg6rdcV8g4Y20HTFtPzKua3uj3PGRagZg==", "requires": { "@mapbox/node-pre-gyp": "^1.0.5", "acorn": "^8.6.0", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^7.1.3", - "graceful-fs": "^4.1.15", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.2", - "mkdirp": "^0.5.1", "node-gyp-build": "^4.2.2", "node-pre-gyp": "^0.13.0", "resolve-from": "^5.0.0", "rollup-pluginutils": "^2.8.2" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } } }, "@verdaccio/commons-api": { @@ -22828,6 +24527,12 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz", "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==", "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true } } }, @@ -22862,10 +24567,12 @@ }, "abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "requires": { "mime-types": "~2.1.24", @@ -22873,8 +24580,9 @@ } }, "acorn": { - "version": "8.6.0", - "integrity": "sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==" + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "acorn-globals": { "version": "4.3.4", @@ -22902,16 +24610,19 @@ }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-walk": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" }, "agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" @@ -22919,6 +24630,7 @@ }, "aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { "clean-stack": "^2.0.0", @@ -22927,22 +24639,26 @@ "dependencies": { "clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" } } }, "ajv": { - "version": "8.8.2", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "all-node-versions": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/all-node-versions/-/all-node-versions-8.0.0.tgz", "integrity": "sha512-cF8ibgj23U7ai4qjSFzpeccwDXUlPFMzKe0Z6qf6gChR+9S0JMyzYz6oYz4n0nHi/FLH9BJIefsONsMH/WDM2w==", "requires": { "fetch-node-website": "^5.0.3", @@ -22957,6 +24673,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -22967,6 +24684,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", @@ -22975,6 +24693,7 @@ }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -22982,10 +24701,12 @@ }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", @@ -22994,6 +24715,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -23001,10 +24723,12 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -23012,10 +24736,12 @@ }, "jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", @@ -23028,6 +24754,7 @@ }, "pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", @@ -23038,10 +24765,12 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -23051,6 +24780,7 @@ }, "ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "requires": { "string-width": "^4.1.0" @@ -23058,11 +24788,13 @@ }, "ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "requires": { "type-fest": "^1.0.2" @@ -23070,18 +24802,22 @@ }, "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" }, "any-observable": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz", "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==" }, "anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", @@ -23096,10 +24832,12 @@ }, "aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" }, "archive-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "requires": { "file-type": "^4.2.0" @@ -23107,12 +24845,14 @@ "dependencies": { "file-type": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=" } } }, "archiver": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", "requires": { "archiver-utils": "^2.1.0", @@ -23126,6 +24866,7 @@ }, "archiver-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "requires": { "glob": "^7.1.4", @@ -23142,6 +24883,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -23155,6 +24897,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -23164,6 +24907,7 @@ }, "are-we-there-yet": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", "requires": { "delegates": "^1.0.0", @@ -23172,22 +24916,27 @@ }, "arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "arr-diff": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-flatten": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-union": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-equal": { @@ -23198,20 +24947,24 @@ }, "array-find-index": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, "array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", "dev": true }, "array-includes": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { @@ -23224,18 +24977,22 @@ }, "array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, "array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flat": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { @@ -23246,6 +25003,7 @@ }, "array.prototype.flatmap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dev": true, "requires": { @@ -23256,15 +25014,24 @@ }, "arrgv": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", "dev": true }, "arrify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, "ascii-table": { "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" }, "asn1": { @@ -23284,27 +25051,33 @@ }, "assign-symbols": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "ast-module-types": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz", "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw==" }, "astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "atomic-sleep": { @@ -23315,6 +25088,7 @@ }, "ava": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/ava/-/ava-3.15.0.tgz", "integrity": "sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==", "dev": true, "requires": { @@ -23378,16 +25152,19 @@ "dependencies": { "ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { @@ -23458,6 +25235,7 @@ }, "backoff": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", "requires": { "precond": "0.2" @@ -23465,10 +25243,12 @@ }, "balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { "cache-base": "^1.0.1", @@ -23482,6 +25262,7 @@ "dependencies": { "define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" @@ -23491,6 +25272,7 @@ }, "base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt-pbkdf": { @@ -23510,10 +25292,12 @@ }, "before-after-hook": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==" }, "better-opn": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.1.tgz", "integrity": "sha512-u7pU4QnwLQ+wCDLHdvtWbI/41pSRayJ+UHyAqpb5sr42FGnqzBlEyWdCklfaSzXqbmnXDBzCvWcaZmL3qp0xGA==", "requires": { "open": "^8.0.4" @@ -23521,10 +25305,12 @@ }, "binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bindings": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "requires": { "file-uri-to-path": "1.0.0" @@ -23532,6 +25318,7 @@ }, "bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", @@ -23541,6 +25328,7 @@ }, "blueimp-md5": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==" }, "body-parser": { @@ -23560,11 +25348,6 @@ "type-is": "~1.6.18" }, "dependencies": { - "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -23582,6 +25365,7 @@ }, "boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "requires": { "ansi-align": "^3.0.0", @@ -23596,12 +25380,14 @@ "dependencies": { "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" } } }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { "balanced-match": "^1.0.0", @@ -23610,6 +25396,7 @@ }, "braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { "fill-range": "^7.0.1" @@ -23623,6 +25410,7 @@ }, "browserslist": { "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "requires": { "caniuse-lite": "^1.0.30001286", @@ -23634,6 +25422,7 @@ }, "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { "base64-js": "^1.3.1", @@ -23642,6 +25431,7 @@ }, "buffer-alloc": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "requires": { "buffer-alloc-unsafe": "^1.1.0", @@ -23650,14 +25440,17 @@ }, "buffer-alloc-unsafe": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" }, "buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" }, "buffer-equal-constant-time": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", "dev": true }, @@ -23668,32 +25461,37 @@ }, "buffer-fill": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, "buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtin-modules": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==" }, "builtins": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=" }, "byline": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=" }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, "c8": { "version": "7.11.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", "integrity": "sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw==", "dev": true, "requires": { @@ -23713,11 +25511,13 @@ "dependencies": { "get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { @@ -23734,6 +25534,7 @@ }, "cache-base": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "requires": { "collection-visit": "^1.0.0", @@ -23749,11 +25550,13 @@ }, "cacheable-lookup": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true }, "cacheable-request": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "requires": { "clone-response": "^1.0.2", @@ -23767,6 +25570,7 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -23776,10 +25580,12 @@ }, "cachedir": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==" }, "call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "requires": { "function-bind": "^1.1.1", @@ -23788,23 +25594,28 @@ }, "call-me-maybe": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "callsite": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" }, "callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { - "version": "6.2.1", - "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" }, "camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { @@ -23815,19 +25626,22 @@ "dependencies": { "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true } } }, "caniuse-lite": { - "version": "1.0.30001287", - "integrity": "sha512-4udbs9bc0hfNrcje++AxBuc6PfLNHwh3PO9kbwnfCQWyqtlzg3py0YgFu8jyRTTo85VAz4U+VLxSlID09vNtWA==" + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==" }, "caseless": { "version": "0.12.0", @@ -23837,6 +25651,7 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", @@ -23845,6 +25660,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -23852,6 +25668,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -23859,10 +25676,12 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -23872,26 +25691,31 @@ }, "character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "chokidar": { - "version": "3.5.2", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -23905,24 +25729,29 @@ }, "chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chunkd": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", "dev": true }, "ci-info": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==" }, "ci-parallel-vars": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", "dev": true }, "class-utils": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { "arr-union": "^3.1.0", @@ -23933,6 +25762,7 @@ "dependencies": { "define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" @@ -23940,6 +25770,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -23947,6 +25778,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -23956,6 +25788,7 @@ }, "is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -23963,6 +25796,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -23972,6 +25806,7 @@ }, "is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", @@ -23981,12 +25816,14 @@ }, "kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "clean-deep": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/clean-deep/-/clean-deep-3.4.0.tgz", "integrity": "sha512-Lo78NV5ItJL/jl+B5w0BycAisaieJGXK1qYi/9m4SjR8zbqmrUtO7Yhro40wEShGmmxs/aJLI/A+jNhdkXK8mw==", "requires": { "lodash.isempty": "^4.4.0", @@ -23996,6 +25833,7 @@ }, "clean-regexp": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "requires": { @@ -24004,6 +25842,7 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true } @@ -24011,6 +25850,7 @@ }, "clean-stack": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "requires": { "escape-string-regexp": "4.0.0" @@ -24018,34 +25858,39 @@ }, "clean-yaml-object": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", "dev": true }, "cli-boxes": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" }, "cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { "restore-cursor": "^3.1.0" } }, "cli-progress": { - "version": "3.9.1", - "integrity": "sha512-AXxiCe2a0Lm0VN+9L0jzmfQSkcZm5EYspfqXKaSIQKqIk+0hnkZ3/v1E9B39mkD6vYhKih3c/RPsJBSwq9O99Q==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.10.0.tgz", + "integrity": "sha512-kLORQrhYCAtUPLZxqsAt2YJGOvRdt34+O6jl5cQGb7iF3dM55FQZlTR+rQyIK9JUcO9bBMwZsTlND+3dmFU2Cw==", "requires": { - "colors": "^1.1.2", "string-width": "^4.2.0" } }, "cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" }, "cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { @@ -24055,6 +25900,7 @@ }, "cli-width": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" }, "clipanion": { @@ -24062,10 +25908,13 @@ "resolved": "https://registry.npmjs.org/clipanion/-/clipanion-3.1.0.tgz", "integrity": "sha512-v025Hz+IDQ15FpOyK8p02h5bFznMu6rLFsJSyOPR+7WrbSnZ1Ek6pblPukV7K5tC/dsWfncQPIrJ4iUy2PXkbw==", "dev": true, - "requires": {} + "requires": { + "typanion": "^3.3.1" + } }, "cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", @@ -24075,10 +25924,12 @@ }, "clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" }, "clone-response": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { "mimic-response": "^1.0.0" @@ -24086,6 +25937,7 @@ }, "code-excerpt": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz", "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==", "dev": true, "requires": { @@ -24094,10 +25946,12 @@ }, "code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "collection-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { "map-visit": "^1.0.0", @@ -24106,6 +25960,7 @@ }, "color": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { "color-convert": "^1.9.3", @@ -24114,6 +25969,7 @@ }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" @@ -24121,10 +25977,12 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", @@ -24133,14 +25991,17 @@ }, "color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, "colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "colorspace": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "requires": { "color": "^3.1.3", @@ -24149,6 +26010,7 @@ }, "combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" @@ -24156,10 +26018,12 @@ }, "commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, "common-path-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==" }, "commondir": { @@ -24169,6 +26033,7 @@ }, "compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "requires": { @@ -24178,6 +26043,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { @@ -24188,10 +26054,12 @@ }, "component-emitter": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "compress-commons": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "requires": { "buffer-crc32": "^0.2.13", @@ -24224,6 +26092,12 @@ "vary": "~1.1.2" }, "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -24243,10 +26117,12 @@ }, "concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concordance": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", "requires": { "date-time": "^3.1.0", @@ -24261,6 +26137,7 @@ }, "configstore": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", "requires": { "dot-prop": "^5.2.0", @@ -24273,6 +26150,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "requires": { "is-obj": "^2.0.0" @@ -24282,6 +26160,7 @@ }, "console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { @@ -24301,10 +26180,12 @@ }, "content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "conventional-changelog-angular": { "version": "5.0.13", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { @@ -24313,8 +26194,9 @@ } }, "conventional-changelog-conventionalcommits": { - "version": "4.6.1", - "integrity": "sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", + "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -24324,6 +26206,7 @@ }, "conventional-commits-parser": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "requires": { @@ -24337,6 +26220,7 @@ }, "convert-source-map": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "requires": { "safe-buffer": "~5.1.1" @@ -24344,19 +26228,23 @@ }, "convert-to-spaces": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz", "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=", "dev": true }, "cookie": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", "dev": true }, @@ -24380,10 +26268,12 @@ }, "copy-descriptor": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-template-dir": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/copy-template-dir/-/copy-template-dir-1.4.0.tgz", "integrity": "sha512-xkXSJhvKz4MfLbVkZ7GyCaFo4ciB3uKI/HHzkGwj1eyTH5+7RTFxW5CE0irWAZgV5oFcO9hd6+NVXAtY9hlo7Q==", "requires": { "end-of-stream": "^1.1.0", @@ -24399,6 +26289,7 @@ "dependencies": { "braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "^1.1.0", @@ -24415,6 +26306,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -24424,6 +26316,7 @@ }, "fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { "extend-shallow": "^2.0.1", @@ -24434,6 +26327,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -24443,10 +26337,12 @@ }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" @@ -24454,6 +26350,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -24463,6 +26360,7 @@ }, "micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { "arr-diff": "^4.0.0", @@ -24480,15 +26378,9 @@ "to-regex": "^3.0.2" } }, - "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, "pump": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { "end-of-stream": "^1.1.0", @@ -24497,6 +26389,7 @@ }, "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -24510,6 +26403,7 @@ }, "readdirp": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "requires": { "graceful-fs": "^4.1.11", @@ -24519,6 +26413,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -24526,6 +26421,7 @@ }, "to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { "is-number": "^3.0.0", @@ -24551,8 +26447,9 @@ } }, "core-util-is": { - "version": "1.0.3", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cors": { "version": "2.8.5", @@ -24566,6 +26463,7 @@ }, "cosmiconfig": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { @@ -24577,15 +26475,18 @@ } }, "cosmiconfig-typescript-loader": { - "version": "1.0.2", - "integrity": "sha512-27ZehvijYqAKVzta5xtZBS3PAliC8CmnWkGXN0vgxAZz7yqxpMjf3aG7flxF5rEiu8FAD7nZZXtOI+xUGn+bVg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-1.0.3.tgz", + "integrity": "sha512-ARo21VjxdacJUcHxgVMEYNIoVPYiuKOEwWBIYej4M22+pEbe3LzKgmht2UPM+0u7/T/KnZf2r/5IzHv2Nwz+/w==", "dev": true, "requires": { + "cosmiconfig": "^7", "ts-node": "^10.4.0" } }, "cp-file": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-9.1.0.tgz", "integrity": "sha512-3scnzFj/94eb7y4wyXRWwvzLFaQp87yyfTnChIjlfYrVqp5lVO3E2hIJMeQIltUT0K2ZAB3An1qXcBmwGyvuwA==", "requires": { "graceful-fs": "^4.1.2", @@ -24596,6 +26497,7 @@ }, "cpy": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz", "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==", "requires": { "arrify": "^2.0.1", @@ -24611,10 +26513,12 @@ "dependencies": { "@nodelib/fs.stat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" }, "array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "requires": { "array-uniq": "^1.0.1" @@ -24622,6 +26526,7 @@ }, "braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { "arr-flatten": "^1.1.0", @@ -24638,6 +26543,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -24647,6 +26553,7 @@ }, "cp-file": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", "requires": { "graceful-fs": "^4.1.2", @@ -24657,6 +26564,7 @@ }, "dir-glob": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "requires": { "path-type": "^3.0.0" @@ -24664,6 +26572,7 @@ }, "fast-glob": { "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -24676,6 +26585,7 @@ }, "fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "requires": { "extend-shallow": "^2.0.1", @@ -24686,6 +26596,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -24695,6 +26606,7 @@ }, "glob-parent": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "requires": { "is-glob": "^3.1.0", @@ -24703,6 +26615,7 @@ "dependencies": { "is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { "is-extglob": "^2.1.0" @@ -24712,6 +26625,7 @@ }, "globby": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "requires": { "@types/glob": "^7.1.1", @@ -24726,14 +26640,17 @@ }, "ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" @@ -24741,6 +26658,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -24750,6 +26668,7 @@ }, "micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "requires": { "arr-diff": "^4.0.0", @@ -24769,6 +26688,7 @@ }, "p-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "requires": { "aggregate-error": "^3.0.0" @@ -24776,6 +26696,7 @@ }, "path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { "pify": "^3.0.0" @@ -24783,16 +26704,19 @@ "dependencies": { "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "slash": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" }, "to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "requires": { "is-number": "^3.0.0", @@ -24803,6 +26727,7 @@ }, "crc-32": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", "requires": { "exit-on-epipe": "~1.0.1", @@ -24811,6 +26736,7 @@ }, "crc32-stream": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "requires": { "crc-32": "^1.2.0", @@ -24819,6 +26745,7 @@ }, "create-eslint-index": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/create-eslint-index/-/create-eslint-index-1.0.0.tgz", "integrity": "sha1-2VQ3LYbVeS/NZ+nyt5GxqxYkEbs=", "dev": true, "requires": { @@ -24827,17 +26754,20 @@ }, "create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "cron-parser": { - "version": "4.2.0", - "integrity": "sha512-pHDdek1iV87R9iG1edv5P2aImDOO1+y2VqCm0V3t0g3JtT/o0V0wAnX/6J2bsF8XEDvR7iqL3Co/3RBj2AhPFQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.2.1.tgz", + "integrity": "sha512-5sJBwDYyCp+0vU5b7POl8zLWfgV5fOHxlc45FWoWdHecGC7MQHCjx0CHivCMRnGFovghKhhyYM+Zm9DcY5qcHg==", "requires": { "luxon": "^1.28.0" } }, "cross-env": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "requires": { @@ -24846,6 +26776,7 @@ }, "cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { "path-key": "^3.1.0", @@ -24855,6 +26786,7 @@ }, "crypto-random-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "cssom": { @@ -24882,6 +26814,7 @@ }, "currently-unhandled": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { @@ -24890,6 +26823,7 @@ }, "cyclist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" }, "d": { @@ -24904,6 +26838,7 @@ }, "dargs": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true }, @@ -24936,12 +26871,6 @@ "punycode": "^2.1.0" } }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -24957,10 +26886,12 @@ }, "date-fns": { "version": "1.30.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" }, "date-time": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", "requires": { "time-zone": "^1.0.0" @@ -24974,6 +26905,7 @@ }, "debug": { "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { "ms": "2.1.2" @@ -24981,12 +26913,14 @@ "dependencies": { "ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "decache": { "version": "4.6.1", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.1.tgz", "integrity": "sha512-ohApBM8u9ygepJCjgBrEZSSxPjc0T/PJkD+uNyxXPkqudyUpdXpwJYp0VISm2WrPVzASU6DZyIi6BWdyw7uJ2Q==", "requires": { "callsite": "^1.0.0" @@ -24994,10 +26928,13 @@ }, "decamelize": { "version": "1.2.0", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decamelize-keys": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { @@ -25007,6 +26944,7 @@ "dependencies": { "map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } @@ -25014,10 +26952,12 @@ }, "decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { "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", @@ -25032,6 +26972,7 @@ "dependencies": { "make-dir": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "requires": { "pify": "^3.0.0" @@ -25039,18 +26980,21 @@ "dependencies": { "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "decompress-response": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "requires": { @@ -25059,6 +27003,7 @@ "dependencies": { "mimic-response": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true } @@ -25066,6 +27011,7 @@ }, "decompress-tar": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "requires": { "file-type": "^5.2.0", @@ -25075,6 +27021,7 @@ "dependencies": { "bl": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "requires": { "readable-stream": "^2.3.5", @@ -25083,14 +27030,17 @@ }, "file-type": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -25104,6 +27054,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -25111,6 +27062,7 @@ }, "tar-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "requires": { "bl": "^1.0.0", @@ -25126,6 +27078,7 @@ }, "decompress-tarbz2": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "requires": { "decompress-tar": "^4.1.0", @@ -25137,16 +27090,19 @@ "dependencies": { "file-type": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" } } }, "decompress-targz": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "requires": { "decompress-tar": "^4.1.1", @@ -25156,16 +27112,19 @@ "dependencies": { "file-type": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" } } }, "decompress-unzip": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "requires": { "file-type": "^3.8.0", @@ -25176,10 +27135,12 @@ "dependencies": { "file-type": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" }, "get-stream": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "requires": { "object-assign": "^4.0.1", @@ -25188,24 +27149,29 @@ }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" } } }, "deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "requires": { "clone": "^1.0.2" @@ -25213,14 +27179,17 @@ }, "defer-to-connect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" }, "define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" }, "define-properties": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { "object-keys": "^1.0.12" @@ -25228,6 +27197,7 @@ }, "define-property": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { "is-descriptor": "^1.0.2", @@ -25236,6 +27206,7 @@ }, "del": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "requires": { "globby": "^11.0.1", @@ -25250,18 +27221,22 @@ }, "delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "deprecation": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "destroy": { @@ -25271,10 +27246,12 @@ }, "detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "detective-amd": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.1.0.tgz", "integrity": "sha512-G7wGWT6f0VErjUkE2utCm7IUshT7nBh7aBBH2VBOiY9Dqy2DMens5iiOvYCuhstoIxRKLrnOvVAz4/EyPIAjnw==", "requires": { "ast-module-types": "^2.7.0", @@ -25285,6 +27262,7 @@ }, "detective-cjs": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz", "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==", "requires": { "ast-module-types": "^2.4.0", @@ -25293,6 +27271,7 @@ }, "detective-es6": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.1.tgz", "integrity": "sha512-22z7MblxkhsIQGuALeGwCKEfqNy4WmgDGmfJCwdXbfDkVYIiIDmY513hiIWBvX3kCmzvvWE7RR7kAYxs01wwKQ==", "requires": { "node-source-walk": "^4.0.0" @@ -25300,6 +27279,7 @@ }, "detective-less": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz", "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==", "requires": { "debug": "^4.0.0", @@ -25309,6 +27289,7 @@ }, "detective-postcss": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz", "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==", "requires": { "debug": "^4.1.1", @@ -25319,6 +27300,7 @@ }, "detective-sass": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz", "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==", "requires": { "debug": "^4.1.1", @@ -25328,6 +27310,7 @@ }, "detective-scss": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz", "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==", "requires": { "debug": "^4.1.1", @@ -25337,10 +27320,12 @@ }, "detective-stylus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz", "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0=" }, "detective-typescript": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz", "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==", "requires": { "@typescript-eslint/typescript-estree": "^4.8.2", @@ -25351,10 +27336,12 @@ "dependencies": { "@typescript-eslint/types": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==" }, "@typescript-eslint/typescript-estree": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "requires": { "@typescript-eslint/types": "4.33.0", @@ -25368,6 +27355,7 @@ }, "@typescript-eslint/visitor-keys": { "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "requires": { "@typescript-eslint/types": "4.33.0", @@ -25376,17 +27364,30 @@ }, "typescript": { "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==" } } }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "requires": { "path-type": "^4.0.0" @@ -25394,6 +27395,7 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { @@ -25402,6 +27404,7 @@ }, "dom-serializer": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { @@ -25412,6 +27415,7 @@ "dependencies": { "entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } @@ -25419,6 +27423,7 @@ }, "domelementtype": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, @@ -25429,18 +27434,11 @@ "dev": true, "requires": { "webidl-conversions": "^4.0.2" - }, - "dependencies": { - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - } } }, "domhandler": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { @@ -25455,6 +27453,7 @@ }, "domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { @@ -25465,6 +27464,7 @@ }, "dot-prop": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "requires": { "is-obj": "^2.0.0" @@ -25472,10 +27472,12 @@ }, "dotenv": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" }, "download": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "requires": { "archive-type": "^4.0.0", @@ -25493,10 +27495,12 @@ "dependencies": { "@sindresorhus/is": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" }, "cacheable-request": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", "requires": { "clone-response": "1.0.2", @@ -25510,16 +27514,19 @@ "dependencies": { "get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "lowercase-keys": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" } } }, "decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" @@ -25527,6 +27534,7 @@ }, "get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" @@ -25534,6 +27542,7 @@ }, "got": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "requires": { "@sindresorhus/is": "^0.7.0", @@ -25557,28 +27566,34 @@ "dependencies": { "get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } }, "http-cache-semantics": { "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" }, "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" }, "json-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "keyv": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", "requires": { "json-buffer": "3.0.0" @@ -25586,10 +27601,12 @@ }, "lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" }, "make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "requires": { "pify": "^4.0.1", @@ -25598,6 +27615,7 @@ }, "normalize-url": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "requires": { "prepend-http": "^2.0.0", @@ -25607,10 +27625,12 @@ }, "p-cancelable": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" }, "p-event": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", "requires": { "p-timeout": "^2.0.1" @@ -25618,6 +27638,7 @@ }, "p-timeout": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "requires": { "p-finally": "^1.0.0" @@ -25625,6 +27646,7 @@ }, "responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { "lowercase-keys": "^1.0.0" @@ -25632,10 +27654,12 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "sort-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "requires": { "is-plain-obj": "^1.0.0" @@ -25645,8 +27669,14 @@ }, "duplexer3": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -25659,6 +27689,7 @@ }, "ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { @@ -25667,39 +27698,48 @@ }, "ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.20", - "integrity": "sha512-N7ZVNrdzX8NE90OXEFBMsBf3fp8P/vVDUER3WCUZjzC7OkNTXHVoF6W9qVhq8+dA8tGnbDajzUpj2ISNVVyj+Q==" + "version": "1.4.49", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz", + "integrity": "sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ==" }, "elegant-spinner": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" }, "elf-cam": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/elf-cam/-/elf-cam-0.1.1.tgz", "integrity": "sha512-tKSFTWOp5OwJSp6MKyQDX7umYDkvUuI8rxHXw8BuUQ63d9Trj9xLeo6SHyoTGSoZNNZVitFa+RuHHXuoAzN3Rw==" }, "emittery": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, "emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "enabled": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, "encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "requires": { "once": "^1.4.0" @@ -25707,6 +27747,7 @@ }, "enhance-visitors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/enhance-visitors/-/enhance-visitors-1.0.0.tgz", "integrity": "sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=", "dev": true, "requires": { @@ -25715,6 +27756,7 @@ }, "enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { @@ -25723,24 +27765,29 @@ }, "entities": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", "dev": true }, "env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "envinfo": { "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==" }, "equal-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/equal-length/-/equal-length-1.0.1.tgz", "integrity": "sha1-IcoRLUirJLTh5//A5TOdMf38J0w=", "dev": true }, "error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" @@ -25748,6 +27795,7 @@ }, "error-stack-parser": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "requires": { "stackframe": "^1.1.1" @@ -25755,6 +27803,7 @@ }, "es-abstract": { "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { @@ -25782,10 +27831,12 @@ }, "es-module-lexer": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, "es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { @@ -25826,6 +27877,7 @@ }, "es6-promisify": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==" }, "es6-symbol": { @@ -25852,22 +27904,27 @@ }, "escalade": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-goat": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" }, "escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "requires": { "esprima": "^4.0.1", @@ -25879,6 +27936,7 @@ "dependencies": { "levn": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { "prelude-ls": "~1.1.2", @@ -25887,6 +27945,7 @@ }, "optionator": { "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "requires": { "deep-is": "~0.1.3", @@ -25899,15 +27958,18 @@ }, "prelude-ls": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "optional": true }, "type-check": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { "prelude-ls": "~1.1.2" @@ -25917,6 +27979,7 @@ }, "eslint": { "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { @@ -25964,25 +28027,16 @@ "dependencies": { "@babel/code-frame": { "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, - "ajv": { - "version": "6.12.6", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { @@ -25991,6 +28045,7 @@ }, "eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { @@ -25999,6 +28054,7 @@ "dependencies": { "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } @@ -26006,6 +28062,7 @@ }, "globals": { "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", "dev": true, "requires": { @@ -26014,11 +28071,13 @@ }, "ignore": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { @@ -26026,13 +28085,9 @@ "esprima": "^4.0.0" } }, - "json-schema-traverse": { - "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } @@ -26040,6 +28095,7 @@ }, "eslint-ast-utils": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz", "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==", "dev": true, "requires": { @@ -26049,18 +28105,21 @@ }, "eslint-config-prettier": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, "requires": {} }, "eslint-config-standard": { "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", "dev": true, "requires": { @@ -26070,16 +28129,29 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } + }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } } } }, "eslint-import-resolver-typescript": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", "dev": true, "requires": { @@ -26088,20 +28160,34 @@ "is-glob": "^4.0.1", "resolve": "^1.20.0", "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } } }, "eslint-module-utils": { - "version": "2.7.1", - "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", "dev": true, "requires": { "debug": "^3.2.7", - "find-up": "^2.1.0", - "pkg-dir": "^2.0.0" + "find-up": "^2.1.0" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { @@ -26110,6 +28196,7 @@ }, "find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { @@ -26118,6 +28205,7 @@ }, "locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { @@ -26127,6 +28215,7 @@ }, "p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { @@ -26135,35 +28224,25 @@ }, "p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" } }, - "p-try": { - "version": "1.0.0", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, "path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } } } }, "eslint-plugin-ava": { - "version": "13.1.0", - "integrity": "sha512-Bdwyqv4Xh+4ekqbk601HcZNcx8+9ClNGz5GdbC2hv977jUPHQPDMx2arTD3zi1EeyOnOG2Kx22Ow3wecbPCRjQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-ava/-/eslint-plugin-ava-13.2.0.tgz", + "integrity": "sha512-i5B5izsEdERKQLruk1nIWzTTE7C26/ju8qQf7JeyRv32XT2lRMW0zMFZNhIrEf5/5VvpSz2rqrV7UcjClGbKsw==", "dev": true, "requires": { "enhance-visitors": "^1.0.0", @@ -26177,16 +28256,18 @@ }, "dependencies": { "eslint-visitor-keys": { - "version": "3.1.0", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true }, "espree": { - "version": "9.2.0", - "integrity": "sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, "requires": { - "acorn": "^8.6.0", + "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.1.0" } @@ -26195,6 +28276,7 @@ }, "eslint-plugin-cypress": { "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz", "integrity": "sha512-c2W/uPADl5kospNDihgiLc7n87t5XhUbFDoTl6CfVkmG+kDAb5Ux10V9PoLPu9N+r7znpc+iQlcmAqT1A/89HA==", "dev": true, "requires": { @@ -26203,6 +28285,7 @@ }, "eslint-plugin-es": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", "dev": true, "requires": { @@ -26212,6 +28295,7 @@ "dependencies": { "eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { @@ -26220,6 +28304,7 @@ }, "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } @@ -26227,6 +28312,7 @@ }, "eslint-plugin-eslint-comments": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", "dev": true, "requires": { @@ -26236,6 +28322,7 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true } @@ -26243,6 +28330,7 @@ }, "eslint-plugin-fp": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-fp/-/eslint-plugin-fp-2.3.0.tgz", "integrity": "sha1-N20qEIcQ6YGYC9w4deO5kg2gSJw=", "dev": true, "requires": { @@ -26254,6 +28342,7 @@ }, "eslint-plugin-html": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.2.0.tgz", "integrity": "sha512-vi3NW0E8AJombTvt8beMwkL1R/fdRWl4QSNRNMhVQKWm36/X0KF0unGNAY4mqUF06mnwVWZcIcerrCnfn9025g==", "dev": true, "requires": { @@ -26261,8 +28350,9 @@ } }, "eslint-plugin-import": { - "version": "2.25.3", - "integrity": "sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==", + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -26270,18 +28360,19 @@ "debug": "^2.6.9", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.1", + "eslint-module-utils": "^2.7.2", "has": "^1.0.3", "is-core-module": "^2.8.0", "is-glob": "^4.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.5", "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "tsconfig-paths": "^3.12.0" }, "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { @@ -26290,6 +28381,7 @@ }, "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { @@ -26298,13 +28390,26 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } } } }, "eslint-plugin-markdown": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.1.tgz", "integrity": "sha512-FgWp4iyYvTFxPwfbxofTvXxgzPsDuSKHQy2S+a8Ve6savbujey+lgrFFbXQA0HPygISpRYWYBjooPzhYSF81iA==", "dev": true, "requires": { @@ -26313,6 +28418,7 @@ }, "eslint-plugin-node": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", "dev": true, "requires": { @@ -26326,6 +28432,7 @@ "dependencies": { "eslint-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { @@ -26334,11 +28441,24 @@ }, "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } @@ -26346,13 +28466,15 @@ }, "eslint-plugin-promise": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", "dev": true, "requires": {} }, "eslint-plugin-react": { - "version": "7.27.1", - "integrity": "sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "requires": { "array-includes": "^3.1.4", @@ -26373,23 +28495,16 @@ "dependencies": { "doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, - "resolve": { - "version": "2.0.0-next.3", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } @@ -26397,6 +28512,7 @@ }, "eslint-plugin-sort-destructure-keys": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sort-destructure-keys/-/eslint-plugin-sort-destructure-keys-1.4.0.tgz", "integrity": "sha512-txU9l22mblz7YpyjJNYFy4wb5PVXiRMbc9lqFPPhvY4wKyBBYQvb31TIcduf7iRb4Bv01aiXcJiuCkOOrVY48Q==", "dev": true, "requires": { @@ -26404,8 +28520,9 @@ } }, "eslint-plugin-unicorn": { - "version": "40.0.0", - "integrity": "sha512-5GRXISfBk8jMmYk1eeNDw8zSRnWTxBjWkzx2Prre6E2/yLu2twozZ3EomLWCBu9nWms/ZE361BItyMQwfnG1qA==", + "version": "40.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-40.1.0.tgz", + "integrity": "sha512-y5doK2DF9Sr5AqKEHbHxjFllJ167nKDRU01HDcWyv4Tnmaoe9iNxMrBnaybZvWZUaE3OC5Unu0lNIevYamloig==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.15.7", @@ -26426,6 +28543,7 @@ }, "eslint-plugin-you-dont-need-lodash-underscore": { "version": "6.12.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-you-dont-need-lodash-underscore/-/eslint-plugin-you-dont-need-lodash-underscore-6.12.0.tgz", "integrity": "sha512-WF4mNp+k2532iswT6iUd1BX6qjd3AV4cFy/09VC82GY9SsRtvkxhUIx7JNGSe0/bLyd57oTr4inPFiIaENXhGw==", "dev": true, "requires": { @@ -26434,6 +28552,7 @@ }, "eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { @@ -26443,6 +28562,7 @@ "dependencies": { "estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } @@ -26450,6 +28570,7 @@ }, "eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { @@ -26458,10 +28579,12 @@ }, "eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" }, "espree": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "requires": { @@ -26472,11 +28595,13 @@ "dependencies": { "acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true }, "eslint-visitor-keys": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } @@ -26484,15 +28609,18 @@ }, "esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "espurify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", "dev": true }, "esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { @@ -26501,6 +28629,7 @@ }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { @@ -26509,14 +28638,17 @@ }, "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "estree-walker": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { @@ -26536,10 +28668,12 @@ }, "eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", @@ -26555,10 +28689,12 @@ }, "exit-on-epipe": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" }, "expand-brackets": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "requires": { "debug": "^2.3.3", @@ -26572,6 +28708,7 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" @@ -26579,6 +28716,7 @@ }, "define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" @@ -26586,6 +28724,7 @@ }, "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -26593,6 +28732,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -26600,6 +28740,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -26609,6 +28750,7 @@ }, "is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -26616,6 +28758,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -26625,6 +28768,7 @@ }, "is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", @@ -26634,14 +28778,17 @@ }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } @@ -26685,6 +28832,7 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" @@ -26692,6 +28840,7 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "safe-buffer": { @@ -26701,12 +28850,14 @@ }, "statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, "express-logging": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/express-logging/-/express-logging-1.1.1.tgz", "integrity": "sha1-YoOWGMurW7NhDxocFIU1L+nSbCo=", "requires": { "on-headers": "^1.0.0" @@ -26737,6 +28888,7 @@ }, "ext-list": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "requires": { "mime-db": "^1.28.0" @@ -26744,6 +28896,7 @@ }, "ext-name": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "requires": { "ext-list": "^2.0.0", @@ -26758,6 +28911,7 @@ }, "extend-shallow": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { "assign-symbols": "^1.0.0", @@ -26766,6 +28920,7 @@ }, "external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", @@ -26775,6 +28930,7 @@ }, "extglob": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "requires": { "array-unique": "^0.3.2", @@ -26789,6 +28945,7 @@ "dependencies": { "define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" @@ -26796,6 +28953,7 @@ }, "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -26803,6 +28961,7 @@ }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" } } @@ -26815,19 +28974,23 @@ }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-equals": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz", "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==" }, "fast-glob": { - "version": "3.2.10", - "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -26838,21 +29001,24 @@ }, "fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fast-redact": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.2.tgz", - "integrity": "sha512-YN+CYfCVRVMUZOUPeinHNKgytM1wPI/C/UCLEi56EsY2dwwvI00kIJHJoI7pMVqGoMew8SMZ2SSfHKHULHXDsg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.0.tgz", + "integrity": "sha512-dir8LOnvialLxiXDPESMDHGp82CHi6ZEYTVkcvdn5d7psdv9ZkkButXrOeXST4aqreIRR+N7CYlsrwFuorurVg==", "dev": true }, "fast-safe-stringify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fastify-warning": { @@ -26863,6 +29029,7 @@ }, "fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" @@ -26870,6 +29037,7 @@ }, "fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "requires": { "pend": "~1.2.0" @@ -26877,10 +29045,12 @@ }, "fecha": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz", "integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==" }, "fetch-node-website": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/fetch-node-website/-/fetch-node-website-5.0.3.tgz", "integrity": "sha512-O86T46FUWSOq4AWON39oaT8H90QFKAbmjfOVBhgaS87AFfeW00txz73KTv7QopPWtHBbGdI1S8cIT1VK1OQYLg==", "requires": { "chalk": "^4.0.0", @@ -26893,6 +29063,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -26903,6 +29074,7 @@ "dependencies": { "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", @@ -26913,10 +29085,12 @@ }, "@sindresorhus/is": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==" }, "@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", @@ -26925,6 +29099,7 @@ }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -26932,6 +29107,7 @@ }, "cacheable-lookup": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", "requires": { "@types/keyv": "^3.1.1", @@ -26940,10 +29116,12 @@ }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -26951,10 +29129,12 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "decompress-response": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", "requires": { "mimic-response": "^2.0.0" @@ -26962,6 +29142,7 @@ }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -26969,6 +29150,7 @@ }, "got": { "version": "10.7.0", + "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", "requires": { "@sindresorhus/is": "^2.0.0", @@ -26990,10 +29172,12 @@ }, "jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", @@ -27006,6 +29190,7 @@ "dependencies": { "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", @@ -27016,10 +29201,12 @@ }, "mimic-response": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" }, "pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", @@ -27030,10 +29217,12 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -27041,12 +29230,14 @@ }, "type-fest": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==" } } }, "figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "requires": { "escape-string-regexp": "^1.0.5" @@ -27054,12 +29245,14 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { @@ -27068,22 +29261,27 @@ }, "file-size": { "version": "0.0.5", + "resolved": "https://registry.npmjs.org/file-size/-/file-size-0.0.5.tgz", "integrity": "sha1-BX1Dw6Ptc12j+Q1gUqs4Dx5tXjs=" }, "file-type": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==" }, "file-uri-to-path": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "filename-reserved-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" }, "filenamify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "requires": { "filename-reserved-regex": "^2.0.0", @@ -27103,6 +29301,7 @@ }, "fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { "to-regex-range": "^5.0.1" @@ -27110,10 +29309,12 @@ }, "filter-obj": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==" }, "finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "requires": { "debug": "2.6.9", @@ -27127,6 +29328,7 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" @@ -27134,16 +29336,19 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, "find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "requires": { "locate-path": "^6.0.0", @@ -27152,6 +29357,7 @@ }, "flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { @@ -27167,15 +29373,18 @@ }, "flatted": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", "dev": true }, "flatten": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" }, "flush-write-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-2.0.0.tgz", "integrity": "sha512-uXClqPxT4xW0lcdSBheb2ObVU+kuqUk3Jk64EwieirEXZx9XUrVwp/JuBfKAWaM4T5Td/VL7QLDWPXp/MvGm/g==", "requires": { "inherits": "^2.0.3", @@ -27184,25 +29393,30 @@ }, "fn.name": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "folder-walker": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/folder-walker/-/folder-walker-3.2.0.tgz", "integrity": "sha512-VjAQdSLsl6AkpZNyrQJfO7BXLo4chnStqb055bumZMbRUPpVuPN3a4ktsnRCmrFZjtMlYLkyXiR5rAs4WOpC4Q==", "requires": { "from2": "^2.1.0" } }, "follow-redirects": { - "version": "1.14.6", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==" + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" }, "for-in": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "foreground-child": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { @@ -27218,6 +29432,7 @@ }, "form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, "requires": { @@ -27227,16 +29442,33 @@ } }, "formidable": { - "version": "1.2.6", - "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dev": true, + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true + } + } }, "forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fragment-cache": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { "map-cache": "^0.2.2" @@ -27249,6 +29481,7 @@ }, "from2": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { "inherits": "^2.0.1", @@ -27257,6 +29490,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -27270,6 +29504,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -27279,6 +29514,7 @@ }, "from2-array": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/from2-array/-/from2-array-0.0.4.tgz", "integrity": "sha1-6vwWtl9uJxm81X/cGGkAWsEzLNY=", "requires": { "from2": "^2.0.3" @@ -27286,10 +29522,12 @@ }, "fs-constants": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "fs-extra": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "requires": { @@ -27300,6 +29538,7 @@ }, "fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { "minipass": "^3.0.0" @@ -27307,28 +29546,34 @@ }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "fuzzy": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" }, "gauge": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -27344,10 +29589,12 @@ }, "gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-amd-module-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz", "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==", "requires": { "ast-module-types": "^2.3.2", @@ -27356,10 +29603,13 @@ }, "get-caller-file": { "version": "1.0.3", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "get-intrinsic": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "requires": { "function-bind": "^1.1.1", @@ -27369,14 +29619,17 @@ }, "get-port": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" }, "get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-symbol-description": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, "requires": { @@ -27386,6 +29639,7 @@ }, "get-value": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { @@ -27398,8 +29652,9 @@ } }, "gh-release-fetch": { - "version": "3.0.0", - "integrity": "sha512-P7Anj35Y4kI3RBoQ+M8Z2U9ittORYyRNLb55+5yGGXmm3Mazgkq4MPqsHH9S7+pNWFpE2BtAWeF6twzz6JY3Bw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gh-release-fetch/-/gh-release-fetch-3.0.1.tgz", + "integrity": "sha512-gV6V6+T0kKppzh/+YXpI/jl8ZgvjMY4oyWR3DAmPsqk9ILhk8TEneLFjBBM3kO7OfZ3dWCvuQu5M0DSh/Hz21w==", "requires": { "@types/download": "^8.0.0", "@types/node-fetch": "^2.1.6", @@ -27411,6 +29666,7 @@ }, "git-raw-commits": { "version": "2.0.11", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "requires": { @@ -27423,10 +29679,12 @@ }, "git-repo-info": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/git-repo-info/-/git-repo-info-2.1.1.tgz", "integrity": "sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==" }, "gitconfiglocal": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-2.1.0.tgz", "integrity": "sha512-qoerOEliJn3z+Zyn1HW2F6eoYJqKwS6MgC9cztTLUB/xLWX8gD/6T60pKn4+t/d6tP7JlybI7Z3z+I572CR/Vg==", "requires": { "ini": "^1.3.2" @@ -27434,12 +29692,14 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" } } }, "glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", @@ -27452,6 +29712,7 @@ }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "requires": { "is-glob": "^4.0.1" @@ -27459,10 +29720,12 @@ }, "glob-to-regexp": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, "global-cache-dir": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-cache-dir/-/global-cache-dir-2.0.0.tgz", "integrity": "sha512-30pvU3e8muclEhc9tt+jRMaywOS3QfNdURflJ5Zv0bohjhcVQpBe5bwRHghGSJORLOKW81/n+3iJvHRHs+/S1Q==", "requires": { "cachedir": "^2.3.0", @@ -27471,6 +29734,7 @@ }, "global-dirs": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { @@ -27479,6 +29743,7 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true } @@ -27486,22 +29751,25 @@ }, "globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "11.0.4", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, "gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "requires": { "minimist": "^1.2.5" @@ -27509,6 +29777,7 @@ }, "got": { "version": "11.8.3", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.3.tgz", "integrity": "sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg==", "dev": true, "requires": { @@ -27526,15 +29795,18 @@ } }, "graceful-fs": { - "version": "4.2.8", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "graphql": { - "version": "16.1.0", - "integrity": "sha512-+PIjmhqGHMIxtnlEirRXDHIzs0cAHAozKG5M2w2N4TnS8VzCxO3bbv1AW9UTeycBfl2QsPduxcVrBvANFKQhiw==" + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.2.0.tgz", + "integrity": "sha512-MuQd7XXrdOcmfwuLwC2jNvx0n3rxIuNYOxUtiee5XOmfrWo613ar2U8pE7aHAKh8VwfpifubpD9IP+EdEAEOsA==" }, "graphviz": { "version": "0.0.9", + "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz", "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==", "dev": true, "requires": { @@ -27576,35 +29848,17 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } } }, "hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { "function-bind": "^1.1.1" @@ -27612,6 +29866,7 @@ }, "has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "^2.0.0" @@ -27619,21 +29874,25 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" } } }, "has-bigints": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-glob": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz", "integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=", "requires": { "is-glob": "^3.0.0" @@ -27641,6 +29900,7 @@ "dependencies": { "is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "requires": { "is-extglob": "^2.1.0" @@ -27650,14 +29910,17 @@ }, "has-symbol-support-x": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" }, "has-symbols": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, "has-to-string-tag-x": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "requires": { "has-symbol-support-x": "^1.4.1" @@ -27665,6 +29928,7 @@ }, "has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, "requires": { @@ -27673,10 +29937,12 @@ }, "has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "requires": { "get-value": "^2.0.6", @@ -27686,6 +29952,7 @@ }, "has-values": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { "is-number": "^3.0.0", @@ -27694,6 +29961,7 @@ "dependencies": { "is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { "kind-of": "^3.0.2" @@ -27701,6 +29969,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -27710,6 +29979,7 @@ }, "kind-of": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { "is-buffer": "^1.1.5" @@ -27719,10 +29989,12 @@ }, "has-yarn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, "hasbin": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz", "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=", "requires": { "async": "~1.5" @@ -27730,12 +30002,14 @@ "dependencies": { "async": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" } } }, "hasha": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "requires": { "is-stream": "^2.0.0", @@ -27744,13 +30018,21 @@ "dependencies": { "type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, "hosted-git-info": { - "version": "4.0.2", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -27767,11 +30049,13 @@ }, "html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "htmlparser2": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", "dev": true, "requires": { @@ -27783,6 +30067,7 @@ }, "http-cache-semantics": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" }, "http-errors": { @@ -27806,6 +30091,7 @@ }, "http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { "eventemitter3": "^4.0.0", @@ -27815,6 +30101,7 @@ }, "http-proxy-middleware": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "requires": { "@types/http-proxy": "^1.17.5", @@ -27843,6 +30130,7 @@ }, "http2-wrapper": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, "requires": { @@ -27852,6 +30140,7 @@ }, "https-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { "agent-base": "6", @@ -27860,6 +30149,7 @@ }, "human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, "husky": { @@ -27870,6 +30160,7 @@ }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -27877,19 +30168,23 @@ }, "ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.1.9", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-by-default": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.0.0.tgz", "integrity": "sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==", "dev": true }, "ignore-walk": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", "requires": { "minimatch": "^3.0.4" @@ -27897,6 +30192,7 @@ }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { @@ -27906,6 +30202,7 @@ "dependencies": { "resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } @@ -27913,11 +30210,13 @@ }, "import-lazy": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" }, "import-local": { - "version": "3.0.3", - "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -27926,6 +30225,7 @@ "dependencies": { "find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { @@ -27935,6 +30235,7 @@ }, "locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { @@ -27943,6 +30244,7 @@ }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { @@ -27951,14 +30253,22 @@ }, "p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { @@ -27969,23 +30279,28 @@ }, "import-modules": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.1.0.tgz", "integrity": "sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==", "dev": true }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "indexes-of": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", @@ -27994,14 +30309,17 @@ }, "inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" }, "inquirer": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "requires": { "ansi-escapes": "^3.2.0", @@ -28021,14 +30339,17 @@ "dependencies": { "ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" @@ -28036,6 +30357,7 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", @@ -28045,6 +30367,7 @@ }, "cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" @@ -28052,10 +30375,12 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { "escape-string-regexp": "^1.0.5" @@ -28063,18 +30388,22 @@ }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" @@ -28082,6 +30411,7 @@ }, "restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", @@ -28090,6 +30420,7 @@ }, "string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -28098,10 +30429,12 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -28111,6 +30444,7 @@ }, "strip-ansi": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { "ansi-regex": "^4.1.0" @@ -28118,6 +30452,7 @@ }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" @@ -28127,6 +30462,7 @@ }, "inquirer-autocomplete-prompt": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/inquirer-autocomplete-prompt/-/inquirer-autocomplete-prompt-1.4.0.tgz", "integrity": "sha512-qHgHyJmbULt4hI+kCmwX92MnSxDs/Yhdt4wPA30qnoa01OF6uTXV8yvH4hKXgdaTNmkZ9D01MHjqKYEuJN+ONw==", "requires": { "ansi-escapes": "^4.3.1", @@ -28138,6 +30474,7 @@ "dependencies": { "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" @@ -28145,12 +30482,14 @@ }, "type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "internal-slot": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, "requires": { @@ -28161,6 +30500,7 @@ }, "into-stream": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", "requires": { "from2": "^2.1.1", @@ -28175,15 +30515,18 @@ }, "ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "irregular-plurals": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz", "integrity": "sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g==", "dev": true }, "is-accessor-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { "kind-of": "^6.0.0" @@ -28191,11 +30534,13 @@ }, "is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { @@ -28205,10 +30550,12 @@ }, "is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-bigint": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { @@ -28217,6 +30564,7 @@ }, "is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { "binary-extensions": "^2.0.0" @@ -28224,6 +30572,7 @@ }, "is-boolean-object": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { @@ -28233,10 +30582,12 @@ }, "is-buffer": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", "requires": { "builtin-modules": "^3.0.0" @@ -28244,11 +30595,13 @@ }, "is-callable": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { @@ -28256,14 +30609,16 @@ } }, "is-core-module": { - "version": "2.8.0", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } }, "is-data-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { "kind-of": "^6.0.0" @@ -28271,6 +30626,7 @@ }, "is-date-object": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { @@ -28279,11 +30635,13 @@ }, "is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { "is-accessor-descriptor": "^1.0.0", @@ -28293,15 +30651,18 @@ }, "is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-error": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", "dev": true }, "is-extendable": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { "is-plain-object": "^2.0.4" @@ -28309,6 +30670,7 @@ "dependencies": { "is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" @@ -28318,14 +30680,17 @@ }, "is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" @@ -28333,11 +30698,13 @@ }, "is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "requires": { "global-dirs": "^3.0.0", @@ -28346,6 +30713,7 @@ "dependencies": { "global-dirs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "requires": { "ini": "2.0.0" @@ -28355,6 +30723,7 @@ }, "is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, "is-module": { @@ -28364,23 +30733,28 @@ }, "is-natural-number": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "is-negative-zero": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-npm": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" }, "is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { @@ -28389,14 +30763,17 @@ }, "is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-object": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" }, "is-observable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", "requires": { "symbol-observable": "^1.1.0" @@ -28404,22 +30781,27 @@ }, "is-path-cwd": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" }, "is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" }, "is-plain-object": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" }, "is-promise": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "dev": true }, @@ -28433,6 +30815,7 @@ }, "is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { @@ -28442,19 +30825,23 @@ }, "is-retry-allowed": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, "is-shared-array-buffer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true }, "is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-string": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { @@ -28463,6 +30850,7 @@ }, "is-symbol": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { @@ -28471,6 +30859,7 @@ }, "is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { @@ -28479,18 +30868,22 @@ }, "is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-url": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" }, "is-weakref": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { @@ -28499,10 +30892,12 @@ }, "is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "requires": { "is-docker": "^2.0.0" @@ -28510,22 +30905,27 @@ }, "is-yarn-global": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, "isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "iserror": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz", "integrity": "sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U=" }, "isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { @@ -28536,11 +30936,13 @@ }, "istanbul-lib-coverage": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { @@ -28551,6 +30953,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { @@ -28560,8 +30963,9 @@ } }, "istanbul-reports": { - "version": "3.1.1", - "integrity": "sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", + "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -28570,6 +30974,7 @@ }, "isurl": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "requires": { "has-to-string-tag-x": "^1.2.0", @@ -28578,10 +30983,12 @@ }, "jest-get-type": { "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" }, "jest-validate": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "requires": { "@jest/types": "^26.6.2", @@ -28614,14 +31021,17 @@ }, "js-string-escape": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" }, "js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "requires": { "argparse": "^2.0.1" @@ -28747,12 +31157,6 @@ "prelude-ls": "~1.1.2" } }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", @@ -28768,19 +31172,23 @@ }, "jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-parse-better-errors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { @@ -28790,11 +31198,14 @@ "dev": true }, "json-schema-traverse": { - "version": "1.0.0", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, @@ -28806,6 +31217,7 @@ }, "json5": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "requires": { "minimist": "^1.2.5" @@ -28813,6 +31225,7 @@ }, "jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { @@ -28822,11 +31235,13 @@ }, "jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { @@ -28836,6 +31251,7 @@ }, "jsonwebtoken": { "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, "requires": { @@ -28853,6 +31269,7 @@ "dependencies": { "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } @@ -28872,6 +31289,7 @@ }, "jsx-ast-utils": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { @@ -28881,15 +31299,18 @@ }, "junk": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==" }, "just-extend": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "jwa": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "requires": { @@ -28900,6 +31321,7 @@ }, "jws": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "requires": { @@ -28909,15 +31331,18 @@ }, "jwt-decode": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" }, "kebab-case": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/kebab-case/-/kebab-case-1.0.1.tgz", "integrity": "sha512-txPHx6nVLhv8PHGXIlAk0nYoh894SpAqGPXNvbg2hh8spvHXIah3+vT87DLoa59nKgC6scD3u3xAuRIgiMqbfQ==", "dev": true }, "keep-func-props": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keep-func-props/-/keep-func-props-3.0.1.tgz", "integrity": "sha512-5AsrYCiCHIUxuw/G2r7xcoTW/NTf5IFwAe1fkwf2ifM/KZzEojaTylh1Pppu60oEixww1rfcWJaRGLi3eAJsrQ==", "requires": { "mimic-fn": "^3.1.0" @@ -28933,14 +31358,16 @@ } }, "keyv": { - "version": "4.0.4", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.5.tgz", + "integrity": "sha512-531pkGLqV3BMg0eDqqJFI0R1mkK1Nm5xIP2mM6keP5P8WfFtCkg2IOwplTUmlGoTgIg9yQYZ/kdihhz89XH3vA==", "requires": { "json-buffer": "3.0.1" } }, "kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { @@ -28951,10 +31378,12 @@ }, "kuler": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" }, "lambda-local": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.0.0.tgz", "integrity": "sha512-5Z7ZEhqVYJSm3djoq7QLDkEk7Ao+jNYbARo3nk3wtjKpgCnEbzOuraxDPDWg7OlZ4JKcsRDP+wNLeORMdbF2ow==", "requires": { "commander": "^7.2.0", @@ -28964,12 +31393,14 @@ "dependencies": { "commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" } } }, "latest-version": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", "requires": { "package-json": "^6.3.0" @@ -28977,6 +31408,7 @@ }, "lazystream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" @@ -28984,6 +31416,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -28997,6 +31430,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -29006,10 +31440,12 @@ }, "leven": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { @@ -29019,10 +31455,12 @@ }, "lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "listr": { "version": "0.14.3", + "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz", "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", "requires": { "@samverschueren/stream-to-observable": "^0.3.0", @@ -29038,24 +31476,29 @@ "dependencies": { "is-promise": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "listr-silent-renderer": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" }, "listr-update-renderer": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", "requires": { "chalk": "^1.1.3", @@ -29070,18 +31513,22 @@ "dependencies": { "ansi-escapes": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" }, "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { "ansi-styles": "^2.2.1", @@ -29093,6 +31540,7 @@ }, "cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" @@ -29100,6 +31548,7 @@ }, "cli-truncate": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", "requires": { "slice-ansi": "0.0.4", @@ -29108,10 +31557,12 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { "escape-string-regexp": "^1.0.5", @@ -29120,10 +31571,12 @@ }, "indent-string": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" }, "is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -29131,6 +31584,7 @@ }, "log-symbols": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "requires": { "chalk": "^1.0.0" @@ -29138,6 +31592,7 @@ }, "log-update": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", "requires": { "ansi-escapes": "^3.0.0", @@ -29147,10 +31602,12 @@ }, "mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" @@ -29158,6 +31615,7 @@ }, "restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", @@ -29166,10 +31624,12 @@ }, "slice-ansi": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" }, "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -29179,6 +31639,7 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -29186,10 +31647,12 @@ }, "supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "wrap-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", "requires": { "string-width": "^2.1.1", @@ -29198,14 +31661,17 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "is-fullwidth-code-point": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "string-width": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "^2.0.0", @@ -29214,6 +31680,7 @@ }, "strip-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { "ansi-regex": "^3.0.0" @@ -29225,6 +31692,7 @@ }, "listr-verbose-renderer": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", "requires": { "chalk": "^2.4.1", @@ -29235,6 +31703,7 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" @@ -29242,6 +31711,7 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", @@ -29251,6 +31721,7 @@ }, "cli-cursor": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { "restore-cursor": "^2.0.0" @@ -29258,10 +31729,12 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "figures": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { "escape-string-regexp": "^1.0.5" @@ -29269,14 +31742,17 @@ }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "mimic-fn": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "onetime": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { "mimic-fn": "^1.0.0" @@ -29284,6 +31760,7 @@ }, "restore-cursor": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { "onetime": "^2.0.0", @@ -29292,6 +31769,7 @@ }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" @@ -29301,6 +31779,7 @@ }, "load-json-file": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "requires": { @@ -29313,6 +31792,7 @@ "dependencies": { "parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { @@ -29320,13 +31800,9 @@ "json-parse-better-errors": "^1.0.1" } }, - "strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "type-fest": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true } @@ -29334,6 +31810,7 @@ }, "locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "requires": { "p-locate": "^5.0.0" @@ -29350,10 +31827,12 @@ }, "lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" }, "lodash.debounce": { @@ -29363,65 +31842,79 @@ }, "lodash.deburr": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=" }, "lodash.defaults": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" }, "lodash.difference": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, "lodash.flatten": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, "lodash.get": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", "dev": true }, "lodash.includes": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", "dev": true }, "lodash.isboolean": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", "dev": true }, "lodash.isempty": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", "integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=" }, "lodash.isinteger": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", "dev": true }, "lodash.isnumber": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" }, "lodash.isstring": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, "lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.once": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", "dev": true }, @@ -29433,24 +31926,29 @@ }, "lodash.transform": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=" }, "lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, "lodash.union": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" }, "lodash.zip": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", "dev": true }, "log-process-errors": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log-process-errors/-/log-process-errors-6.3.0.tgz", "integrity": "sha512-dHwGgWFuz9LUDoLIG7E0SlDurosfZEpgNLJMPzNL9GPdyh4Wdm5RJlQbuqy3Pj2wOcbDzykeTCBEqyrwriqPnA==", "requires": { "chalk": "^4.1.0", @@ -29465,6 +31963,7 @@ }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "requires": { "chalk": "^4.1.0", @@ -29473,6 +31972,7 @@ }, "log-update": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.0.tgz", "integrity": "sha512-HovF3knyZX9sleS0OkSJ6f53JEpbzcbomC6/WJ3iuGK8i6CRb6WZ542gO2F3pdQK8hwlijddDefVFhlMpwkOSQ==", "requires": { "ansi-escapes": "^5.0.0", @@ -29483,14 +31983,17 @@ "dependencies": { "ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" }, "cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "requires": { "restore-cursor": "^4.0.0" @@ -29498,14 +32001,17 @@ }, "emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "is-fullwidth-code-point": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==" }, "restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "requires": { "onetime": "^5.1.0", @@ -29514,6 +32020,7 @@ }, "slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "requires": { "ansi-styles": "^6.0.0", @@ -29521,16 +32028,18 @@ } }, "string-width": { - "version": "5.0.1", - "integrity": "sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "requires": { + "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "is-fullwidth-code-point": "^4.0.0", "strip-ansi": "^7.0.1" } }, "strip-ansi": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "requires": { "ansi-regex": "^6.0.1" @@ -29538,6 +32047,7 @@ }, "wrap-ansi": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", "requires": { "ansi-styles": "^6.1.0", @@ -29549,6 +32059,7 @@ }, "logform": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.3.2.tgz", "integrity": "sha512-V6JiPThZzTsbVRspNO6TmHkR99oqYTs8fivMBYQkjZj6rxW92KxtDCPE6IkAk1DNBnYKNkjm4jYBm6JDUcyhOA==", "requires": { "colors": "1.4.0", @@ -29560,6 +32071,7 @@ }, "loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { @@ -29595,10 +32107,12 @@ }, "lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" @@ -29630,10 +32144,12 @@ }, "luxon": { "version": "1.28.0", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-1.28.0.tgz", "integrity": "sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==" }, "macos-release": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==" }, "magic-string": { @@ -29646,6 +32162,7 @@ }, "make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" @@ -29653,16 +32170,19 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, "make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "map-age-cleaner": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { @@ -29671,14 +32191,17 @@ }, "map-cache": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" }, "map-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { "object-visit": "^1.0.0" @@ -29692,6 +32215,7 @@ }, "matcher": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, "requires": { @@ -29700,10 +32224,12 @@ }, "maxstache": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/maxstache/-/maxstache-1.0.7.tgz", "integrity": "sha1-IjHVGAung9Xs/DHEX+2seuQnaYQ=" }, "maxstache-stream": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/maxstache-stream/-/maxstache-stream-1.0.4.tgz", "integrity": "sha1-nH9cq35f3S2Q2oYUO06WMeoygEA=", "requires": { "maxstache": "^1.0.0", @@ -29714,6 +32240,7 @@ "dependencies": { "pump": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { "end-of-stream": "^1.1.0", @@ -29722,6 +32249,7 @@ }, "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -29735,6 +32263,7 @@ }, "split2": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/split2/-/split2-1.1.1.tgz", "integrity": "sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk=", "requires": { "through2": "~2.0.0" @@ -29742,6 +32271,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -29749,6 +32279,7 @@ }, "through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", @@ -29759,6 +32290,7 @@ }, "md5-hex": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", "requires": { "blueimp-md5": "^2.10.0" @@ -29766,6 +32298,7 @@ }, "mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "requires": { @@ -29778,15 +32311,18 @@ }, "mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true }, "media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "mem": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { @@ -29796,6 +32332,7 @@ }, "memoize-one": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, "memoizee": { @@ -29824,11 +32361,13 @@ }, "memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", "dev": true }, "meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { @@ -29847,6 +32386,7 @@ "dependencies": { "type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true } @@ -29854,10 +32394,12 @@ }, "merge-descriptors": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, "merge-options": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", "requires": { "is-plain-obj": "^2.1.0" @@ -29865,37 +32407,45 @@ "dependencies": { "is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" } } }, "merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micro-api-client": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz", "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==" }, "micro-memoize": { "version": "4.0.9", + "resolved": "https://registry.npmjs.org/micro-memoize/-/micro-memoize-4.0.9.tgz", "integrity": "sha512-Z2uZi/IUMGQDCXASdujXRqrXXEwSY0XffUrAOllhqzQI3wpUyZbiZTiE2JuYC0HSG2G7DbCS5jZmsEKEGZuemg==" }, "micro-spelling-correcter": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz", "integrity": "sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==", "dev": true }, "micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "requires": { @@ -29905,6 +32455,7 @@ }, "micromatch": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { "braces": "^3.0.1", @@ -29913,14 +32464,17 @@ }, "mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { "mime-db": "1.51.0" @@ -29928,19 +32482,23 @@ }, "mimic-fn": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" }, "mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "minimatch": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { "brace-expansion": "^1.1.7" @@ -29948,10 +32506,12 @@ }, "minimist": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { @@ -29962,11 +32522,13 @@ "dependencies": { "arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true } @@ -29974,6 +32536,7 @@ }, "minipass": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", "requires": { "yallist": "^4.0.0" @@ -29981,6 +32544,7 @@ }, "minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { "minipass": "^3.0.0", @@ -29989,6 +32553,7 @@ }, "mixin-deep": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "requires": { "for-in": "^1.0.2", @@ -29996,16 +32561,22 @@ } }, "mkdirp": { - "version": "1.0.4", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "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": "^1.2.5" + } }, "mock-fs": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.1.2.tgz", "integrity": "sha512-YkjQkdLulFrz0vD4BfNQdQRVmgycXTV7ykuHMlyv+C8WCHazpkiQRDthwa02kSyo8wKnY9wRptHfQLgmf0eR+A==", "dev": true }, "mock-require": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", "dev": true, "requires": { @@ -30015,6 +32586,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { @@ -30025,6 +32597,7 @@ }, "module-definition": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz", "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==", "requires": { "ast-module-types": "^2.7.1", @@ -30039,6 +32612,7 @@ }, "moize": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/moize/-/moize-6.1.0.tgz", "integrity": "sha512-WrMcM+C2Jy+qyOC/UMhA3BCHGowxV34dhDZnDNfxsREW/8N+33SFjmc23Q61Xv1WUthUA1vYopTitP1sZ5jkeg==", "requires": { "fast-equals": "^2.0.1", @@ -30047,6 +32621,7 @@ }, "move-file": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/move-file/-/move-file-2.1.0.tgz", "integrity": "sha512-i9qLW6gqboJ5Ht8bauZi7KlTnQ3QFpBCvMvFfEcHADKgHGeJ9BZMO7SFCTwHPV9Qa0du9DYY1Yx3oqlGt30nXA==", "requires": { "path-exists": "^4.0.0" @@ -30054,25 +32629,29 @@ }, "ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "multiparty": { - "version": "4.2.2", - "integrity": "sha512-NtZLjlvsjcoGrzojtwQwn/Tm90aWJ6XXtPppYF4WmOk/6ncdwMMKggFY2NlRRN9yiCEIVxpOfPWahVEG2HAG8Q==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-4.2.3.tgz", + "integrity": "sha512-Ak6EUJZuhGS8hJ3c2fY6UW5MbkGUPMBEGd13djUzoY/BHqV/gTuFWtC6IuVA7A2+v3yjBS6c4or50xhzTQZImQ==", "requires": { - "http-errors": "~1.8.0", + "http-errors": "~1.8.1", "safe-buffer": "5.2.1", "uid-safe": "2.1.5" }, "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "mute-stream": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "mv": { @@ -30099,15 +32678,6 @@ "path-is-absolute": "^1.0.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, "rimraf": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", @@ -30120,11 +32690,13 @@ } }, "nanoid": { - "version": "3.1.30", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==" }, "nanomatch": { "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { "arr-diff": "^4.0.0", @@ -30142,11 +32714,13 @@ }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, "natural-compare-lite": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", "dev": true }, @@ -30158,6 +32732,7 @@ }, "needle": { "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "requires": { "debug": "^3.2.6", @@ -30167,6 +32742,7 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" @@ -30176,6 +32752,7 @@ }, "negotiator": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "neo-async": { @@ -30186,6 +32763,7 @@ }, "nested-error-stacks": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==" }, "netlify": { @@ -30200,15 +32778,6 @@ "omit.js": "^2.0.2", "p-wait-for": "^3.2.0", "qs": "^6.9.6" - }, - "dependencies": { - "qs": { - "version": "6.10.2", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", - "requires": { - "side-channel": "^1.0.4" - } - } } }, "netlify-headers-parser": { @@ -30253,6 +32822,7 @@ }, "netlify-redirector": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/netlify-redirector/-/netlify-redirector-0.2.1.tgz", "integrity": "sha512-17vDR9p1Loanp+vd57y+b6WlKb5X+qb0LZ44oTYsKJbdonz4Md+Ybv1lzH1w1aKm5YWWXHR8LMpWyY9bjlAJKw==" }, "next-tick": { @@ -30263,11 +32833,13 @@ }, "nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, "nise": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, "requires": { @@ -30280,6 +32852,7 @@ "dependencies": { "@sinonjs/fake-timers": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, "requires": { @@ -30288,11 +32861,13 @@ }, "isarray": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "path-to-regexp": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "requires": { @@ -30302,18 +32877,21 @@ } }, "node-fetch": { - "version": "2.6.6", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" } }, "node-gyp-build": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" }, "node-pre-gyp": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.13.0.tgz", "integrity": "sha512-Md1D3xnEne8b/HGVQkZZwV27WUi1ZRuZBij24TNaZwUPU3ZAFtvT6xxJGaUVillfmMKnn5oD1HoGsp2Ftik7SQ==", "requires": { "detect-libc": "^1.0.2", @@ -30330,14 +32908,17 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", @@ -30346,10 +32927,12 @@ }, "chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "fs-minipass": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "requires": { "minipass": "^2.6.0" @@ -30357,6 +32940,7 @@ }, "gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { "aproba": "^1.0.3", @@ -30371,6 +32955,7 @@ }, "is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" @@ -30378,6 +32963,7 @@ }, "minipass": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "requires": { "safe-buffer": "^5.1.2", @@ -30386,20 +32972,15 @@ }, "minizlib": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "requires": { "minipass": "^2.9.0" } }, - "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, "nopt": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "requires": { "abbrev": "1", @@ -30408,6 +32989,7 @@ }, "npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { "are-we-there-yet": "~1.1.2", @@ -30418,6 +33000,7 @@ }, "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -30431,6 +33014,7 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" @@ -30438,10 +33022,12 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -30449,6 +33035,7 @@ }, "string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { "code-point-at": "^1.0.0", @@ -30458,6 +33045,7 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" @@ -30465,6 +33053,7 @@ }, "tar": { "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", "requires": { "chownr": "^1.1.4", @@ -30478,22 +33067,26 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "yallist": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, "node-releases": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "node-source-walk": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz", "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==", "requires": { "@babel/parser": "^7.0.0" @@ -30501,6 +33094,7 @@ }, "node-version-alias": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-version-alias/-/node-version-alias-1.0.1.tgz", "integrity": "sha512-E9EhoJkpIIZyYplB298W8ZfhcojQrnKnUPcaOgJqVqICUZwPZkuj10nTzEscwdziOOj545v4tGPvNBG3ieUbSw==", "requires": { "all-node-versions": "^8.0.0", @@ -30513,6 +33107,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -30523,6 +33118,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", @@ -30531,6 +33127,7 @@ }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -30538,10 +33135,12 @@ }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", @@ -30550,6 +33149,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -30557,14 +33157,17 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", @@ -30577,6 +33180,7 @@ }, "pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", @@ -30587,10 +33191,12 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -30600,10 +33206,12 @@ }, "noop2": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/noop2/-/noop2-2.0.0.tgz", "integrity": "sha1-S2NgFemIK1R4PAK0EvaZ2MXNCls=" }, "nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { "abbrev": "1" @@ -30611,6 +33219,7 @@ }, "normalize-node-version": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/normalize-node-version/-/normalize-node-version-10.0.0.tgz", "integrity": "sha512-/gVbS/qAnowVxr2fJy3F0MxmCvx8QdXJDl8XUE7HT3vsDeDjQfZkX9OiPahF+51Hgy93cKG1hP6uyBjQsMCvWQ==", "requires": { "all-node-versions": "^8.0.0", @@ -30621,6 +33230,7 @@ "dependencies": { "@jest/types": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -30631,6 +33241,7 @@ }, "@types/istanbul-reports": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "requires": { "@types/istanbul-lib-coverage": "*", @@ -30639,6 +33250,7 @@ }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -30646,10 +33258,12 @@ }, "camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "requires": { "ansi-styles": "^4.1.0", @@ -30658,6 +33272,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -30665,14 +33280,17 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "jest-get-type": { "version": "25.2.6", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-25.2.6.tgz", "integrity": "sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==" }, "jest-validate": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-25.5.0.tgz", "integrity": "sha512-okUFKqhZIpo3jDdtUXUZ2LxGUZJIlfdYBvZb1aczzxrlyMlqdnnws9MOxezoLGhSaFc2XYaHNReNQfj5zPIWyQ==", "requires": { "@jest/types": "^25.5.0", @@ -30685,6 +33303,7 @@ }, "pretty-format": { "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "requires": { "@jest/types": "^25.5.0", @@ -30695,10 +33314,12 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -30708,6 +33329,7 @@ }, "normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { @@ -30719,14 +33341,17 @@ }, "normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, "normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -30734,10 +33359,12 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" }, "npm-packlist": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "requires": { "ignore-walk": "^3.0.1", @@ -30747,6 +33374,7 @@ }, "npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "requires": { @@ -30763,6 +33391,7 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { @@ -30771,6 +33400,7 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { @@ -30781,6 +33411,7 @@ }, "cross-spawn": { "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { @@ -30793,21 +33424,25 @@ }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { @@ -30819,6 +33454,7 @@ }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { @@ -30830,6 +33466,7 @@ }, "parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { @@ -30839,29 +33476,28 @@ }, "path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { "pify": "^3.0.0" } }, - "pidtree": { - "version": "0.3.1", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, "pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { @@ -30870,13 +33506,26 @@ "path-type": "^3.0.0" } }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { @@ -30885,16 +33534,13 @@ }, "shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { @@ -30903,6 +33549,7 @@ }, "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { @@ -30913,6 +33560,7 @@ }, "npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "requires": { "path-key": "^3.0.0" @@ -30920,6 +33568,7 @@ }, "npmlog": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", "requires": { "are-we-there-yet": "^2.0.0", @@ -30930,6 +33579,7 @@ }, "number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwsapi": { @@ -30946,10 +33596,12 @@ }, "object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-copy": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { "copy-descriptor": "^0.1.0", @@ -30959,6 +33611,7 @@ "dependencies": { "define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" @@ -30966,6 +33619,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -30973,6 +33627,7 @@ }, "is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -30980,6 +33635,7 @@ }, "is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", @@ -30989,12 +33645,14 @@ "dependencies": { "kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -31003,15 +33661,19 @@ } }, "object-inspect": { - "version": "1.11.1", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true }, "object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object-visit": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "requires": { "isobject": "^3.0.0" @@ -31019,6 +33681,7 @@ }, "object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "requires": { "call-bind": "^1.0.0", @@ -31029,6 +33692,7 @@ }, "object.entries": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { @@ -31039,6 +33703,7 @@ }, "object.fromentries": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { @@ -31049,6 +33714,7 @@ }, "object.hasown": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { @@ -31058,6 +33724,7 @@ }, "object.pick": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "^3.0.1" @@ -31065,6 +33732,7 @@ }, "object.values": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { @@ -31075,10 +33743,12 @@ }, "omit.js": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/omit.js/-/omit.js-2.0.2.tgz", "integrity": "sha512-hJmu9D+bNB40YpL9jYebQl4lsTW6yEHRTroJzNLqQJYHm7c+NQnJGfZmIWh8S3q3KoaxV1aLhV6B3+0N0/kyJg==" }, "on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "requires": { "ee-first": "1.1.1" @@ -31086,10 +33756,12 @@ }, "on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" @@ -31097,6 +33769,7 @@ }, "one-time": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "requires": { "fn.name": "1.x.x" @@ -31104,6 +33777,7 @@ }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "requires": { "mimic-fn": "^2.1.0" @@ -31111,12 +33785,14 @@ "dependencies": { "mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" } } }, "open": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "requires": { "define-lazy-prop": "^2.0.0", @@ -31126,6 +33802,7 @@ }, "opn": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "requires": { "is-wsl": "^1.1.0" @@ -31133,12 +33810,14 @@ "dependencies": { "is-wsl": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" } } }, "optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { @@ -31152,6 +33831,7 @@ }, "ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "requires": { "bl": "^4.1.0", @@ -31167,10 +33847,12 @@ }, "os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-name": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz", "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==", "requires": { "macos-release": "^2.5.0", @@ -31179,10 +33861,12 @@ }, "os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "requires": { "os-homedir": "^1.0.0", @@ -31191,6 +33875,7 @@ }, "p-all": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz", "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==", "requires": { "p-map": "^2.0.0" @@ -31198,21 +33883,25 @@ "dependencies": { "p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-cancelable": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-defer": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true }, "p-event": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "requires": { "p-timeout": "^3.1.0" @@ -31220,6 +33909,7 @@ "dependencies": { "p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" @@ -31229,6 +33919,7 @@ }, "p-every": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-every/-/p-every-2.0.0.tgz", "integrity": "sha512-MCz9DqD5opPC48Zsd+BHm56O/HfhYIQQtupfDzhXoVgQdg/Ux4F8/JcdRuQ+arq7zD5fB6zP3axbH3d9Nr8dlw==", "requires": { "p-map": "^2.0.0" @@ -31236,12 +33927,14 @@ "dependencies": { "p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-filter": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "requires": { "p-map": "^2.0.0" @@ -31249,20 +33942,24 @@ "dependencies": { "p-map": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" } } }, "p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, "p-is-promise": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" }, "p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "requires": { "yocto-queue": "^0.1.0" @@ -31270,6 +33967,7 @@ }, "p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "requires": { "p-limit": "^3.0.2" @@ -31277,6 +33975,7 @@ }, "p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "requires": { "aggregate-error": "^3.0.0" @@ -31284,19 +33983,24 @@ }, "p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==" }, "p-timeout": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz", "integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==", "dev": true }, "p-try": { - "version": "2.2.0", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "p-wait-for": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", "requires": { "p-timeout": "^3.0.0" @@ -31304,6 +34008,7 @@ "dependencies": { "p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { "p-finally": "^1.0.0" @@ -31313,6 +34018,7 @@ }, "package-json": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", "requires": { "got": "^9.6.0", @@ -31323,10 +34029,12 @@ "dependencies": { "@sindresorhus/is": { "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" }, "@szmarczak/http-timer": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", "requires": { "defer-to-connect": "^1.0.1" @@ -31334,6 +34042,7 @@ }, "cacheable-request": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", "requires": { "clone-response": "^1.0.2", @@ -31347,6 +34056,7 @@ "dependencies": { "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -31356,6 +34066,7 @@ }, "decompress-response": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { "mimic-response": "^1.0.0" @@ -31363,10 +34074,12 @@ }, "defer-to-connect": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, "get-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "requires": { "pump": "^3.0.0" @@ -31374,6 +34087,7 @@ }, "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", @@ -31391,16 +34105,19 @@ "dependencies": { "lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" } } }, "json-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" }, "keyv": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", "requires": { "json-buffer": "3.0.0" @@ -31408,14 +34125,17 @@ }, "normalize-url": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, "p-cancelable": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" }, "responselike": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", "requires": { "lowercase-keys": "^1.0.0" @@ -31423,22 +34143,26 @@ "dependencies": { "lowercase-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" } } }, "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "to-readable-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" } } }, "parallel-transform": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "requires": { "cyclist": "^1.0.1", @@ -31448,6 +34172,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -31461,6 +34186,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -31470,6 +34196,7 @@ }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { @@ -31478,6 +34205,7 @@ }, "parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "requires": { @@ -31491,14 +34219,17 @@ }, "parse-github-url": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==" }, "parse-gitignore": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-1.0.1.tgz", "integrity": "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==" }, "parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", @@ -31509,6 +34240,7 @@ }, "parse-ms": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" }, "parse5": { @@ -31519,42 +34251,52 @@ }, "parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-dirname": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "pend": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" }, "performance-now": { @@ -31565,22 +34307,33 @@ }, "picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { - "version": "2.3.0", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true }, "pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, "pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { "pinkie": "^2.0.0" @@ -31609,6 +34362,7 @@ }, "pkg-conf": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, "requires": { @@ -31618,6 +34372,7 @@ "dependencies": { "find-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { @@ -31626,6 +34381,7 @@ }, "locate-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { @@ -31635,6 +34391,7 @@ }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { @@ -31643,14 +34400,22 @@ }, "p-locate": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, "path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } @@ -31658,6 +34423,7 @@ }, "pkg-dir": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "requires": { "find-up": "^5.0.0" @@ -31671,6 +34437,7 @@ }, "plur": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "requires": { @@ -31679,6 +34446,7 @@ }, "pluralize": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, @@ -31690,10 +34458,12 @@ }, "posix-character-classes": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "requires": { "nanoid": "^3.1.30", @@ -31703,6 +34473,7 @@ }, "postcss-values-parser": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "requires": { "flatten": "^1.0.2", @@ -31711,14 +34482,15 @@ } }, "precinct": { - "version": "8.3.0", - "integrity": "sha512-+NPlVGgm+SVfQeClQQt9q4L7Aq7Lym2EhoLU8Ocs1T131hLJ0LAOMigHILSf5kVH2/rym5c80bUdBPkZ1HPKFA==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/precinct/-/precinct-8.3.1.tgz", + "integrity": "sha512-pVppfMWLp2wF68rwHqBIpPBYY8Kd12lDhk8LVQzOwqllifVR15qNFyod43YLyFpurKRZQKnE7E4pofAagDOm2Q==", "requires": { "commander": "^2.20.3", - "debug": "^4.3.1", - "detective-amd": "^3.0.1", + "debug": "^4.3.3", + "detective-amd": "^3.1.0", "detective-cjs": "^3.1.1", - "detective-es6": "^2.2.0", + "detective-es6": "^2.2.1", "detective-less": "^1.0.2", "detective-postcss": "^4.0.0", "detective-sass": "^3.0.1", @@ -31731,25 +34503,30 @@ "dependencies": { "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, "precond": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" }, "prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prepend-http": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prettier": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, @@ -31761,6 +34538,7 @@ }, "pretty-format": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "requires": { "@jest/types": "^26.6.2", @@ -31771,6 +34549,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -31778,6 +34557,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -31785,12 +34565,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "pretty-ms": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "requires": { "parse-ms": "^2.1.0" @@ -31798,6 +34580,7 @@ }, "prettyjson": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", "requires": { "colors": "1.4.0", @@ -31806,6 +34589,7 @@ }, "printj": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" }, "process-es6": { @@ -31815,25 +34599,29 @@ }, "process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, "prop-types": { - "version": "15.7.2", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "react-is": "^16.13.1" }, "dependencies": { "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true } @@ -31841,6 +34629,7 @@ }, "proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { "forwarded": "0.2.0", @@ -31859,9 +34648,9 @@ }, "dependencies": { "resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", "dev": true, "requires": { "is-core-module": "^2.8.0", @@ -31873,6 +34662,7 @@ }, "ps-list": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/ps-list/-/ps-list-7.2.0.tgz", "integrity": "sha512-v4Bl6I3f2kJfr5o80ShABNHAokIgY+wFDTQfE+X3zWYgSGQOCBeYptLZUpoOALBqO5EawmDN/tjTldJesd0ujQ==" }, "psl": { @@ -31883,6 +34673,7 @@ }, "pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", @@ -31891,10 +34682,12 @@ }, "punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", "requires": { "escape-goat": "^2.0.0" @@ -31902,6 +34695,7 @@ }, "q": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, @@ -31912,6 +34706,7 @@ }, "query-string": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "requires": { "decode-uri-component": "^0.2.0", @@ -31921,6 +34716,7 @@ }, "queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quick-format-unescaped": { @@ -31931,15 +34727,18 @@ }, "quick-lru": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true }, "random-bytes": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" @@ -31952,22 +34751,18 @@ }, "raw-body": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { "bytes": "3.1.1", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.1", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" - } } }, "rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "requires": { "deep-extend": "^0.6.0", @@ -31978,20 +34773,24 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, "react-is": { "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -32000,6 +34799,7 @@ }, "read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "requires": { "@types/normalize-package-data": "^2.4.0", @@ -32010,10 +34810,12 @@ "dependencies": { "hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", @@ -32022,18 +34824,31 @@ "validate-npm-package-license": "^3.0.1" } }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" } } }, "read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "requires": { "find-up": "^4.1.0", @@ -32043,6 +34858,7 @@ "dependencies": { "find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", @@ -32051,6 +34867,7 @@ }, "locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" @@ -32058,6 +34875,7 @@ }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" @@ -32065,19 +34883,27 @@ }, "p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" } } }, "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", @@ -32087,6 +34913,7 @@ }, "readdir-glob": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "requires": { "minimatch": "^3.0.4" @@ -32094,6 +34921,7 @@ }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" @@ -32101,6 +34929,7 @@ }, "redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { @@ -32136,6 +34965,7 @@ }, "regex-not": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { "extend-shallow": "^3.0.2", @@ -32144,6 +34974,7 @@ "dependencies": { "safe-regex": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -32153,12 +34984,14 @@ }, "regexp-tree": { "version": "0.1.24", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz", "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, "regexp.prototype.flags": { - "version": "1.3.1", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -32167,6 +35000,7 @@ }, "regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, @@ -32185,6 +35019,7 @@ }, "registry-auth-token": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "requires": { "rc": "^1.2.8" @@ -32192,6 +35027,7 @@ }, "registry-url": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", "requires": { "rc": "^1.2.8" @@ -32219,18 +35055,22 @@ }, "remove-trailing-separator": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" }, "repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "req-all": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/req-all/-/req-all-0.1.0.tgz", "integrity": "sha1-EwBR4qzligLqy/ydRIV3pzapJzo=", "dev": true }, @@ -32337,27 +35177,28 @@ }, "require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-main-filename": { - "version": "2.0.0", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, "require-package-name": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz", "integrity": "sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk=" }, "requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.20.0", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -32365,11 +35206,13 @@ }, "resolve-alpn": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true }, "resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { @@ -32378,10 +35221,12 @@ }, "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "resolve-global": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "requires": { @@ -32390,10 +35235,12 @@ }, "resolve-url": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "responselike": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "requires": { "lowercase-keys": "^2.0.0" @@ -32401,6 +35248,7 @@ }, "restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { "onetime": "^5.1.0", @@ -32409,27 +35257,31 @@ }, "ret": { "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rfdc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } }, "rollup": { - "version": "2.64.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", - "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", + "version": "2.65.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.65.0.tgz", + "integrity": "sha512-ohZVYrhtVMTqqeqH26sngfMiyGDg6gCUReOsoflXvYpzUkDHp8sVG8F9FQxjs72OfnLWpXP2nNNqQ9I0vkRovA==", "requires": { "fsevents": "~2.3.2" } @@ -32482,6 +35334,7 @@ }, "rollup-pluginutils": { "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "requires": { "estree-walker": "^0.6.1" @@ -32489,16 +35342,19 @@ "dependencies": { "estree-walker": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" } } }, "run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "requires": { "queue-microtask": "^1.2.2" @@ -32506,27 +35362,25 @@ }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "requires": { "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } } }, "safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-json-stringify": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==" }, "safe-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "requires": { @@ -32535,14 +35389,17 @@ }, "safe-stable-stringify": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz", "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==" }, "safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sax": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "saxes": { @@ -32556,11 +35413,13 @@ }, "seedrandom": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true }, "seek-bzip": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "requires": { "commander": "^2.8.1" @@ -32568,12 +35427,14 @@ "dependencies": { "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, "semver": { "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" @@ -32581,6 +35442,7 @@ }, "semver-diff": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "requires": { "semver": "^6.3.0" @@ -32588,6 +35450,7 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } @@ -32636,6 +35499,7 @@ }, "serialize-error": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "requires": { @@ -32644,6 +35508,7 @@ "dependencies": { "type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true } @@ -32651,6 +35516,7 @@ }, "serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { @@ -32670,10 +35536,12 @@ }, "set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "requires": { "extend-shallow": "^2.0.1", @@ -32684,6 +35552,7 @@ "dependencies": { "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -32691,10 +35560,12 @@ }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "requires": { "isobject": "^3.0.1" @@ -32709,6 +35580,7 @@ }, "shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { "shebang-regex": "^3.0.0" @@ -32716,16 +35588,20 @@ }, "shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", "dev": true }, "side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -32734,10 +35610,12 @@ }, "signal-exit": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-swizzle": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { "is-arrayish": "^0.3.1" @@ -32745,12 +35623,14 @@ "dependencies": { "is-arrayish": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, "sinon": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", "dev": true, "requires": { @@ -32764,6 +35644,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { @@ -32774,10 +35655,12 @@ }, "slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, "slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { @@ -32788,6 +35671,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { @@ -32796,6 +35680,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { @@ -32804,6 +35689,7 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } @@ -32811,6 +35697,7 @@ }, "snapdragon": { "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { "base": "^0.11.1", @@ -32825,6 +35712,7 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" @@ -32832,6 +35720,7 @@ }, "define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" @@ -32839,6 +35728,7 @@ }, "extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { "is-extendable": "^0.1.0" @@ -32846,6 +35736,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -32853,6 +35744,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -32862,6 +35754,7 @@ }, "is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -32869,6 +35762,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -32878,6 +35772,7 @@ }, "is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", @@ -32887,20 +35782,24 @@ }, "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "snapdragon-node": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { "define-property": "^1.0.0", @@ -32910,6 +35809,7 @@ "dependencies": { "define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { "is-descriptor": "^1.0.0" @@ -32919,6 +35819,7 @@ }, "snapdragon-util": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { "kind-of": "^3.2.0" @@ -32926,6 +35827,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -32945,6 +35847,7 @@ }, "sort-keys": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", "requires": { "is-plain-obj": "^1.0.0" @@ -32952,12 +35855,14 @@ "dependencies": { "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" } } }, "sort-keys-length": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", "requires": { "sort-keys": "^1.0.0" @@ -32965,6 +35870,7 @@ }, "sort-on": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-4.1.1.tgz", "integrity": "sha512-nj8myvTCEErLMMWnye61z1pV5osa7njoosoQNdylD8WyPYHoHCBQx/xn7mGJL6h4oThvGpYSIAxfm8VUr75qTQ==", "dev": true, "requires": { @@ -32974,6 +35880,7 @@ "dependencies": { "dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { @@ -32984,14 +35891,17 @@ }, "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-js": { - "version": "1.0.1", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-resolve": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { "atob": "^2.1.2", @@ -33003,6 +35913,7 @@ }, "source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", @@ -33011,12 +35922,14 @@ "dependencies": { "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, "source-map-url": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "sourcemap-codec": { @@ -33026,6 +35939,7 @@ }, "spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "requires": { "spdx-expression-parse": "^3.0.0", @@ -33034,10 +35948,12 @@ }, "spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "requires": { "spdx-exceptions": "^2.1.0", @@ -33046,10 +35962,12 @@ }, "spdx-license-ids": { "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==" }, "split-string": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { "extend-shallow": "^3.0.0" @@ -33057,6 +35975,7 @@ }, "split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { @@ -33065,6 +35984,7 @@ }, "sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -33087,6 +36007,7 @@ }, "stack-generator": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", "requires": { "stackframe": "^1.1.1" @@ -33094,10 +36015,12 @@ }, "stack-trace": { "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, "stack-utils": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { @@ -33106,6 +36029,7 @@ "dependencies": { "escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true } @@ -33113,10 +36037,12 @@ }, "stackframe": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" }, "static-extend": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { "define-property": "^0.2.5", @@ -33125,6 +36051,7 @@ "dependencies": { "define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { "is-descriptor": "^0.1.0" @@ -33132,6 +36059,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { "kind-of": "^3.0.2" @@ -33139,6 +36067,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -33148,6 +36077,7 @@ }, "is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { "kind-of": "^3.0.2" @@ -33155,6 +36085,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -33164,6 +36095,7 @@ }, "is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { "is-accessor-descriptor": "^0.1.6", @@ -33173,12 +36105,14 @@ }, "kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "static-server": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/static-server/-/static-server-2.2.1.tgz", "integrity": "sha512-j5eeW6higxYNmXMIT8iHjsdiViTpQDthg7o+SHsRtqdbxscdHqBHXwrXjHC8hL3F0Tsu34ApUpDkwzMBPBsrLw==", "requires": { "chalk": "^0.5.1", @@ -33190,14 +36124,17 @@ "dependencies": { "ansi-regex": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=" }, "ansi-styles": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=" }, "chalk": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "requires": { "ansi-styles": "^1.1.0", @@ -33209,14 +36146,17 @@ }, "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-ansi": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "requires": { "ansi-regex": "^0.2.0" @@ -33224,6 +36164,7 @@ }, "strip-ansi": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "requires": { "ansi-regex": "^0.2.1" @@ -33231,16 +36172,19 @@ }, "supports-color": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=" } } }, "statsd-client": { "version": "0.4.7", + "resolved": "https://registry.npmjs.org/statsd-client/-/statsd-client-0.4.7.tgz", "integrity": "sha512-+sGCE6FednJ/vI7vywErOg/mhVqmf6Zlktz7cdGRnF/cQWXD9ifMgtqU1CIIXmhSwm11SCk4zDN+bwNCvIR/Kg==" }, "statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, @@ -33261,10 +36205,12 @@ }, "strict-uri-encode": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { "safe-buffer": "~5.2.0" @@ -33272,16 +36218,19 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, "string-similarity": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" }, "string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", @@ -33291,6 +36240,7 @@ }, "string.prototype.matchall": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { @@ -33306,6 +36256,7 @@ }, "string.prototype.padend": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", "dev": true, "requires": { @@ -33316,6 +36267,7 @@ }, "string.prototype.trimend": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { @@ -33325,6 +36277,7 @@ }, "string.prototype.trimstart": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { @@ -33334,6 +36287,7 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" @@ -33341,10 +36295,18 @@ }, "strip-ansi-control-characters": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi-control-characters/-/strip-ansi-control-characters-2.0.0.tgz", "integrity": "sha512-Q0/k5orrVGeaOlIOUn1gybGU0IcAbgHQT1faLo5hik4DqClKVSaka5xOhNNoRgtfztHVxCYxi7j71mrWom0bIw==" }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-dirs": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "requires": { "is-natural-number": "^4.0.1" @@ -33352,10 +36314,12 @@ }, "strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { @@ -33364,11 +36328,13 @@ }, "strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "strip-outer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "requires": { "escape-string-regexp": "^1.0.2" @@ -33376,46 +36342,40 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "superagent": { - "version": "6.1.0", - "integrity": "sha512-OUDHEssirmplo3F+1HWKUrUjvnQuA+nZI6i/JJBdXb5eq9IyEQwPyPpqND+SSsxf6TygpBEkUjISVRN4/VOpeg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.1.tgz", + "integrity": "sha512-CQ2weSS6M+doIwwYFoMatklhRbx6sVNdB99OEJ5czcP3cng76Ljqus694knFWgOj3RkrtxZqIgpe6vhe0J7QWQ==", "dev": true, "requires": { "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", + "cookiejar": "^2.1.3", + "debug": "^4.3.3", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", + "mime": "^2.5.0", + "qs": "^6.10.1", "readable-stream": "^3.6.0", - "semver": "^7.3.2" + "semver": "^7.3.5" }, "dependencies": { - "form-data": { - "version": "3.0.1", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "qs": { - "version": "6.10.2", - "integrity": "sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -33425,6 +36385,7 @@ }, "supertap": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz", "integrity": "sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==", "dev": true, "requires": { @@ -33437,6 +36398,7 @@ "dependencies": { "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { @@ -33445,6 +36407,7 @@ }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { @@ -33455,16 +36418,18 @@ } }, "supertest": { - "version": "6.1.6", - "integrity": "sha512-0hACYGNJ8OHRg8CRITeZOdbjur7NLuNs0mBjVhdpxi7hP6t3QIbOzLON5RTUmZcy2I9riuII3+Pr2C7yztrIIg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.2.tgz", + "integrity": "sha512-wCw9WhAtKJsBvh07RaS+/By91NNE0Wh0DN19/hWPlBOU8tAfOtbZoVSV4xXeoKoxgPx0rx2y+y+8660XtE7jzg==", "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^6.1.0" + "superagent": "^7.1.0" } }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "requires": { "has-flag": "^4.0.0" @@ -33472,6 +36437,7 @@ }, "supports-hyperlinks": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "requires": { "has-flag": "^4.0.0", @@ -33480,6 +36446,7 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" @@ -33487,8 +36454,14 @@ } } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "symbol-observable": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" }, "symbol-tree": { @@ -33498,8 +36471,9 @@ "dev": true }, "table": { - "version": "6.7.5", - "integrity": "sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -33509,8 +36483,21 @@ "strip-ansi": "^6.0.1" }, "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { @@ -33519,6 +36506,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { @@ -33527,11 +36515,19 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { @@ -33544,6 +36540,7 @@ }, "tabtab": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-3.0.2.tgz", "integrity": "sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==", "requires": { "debug": "^4.0.1", @@ -33552,19 +36549,11 @@ "minimist": "^1.2.0", "mkdirp": "^0.5.1", "untildify": "^3.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - } } }, "tar": { "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "requires": { "chownr": "^2.0.0", @@ -33573,10 +36562,18 @@ "minizlib": "^2.1.1", "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==" + } } }, "tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { "bl": "^4.0.3", @@ -33588,15 +36585,18 @@ }, "temp": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=", "dev": true }, "temp-dir": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, "tempy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "requires": { "del": "^6.0.0", @@ -33608,12 +36608,14 @@ "dependencies": { "type-fest": { "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" } } }, "terminal-link": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "requires": { "ansi-escapes": "^4.2.1", @@ -33622,6 +36624,7 @@ "dependencies": { "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "requires": { "type-fest": "^0.21.3" @@ -33629,6 +36632,7 @@ }, "type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } @@ -33657,6 +36661,7 @@ }, "test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { @@ -33667,24 +36672,29 @@ }, "text-extensions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "text-hex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { @@ -33693,6 +36703,7 @@ }, "through2-filter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "requires": { "through2": "~2.0.0", @@ -33701,6 +36712,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -33714,6 +36726,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -33721,6 +36734,7 @@ }, "through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", @@ -33731,6 +36745,7 @@ }, "through2-map": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-map/-/through2-map-3.0.0.tgz", "integrity": "sha1-psMCbOY7SJipl9VAUGtm/9lw8nE=", "requires": { "through2": "~2.0.0", @@ -33739,6 +36754,7 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", @@ -33752,6 +36768,7 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -33759,6 +36776,7 @@ }, "through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { "readable-stream": "~2.3.6", @@ -33769,10 +36787,12 @@ }, "time-zone": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=" }, "timed-out": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" }, "timers-ext": { @@ -33787,6 +36807,7 @@ }, "tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { "os-tmpdir": "~1.0.2" @@ -33794,6 +36815,7 @@ }, "tmp-promise": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "requires": { "tmp": "^0.2.0" @@ -33801,6 +36823,7 @@ "dependencies": { "tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "requires": { "rimraf": "^3.0.0" @@ -33810,14 +36833,17 @@ }, "to-buffer": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, "to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-object-path": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { "kind-of": "^3.0.2" @@ -33825,6 +36851,7 @@ "dependencies": { "kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { "is-buffer": "^1.1.5" @@ -33834,10 +36861,12 @@ }, "to-readable-stream": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==" }, "to-regex": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { "define-property": "^2.0.2", @@ -33848,6 +36877,7 @@ "dependencies": { "safe-regex": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "requires": { "ret": "~0.1.10" @@ -33857,6 +36887,7 @@ }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { "is-number": "^7.0.0" @@ -33869,10 +36900,12 @@ }, "toml": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==" }, "tomlify-j0.4": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tomlify-j0.4/-/tomlify-j0.4-3.0.0.tgz", "integrity": "sha512-2Ulkc8T7mXJ2l0W476YC/A209PR38Nw8PuaCNtk9uI3t1zzFdGQeWYGQvmj2PZkVvRC/Yoi4xQKMRnWc/N29tQ==" }, "tough-cookie": { @@ -33888,25 +36921,30 @@ }, "tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "trim-off-newlines": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz", "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==", "dev": true }, "trim-repeated": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "requires": { "escape-string-regexp": "^1.0.2" @@ -33914,16 +36952,19 @@ "dependencies": { "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" } } }, "triple-beam": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "ts-node": { "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", "requires": { "@cspotcode/source-map-support": "0.7.0", @@ -33942,12 +36983,14 @@ "dependencies": { "diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" } } }, "tsconfig-paths": { "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "requires": { @@ -33959,19 +37002,20 @@ "dependencies": { "json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" } - }, - "strip-bom": { - "version": "3.0.0", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", @@ -33980,15 +37024,10 @@ }, "tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "requires": { "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } } }, "tunnel-agent": { @@ -34010,8 +37049,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/typanion/-/typanion-3.7.1.tgz", "integrity": "sha512-g2QDI/ZLpuEor9EnJ1b7s9S2QSJgNCPBw9ZCSkQdqXNjg5ZQs4mASgW/elVifSxISFwBeMaIAmMBP5luAOIKAw==", - "dev": true, - "peer": true + "dev": true }, "type": { "version": "1.2.0", @@ -34021,6 +37059,7 @@ }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { @@ -34029,15 +37068,18 @@ }, "type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", @@ -34046,14 +37088,16 @@ }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.5.4", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", + "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==" }, "uglify-js": { "version": "3.14.5", @@ -34064,6 +37108,7 @@ }, "uid-safe": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", "requires": { "random-bytes": "~1.0.0" @@ -34071,6 +37116,7 @@ }, "unbox-primitive": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { @@ -34082,6 +37128,7 @@ }, "unbzip2-stream": { "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "requires": { "buffer": "^5.2.1", @@ -34114,6 +37161,7 @@ }, "union-value": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "requires": { "arr-union": "^3.1.0", @@ -34124,16 +37172,19 @@ "dependencies": { "is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" } } }, "uniq": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "unique-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { "crypto-random-string": "^2.0.0" @@ -34141,6 +37192,7 @@ }, "unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { @@ -34149,10 +37201,12 @@ }, "universal-user-agent": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" }, "universalify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, @@ -34164,6 +37218,7 @@ }, "unixify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", "integrity": "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=", "requires": { "normalize-path": "^2.1.1" @@ -34171,6 +37226,7 @@ "dependencies": { "normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { "remove-trailing-separator": "^1.0.1" @@ -34180,10 +37236,12 @@ }, "unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, "unset-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { "has-value": "^0.3.1", @@ -34192,6 +37250,7 @@ "dependencies": { "has-value": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { "get-value": "^2.0.3", @@ -34201,6 +37260,7 @@ "dependencies": { "isobject": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "requires": { "isarray": "1.0.0" @@ -34210,16 +37270,19 @@ }, "has-values": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, "untildify": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" }, "update-notifier": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", "requires": { "boxen": "^5.0.0", @@ -34240,10 +37303,12 @@ "dependencies": { "ci-info": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" }, "is-ci": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "requires": { "ci-info": "^2.0.0" @@ -34253,6 +37318,7 @@ }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "requires": { "punycode": "^2.1.0" @@ -34260,10 +37326,12 @@ }, "urix": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "url-parse-lax": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", "requires": { "prepend-http": "^2.0.0" @@ -34271,32 +37339,39 @@ }, "url-to-options": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" }, "use": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8-to-istanbul": { - "version": "8.1.0", - "integrity": "sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.1", @@ -34306,6 +37381,7 @@ "dependencies": { "source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } @@ -34313,6 +37389,7 @@ }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { "spdx-correct": "^3.0.0", @@ -34321,6 +37398,7 @@ }, "validate-npm-package-name": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "requires": { "builtins": "^1.0.3" @@ -34334,6 +37412,7 @@ }, "vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, "verdaccio": { @@ -34425,11 +37504,28 @@ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "resolve": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.1.tgz", + "integrity": "sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ==", + "dev": true, + "requires": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } } } }, @@ -34556,6 +37652,15 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node-fetch": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", + "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -34657,14 +37762,6 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" - }, - "dependencies": { - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - } } }, "w3c-hr-time": { @@ -34685,18 +37782,11 @@ "domexception": "^1.0.1", "webidl-conversions": "^4.0.2", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - } } }, "wait-port": { "version": "0.2.9", + "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-0.2.9.tgz", "integrity": "sha512-hQ/cVKsNqGZ/UbZB/oakOGFqic00YAMM5/PEj3Bt4vKarv2jWIWzDbqlwT94qMs/exAQAsvMOq99sZblV92zxQ==", "requires": { "chalk": "^2.4.2", @@ -34706,6 +37796,7 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" @@ -34713,6 +37804,7 @@ }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", @@ -34722,18 +37814,22 @@ }, "commander": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" @@ -34743,17 +37839,21 @@ }, "wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "requires": { "defaults": "^1.0.3" } }, "webidl-conversions": { - "version": "3.0.1", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true }, "well-known-symbols": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==" }, "whatwg-encoding": { @@ -34773,14 +37873,23 @@ }, "whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + } } }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" @@ -34788,6 +37897,7 @@ }, "which-boxed-primitive": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { @@ -34798,12 +37908,9 @@ "is-symbol": "^1.0.3" } }, - "which-module": { - "version": "2.0.0", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, "wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -34811,6 +37918,7 @@ }, "widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "requires": { "string-width": "^4.0.0" @@ -34818,6 +37926,7 @@ }, "windows-release": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==", "requires": { "execa": "^4.0.2" @@ -34825,6 +37934,7 @@ "dependencies": { "execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "requires": { "cross-spawn": "^7.0.0", @@ -34840,6 +37950,7 @@ }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { "pump": "^3.0.0" @@ -34847,13 +37958,15 @@ }, "human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" } } }, "winston": { - "version": "3.3.4", - "integrity": "sha512-zWJrfmqE+2IXtVJ125vxpA2m303TjwchLhfRbcnma7c76Qd4pv80JIp37l8uGnWbCoG4X6PMz3vAQeh+vH1CtA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.4.0.tgz", + "integrity": "sha512-FqilVj+5HKwCfIHQzMxrrd5tBIH10JTS3koFGbLVWBODjiIYq7zir08rFyBT4rrTYG/eaTqDcfSIbcjSM78YSw==", "requires": { "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", @@ -34868,6 +37981,7 @@ }, "winston-transport": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.2.tgz", "integrity": "sha512-9jmhltAr5ygt5usgUTQbEiw/7RYXpyUbEAFRCSicIacpUzPkrnQsQZSPGEI12aLK9Jth4zNcYJx3Cvznwrl8pw==", "requires": { "logform": "^2.3.2", @@ -34877,6 +37991,7 @@ }, "word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { @@ -34887,6 +38002,7 @@ }, "wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", @@ -34896,6 +38012,7 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" @@ -34903,6 +38020,7 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" @@ -34910,16 +38028,19 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "requires": { "imurmurhash": "^0.1.4", @@ -34937,6 +38058,7 @@ }, "xdg-basedir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, "xml-name-validator": { @@ -34953,18 +38075,22 @@ }, "xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, @@ -34972,7 +38098,6 @@ "version": "17.3.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -34985,22 +38110,24 @@ "dependencies": { "get-caller-file": { "version": "2.0.5", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "yargs-parser": { "version": "21.0.0", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "dev": true + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==" } } }, "yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" }, "yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "requires": { "buffer-crc32": "~0.2.3", @@ -35009,14 +38136,17 @@ }, "yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" }, "yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" }, "zip-stream": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", "requires": { "archiver-utils": "^2.1.0", From b9d66bd77d66d75cb619157262abde24863f3cce Mon Sep 17 00:00:00 2001 From: Lukas Holzer Date: Fri, 21 Jan 2022 12:17:26 +0100 Subject: [PATCH 55/58] chore: fix tests --- src/commands/dev/dev.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index e3fc2a794f1..a9dd99fba90 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -266,8 +266,9 @@ const dev = async (options, command) => { let settings = {} try { settings = await detectServerSettings(devConfig, options, site.root) - } catch (detectServerSettingsError) { - error(detectServerSettingsError) + } catch (error_) { + log(NETLIFYDEVERR, error_.message) + exit(1) } command.setAnalyticsPayload({ projectType: settings.framework || 'custom', live: options.live }) From 80a45a74608baf63cb2ab4c2a314d7648bc82130 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 21 Jan 2022 14:54:17 -0800 Subject: [PATCH 56/58] chore: fix formatting --- src/commands/dev/dev.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commands/dev/dev.js b/src/commands/dev/dev.js index e6f75dd2484..868ade72453 100644 --- a/src/commands/dev/dev.js +++ b/src/commands/dev/dev.js @@ -109,12 +109,12 @@ const runCommand = (command, env = {}) => { } process.exit(1) }) - ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { - process.on(signal, () => { - commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) - process.exit() - }) + ;['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP', 'exit'].forEach((signal) => { + process.on(signal, () => { + commandProcess.kill('SIGTERM', { forceKillAfterTimeout: 500 }) + process.exit() }) + }) return commandProcess } From ae9df1fab6a54bac8f5803e1e5b50ffc07aa96ff Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 21 Jan 2022 15:41:53 -0800 Subject: [PATCH 57/58] chore: fix nested array bug in paths --- src/lib/one-graph/cli-netlify-graph.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 946b275834b..3bc768e8bc3 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -53,7 +53,7 @@ const getNetlifyGraphConfig = async ({ command, options }) => { const isNextjs = framework === 'Next.js' const detectedFunctionsPathString = getFunctionsDir({ config, options }) const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null - const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, detectedFunctionsPath] + const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, ...detectedFunctionsPath] const netlifyGraphPath = isNextjs ? [...siteRoot, 'lib', 'netlifyGraph'] : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] From b68fb549e734311a34ddc79ac2b5ac7ae6d17619 Mon Sep 17 00:00:00 2001 From: Sean Grove Date: Fri, 21 Jan 2022 16:27:05 -0800 Subject: [PATCH 58/58] chore: fix root path issue --- src/lib/one-graph/cli-netlify-graph.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/lib/one-graph/cli-netlify-graph.js b/src/lib/one-graph/cli-netlify-graph.js index 3bc768e8bc3..315a29b9d6f 100644 --- a/src/lib/one-graph/cli-netlify-graph.js +++ b/src/lib/one-graph/cli-netlify-graph.js @@ -17,6 +17,13 @@ const internalConsole = { InternalConsole.registerConsole(internalConsole) +/** + * Remove any relative path components from the given path + * @param {string[]} items Filesystem path items to filter + * @return {string[]} Filtered filesystem path items + */ +const filterRelativePathItems = (items) => items.filter((part) => part !== '') + /** * Return a full NetlifyGraph config with any defaults overridden by netlify.toml * @param {import('../base-command').BaseCommand} command @@ -44,7 +51,7 @@ const getNetlifyGraphConfig = async ({ command, options }) => { error(detectServerSettingsError) } - const siteRoot = [path.sep, ...site.root.split(path.sep).filter((part) => part !== '')] + const siteRoot = [path.sep, ...filterRelativePathItems(site.root.split(path.sep))] const tsConfig = 'tsconfig.json' const autodetectedLanguage = fs.existsSync(tsConfig) ? 'typescript' : 'javascript' @@ -53,10 +60,12 @@ const getNetlifyGraphConfig = async ({ command, options }) => { const isNextjs = framework === 'Next.js' const detectedFunctionsPathString = getFunctionsDir({ config, options }) const detectedFunctionsPath = detectedFunctionsPathString ? detectedFunctionsPathString.split(path.sep) : null - const functionsPath = isNextjs ? [...siteRoot, 'pages', 'api'] : [...siteRoot, ...detectedFunctionsPath] - const netlifyGraphPath = isNextjs - ? [...siteRoot, 'lib', 'netlifyGraph'] - : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath] + const functionsPath = filterRelativePathItems(isNextjs ? [...siteRoot, 'pages', 'api'] : [...detectedFunctionsPath]) + const netlifyGraphPath = filterRelativePathItems( + isNextjs + ? [...siteRoot, 'lib', 'netlifyGraph'] + : [...siteRoot, ...NetlifyGraph.defaultNetlifyGraphConfig.netlifyGraphPath], + ) const baseConfig = { ...NetlifyGraph.defaultNetlifyGraphConfig, ...userSpecifiedConfig } const netlifyGraphImplementationFilename = [...netlifyGraphPath, `index.${baseConfig.extension}`] const netlifyGraphTypeDefinitionsFilename = [...netlifyGraphPath, `index.d.ts`] @@ -224,7 +233,7 @@ const generateHandler = (netlifyGraphConfig, schema, operationId, handlerOptions const defaultBaseFilename = `${operationName}.${fileExtension}` const baseFilename = defaultBaseFilename - filenameArr = [...netlifyGraphConfig.functionsPath, baseFilename] + filenameArr = [path.sep, ...netlifyGraphConfig.functionsPath, baseFilename] } const absoluteFilename = path.resolve(...filenameArr)