@samitouri / QOS-React / commits / 3aa6196e30

Starting point for a new, parallel test runner to replace our hacked Jest snapshotting

Starting point for a new, parallel test runner to replace our hacked Jest snapshotting As demo'd on our sync. This is meant as a replacement for `yarn test` just for fixtures. On my machine, a test run from a steady state of Jest watch mode takes 6 seconds. With this script, it takes ~800ms. Workflow: make edits in `packages/snap/`, then `yarn build` in that directory to build the test runner. To run tests, `node packages/snap/dist/runner.js` from the main forget/ directory to run tests. Pass `--watch` for watch mode, `--update` to update snapshots. Note that this _only_ updates .expect.md files, it does not update Jest's `__snapshots__` directory (this is intentional, our use of Jest snapshots is a hack that this script is meant to replace). When running in watch mode, ctrl-c or q will quit, 'u' will update snapshots, and any other key will re-run tests. Tests will re-run on changes to the source code (after an incremental TS rebuild) and on changes to the fixtures. Main things that are missing: * Don't run tests if TS compilation had errors (the errors should be logged to console already, but we need to wire that up so that we abort tests if there are errors) * Actually delete stale files in update mode (there is some commented-out code to double-check and then uncomment) * Improve diff view: just print the diffed segments, not the whole file diff. See the API at https://github.com/facebook/jest/tree/main/packages/jest-diff (right now we're using `diff()` but should probably use one of the lower-level functions) * Properly parse/validate args with `yargs`, add a help option, etc * In watch mode, when tests finish print a list of commands so users know what they can do (like Jest does) * Support skipping tests and selecting a single test to focus. Suggestions: * Name files with `skip.` to skip * Allow passing a test name to the script to run only tests matching that pattern, eg `node runner.js -p <pattern>` * In watch mode, support typing 'p' to prompt the user for a pattern. After that, support typing 'a' to clear the pattern and run all tests.

