From 7a3ba715148483cac0188450d729b91f64a31290 Mon Sep 17 00:00:00 2001 From: Jeff Yates Date: Mon, 3 Apr 2023 13:18:26 -0500 Subject: [PATCH] [fei4960.4.examples] Migrate examples (#611) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary: This migrates the various test examples from Khan/render-gateway and adds the infrastructure to run them (i.e. `babel-watch`). Issue: FEI-4960 ## Test plan: `yarn typecheck` `yarn build` `yarn build:types` `yarn --cwd packages/wonder-stuff-render-environment-jsdom example jsdom-simple` `yarn --cwd packages/wonder-stuff-render-server example simple` `yarn --cwd packages/wonder-stuff-render-server example error` `yarn --cwd packages/wonder-stuff-render-server example logging` Author: somewhatabstract Reviewers: somewhatabstract, jeresig Required Reviewers: Approved By: jeresig Checks: ✅ codecov/project, ✅ Test (macos-latest, 16.x), ✅ CodeQL, ✅ Lint, typecheck, and coverage check (ubuntu-latest, 16.x), ✅ Prime node_modules cache for primary configuration (ubuntu-latest, 16.x), ✅ gerald, ✅ Analyze (javascript), ⏭ dependabot Pull Request URL: https://github.com/Khan/wonder-stuff/pull/611 --- .changeset/flat-pumas-unite.md | 2 + .codecov.yml | 5 +- config/jest/test.config.js | 2 + package.json | 1 + packages/wonder-stuff-core/tsconfig.json | 4 +- packages/wonder-stuff-i18n/tsconfig.json | 4 +- .../examples/README.md | 10 +++ .../examples/jsdom-simple/render.ts | 10 +++ .../examples/jsdom-simple/run.ts | 50 +++++++++++ .../package.json | 1 + .../tsconfig.json | 4 +- .../examples/README.md | 10 +++ .../examples/error/run.ts | 29 +++++++ .../examples/logging/run.ts | 51 ++++++++++++ .../examples/simple/run.ts | 33 ++++++++ .../wonder-stuff-render-server/package.json | 1 + .../wonder-stuff-render-server/tsconfig.json | 2 +- yarn.lock | 83 +++++++++++++++++-- 18 files changed, 286 insertions(+), 16 deletions(-) create mode 100644 .changeset/flat-pumas-unite.md create mode 100644 packages/wonder-stuff-render-environment-jsdom/examples/README.md create mode 100644 packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/render.ts create mode 100644 packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/run.ts create mode 100644 packages/wonder-stuff-render-server/examples/README.md create mode 100644 packages/wonder-stuff-render-server/examples/error/run.ts create mode 100644 packages/wonder-stuff-render-server/examples/logging/run.ts create mode 100644 packages/wonder-stuff-render-server/examples/simple/run.ts diff --git a/.changeset/flat-pumas-unite.md b/.changeset/flat-pumas-unite.md new file mode 100644 index 00000000..a845151c --- /dev/null +++ b/.changeset/flat-pumas-unite.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/.codecov.yml b/.codecov.yml index e53eddd0..b461e4bc 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -22,5 +22,6 @@ ignore: - "build-settings/*.js" - "utils/*.js" - "packages/**/dist/index.js" - - "packages/**/types.js" - - "packages/**/*.flowtest.js " + - "packages/**/types/**/*.ts" + - "packages/**/examples/**/*.ts" + - "packages/**/*.flowtest.js" diff --git a/config/jest/test.config.js b/config/jest/test.config.js index 99dec16e..67324347 100644 --- a/config/jest/test.config.js +++ b/config/jest/test.config.js @@ -32,6 +32,8 @@ module.exports = { "!packages/**/node_modules/", "!packages/**/.babelrc.js", "!packages/eslint-config-khan/**", + "!packages/**/examples/**/*.ts", + "!packages/**/types/**/*.ts", ], // Only output log messages on test failure. From: // https://github.com/facebook/jest/issues/4156#issuecomment-490764080 diff --git a/package.json b/package.json index 57e6107d..644c8d49 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "@typescript-eslint/eslint-plugin": "^5.57.0", "@typescript-eslint/parser": "^5.57.0", "babel-jest": "29.5.0", + "babel-watch": "^7.7.2", "eslint": "^8.37.0", "eslint-config-prettier": "^8.8.0", "eslint-import-resolver-typescript": "^3.5.4", diff --git a/packages/wonder-stuff-core/tsconfig.json b/packages/wonder-stuff-core/tsconfig.json index 35cad7f7..9f1ca95e 100644 --- a/packages/wonder-stuff-core/tsconfig.json +++ b/packages/wonder-stuff-core/tsconfig.json @@ -4,5 +4,7 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", - } + }, + "references": [ + ] } diff --git a/packages/wonder-stuff-i18n/tsconfig.json b/packages/wonder-stuff-i18n/tsconfig.json index 35cad7f7..9f1ca95e 100644 --- a/packages/wonder-stuff-i18n/tsconfig.json +++ b/packages/wonder-stuff-i18n/tsconfig.json @@ -4,5 +4,7 @@ "compilerOptions": { "outDir": "dist", "rootDir": "src", - } + }, + "references": [ + ] } diff --git a/packages/wonder-stuff-render-environment-jsdom/examples/README.md b/packages/wonder-stuff-render-environment-jsdom/examples/README.md new file mode 100644 index 00000000..318dd607 --- /dev/null +++ b/packages/wonder-stuff-render-environment-jsdom/examples/README.md @@ -0,0 +1,10 @@ +# Examples + +Each folder in this location must contain a file named `run.ts` that is +responsible for executing the given example. To execute an example, you can +run the following command from the root folder, where `` is the name +of the example folder. + +```shell +yarn example +``` diff --git a/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/render.ts b/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/render.ts new file mode 100644 index 00000000..43100eb1 --- /dev/null +++ b/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/render.ts @@ -0,0 +1,10 @@ +// @ts-expect-error This is what we want and I don't get why TS doesn't like it +window["__jsdom_env_register"](() => { + // This is where we can return our result. + return Promise.resolve({ + // @ts-expect-error We know that this does exist off window. + body: `You asked us to render ${window._API.url}`, + status: 200, + headers: {}, + }); +}); diff --git a/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/run.ts b/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/run.ts new file mode 100644 index 00000000..5d2fdbda --- /dev/null +++ b/packages/wonder-stuff-render-environment-jsdom/examples/jsdom-simple/run.ts @@ -0,0 +1,50 @@ +/** + * This is a simple JSDOM-based server. + */ + +/** + * NOTE: We import everything from index.js to ensure we're testing the public + * interface of our package. + */ +import type vm from "vm"; +import {runServer} from "@khanacademy/wonder-stuff-render-server"; +import type { + RenderAPI, + ICloseable, +} from "@khanacademy/wonder-stuff-render-server"; +import * as JSDOM from "../../src/index"; + +async function main() { + const config = new JSDOM.Configuration( + () => Promise.resolve(["http://localhost:8080/render.ts"]), + (url: string, renderAPI: RenderAPI) => + new JSDOM.FileResourceLoader(__dirname), + ( + url: string, + fileURLs: ReadonlyArray, + renderAPI: RenderAPI, + vmContext: vm.Context, + ): Promise => { + vmContext._renderAPI = renderAPI; + vmContext._API = { + url, + renderAPI, + fileURLs, + }; + return Promise.resolve(null); + }, + ); + const renderEnvironment = new JSDOM.Environment(config); + + runServer({ + name: "DEV_LOCAL", + port: 8080, + host: "127.0.0.1", + renderEnvironment, + }); +} + +main().catch((err) => { + // eslint-disable-next-line no-console + console.error(`Error caught from main setup: ${err}`); +}); diff --git a/packages/wonder-stuff-render-environment-jsdom/package.json b/packages/wonder-stuff-render-environment-jsdom/package.json index adc9addd..2f3b3022 100644 --- a/packages/wonder-stuff-render-environment-jsdom/package.json +++ b/packages/wonder-stuff-render-environment-jsdom/package.json @@ -12,6 +12,7 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { + "example": "bash -c 'RUNNER=\"./examples/$0/run.ts\"; KA_LOG_LEVEL=silly NODE_ENV=development babel-watch --config-file ../../babel.config.js \"$RUNNER\" --extensions .ts'", "test": "bash -c 'yarn --silent --cwd \"../..\" test ${@:0} $($([[ ${@: -1} = -* ]] || [[ ${@: -1} = bash ]]) && echo $PWD)'" }, "dependencies": { diff --git a/packages/wonder-stuff-render-environment-jsdom/tsconfig.json b/packages/wonder-stuff-render-environment-jsdom/tsconfig.json index 39a3a35a..0098d98c 100644 --- a/packages/wonder-stuff-render-environment-jsdom/tsconfig.json +++ b/packages/wonder-stuff-render-environment-jsdom/tsconfig.json @@ -1,6 +1,6 @@ { "exclude": [ - "dist" + "dist", "examples" ], "extends": "../tsconfig-shared.json", "compilerOptions": { @@ -10,6 +10,6 @@ "references": [ {"path": "../wonder-stuff-core"}, {"path": "../wonder-stuff-server"}, - {"path": "../wonder-stuff-render-server"}, + {"path": "../wonder-stuff-render-server"} ] } \ No newline at end of file diff --git a/packages/wonder-stuff-render-server/examples/README.md b/packages/wonder-stuff-render-server/examples/README.md new file mode 100644 index 00000000..318dd607 --- /dev/null +++ b/packages/wonder-stuff-render-server/examples/README.md @@ -0,0 +1,10 @@ +# Examples + +Each folder in this location must contain a file named `run.ts` that is +responsible for executing the given example. To execute an example, you can +run the following command from the root folder, where `` is the name +of the example folder. + +```shell +yarn example +``` diff --git a/packages/wonder-stuff-render-server/examples/error/run.ts b/packages/wonder-stuff-render-server/examples/error/run.ts new file mode 100644 index 00000000..acf6c439 --- /dev/null +++ b/packages/wonder-stuff-render-server/examples/error/run.ts @@ -0,0 +1,29 @@ +/** + * This is a simple local server for testing what happens if rendering errors. + */ + +/** + * NOTE: We import everything from index.js to ensure we're testing the public + * interface of this package. + */ +import {runServer} from "../../src/index"; +import type {RenderAPI, RenderResult} from "../../src/index"; + +async function main() { + const renderEnvironment = { + render: (url: string, renderAPI: RenderAPI): Promise => + Promise.reject(new Error(`OH NO! We couldn't render ${url}`)), + }; + + runServer({ + name: "DEV_LOCAL", + port: 8080, + host: "127.0.0.1", + renderEnvironment, + }); +} + +main().catch((err) => { + // eslint-disable-next-line no-console + console.error(`Error caught from main setup: ${err}`); +}); diff --git a/packages/wonder-stuff-render-server/examples/logging/run.ts b/packages/wonder-stuff-render-server/examples/logging/run.ts new file mode 100644 index 00000000..72e35e06 --- /dev/null +++ b/packages/wonder-stuff-render-server/examples/logging/run.ts @@ -0,0 +1,51 @@ +/** + * This is a simple local server for testing that logging works in a request + * context. + */ + +/** + * NOTE: We import everything from index.js to ensure we're testing the public + * interface of this package. + */ +import {runServer} from "../../src/index"; +import type {RenderAPI, RenderResult} from "../../src/index"; + +async function main() { + const renderEnvironment = { + render: (url: string, renderAPI: RenderAPI): Promise => { + const traceSession = renderAPI.trace( + "LOGGING", + "Testing logging things", + ); + try { + renderAPI.logger.silly("A silly log", {with: "metadata"}); + renderAPI.logger.debug("A debug log", {with: "metadata"}); + renderAPI.logger.info("An info log", {with: "metadata"}); + renderAPI.logger.warn("A warning", {with: "metadata"}); + renderAPI.logger.error("An error", {with: "metadata"}); + + return Promise.resolve({ + body: `You asked us to render ${url}`, + status: 200, + headers: {}, + }); + } finally { + traceSession.end({ + with: "metadata", + }); + } + }, + }; + + runServer({ + name: "DEV_LOCAL", + port: 8080, + host: "127.0.0.1", + renderEnvironment, + }); +} + +main().catch((err) => { + // eslint-disable-next-line no-console + console.error(`Error caught from main setup: ${err}`); +}); diff --git a/packages/wonder-stuff-render-server/examples/simple/run.ts b/packages/wonder-stuff-render-server/examples/simple/run.ts new file mode 100644 index 00000000..48c8d815 --- /dev/null +++ b/packages/wonder-stuff-render-server/examples/simple/run.ts @@ -0,0 +1,33 @@ +/** + * This is a simple local server for testing this code works. + */ + +/** + * NOTE: We import everything from index.js to ensure we're testing the public + * interface of this package. + */ +import {runServer} from "../../src/index"; +import type {RenderAPI, RenderResult} from "../../src/index"; + +async function main() { + const renderEnvironment = { + render: (url: string, renderAPI: RenderAPI): Promise => + Promise.resolve({ + body: `You asked us to render ${url}`, + status: 200, + headers: {}, + }), + }; + + runServer({ + name: "DEV_LOCAL", + port: 8080, + host: "127.0.0.1", + renderEnvironment, + }); +} + +main().catch((err) => { + // eslint-disable-next-line no-console + console.error(`Error caught from main setup: ${err}`); +}); diff --git a/packages/wonder-stuff-render-server/package.json b/packages/wonder-stuff-render-server/package.json index 422e02a2..653ad434 100644 --- a/packages/wonder-stuff-render-server/package.json +++ b/packages/wonder-stuff-render-server/package.json @@ -12,6 +12,7 @@ "main": "dist/index.js", "types": "dist/index.d.ts", "scripts": { + "example": "bash -c 'RUNNER=\"./examples/$0/run.ts\"; KA_LOG_LEVEL=silly NODE_ENV=development babel-watch --config-file ../../babel.config.js \"$RUNNER\" --extensions .ts'", "test": "bash -c 'yarn --silent --cwd \"../..\" test ${@:0} $($([[ ${@: -1} = -* ]] || [[ ${@: -1} = bash ]]) && echo $PWD)'" }, "dependencies": { diff --git a/packages/wonder-stuff-render-server/tsconfig.json b/packages/wonder-stuff-render-server/tsconfig.json index d269bb7c..e87b2ef0 100644 --- a/packages/wonder-stuff-render-server/tsconfig.json +++ b/packages/wonder-stuff-render-server/tsconfig.json @@ -1,6 +1,6 @@ { "exclude": [ - "dist" + "dist", "examples" ], "extends": "../tsconfig-shared.json", "compilerOptions": { diff --git a/yarn.lock b/yarn.lock index 91bde5d9..0a45faf3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2599,7 +2599,7 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -anymatch@^3.0.3: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2853,6 +2853,22 @@ babel-preset-jest@^29.5.0: babel-plugin-jest-hoist "^29.5.0" babel-preset-current-node-syntax "^1.0.0" +babel-watch@^7.7.2: + version "7.7.2" + resolved "https://registry.yarnpkg.com/babel-watch/-/babel-watch-7.7.2.tgz#9e4ff39f03dc344b0b9b462ba899c91e95ff0e56" + integrity sha512-KjC/VHLzAeg9CCSzjGXJvI6hxrQFBMk8H3l78TgN7jgLDmK7jXt2HvyvDLfQCb+KNCvY/Cuv6ia0TtgcqtpcqQ== + dependencies: + chalk "^4.1.0" + chokidar "^3.4.3" + commander "^6.2.0" + debug "^4.3.1" + lodash.debounce "^4.0.8" + lodash.isregexp "^4.0.1" + lodash.isstring "^4.0.1" + signal-exit "^3.0.7" + source-map-support "^0.5.19" + string-argv "^0.3.1" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -2875,6 +2891,11 @@ bignumber.js@^9.0.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + bindings@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -2934,7 +2955,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3120,6 +3141,21 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chokidar@^3.4.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -3262,7 +3298,7 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.1.0: +commander@^6.1.0, commander@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== @@ -3420,7 +3456,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -4618,7 +4654,7 @@ get-tsconfig@^4.5.0: resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.5.0.tgz#6d52d1c7b299bd3ee9cd7638561653399ac77b0f" integrity sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ== -glob-parent@^5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5132,6 +5168,13 @@ is-bigint@^1.0.1: dependencies: has-bigints "^1.0.1" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" @@ -5193,7 +5236,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -6084,6 +6127,16 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +lodash.isregexp@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isregexp/-/lodash.isregexp-4.0.1.tgz#e13e647b30cd559752a04cd912086faf7da1c30b" + integrity sha512-rw9+95tYcUa9nQ1FgdtKvO+hReLGNqnNMHfLq8SwK5Mo6D0R0tIsnRHGHaTHSKeYBaLCJ1JvXWdz4UmpPZ2bag== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.mapvalues@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -6625,7 +6678,7 @@ normalize-package-data@^5.0.0: semver "^7.3.5" validate-npm-package-license "^3.0.4" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -7063,7 +7116,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -7444,6 +7497,13 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -7904,7 +7964,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@^0.5.21, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -8030,6 +8090,11 @@ stream-transform@^2.1.3: dependencies: mixme "^0.5.1" +string-argv@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"