Joe Savona committed Apr 19, 2023 at 14:07 UTC 3aa6196e306363ad962ac5a9014e366f99e7fa35
11 files changed +1497 -6
compiler/forget/packages/snap/package.json new
+39
@@ -0,0 +1,39 @@
1 +{
2 + "name": "snap",
3 + "version": "0.0.1",
4 + "public": false,
5 + "description": "Snapshot testing CLI tool",
6 + "main": "dist/index.js",
7 + "license": "MIT",
8 + "files": [
9 + "src"
10 + ],
11 + "scripts": {
12 + "build": "rimraf dist && tsc",
13 + "test": "tsc && jest",
14 + "lint": "yarn eslint src"
15 + },
16 + "repository": {
17 + "type": "git",
18 + "url": "git+https://github.com/facebook/react-forget.git"
19 + },
20 + "dependencies": {
21 + "@parcel/watcher": "^2.1.0",
22 + "chalk": "4",
23 + "readline": "^1.3.0",
24 + "typescript": "^4.8.3",
25 + "yargs": "^17.7.1"
26 + },
27 + "devDependencies": {
28 + "@types/node": "^18.7.18",
29 + "@typescript-eslint/eslint-plugin": "^5.51.0",
30 + "@typescript-eslint/parser": "^5.51.0",
31 + "rimraf": "^3.0.2"
32 + },
33 + "resolutions": {
34 + "./**/@babel/parser": "7.7.4",
35 + "./**/@babel/types": "7.7.4",
36 + "@babel/core": "7.2.0",
37 + "@babel/traverse": "7.1.6"
38 + }
39 +}
compiler/forget/packages/snap/src/compiler-worker.ts new
+168
@@ -0,0 +1,168 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import fs from "fs/promises";
9 +import path from "path";
10 +import { exists } from "./utils";
11 +
12 +let version: number | null = null;
13 +export function clearRequireCache() {
14 + Object.keys(require.cache).forEach(function (key) {
15 + delete require.cache[key];
16 + });
17 +}
18 +
19 +export type TestResult = {
20 + inputPath: string;
21 + outputPath: string;
22 + actual: string | null; // null == input did not exist
23 + expected: string | null; // null == output did not exist
24 +};
25 +
26 +export async function compile(
27 + compilerPath: string,
28 + fixturesDir: string,
29 + fixture: string,
30 + compilerVersion: number
31 +): Promise<TestResult> {
32 + if (version !== null && compilerVersion !== version) {
33 + clearRequireCache();
34 + }
35 + version = compilerVersion;
36 + const inputPath = path.join(fixturesDir, `${fixture}.js`);
37 + const input = (await exists(inputPath))
38 + ? await fs.readFile(inputPath, "utf8")
39 + : null;
40 + const outputPath = path.join(fixturesDir, `${fixture}.expect.md`);
41 + const expected = (await exists(outputPath))
42 + ? await fs.readFile(outputPath, "utf8")
43 + : null;
44 +
45 + // Input will be null if the input file did not exist, in which case the output file
46 + // is stale
47 + if (input === null) {
48 + return {
49 + inputPath,
50 + outputPath,
51 + actual: null,
52 + expected,
53 + };
54 + }
55 +
56 + let code: string | null = null;
57 + let error: Error | null = null;
58 + try {
59 + // NOTE: we intentionally require lazily here so that we can clear the require cache
60 + // and load fresh versions of the compiler when `compilerVersion` changes.
61 + const { runReactForgetBabelPlugin } = require(compilerPath);
62 +
63 + // Extract the first line to quickly check for custom test directives
64 + const firstLine = input.substring(0, input.indexOf("\n"));
65 +
66 + let enableOnlyOnUseForgetDirective = false;
67 + if (firstLine.indexOf("@forgetDirective") !== -1) {
68 + enableOnlyOnUseForgetDirective = true;
69 + }
70 +
71 + let gating = null;
72 + if (firstLine.indexOf("@gating") !== -1) {
73 + gating = {
74 + source: "ReactForgetFeatureFlag",
75 + importSpecifierName: "isForgetEnabled_Fixtures",
76 + };
77 + }
78 +
79 + const language = parseLanguage(firstLine);
80 +
81 + code = runReactForgetBabelPlugin(input, fixture, language, {
82 + enableOnlyOnUseForgetDirective,
83 + environment: {
84 + customHooks: new Map([
85 + [
86 + "useFreeze",
87 + {
88 + name: "useFreeze",
89 + kind: "Custom",
90 + valueKind: "frozen",
91 + effectKind: "freeze",
92 + },
93 + ],
94 + ]),
95 + inlineUseMemo: true,
96 + },
97 + logger: null,
98 + gating,
99 + }).code;
100 + } catch (e) {
101 + error = e;
102 + }
103 +
104 + let output: string;
105 + const expectError = fixture.startsWith("error.");
106 + if (expectError) {
107 + if (error === null) {
108 + console.log(code);
109 + throw new Error(
110 + `Expected an error to be thrown for fixture: '${fixture}', remove the 'error.' prefix if an error is not expected.`
111 + );
112 + } else {
113 + output = formatErrorOutput(error);
114 + }
115 + } else {
116 + if (error !== null) {
117 + error.message = `Expected fixture '${fixture}' to succeed but it failed with error:\n\n${error.message}`;
118 + throw error;
119 + }
120 + if (code == null || code.length === 0) {
121 + throw new Error(`Expected output for fixture '${fixture}'.`);
122 + }
123 + output = formatOutput(code);
124 + }
125 +
126 + // leading newline intentional
127 + const actual = `
128 +## Input
129 +
130 +${wrapWithTripleBackticks(input, "javascript")}
131 +
132 +${output}
133 + `; // trailing newline + space internional
134 +
135 + return { inputPath, outputPath, actual, expected };
136 +}
137 +
138 +function formatErrorOutput(error: Error): string {
139 + error.message = error.message.replace(/^\/.*?:\s/, "");
140 + return `
141 +## Error
142 +
143 +${wrapWithTripleBackticks(error.message)}
144 + `;
145 +}
146 +
147 +function formatOutput(code: string): string {
148 + return `
149 +## Code
150 +
151 +${wrapWithTripleBackticks(code, "javascript")}
152 + `.trim();
153 +}
154 +
155 +function wrapWithTripleBackticks(s: string, ext: string | null = null): string {
156 + return `\`\`\`${ext ?? ""}
157 +${s}
158 +\`\`\``;
159 +}
160 +
161 +const FlowPragmas = [/\/\/\s@flow$/gm, /\*\s@flow$/gm];
162 +function parseLanguage(source: string): "flow" | "typescript" {
163 + let useFlow = false;
164 + for (const flowPragma of FlowPragmas) {
165 + useFlow ||= !!source.match(flowPragma);
166 + }
167 + return useFlow ? "flow" : "typescript";
168 +}
compiler/forget/packages/snap/src/runner.ts new
+353
@@ -0,0 +1,353 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import watcher from "@parcel/watcher";
9 +import chalk from "chalk";
10 +import fs from "fs/promises";
11 +import { diff } from "jest-diff";
12 +import { Worker } from "jest-worker";
13 +import path from "path";
14 +import process from "process";
15 +import * as readline from "readline";
16 +import ts from "typescript";
17 +import { hideBin } from "yargs/helpers";
18 +import yargs from "yargs/yargs";
19 +import { TestResult } from "./compiler-worker";
20 +import * as compiler from "./compiler-worker.js";
21 +
22 +readline.emitKeypressEvents(process.stdin);
23 +
24 +if (process.stdin.isTTY) {
25 + process.stdin.setRawMode(true);
26 +}
27 +
28 +const argv: {
29 + sync?: boolean;
30 + disableWorkerThreads?: boolean;
31 + watch?: boolean;
32 + update?: boolean;
33 +} = yargs(hideBin(process.argv)).argv as any;
34 +
35 +// Parallel by default
36 +const PARALLEL = !argv.sync;
37 +
38 +// Enable worker threads by default
39 +const ENABLE_WORKER_THREADS = !argv.disableWorkerThreads;
40 +
41 +// Single-run by default, opt-in to watch mode
42 +const WATCH = !!argv.watch;
43 +
44 +// Test mode by default, opt-in to update
45 +// NOTE: update mode only affects the first run, subsequent runs (in watch mode)
46 +// require typing `u` to update
47 +const UPDATE = !!argv.update;
48 +
49 +const WORKER_PATH = require.resolve("./compiler-worker.js");
50 +const COMPILER_PATH = path.join(
51 + process.cwd(),
52 + "dist",
53 + "Babel",
54 + "RunReactForgetBabelPlugin.js"
55 +);
56 +const FIXTURES_PATH = path.join(
57 + process.cwd(),
58 + "src",
59 + "__tests__",
60 + "fixtures",
61 + "compiler"
62 +);
63 +
64 +const worker: Worker & typeof compiler = new Worker(WORKER_PATH, {
65 + enableWorkerThreads: ENABLE_WORKER_THREADS,
66 +}) as any;
67 +worker.getStderr().pipe(process.stderr);
68 +worker.getStdout().pipe(process.stdout);
69 +
70 +type Results = Map<string, TestResult>;
71 +
72 +/**
73 + * Do a test run and return the test results
74 + */
75 +async function run(compilerVersion: number): Promise<Results> {
76 + // We could in theory be fancy about tracking the contents of the fixtures
77 + // directory via our file subscription, but it's simpler to just re-read
78 + // the directory each time.
79 + const files = await fs.readdir(FIXTURES_PATH);
80 + const fixtures = Array.from(
81 + new Set(
82 + files.map((file) => {
83 + return path.basename(path.basename(file, ".js"), ".expect.md");
84 + })
85 + )
86 + ).sort();
87 +
88 + // Note: promise.all to ensure parallelism when enabled
89 + const entries: Array<[string, TestResult]> = await Promise.all(
90 + fixtures.map(async (fixture) => {
91 + let output: TestResult;
92 + if (PARALLEL) {
93 + output = await worker.compile(
94 + COMPILER_PATH,
95 + FIXTURES_PATH,
96 + fixture,
97 + compilerVersion
98 + );
99 + } else {
100 + output = await compiler.compile(
101 + COMPILER_PATH,
102 + FIXTURES_PATH,
103 + fixture,
104 + compilerVersion
105 + );
106 + }
107 + return [fixture, output];
108 + })
109 + );
110 +
111 + return new Map(entries);
112 +}
113 +
114 +/**
115 + * Report test results to the user
116 + */
117 +function report(results: Results): void {
118 + const failures: Array<[string, TestResult]> = [];
119 + for (const [basename, result] of results) {
120 + if (result.actual === result.expected) {
121 + console.log(
122 + chalk.green.inverse.bold(" PASS ") + " " + chalk.dim(basename)
123 + );
124 + } else {
125 + console.log(chalk.red.inverse.bold(" FAIL ") + " " + chalk.dim(basename));
126 + failures.push([basename, result]);
127 + }
128 + }
129 +
130 + if (failures.length !== 0) {
131 + console.log("\n" + chalk.red.bold("Failures:") + "\n");
132 +
133 + for (const [basename, result] of failures) {
134 + console.log(chalk.red.bold("FAIL:") + " " + basename);
135 + console.log(diff(result.actual, result.expected) + "\n");
136 + }
137 + }
138 +
139 + console.log(
140 + `${results.size} Tests, ${results.size - failures.length} Passed, ${
141 + failures.length
142 + } Failed`
143 + );
144 +}
145 +
146 +/**
147 + * Update the fixtures directory given the compilation results
148 + */
149 +async function update(results: Results): Promise<void> {
150 + let deleted = 0;
151 + let updated = 0;
152 + let created = 0;
153 + for (const [basename, result] of results) {
154 + if (result.actual == null) {
155 + // Input was deleted but the expect file still existed, remove it
156 + console.log(
157 + chalk.red.inverse.bold(" REMOVE ") + " " + chalk.dim(basename)
158 + );
159 + // await fs.unlink(result.inputPath);
160 + // await fs.unlink(result.outputPath);
161 + console.log(" remove " + result.inputPath);
162 + console.log(" remove " + result.outputPath);
163 + deleted++;
164 + } else if (result.actual !== result.expected) {
165 + // Expected output has changed
166 + console.log(
167 + chalk.blue.inverse.bold(" UPDATE ") + " " + chalk.dim(basename)
168 + );
169 + await fs.writeFile(result.outputPath, result.actual, "utf8");
170 + if (result.expected == null) {
171 + created++;
172 + } else {
173 + updated++;
174 + }
175 + } else {
176 + // Expected output is current
177 + console.log(
178 + chalk.green.inverse.bold(" OKAY ") + " " + chalk.dim(basename)
179 + );
180 + }
181 + }
182 + console.log(`${deleted} Deleted, ${created} Created, ${updated} Updated`);
183 +}
184 +
185 +function watchSrc(
186 + onStart: () => void,
187 + onComplete: () => void
188 +): ts.WatchOfConfigFile<ts.SemanticDiagnosticsBuilderProgram> {
189 + const configPath = ts.findConfigFile(
190 + /*searchPath*/ "./",
191 + ts.sys.fileExists,
192 + "tsconfig.json"
193 + );
194 + if (!configPath) {
195 + throw new Error("Could not find a valid 'tsconfig.json'.");
196 + }
197 + const createProgram = ts.createSemanticDiagnosticsBuilderProgram;
198 + const host = ts.createWatchCompilerHost(
199 + configPath,
200 + {},
201 + ts.sys,
202 + createProgram,
203 + reportDiagnostic,
204 + reportWatchStatusChanged
205 + );
206 +
207 + const origCreateProgram = host.createProgram;
208 + host.createProgram = (rootNames, options, host, oldProgram) => {
209 + onStart();
210 + return origCreateProgram(rootNames, options, host, oldProgram);
211 + };
212 + const origPostProgramCreate = host.afterProgramCreate;
213 + host.afterProgramCreate = (program) => {
214 + origPostProgramCreate!(program);
215 + onComplete();
216 + };
217 +
218 + // `createWatchProgram` creates an initial program, watches files, and updates
219 + // the program over time.
220 + return ts.createWatchProgram(host);
221 +}
222 +
223 +const formatHost = {
224 + getCanonicalFileName: (path: string) => path,
225 + getCurrentDirectory: ts.sys.getCurrentDirectory,
226 + getNewLine: () => ts.sys.newLine,
227 +};
228 +
229 +// Gets called if TS reported any errors with the source.
230 +// TODO: wire this up, if there are errors we should just report them and
231 +// probably not run tests.
232 +function reportDiagnostic(diagnostic: ts.Diagnostic): void {
233 + console.error(
234 + "Error",
235 + diagnostic.code,
236 + ":",
237 + ts.flattenDiagnosticMessageText(
238 + diagnostic.messageText,
239 + formatHost.getNewLine()
240 + )
241 + );
242 +}
243 +
244 +/**
245 + * Prints a diagnostic every time the watch status changes.
246 + * This is mainly for messages like "Starting compilation" or "Compilation completed".
247 + */
248 +function reportWatchStatusChanged(diagnostic: ts.Diagnostic): void {
249 + // console.info(ts.formatDiagnostic(diagnostic, formatHost));
250 +}
251 +
252 +enum Mode {
253 + Test = "Test",
254 + Update = "Update",
255 +}
256 +
257 +/**
258 + * Runs the compiler in watch or single-execution mode
259 + */
260 +async function main(): Promise<void> {
261 + // Monotonically increasing integer to describe the 'version' of the compiler.
262 + // This is passed to `compile()` (from compiler-worker) when compiling, so
263 + // that the worker knows when it has to reset its module cache and when its
264 + // safe to use a cached compiler version
265 + let compilerVersion = 0;
266 +
267 + if (WATCH) {
268 + function onStart() {
269 + // Notify the user when compilation starts but don't clear the screen yet
270 + console.log("Compiling...");
271 + }
272 +
273 + // Callback to re-run tests after some change
274 + async function onChange({ mode }: { mode: Mode }) {
275 + const start = performance.now();
276 + console.clear();
277 + console.log("Running tests...");
278 + const results = await run(compilerVersion);
279 + console.clear();
280 + if (mode === Mode.Update) {
281 + update(results);
282 + } else {
283 + report(results);
284 + }
285 + const end = performance.now();
286 + console.log(`Completed in ${end - start} ms`);
287 + }
288 +
289 + // Run TS in incremental watch mode
290 + const _tsWatch = watchSrc(onStart, () => {
291 + // Bump the compiler version after a build finishes
292 + // and re-run tests
293 + compilerVersion++;
294 + onChange({ mode: Mode.Test });
295 + });
296 +
297 + // Watch the fixtures directory for changes
298 + // TODO: ignore changes that occurred as a result of our explicitly updating
299 + // fixtures in update() - maybe keep a timestamp of last known changes, and
300 + // ignore events that occurred prior to that timestamp.
301 + const _fileSubscription = watcher.subscribe(
302 + FIXTURES_PATH,
303 + async (err, _events) => {
304 + if (err) {
305 + console.error(err);
306 + process.exit(1);
307 + }
308 + // Fixtures changed, re-run tests
309 + onChange({ mode: Mode.Test });
310 + }
311 + );
312 +
313 + // Basic key event handling
314 + process.stdin.on("keypress", (str, key) => {
315 + if (key.name === "u") {
316 + // u => update fixtures
317 + onChange({ mode: Mode.Update });
318 + } else if (key.name === "q") {
319 + process.exit(0);
320 + } else if (key.ctrl && key.name === "c") {
321 + process.exit(0);
322 + } else {
323 + // any other key re-runs tests
324 + onChange({ mode: Mode.Test });
325 + }
326 + });
327 + } else {
328 + // Non-watch mode. For simplicity we re-use the same watchSrc() function.
329 + // After the first build completes run tests and exit
330 + let tsWatch: ts.WatchOfConfigFile<ts.SemanticDiagnosticsBuilderProgram> | null =
331 + null;
332 + tsWatch = watchSrc(
333 + () => {},
334 + async () => {
335 + const results = await run(compilerVersion);
336 + if (UPDATE) {
337 + update(results);
338 + } else {
339 + report(results);
340 + }
341 + if (tsWatch != null) {
342 + tsWatch.close();
343 + }
344 + await worker.end();
345 + process.exit();
346 + }
347 + );
348 + }
349 +}
350 +
351 +// I couldn't figure out the right combination of settings to allow using `await` at the top-level,
352 +// but it's easy enough to use the promise API just here
353 +main().catch((error) => console.error(error));
compiler/forget/packages/snap/src/utils.ts new
+17
@@ -0,0 +1,17 @@
1 +/**
2 + * Copyright (c) Meta Platforms, Inc. and affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +import fs from "fs/promises";
9 +
10 +export async function exists(file: string): Promise<boolean> {
11 + try {
12 + await fs.access(file);
13 + return true;
14 + } catch {
15 + return false;
16 + }
17 +}
compiler/forget/packages/snap/tsconfig.json new
+21
@@ -0,0 +1,21 @@
1 +{
2 + "extends": "@tsconfig/node16-strictest/tsconfig.json",
3 + "compilerOptions": {
4 + "declaration": true,
5 + "outDir": "dist",
6 + "jsx": "react-jsxdev",
7 +
8 + // weaken strictness from preset
9 + "importsNotUsedAsValues": "remove",
10 + "noUncheckedIndexedAccess": false,
11 + "noUnusedParameters": false,
12 + "useUnknownInCatchVariables": false,
13 + "target": "ES2015",
14 + // ideally turn off only during dev, or on a per-file basis
15 + "noUnusedLocals": false,
16 + "sourceMap": true
17 + },
18 + "exclude": ["node_modules"],
19 + "include": ["src/**/*.ts"]
20 + }
21 +
\ No newline at end of file
compiler/forget/packages/snap/yarn.lock new
+892
@@ -0,0 +1,892 @@
1 +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 +# yarn lockfile v1
3 +
4 +
5 +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6":
6 + version "7.21.4"
7 + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39"
8 + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==
9 + dependencies:
10 + "@babel/highlight" "^7.18.6"
11 +
12 +"@babel/core@7.2.0":
13 + version "7.2.0"
14 + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.0.tgz#a4dd3814901998e93340f0086e9867fefa163ada"
15 + integrity sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==
16 + dependencies:
17 + "@babel/code-frame" "^7.0.0"
18 + "@babel/generator" "^7.2.0"
19 + "@babel/helpers" "^7.2.0"
20 + "@babel/parser" "^7.2.0"
21 + "@babel/template" "^7.1.2"
22 + "@babel/traverse" "^7.1.6"
23 + "@babel/types" "^7.2.0"
24 + convert-source-map "^1.1.0"
25 + debug "^4.1.0"
26 + json5 "^2.1.0"
27 + lodash "^4.17.10"
28 + resolve "^1.3.2"
29 + semver "^5.4.1"
30 + source-map "^0.5.0"
31 +
32 +"@babel/generator@^7.1.6", "@babel/generator@^7.2.0":
33 + version "7.21.4"
34 + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc"
35 + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==
36 + dependencies:
37 + "@babel/types" "^7.21.4"
38 + "@jridgewell/gen-mapping" "^0.3.2"
39 + "@jridgewell/trace-mapping" "^0.3.17"
40 + jsesc "^2.5.1"
41 +
42 +"@babel/helper-function-name@^7.1.0":
43 + version "7.21.0"
44 + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4"
45 + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==
46 + dependencies:
47 + "@babel/template" "^7.20.7"
48 + "@babel/types" "^7.21.0"
49 +
50 +"@babel/helper-split-export-declaration@^7.0.0":
51 + version "7.18.6"
52 + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075"
53 + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==
54 + dependencies:
55 + "@babel/types" "^7.18.6"
56 +
57 +"@babel/helper-string-parser@^7.19.4":
58 + version "7.19.4"
59 + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63"
60 + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==
61 +
62 +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1":
63 + version "7.19.1"
64 + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2"
65 + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==
66 +
67 +"@babel/helpers@^7.2.0":
68 + version "7.21.0"
69 + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e"
70 + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==
71 + dependencies:
72 + "@babel/template" "^7.20.7"
73 + "@babel/traverse" "^7.21.0"
74 + "@babel/types" "^7.21.0"
75 +
76 +"@babel/highlight@^7.18.6":
77 + version "7.18.6"
78 + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
79 + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
80 + dependencies:
81 + "@babel/helper-validator-identifier" "^7.18.6"
82 + chalk "^2.0.0"
83 + js-tokens "^4.0.0"
84 +
85 +"@babel/parser@7.7.4":
86 + version "7.7.4"
87 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.4.tgz#75ab2d7110c2cf2fa949959afb05fa346d2231bb"
88 + integrity sha512-jIwvLO0zCL+O/LmEJQjWA75MQTWwx3c3u2JOTDK5D3/9egrWRRA0/0hk9XXywYnXZVVpzrBYeIQTmhwUaePI9g==
89 +
90 +"@babel/parser@^7.1.6", "@babel/parser@^7.2.0", "@babel/parser@^7.20.7":
91 + version "7.21.4"
92 + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17"
93 + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==
94 +
95 +"@babel/template@^7.1.2", "@babel/template@^7.20.7":
96 + version "7.20.7"
97 + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8"
98 + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==
99 + dependencies:
100 + "@babel/code-frame" "^7.18.6"
101 + "@babel/parser" "^7.20.7"
102 + "@babel/types" "^7.20.7"
103 +
104 +"@babel/traverse@7.1.6", "@babel/traverse@^7.1.6", "@babel/traverse@^7.21.0":
105 + version "7.1.6"
106 + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c"
107 + integrity sha512-CXedit6GpISz3sC2k2FsGCUpOhUqKdyL0lqNrImQojagnUMXf8hex4AxYFRuMkNGcvJX5QAFGzB5WJQmSv8SiQ==
108 + dependencies:
109 + "@babel/code-frame" "^7.0.0"
110 + "@babel/generator" "^7.1.6"
111 + "@babel/helper-function-name" "^7.1.0"
112 + "@babel/helper-split-export-declaration" "^7.0.0"
113 + "@babel/parser" "^7.1.6"
114 + "@babel/types" "^7.1.6"
115 + debug "^4.1.0"
116 + globals "^11.1.0"
117 + lodash "^4.17.10"
118 +
119 +"@babel/types@7.7.4":
120 + version "7.7.4"
121 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
122 + integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
123 + dependencies:
124 + esutils "^2.0.2"
125 + lodash "^4.17.13"
126 + to-fast-properties "^2.0.0"
127 +
128 +"@babel/types@^7.1.6", "@babel/types@^7.18.6", "@babel/types@^7.2.0", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4":
129 + version "7.21.4"
130 + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4"
131 + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==
132 + dependencies:
133 + "@babel/helper-string-parser" "^7.19.4"
134 + "@babel/helper-validator-identifier" "^7.19.1"
135 + to-fast-properties "^2.0.0"
136 +
137 +"@eslint-community/eslint-utils@^4.2.0":
138 + version "4.4.0"
139 + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
140 + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
141 + dependencies:
142 + eslint-visitor-keys "^3.3.0"
143 +
144 +"@eslint-community/regexpp@^4.4.0":
145 + version "4.5.0"
146 + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.0.tgz#f6f729b02feee2c749f57e334b7a1b5f40a81724"
147 + integrity sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==
148 +
149 +"@jridgewell/gen-mapping@^0.3.2":
150 + version "0.3.3"
151 + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
152 + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
153 + dependencies:
154 + "@jridgewell/set-array" "^1.0.1"
155 + "@jridgewell/sourcemap-codec" "^1.4.10"
156 + "@jridgewell/trace-mapping" "^0.3.9"
157 +
158 +"@jridgewell/resolve-uri@3.1.0":
159 + version "3.1.0"
160 + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
161 + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
162 +
163 +"@jridgewell/set-array@^1.0.1":
164 + version "1.1.2"
165 + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
166 + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
167 +
168 +"@jridgewell/sourcemap-codec@1.4.14":
169 + version "1.4.14"
170 + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
171 + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
172 +
173 +"@jridgewell/sourcemap-codec@^1.4.10":
174 + version "1.4.15"
175 + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
176 + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
177 +
178 +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9":
179 + version "0.3.18"
180 + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6"
181 + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==
182 + dependencies:
183 + "@jridgewell/resolve-uri" "3.1.0"
184 + "@jridgewell/sourcemap-codec" "1.4.14"
185 +
186 +"@nodelib/fs.scandir@2.1.5":
187 + version "2.1.5"
188 + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
189 + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
190 + dependencies:
191 + "@nodelib/fs.stat" "2.0.5"
192 + run-parallel "^1.1.9"
193 +
194 +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
195 + version "2.0.5"
196 + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
197 + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
198 +
199 +"@nodelib/fs.walk@^1.2.3":
200 + version "1.2.8"
201 + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
202 + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
203 + dependencies:
204 + "@nodelib/fs.scandir" "2.1.5"
205 + fastq "^1.6.0"
206 +
207 +"@parcel/watcher@^2.1.0":
208 + version "2.1.0"
209 + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.1.0.tgz#5f32969362db4893922c526a842d8af7a8538545"
210 + integrity sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==
211 + dependencies:
212 + is-glob "^4.0.3"
213 + micromatch "^4.0.5"
214 + node-addon-api "^3.2.1"
215 + node-gyp-build "^4.3.0"
216 +
217 +"@types/json-schema@^7.0.9":
218 + version "7.0.11"
219 + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
220 + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
221 +
222 +"@types/node@^18.7.18":
223 + version "18.15.11"
224 + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f"
225 + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==
226 +
227 +"@types/semver@^7.3.12":
228 + version "7.3.13"
229 + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
230 + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
231 +
232 +"@typescript-eslint/eslint-plugin@^5.51.0":
233 + version "5.57.1"
234 + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz#d1ab162a3cd2671b8a1c9ddf6e2db73b14439735"
235 + integrity sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==
236 + dependencies:
237 + "@eslint-community/regexpp" "^4.4.0"
238 + "@typescript-eslint/scope-manager" "5.57.1"
239 + "@typescript-eslint/type-utils" "5.57.1"
240 + "@typescript-eslint/utils" "5.57.1"
241 + debug "^4.3.4"
242 + grapheme-splitter "^1.0.4"
243 + ignore "^5.2.0"
244 + natural-compare-lite "^1.4.0"
245 + semver "^7.3.7"
246 + tsutils "^3.21.0"
247 +
248 +"@typescript-eslint/parser@^5.51.0":
249 + version "5.57.1"
250 + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.57.1.tgz#af911234bd4401d09668c5faf708a0570a17a748"
251 + integrity sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==
252 + dependencies:
253 + "@typescript-eslint/scope-manager" "5.57.1"
254 + "@typescript-eslint/types" "5.57.1"
255 + "@typescript-eslint/typescript-estree" "5.57.1"
256 + debug "^4.3.4"
257 +
258 +"@typescript-eslint/scope-manager@5.57.1":
259 + version "5.57.1"
260 + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz#5d28799c0fc8b501a29ba1749d827800ef22d710"
261 + integrity sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==
262 + dependencies:
263 + "@typescript-eslint/types" "5.57.1"
264 + "@typescript-eslint/visitor-keys" "5.57.1"
265 +
266 +"@typescript-eslint/type-utils@5.57.1":
267 + version "5.57.1"
268 + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz#235daba621d3f882b8488040597b33777c74bbe9"
269 + integrity sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==
270 + dependencies:
271 + "@typescript-eslint/typescript-estree" "5.57.1"
272 + "@typescript-eslint/utils" "5.57.1"
273 + debug "^4.3.4"
274 + tsutils "^3.21.0"
275 +
276 +"@typescript-eslint/types@5.57.1":
277 + version "5.57.1"
278 + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.57.1.tgz#d9989c7a9025897ea6f0550b7036027f69e8a603"
279 + integrity sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==
280 +
281 +"@typescript-eslint/typescript-estree@5.57.1":
282 + version "5.57.1"
283 + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz#10d9643e503afc1ca4f5553d9bbe672ea4050b71"
284 + integrity sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==
285 + dependencies:
286 + "@typescript-eslint/types" "5.57.1"
287 + "@typescript-eslint/visitor-keys" "5.57.1"
288 + debug "^4.3.4"
289 + globby "^11.1.0"
290 + is-glob "^4.0.3"
291 + semver "^7.3.7"
292 + tsutils "^3.21.0"
293 +
294 +"@typescript-eslint/utils@5.57.1":
295 + version "5.57.1"
296 + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.57.1.tgz#0f97b0bbd88c2d5e2036869f26466be5f4c69475"
297 + integrity sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==
298 + dependencies:
299 + "@eslint-community/eslint-utils" "^4.2.0"
300 + "@types/json-schema" "^7.0.9"
301 + "@types/semver" "^7.3.12"
302 + "@typescript-eslint/scope-manager" "5.57.1"
303 + "@typescript-eslint/types" "5.57.1"
304 + "@typescript-eslint/typescript-estree" "5.57.1"
305 + eslint-scope "^5.1.1"
306 + semver "^7.3.7"
307 +
308 +"@typescript-eslint/visitor-keys@5.57.1":
309 + version "5.57.1"
310 + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz#585e5fa42a9bbcd9065f334fd7c8a4ddfa7d905e"
311 + integrity sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==
312 + dependencies:
313 + "@typescript-eslint/types" "5.57.1"
314 + eslint-visitor-keys "^3.3.0"
315 +
316 +ansi-regex@^5.0.1:
317 + version "5.0.1"
318 + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
319 + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
320 +
321 +ansi-styles@^3.2.1:
322 + version "3.2.1"
323 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
324 + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
325 + dependencies:
326 + color-convert "^1.9.0"
327 +
328 +ansi-styles@^4.0.0, ansi-styles@^4.1.0:
329 + version "4.3.0"
330 + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
331 + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
332 + dependencies:
333 + color-convert "^2.0.1"
334 +
335 +array-union@^2.1.0:
336 + version "2.1.0"
337 + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
338 + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
339 +
340 +balanced-match@^1.0.0:
341 + version "1.0.2"
342 + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
343 + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
344 +
345 +brace-expansion@^1.1.7:
346 + version "1.1.11"
347 + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
348 + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
349 + dependencies:
350 + balanced-match "^1.0.0"
351 + concat-map "0.0.1"
352 +
353 +braces@^3.0.2:
354 + version "3.0.2"
355 + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
356 + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
357 + dependencies:
358 + fill-range "^7.0.1"
359 +
360 +chalk@4:
361 + version "4.1.2"
362 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
363 + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
364 + dependencies:
365 + ansi-styles "^4.1.0"
366 + supports-color "^7.1.0"
367 +
368 +chalk@^2.0.0:
369 + version "2.4.2"
370 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
371 + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
372 + dependencies:
373 + ansi-styles "^3.2.1"
374 + escape-string-regexp "^1.0.5"
375 + supports-color "^5.3.0"
376 +
377 +cliui@^8.0.1:
378 + version "8.0.1"
379 + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
380 + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
381 + dependencies:
382 + string-width "^4.2.0"
383 + strip-ansi "^6.0.1"
384 + wrap-ansi "^7.0.0"
385 +
386 +color-convert@^1.9.0:
387 + version "1.9.3"
388 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
389 + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
390 + dependencies:
391 + color-name "1.1.3"
392 +
393 +color-convert@^2.0.1:
394 + version "2.0.1"
395 + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
396 + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
397 + dependencies:
398 + color-name "~1.1.4"
399 +
400 +color-name@1.1.3:
401 + version "1.1.3"
402 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
403 + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
404 +
405 +color-name@~1.1.4:
406 + version "1.1.4"
407 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
408 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
409 +
410 +concat-map@0.0.1:
411 + version "0.0.1"
412 + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
413 + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
414 +
415 +convert-source-map@^1.1.0:
416 + version "1.9.0"
417 + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f"
418 + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
419 +
420 +debug@^4.1.0, debug@^4.3.4:
421 + version "4.3.4"
422 + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
423 + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
424 + dependencies:
425 + ms "2.1.2"
426 +
427 +dir-glob@^3.0.1:
428 + version "3.0.1"
429 + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
430 + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
431 + dependencies:
432 + path-type "^4.0.0"
433 +
434 +emoji-regex@^8.0.0:
435 + version "8.0.0"
436 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
437 + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
438 +
439 +escalade@^3.1.1:
440 + version "3.1.1"
441 + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
442 + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
443 +
444 +escape-string-regexp@^1.0.5:
445 + version "1.0.5"
446 + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
447 + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
448 +
449 +eslint-scope@^5.1.1:
450 + version "5.1.1"
451 + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
452 + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
453 + dependencies:
454 + esrecurse "^4.3.0"
455 + estraverse "^4.1.1"
456 +
457 +eslint-visitor-keys@^3.3.0:
458 + version "3.4.0"
459 + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz#c7f0f956124ce677047ddbc192a68f999454dedc"
460 + integrity sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==
461 +
462 +esrecurse@^4.3.0:
463 + version "4.3.0"
464 + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
465 + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
466 + dependencies:
467 + estraverse "^5.2.0"
468 +
469 +estraverse@^4.1.1:
470 + version "4.3.0"
471 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
472 + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
473 +
474 +estraverse@^5.2.0:
475 + version "5.3.0"
476 + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
477 + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
478 +
479 +esutils@^2.0.2:
480 + version "2.0.3"
481 + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
482 + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
483 +
484 +fast-glob@^3.2.9:
485 + version "3.2.12"
486 + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
487 + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
488 + dependencies:
489 + "@nodelib/fs.stat" "^2.0.2"
490 + "@nodelib/fs.walk" "^1.2.3"
491 + glob-parent "^5.1.2"
492 + merge2 "^1.3.0"
493 + micromatch "^4.0.4"
494 +
495 +fastq@^1.6.0:
496 + version "1.15.0"
497 + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
498 + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
499 + dependencies:
500 + reusify "^1.0.4"
501 +
502 +fill-range@^7.0.1:
503 + version "7.0.1"
504 + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
505 + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
506 + dependencies:
507 + to-regex-range "^5.0.1"
508 +
509 +fs.realpath@^1.0.0:
510 + version "1.0.0"
511 + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
512 + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
513 +
514 +function-bind@^1.1.1:
515 + version "1.1.1"
516 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
517 + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
518 +
519 +get-caller-file@^2.0.5:
520 + version "2.0.5"
521 + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
522 + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
523 +
524 +glob-parent@^5.1.2:
525 + version "5.1.2"
526 + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
527 + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
528 + dependencies:
529 + is-glob "^4.0.1"
530 +
531 +glob@^7.1.3:
532 + version "7.2.3"
533 + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
534 + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
535 + dependencies:
536 + fs.realpath "^1.0.0"
537 + inflight "^1.0.4"
538 + inherits "2"
539 + minimatch "^3.1.1"
540 + once "^1.3.0"
541 + path-is-absolute "^1.0.0"
542 +
543 +globals@^11.1.0:
544 + version "11.12.0"
545 + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
546 + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
547 +
548 +globby@^11.1.0:
549 + version "11.1.0"
550 + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
551 + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
552 + dependencies:
553 + array-union "^2.1.0"
554 + dir-glob "^3.0.1"
555 + fast-glob "^3.2.9"
556 + ignore "^5.2.0"
557 + merge2 "^1.4.1"
558 + slash "^3.0.0"
559 +
560 +grapheme-splitter@^1.0.4:
561 + version "1.0.4"
562 + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
563 + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
564 +
565 +has-flag@^3.0.0:
566 + version "3.0.0"
567 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
568 + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
569 +
570 +has-flag@^4.0.0:
571 + version "4.0.0"
572 + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
573 + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
574 +
575 +has@^1.0.3:
576 + version "1.0.3"
577 + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
578 + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
579 + dependencies:
580 + function-bind "^1.1.1"
581 +
582 +ignore@^5.2.0:
583 + version "5.2.4"
584 + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
585 + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
586 +
587 +inflight@^1.0.4:
588 + version "1.0.6"
589 + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
590 + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
591 + dependencies:
592 + once "^1.3.0"
593 + wrappy "1"
594 +
595 +inherits@2:
596 + version "2.0.4"
597 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
598 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
599 +
600 +is-core-module@^2.11.0:
601 + version "2.11.0"
602 + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144"
603 + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==
604 + dependencies:
605 + has "^1.0.3"
606 +
607 +is-extglob@^2.1.1:
608 + version "2.1.1"
609 + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
610 + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
611 +
612 +is-fullwidth-code-point@^3.0.0:
613 + version "3.0.0"
614 + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
615 + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
616 +
617 +is-glob@^4.0.1, is-glob@^4.0.3:
618 + version "4.0.3"
619 + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
620 + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
621 + dependencies:
622 + is-extglob "^2.1.1"
623 +
624 +is-number@^7.0.0:
625 + version "7.0.0"
626 + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
627 + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
628 +
629 +js-tokens@^4.0.0:
630 + version "4.0.0"
631 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
632 + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
633 +
634 +jsesc@^2.5.1:
635 + version "2.5.2"
636 + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
637 + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
638 +
639 +json5@^2.1.0:
640 + version "2.2.3"
641 + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
642 + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
643 +
644 +lodash@^4.17.10, lodash@^4.17.13:
645 + version "4.17.21"
646 + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
647 + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
648 +
649 +lru-cache@^6.0.0:
650 + version "6.0.0"
651 + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
652 + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
653 + dependencies:
654 + yallist "^4.0.0"
655 +
656 +merge2@^1.3.0, merge2@^1.4.1:
657 + version "1.4.1"
658 + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
659 + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
660 +
661 +micromatch@^4.0.4, micromatch@^4.0.5:
662 + version "4.0.5"
663 + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
664 + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
665 + dependencies:
666 + braces "^3.0.2"
667 + picomatch "^2.3.1"
668 +
669 +minimatch@^3.1.1:
670 + version "3.1.2"
671 + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
672 + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
673 + dependencies:
674 + brace-expansion "^1.1.7"
675 +
676 +ms@2.1.2:
677 + version "2.1.2"
678 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
679 + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
680 +
681 +natural-compare-lite@^1.4.0:
682 + version "1.4.0"
683 + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4"
684 + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==
685 +
686 +node-addon-api@^3.2.1:
687 + version "3.2.1"
688 + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161"
689 + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==
690 +
691 +node-gyp-build@^4.3.0:
692 + version "4.6.0"
693 + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
694 + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
695 +
696 +once@^1.3.0:
697 + version "1.4.0"
698 + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
699 + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
700 + dependencies:
701 + wrappy "1"
702 +
703 +path-is-absolute@^1.0.0:
704 + version "1.0.1"
705 + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
706 + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
707 +
708 +path-parse@^1.0.7:
709 + version "1.0.7"
710 + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
711 + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
712 +
713 +path-type@^4.0.0:
714 + version "4.0.0"
715 + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
716 + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
717 +
718 +picomatch@^2.3.1:
719 + version "2.3.1"
720 + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
721 + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
722 +
723 +queue-microtask@^1.2.2:
724 + version "1.2.3"
725 + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
726 + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
727 +
728 +readline@^1.3.0:
729 + version "1.3.0"
730 + resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c"
731 + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==
732 +
733 +require-directory@^2.1.1:
734 + version "2.1.1"
735 + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
736 + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
737 +
738 +resolve@^1.3.2:
739 + version "1.22.2"
740 + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
741 + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
742 + dependencies:
743 + is-core-module "^2.11.0"
744 + path-parse "^1.0.7"
745 + supports-preserve-symlinks-flag "^1.0.0"
746 +
747 +reusify@^1.0.4:
748 + version "1.0.4"
749 + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
750 + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
751 +
752 +rimraf@^3.0.2:
753 + version "3.0.2"
754 + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
755 + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
756 + dependencies:
757 + glob "^7.1.3"
758 +
759 +run-parallel@^1.1.9:
760 + version "1.2.0"
761 + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
762 + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
763 + dependencies:
764 + queue-microtask "^1.2.2"
765 +
766 +semver@^5.4.1:
767 + version "5.7.1"
768 + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
769 + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
770 +
771 +semver@^7.3.7:
772 + version "7.3.8"
773 + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
774 + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
775 + dependencies:
776 + lru-cache "^6.0.0"
777 +
778 +slash@^3.0.0:
779 + version "3.0.0"
780 + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
781 + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
782 +
783 +source-map@^0.5.0:
784 + version "0.5.7"
785 + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
786 + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==
787 +
788 +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
789 + version "4.2.3"
790 + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
791 + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
792 + dependencies:
793 + emoji-regex "^8.0.0"
794 + is-fullwidth-code-point "^3.0.0"
795 + strip-ansi "^6.0.1"
796 +
797 +strip-ansi@^6.0.0, strip-ansi@^6.0.1:
798 + version "6.0.1"
799 + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
800 + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
801 + dependencies:
802 + ansi-regex "^5.0.1"
803 +
804 +supports-color@^5.3.0:
805 + version "5.5.0"
806 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
807 + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
808 + dependencies:
809 + has-flag "^3.0.0"
810 +
811 +supports-color@^7.1.0:
812 + version "7.2.0"
813 + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
814 + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
815 + dependencies:
816 + has-flag "^4.0.0"
817 +
818 +supports-preserve-symlinks-flag@^1.0.0:
819 + version "1.0.0"
820 + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
821 + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
822 +
823 +to-fast-properties@^2.0.0:
824 + version "2.0.0"
825 + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
826 + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
827 +
828 +to-regex-range@^5.0.1:
829 + version "5.0.1"
830 + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
831 + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
832 + dependencies:
833 + is-number "^7.0.0"
834 +
835 +tslib@^1.8.1:
836 + version "1.14.1"
837 + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
838 + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
839 +
840 +tsutils@^3.21.0:
841 + version "3.21.0"
842 + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
843 + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
844 + dependencies:
845 + tslib "^1.8.1"
846 +
847 +typescript@^4.8.3:
848 + version "4.9.5"
849 + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
850 + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
851 +
852 +wrap-ansi@^7.0.0:
853 + version "7.0.0"
854 + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
855 + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
856 + dependencies:
857 + ansi-styles "^4.0.0"
858 + string-width "^4.1.0"
859 + strip-ansi "^6.0.0"
860 +
861 +wrappy@1:
862 + version "1.0.2"
863 + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
864 + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
865 +
866 +y18n@^5.0.5:
867 + version "5.0.8"
868 + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
869 + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
870 +
871 +yallist@^4.0.0:
872 + version "4.0.0"
873 + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
874 + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
875 +
876 +yargs-parser@^21.1.1:
877 + version "21.1.1"
878 + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
879 + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
880 +
881 +yargs@^17.7.1:
882 + version "17.7.1"
883 + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
884 + integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
885 + dependencies:
886 + cliui "^8.0.1"
887 + escalade "^3.1.1"
888 + get-caller-file "^2.0.5"
889 + require-directory "^2.1.1"
890 + string-width "^4.2.3"
891 + y18n "^5.0.5"
892 + yargs-parser "^21.1.1"
compiler/forget/src/Babel/RunReactForgetBabelPlugin.ts
+2 -1
@@ -19,8 +19,9 @@ type ReactForgetBabelPluginResult = {
19 map: BabelCore.BabelFileResult["map"];
20 };
21
22 -export default function runReactForgetBabelPlugin(
22 +export function runReactForgetBabelPlugin(
23 text: string,
24 +
25 file: string,
26 language: "flow" | "typescript",
27 options: PluginOptions | null
compiler/forget/src/ReactiveScopes/RenameVariables.ts
+1 -1
@@ -17,8 +17,8 @@ import {
17 ReactiveScopeBlock,
18 } from "../HIR/HIR";
19 import {
20 - eachReactiveValueOperand,
20 ReactiveFunctionVisitor,
21 + eachReactiveValueOperand,
22 visitReactiveFunction,
23 } from "./visitors";
24
compiler/forget/src/__tests__/compiler-test.ts
+2 -2
@@ -9,9 +9,9 @@
9
10 import { wasmFolder } from "@hpcc-js/wasm";
11 import path from "path";
12 -import runReactForgetBabelPlugin from "../Babel/RunReactForgetBabelPlugin";
13 -import { Effect, ValueKind } from "../index";
12 +import { runReactForgetBabelPlugin } from "../Babel/RunReactForgetBabelPlugin";
13 import { toggleLogging } from "../Utils/logger";
14 +import { Effect, ValueKind } from "../index";
15 import generateTestsFromFixtures from "./test-utils/generateTestsFromFixtures";
16
17 type TestOutput = {
compiler/forget/src/__tests__/disableMemoizeJsxElements-test.ts
+2 -2
@@ -8,9 +8,9 @@
8 "use strict";
9
10 import path from "path";
11 -import runReactForgetBabelPlugin from "../Babel/RunReactForgetBabelPlugin";
12 -import { Effect, ValueKind } from "../index";
11 +import { runReactForgetBabelPlugin } from "../Babel/RunReactForgetBabelPlugin";
12 import { toggleLogging } from "../Utils/logger";
13 +import { Effect, ValueKind } from "../index";
14 import generateTestsFromFixtures from "./test-utils/generateTestsFromFixtures";
15
16 type TestOutput = {
compiler/forget/src/__tests__/fixtures/compiler/capturing-function-renamed-ref.js renamed