From 7a42a6e9e59b1ddaafd11b379e14b41bab789ab2 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 19:35:35 -0800 Subject: [PATCH 1/7] esm --- .eslintrc.json | 3 +- package.json | 41 +- src/array.js | 6 +- src/constant.js | 6 +- src/errors.js | 10 +- src/generatorish.js | 2 +- src/identity.js | 2 +- src/index.js | 10 +- src/load.js | 32 - src/module.js | 32 +- src/noop.js | 2 +- src/rethrow.js | 6 +- src/runtime.js | 35 +- src/variable.js | 38 +- test/.eslintrc.json | 5 +- test/jsdom.js | 39 + test/load-test.js | 163 ---- test/module/builtin-test.js | 16 +- test/module/redefine-test.js | 38 +- test/module/value-test.js | 109 +-- test/runtime/builtins-test.js | 26 +- test/tape.js | 39 - test/variable/define-test.js | 388 ++++----- test/variable/delete-test.js | 16 +- test/variable/derive-test.js | 116 +-- test/variable/import-test.js | 213 +++-- test/variable/valueof.js | 2 +- yarn.lock | 1400 ++++++++++++++++----------------- 28 files changed, 1238 insertions(+), 1557 deletions(-) delete mode 100644 src/load.js create mode 100644 test/jsdom.js delete mode 100644 test/load-test.js delete mode 100644 test/tape.js diff --git a/.eslintrc.json b/.eslintrc.json index a4fd4c85..1f2b77fb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,11 +2,12 @@ "extends": "eslint:recommended", "parserOptions": { "sourceType": "module", - "ecmaVersion": 8 + "ecmaVersion": 2020 }, "env": { "browser": true, "es6": true, + "es2020": true, "node": true }, "rules": { diff --git a/package.json b/package.json index fa36be87..d650e356 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,47 @@ { "name": "@observablehq/runtime", "version": "4.28.0", - "license": "ISC", - "main": "dist/runtime.umd.js", - "module": "src/index.js", "author": { "name": "Observable, Inc.", "url": "https://observablehq.com" }, + "license": "ISC", + "type": "module", + "main": "src/index.js", + "module": "src/index.js", + "jsdelivr": "dist/runtime.umd.js", + "unpkg": "dist/runtime.umd.js", + "exports": { + "umd": "./dist/runtime.umd.js", + "default": "./src/index.js" + }, "repository": { "type": "git", "url": "https://github.com/observablehq/runtime.git" }, + "files": [ + "dist/**/*.js", + "src/**/*.js" + ], "scripts": { - "test": "tape -r esm 'test/**/*-test.js'", + "test": "mocha 'test/**/*-test.js' && eslint src test", "prepublishOnly": "rm -rf dist && rollup -c", "postpublish": "git push && git push --tags" }, - "files": [ - "src/**/*.js", - "dist/**/*.js" - ], + "_moduleAliases": { + "@observablehq/runtime": "./src/index.js" + }, "dependencies": { "@observablehq/inspector": "^3.2.2", "@observablehq/stdlib": "^3.4.1" }, "devDependencies": { - "eslint": "^7.18.0", - "esm": "^3.2.25", - "jsdom": "^17.0.0", - "rollup": "^2.37.1", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-terser": "^7.0.2", - "tape": "^4.13.3", - "tape-await": "^0.1.2" + "@rollup/plugin-node-resolve": "^15.0.1", + "eslint": "^8.27.0", + "jsdom": "^20.0.2", + "mocha": "^10.1.0", + "module-alias": "^2.2.2", + "rollup": "^3.2.5", + "rollup-plugin-terser": "^7.0.2" } } diff --git a/src/array.js b/src/array.js index af55bdd4..55da06b1 100644 --- a/src/array.js +++ b/src/array.js @@ -1,3 +1,3 @@ -var prototype = Array.prototype; -export var map = prototype.map; -export var forEach = prototype.forEach; +const prototype = Array.prototype; +export const map = prototype.map; +export const forEach = prototype.forEach; diff --git a/src/constant.js b/src/constant.js index b7d42e71..dc29774d 100644 --- a/src/constant.js +++ b/src/constant.js @@ -1,5 +1,3 @@ -export default function(x) { - return function() { - return x; - }; +export function constant(x) { + return () => x; } diff --git a/src/errors.js b/src/errors.js index b6597e88..2e8c743a 100644 --- a/src/errors.js +++ b/src/errors.js @@ -1,8 +1,8 @@ -export function RuntimeError(message, input) { - this.message = message + ""; - this.input = input; +export class RuntimeError extends Error { + constructor(message, input) { + super(message); + this.input = input; + } } -RuntimeError.prototype = Object.create(Error.prototype); RuntimeError.prototype.name = "RuntimeError"; -RuntimeError.prototype.constructor = RuntimeError; diff --git a/src/generatorish.js b/src/generatorish.js index c1240428..e33f25fd 100644 --- a/src/generatorish.js +++ b/src/generatorish.js @@ -1,4 +1,4 @@ -export default function generatorish(value) { +export function generatorish(value) { return value && typeof value.next === "function" && typeof value.return === "function"; diff --git a/src/identity.js b/src/identity.js index b2f94b2e..968d0a12 100644 --- a/src/identity.js +++ b/src/identity.js @@ -1,3 +1,3 @@ -export default function(x) { +export function identity(x) { return x; } diff --git a/src/index.js b/src/index.js index d3febb9e..3f66599a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,4 @@ -import {Inspector} from "@observablehq/inspector"; -import {Library} from "@observablehq/stdlib"; -import {RuntimeError} from "./errors"; -import Runtime from "./runtime"; - -export {Inspector, Library, Runtime, RuntimeError}; +export {Inspector} from "@observablehq/inspector"; +export {Library} from "@observablehq/stdlib"; +export {RuntimeError} from "./errors.js"; +export {Runtime} from "./runtime.js"; diff --git a/src/load.js b/src/load.js deleted file mode 100644 index 81667daa..00000000 --- a/src/load.js +++ /dev/null @@ -1,32 +0,0 @@ -import {Library} from "@observablehq/stdlib"; -import Runtime from "./runtime"; - -export default function load(notebook, library, observer) { - if (typeof library == "function") observer = library, library = null; - if (typeof observer !== "function") throw new Error("invalid observer"); - if (library == null) library = new Library(); - - const {modules, id} = notebook; - const map = new Map; - const runtime = new Runtime(library); - const main = runtime_module(id); - - function runtime_module(id) { - let module = map.get(id); - if (!module) map.set(id, module = runtime.module()); - return module; - } - - for (const m of modules) { - const module = runtime_module(m.id); - let i = 0; - for (const v of m.variables) { - if (v.from) module.import(v.remote, v.name, runtime_module(v.from)); - else if (module === main) module.variable(observer(v, i, m.variables)).define(v.name, v.inputs, v.value); - else module.define(v.name, v.inputs, v.value); - ++i; - } - } - - return runtime; -} diff --git a/src/module.js b/src/module.js index 00fa2a67..e9a90656 100644 --- a/src/module.js +++ b/src/module.js @@ -1,11 +1,11 @@ -import constant from "./constant"; -import {RuntimeError} from "./errors"; -import identity from "./identity"; -import rethrow from "./rethrow"; -import {variable_variable, variable_invalidation, variable_visibility} from "./runtime"; -import Variable, {TYPE_DUPLICATE, TYPE_IMPLICIT, TYPE_NORMAL, no_observer, variable_stale} from "./variable"; - -export default function Module(runtime, builtins = []) { +import {constant} from "./constant.js"; +import {RuntimeError} from "./errors.js"; +import {identity} from "./identity.js"; +import {rethrow} from "./rethrow.js"; +import {variable_variable, variable_invalidation, variable_visibility} from "./runtime.js"; +import {Variable, TYPE_DUPLICATE, TYPE_IMPLICIT, TYPE_NORMAL, no_observer, variable_stale} from "./variable.js"; + +export function Module(runtime, builtins = []) { Object.defineProperties(this, { _runtime: {value: runtime}, _scope: {value: new Map}, @@ -31,19 +31,19 @@ Object.defineProperties(Module.prototype, { }); function module_redefine(name) { - var v = this._scope.get(name); - if (!v) throw new RuntimeError(name + " is not defined"); - if (v._type === TYPE_DUPLICATE) throw new RuntimeError(name + " is defined more than once"); + const v = this._scope.get(name); + if (!v) throw new RuntimeError(`${name} is not defined`); + if (v._type === TYPE_DUPLICATE) throw new RuntimeError(`${name} is defined more than once`); return v.define.apply(v, arguments); } function module_define() { - var v = new Variable(TYPE_NORMAL, this); + const v = new Variable(TYPE_NORMAL, this); return v.define.apply(v, arguments); } function module_import() { - var v = new Variable(TYPE_NORMAL, this); + const v = new Variable(TYPE_NORMAL, this); return v.import.apply(v, arguments); } @@ -52,8 +52,8 @@ function module_variable(observer) { } async function module_value(name) { - var v = this._scope.get(name); - if (!v) throw new RuntimeError(name + " is not defined"); + let v = this._scope.get(name); + if (!v) throw new RuntimeError(`${name} is not defined`); if (v._observer === no_observer) { v = this.variable(true).define([name], identity); try { @@ -137,7 +137,7 @@ function module_derive(injects, injectModule) { } function module_resolve(name) { - var variable = this._scope.get(name), value; + let variable = this._scope.get(name), value; if (!variable) { variable = new Variable(TYPE_IMPLICIT, this); if (this._builtins.has(name)) { diff --git a/src/noop.js b/src/noop.js index 6ab80bc8..177804c7 100644 --- a/src/noop.js +++ b/src/noop.js @@ -1 +1 @@ -export default function() {} +export function noop() {} diff --git a/src/rethrow.js b/src/rethrow.js index a1ee317c..6ef61597 100644 --- a/src/rethrow.js +++ b/src/rethrow.js @@ -1,5 +1,5 @@ -export default function(e) { - return function() { - throw e; +export function rethrow(error) { + return () => { + throw error; }; } diff --git a/src/runtime.js b/src/runtime.js index f690e498..8d4fee02 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -1,21 +1,20 @@ import {Library, FileAttachments} from "@observablehq/stdlib"; -import {RuntimeError} from "./errors"; -import generatorish from "./generatorish"; -import load from "./load"; -import Module from "./module"; -import noop from "./noop"; -import Variable, {TYPE_IMPLICIT, no_observer, variable_stale} from "./variable"; +import {RuntimeError} from "./errors.js"; +import {generatorish} from "./generatorish.js"; +import {Module} from "./module.js"; +import {noop} from "./noop.js"; +import {Variable, TYPE_IMPLICIT, no_observer, variable_stale} from "./variable.js"; const frame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : typeof setImmediate === "function" ? setImmediate : f => setTimeout(f, 0); -export var variable_variable = {}; -export var variable_invalidation = {}; -export var variable_visibility = {}; +export const variable_variable = Symbol("variable"); +export const variable_invalidation = Symbol("invalidation"); +export const variable_visibility = Symbol("visibility"); -export default function Runtime(builtins = new Library, global = window_global) { - var builtin = this.module(); +export function Runtime(builtins = new Library, global = window_global) { + const builtin = this.module(); Object.defineProperties(this, { _dirty: {value: new Set}, _updates: {value: new Set}, @@ -28,15 +27,11 @@ export default function Runtime(builtins = new Library, global = window_global) _builtin: {value: builtin}, _global: {value: global} }); - if (builtins) for (var name in builtins) { + if (builtins) for (const name in builtins) { (new Variable(TYPE_IMPLICIT, builtin)).define(name, [], builtins[name]); } } -Object.defineProperties(Runtime, { - load: {value: load, writable: true, configurable: true} -}); - Object.defineProperties(Runtime.prototype, { _precompute: {value: runtime_precompute, writable: true, configurable: true}, _compute: {value: runtime_compute, writable: true, configurable: true}, @@ -91,7 +86,7 @@ function runtime_computeSoon() { } async function runtime_computeNow() { - var queue = [], + let queue = [], variables, variable, precomputes = this._precomputes; @@ -247,7 +242,7 @@ function variable_compute(variable) { if (variable._version !== version) throw variable_stale; // Replace any reference to invalidation with the promise, lazily. - for (var i = 0, n = inputs.length; i < n; ++i) { + for (let i = 0, n = inputs.length; i < n; ++i) { switch (inputs[i]) { case variable_invalidation: { inputs[i] = invalidation = variable_invalidator(variable); @@ -361,7 +356,7 @@ function variable_return(generator) { function variable_reachable(variable) { if (variable._observer !== no_observer) return true; // Directly reachable. - var outputs = new Set(variable._outputs); + const outputs = new Set(variable._outputs); for (const output of outputs) { if (output._observer !== no_observer) return true; output._outputs.forEach(outputs.add, outputs); @@ -370,5 +365,5 @@ function variable_reachable(variable) { } function window_global(name) { - return window[name]; + return globalThis[name]; } diff --git a/src/variable.js b/src/variable.js index aebebf47..061fe5c9 100644 --- a/src/variable.js +++ b/src/variable.js @@ -1,16 +1,16 @@ -import {map} from "./array"; -import constant from "./constant"; -import {RuntimeError} from "./errors"; -import identity from "./identity"; -import noop from "./noop"; +import {map} from "./array.js"; +import {constant} from "./constant.js"; +import {RuntimeError} from "./errors.js"; +import {identity} from "./identity.js"; +import {noop} from "./noop.js"; -export var TYPE_NORMAL = 1; // a normal variable -export var TYPE_IMPLICIT = 2; // created on reference -export var TYPE_DUPLICATE = 3; // created on duplicate definition +export const TYPE_NORMAL = 1; // a normal variable +export const TYPE_IMPLICIT = 2; // created on reference +export const TYPE_DUPLICATE = 3; // created on duplicate definition -export var no_observer = {}; +export const no_observer = Symbol("no-observer"); -export default function Variable(type, module, observer) { +export function Variable(type, module, observer) { if (!observer) observer = no_observer; Object.defineProperties(this, { _observer: {value: observer, writable: true}, @@ -60,17 +60,17 @@ export function variable_stale() { } function variable_rejector(variable) { - return function(error) { + return (error) => { if (error === variable_stale) throw error; - if (error === variable_undefined) throw new RuntimeError(variable._name + " is not defined", variable._name); + if (error === variable_undefined) throw new RuntimeError(`${variable._name} is not defined`, variable._name); if (error instanceof Error && error.message) throw new RuntimeError(error.message, variable._name); - throw new RuntimeError(variable._name + " could not be resolved", variable._name); + throw new RuntimeError(`${variable._name} could not be resolved`, variable._name); }; } function variable_duplicate(name) { - return function() { - throw new RuntimeError(name + " is defined more than once"); + return () => { + throw new RuntimeError(`${name} is defined more than once`); }; } @@ -88,14 +88,14 @@ function variable_define(name, inputs, definition) { } } return variable_defineImpl.call(this, - name == null ? null : name + "", + name == null ? null : String(name), inputs == null ? [] : map.call(inputs, this._module._resolve, this._module), typeof definition === "function" ? definition : constant(definition) ); } function variable_defineImpl(name, inputs, definition) { - var scope = this._module._scope, runtime = this._module._runtime; + const scope = this._module._scope, runtime = this._module._runtime; this._inputs.forEach(variable_detach, this); inputs.forEach(variable_attach, this); @@ -109,7 +109,7 @@ function variable_defineImpl(name, inputs, definition) { // Did the variable’s name change? Time to patch references! if (name !== this._name || scope.get(name) !== this) { - var error, found; + let error, found; if (this._name) { // Did this variable previously have a name? if (this._outputs.size) { // And did other variables reference this variable? @@ -184,7 +184,7 @@ function variable_defineImpl(name, inputs, definition) { function variable_import(remote, name, module) { if (arguments.length < 3) module = name, name = remote; - return variable_defineImpl.call(this, name + "", [module._resolve(remote + "")], identity); + return variable_defineImpl.call(this, String(name), [module._resolve(String(remote))], identity); } function variable_delete() { diff --git a/test/.eslintrc.json b/test/.eslintrc.json index 797f7bc8..7eeefc33 100644 --- a/test/.eslintrc.json +++ b/test/.eslintrc.json @@ -1,6 +1,5 @@ { - "extends": "../.eslintrc.json", - "rules": { - "no-unreachable": 0 + "env": { + "mocha": true } } diff --git a/test/jsdom.js b/test/jsdom.js new file mode 100644 index 00000000..4d0191fd --- /dev/null +++ b/test/jsdom.js @@ -0,0 +1,39 @@ +import {JSDOM} from "jsdom"; + +export default function jsdomit(description, run) { + return it(description, withJsdom(run)); +} + +jsdomit.skip = (description, run) => { + return it.skip(description, withJsdom(run)); +}; + +jsdomit.only = (description, run) => { + return it.only(description, withJsdom(run)); +}; + +function withJsdom(run) { + return async () => { + const jsdom = new JSDOM(""); + global.window = jsdom.window; + global.document = jsdom.window.document; + global.navigator = jsdom.window.navigator; + global.Event = jsdom.window.Event; + global.Element = jsdom.window.Element; + global.Node = jsdom.window.Node; + global.NodeList = jsdom.window.NodeList; + global.Text = jsdom.window.Text; + global.HTMLCollection = jsdom.window.HTMLCollection; + try { + return await run(); + } finally { + delete global.window; + delete global.document; + delete global.navigator; + delete global.Event; + delete global.Node; + delete global.NodeList; + delete global.HTMLCollection; + } + }; +} diff --git a/test/load-test.js b/test/load-test.js deleted file mode 100644 index ae7d7ed1..00000000 --- a/test/load-test.js +++ /dev/null @@ -1,163 +0,0 @@ -import load from "../src/load"; -import tape from "./tape"; - -tape("basic notebook as module loading", async test => { - let fulfilled, value = new Promise(resolve => fulfilled = resolve); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - value: () => 101 - } - ] - } - ] - }, null, ({name}) => { - if (name === "foo") return {fulfilled}; - }); - test.equals(await value, 101); -}); - -tape("notebooks as modules with variables depending on other variables", async test => { - let fulfilled, value = new Promise(resolve => fulfilled = resolve); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - inputs: ["bar"], - value: bar => bar * 2 - }, - { - name: "bar", - value: () => 101 - } - ] - } - ] - }, null, ({name}) => { - if (name === "foo") return {fulfilled}; - }); - test.equals(await value, 202); -}); - -tape("notebooks as modules with imports", async test => { - let fulfilled, value = new Promise(resolve => fulfilled = resolve); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - inputs: ["bar"], - value: bar => bar * 2 - }, - { - from: "notebook@2", - name: "bar", - remote: "baz" - } - ] - }, - { - id: "notebook@2", - variables: [ - { - name: "baz", - value: () => 101 - } - ] - } - ] - }, null, ({name}) => { - if (name === "foo") return {fulfilled}; - }); - test.equals(await value, 202); -}); - -tape("Rejects with an error when trying to import from a nonexistent module", async test => { - let rejected, value = new Promise((resolve, reject) => rejected = reject); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - inputs: ["nonexistent"], - value: nonexistent => nonexistent - }, - { - name: "nonexistent", - remote: "nonexistent", - from: "nope" - } - ] - } - ] - }, null, ({name}) => { - if (name === "foo") return {rejected}; - }); - try { - await value; - test.fail(); - } catch (error) { - test.deepEqual(error, {message: "nonexistent is not defined", input: "nonexistent"}); - } -}); - -tape("notebook as modules with builtins", async test => { - let fulfilled, value = new Promise(resolve => fulfilled = resolve); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - inputs: ["bar"], - value: bar => bar * 2 - } - ] - } - ] - }, { - bar: 42 - }, ({name}) => { - if (name === "foo") return {fulfilled}; - }); - test.equals(await value, 84); -}); - -tape("notebook with the default standard library", async test => { - let fulfilled, value = new Promise(resolve => fulfilled = resolve); - load({ - id: "notebook@1", - modules: [ - { - id: "notebook@1", - variables: [ - { - name: "foo", - inputs: ["html"], - value: html => html`
` - } - ] - } - ] - }, null, ({name}) => { - if (name === "foo") return {fulfilled}; - }); - test.equals((await value).outerHTML, '
'); -}); diff --git a/test/module/builtin-test.js b/test/module/builtin-test.js index d18964d6..c43a70ac 100644 --- a/test/module/builtin-test.js +++ b/test/module/builtin-test.js @@ -1,23 +1,23 @@ -import {Runtime} from "../../src"; -import tape from "../tape"; -import valueof from "../variable/valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof} from "../variable/valueof.js"; -tape("module.builtin(name, value) defines a module-specific builtin variable", async test => { +it("module.builtin(name, value) defines a module-specific builtin variable", async () => { const runtime = new Runtime(); const module = runtime.module(); module.builtin("foo", 42); const bar = module.variable(true).define("bar", ["foo"], foo => foo + 1); await new Promise(setImmediate); - test.deepEqual(await valueof(bar), {value: 43}); + assert.deepStrictEqual(await valueof(bar), {value: 43}); }); -tape("module.builtin(name, value) can be overridden by a normal variable", async test => { +it("module.builtin(name, value) can be overridden by a normal variable", async () => { const runtime = new Runtime(); const module = runtime.module(); module.builtin("foo", 0); const foo = module.variable(true).define("foo", [], () => 42); const bar = module.variable(true).define("bar", ["foo"], foo => foo + 1); await new Promise(setImmediate); - test.deepEqual(await valueof(foo), {value: 42}); - test.deepEqual(await valueof(bar), {value: 43}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(bar), {value: 43}); }); diff --git a/test/module/redefine-test.js b/test/module/redefine-test.js index 71a2d76b..b155cb21 100644 --- a/test/module/redefine-test.js +++ b/test/module/redefine-test.js @@ -1,46 +1,36 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; -import valueof from "../variable/valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof} from "../variable/valueof.js"; -tape("module.redefine(name, inputs, definition) can redefine a normal variable", async test => { +it("module.redefine(name, inputs, definition) can redefine a normal variable", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define("foo", [], () => 42); - test.equal(module.redefine("foo", [], () => 43), foo); - test.deepEqual(await valueof(foo), {value: 43}); + assert.strictEqual(module.redefine("foo", [], () => 43), foo); + assert.deepStrictEqual(await valueof(foo), {value: 43}); }); -tape("module.redefine(name, inputs, definition) can redefine an implicit variable", async test => { +it("module.redefine(name, inputs, definition) can redefine an implicit variable", async () => { const runtime = new Runtime({foo: 42}); const module = runtime.module(); const bar = module.variable(true).define("bar", ["foo"], foo => foo + 1); module.redefine("foo", [], () => 43); - test.deepEqual(await valueof(bar), {value: 44}); + assert.deepStrictEqual(await valueof(bar), {value: 44}); }); -tape("module.redefine(name, inputs, definition) can’t redefine a duplicate definition", async test => { +it("module.redefine(name, inputs, definition) can’t redefine a duplicate definition", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo1 = module.variable(true).define("foo", [], () => 1); const foo2 = module.variable(true).define("foo", [], () => 2); - try { - module.redefine("foo", [], () => 3); - test.fail(); - } catch (error) { - test.deepEqual(error, {message: "foo is defined more than once", input: undefined}); - } - test.deepEqual(await valueof(foo1), {error: "RuntimeError: foo is defined more than once"}); - test.deepEqual(await valueof(foo2), {error: "RuntimeError: foo is defined more than once"}); + assert.throws(() => module.redefine("foo", [], () => 3), /foo is defined more than once/); + assert.deepStrictEqual(await valueof(foo1), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(foo2), {error: "RuntimeError: foo is defined more than once"}); }); -tape("module.redefine(name, inputs, definition) throws an error if the specified variable doesn’t exist", async test => { +it("module.redefine(name, inputs, definition) throws an error if the specified variable doesn’t exist", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define("foo", [], () => 42); - try { - module.redefine("bar", [], () => 43, foo); - test.fail(); - } catch (error) { - test.deepEqual(error, {message: "bar is not defined", input: undefined}); - } + assert.throws(() => module.redefine("bar", [], () => 43, foo), /bar is not defined/); }); diff --git a/test/module/value-test.js b/test/module/value-test.js index 61f9c722..1183e532 100644 --- a/test/module/value-test.js +++ b/test/module/value-test.js @@ -1,122 +1,97 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; -tape("module.value(name) returns a promise to the variable’s next value", async test => { +it("module.value(name) returns a promise to the variable’s next value", async () => { const runtime = new Runtime(); const module = runtime.module(); module.variable(true).define("foo", [], () => 42); - test.deepEqual(await module.value("foo"), 42); + assert.deepStrictEqual(await module.value("foo"), 42); }); -tape("module.value(name) implicitly makes the variable reachable", async test => { +it("module.value(name) implicitly makes the variable reachable", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], () => 42); - test.deepEqual(await module.value("foo"), 42); + assert.deepStrictEqual(await module.value("foo"), 42); }); -tape("module.value(name) supports errors", async test => { +it("module.value(name) supports errors", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], () => { throw new Error(42); }); - try { - await module.value("foo"); - test.fail(); - } catch (error) { - test.deepEqual(error.message, "42"); - } + await assert.rejects(() => module.value("foo"), /42/); }); -tape("module.value(name) supports generators", async test => { +it("module.value(name) supports generators", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], function*() { yield 1; yield 2; yield 3; }); - test.deepEqual(await module.value("foo"), 1); - test.deepEqual(await module.value("foo"), 2); - test.deepEqual(await module.value("foo"), 3); - test.deepEqual(await module.value("foo"), 3); + assert.deepStrictEqual(await module.value("foo"), 1); + assert.deepStrictEqual(await module.value("foo"), 2); + assert.deepStrictEqual(await module.value("foo"), 3); + assert.deepStrictEqual(await module.value("foo"), 3); }); -tape("module.value(name) supports generators that throw", async test => { +it("module.value(name) supports generators that throw", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], function*() { yield 1; throw new Error("fooed"); }); module.define("bar", ["foo"], foo => foo); const [foo1, bar1] = await Promise.all([module.value("foo"), module.value("bar")]); - test.deepEqual(foo1, 1); - test.deepEqual(bar1, 1); - try { - await module.value("foo"); - test.fail(); - } catch (error) { - test.deepEqual(error.message, "fooed"); - } - try { - await module.value("bar"); - test.fail(); - } catch (error) { - test.deepEqual(error.message, "fooed"); - } + assert.deepStrictEqual(foo1, 1); + assert.deepStrictEqual(bar1, 1); + await assert.rejects(() => module.value("foo"), /fooed/); + await assert.rejects(() => module.value("bar"), /fooed/); }); -tape("module.value(name) supports async generators", async test => { +it("module.value(name) supports async generators", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], async function*() { yield 1; yield 2; yield 3; }); - test.deepEqual(await module.value("foo"), 1); - test.deepEqual(await module.value("foo"), 2); - test.deepEqual(await module.value("foo"), 3); - test.deepEqual(await module.value("foo"), 3); + assert.deepStrictEqual(await module.value("foo"), 1); + assert.deepStrictEqual(await module.value("foo"), 2); + assert.deepStrictEqual(await module.value("foo"), 3); + assert.deepStrictEqual(await module.value("foo"), 3); }); -tape("module.value(name) supports promises", async test => { +it("module.value(name) supports promises", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], async () => { return await 42; }); - test.deepEqual(await module.value("foo"), 42); + assert.deepStrictEqual(await module.value("foo"), 42); }); -tape("module.value(name) supports constants", async test => { +it("module.value(name) supports constants", async () => { const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], 42); - test.deepEqual(await module.value("foo"), 42); + assert.deepStrictEqual(await module.value("foo"), 42); }); -tape("module.value(name) supports missing variables", async test => { +it("module.value(name) supports missing variables", async () => { const runtime = new Runtime(); const module = runtime.module(); - try { - await module.value("bar"); - test.fail(); - } catch (error) { - test.deepEqual(error.message, "bar is not defined"); - } + await assert.rejects(() => module.value("bar"), /bar is not defined/); }); -tape("module.value(name) returns a promise on error", async test => { +it("module.value(name) returns a promise on error", async () => { const runtime = new Runtime(); const module = runtime.module(); const promise = module.value("bar"); - try { - await promise; - test.fail(); - } catch (error) { - test.deepEqual(error.message, "bar is not defined"); - } + await assert.rejects(promise, /bar is not defined/); }); -tape("module.value(name) does not force recomputation", async test => { +it("module.value(name) does not force recomputation", async () => { let foo = 0; const runtime = new Runtime(); const module = runtime.module(); module.define("foo", [], () => ++foo); - test.deepEqual(await module.value("foo"), 1); - test.deepEqual(await module.value("foo"), 1); - test.deepEqual(await module.value("foo"), 1); + assert.deepStrictEqual(await module.value("foo"), 1); + assert.deepStrictEqual(await module.value("foo"), 1); + assert.deepStrictEqual(await module.value("foo"), 1); }); -tape("module.value(name) does not expose stale values", async test => { +it("module.value(name) does not expose stale values", async () => { const runtime = new Runtime(); const module = runtime.module(); let resolve; @@ -125,10 +100,10 @@ tape("module.value(name) does not expose stale values", async test => { await new Promise((resolve) => setTimeout(resolve, 100)); variable.define("foo", [], () => "fresh"); resolve("stale"); - test.strictEqual(await value, "fresh"); + assert.strictEqual(await value, "fresh"); }); -tape("module.value(name) does not continue observing", async test => { +it("module.value(name) does not continue observing", async () => { const foos = []; const runtime = new Runtime(); const module = runtime.module(); @@ -141,10 +116,10 @@ tape("module.value(name) does not continue observing", async test => { foos.push(-1); } }); - test.strictEqual(await module.value("foo"), 1); - test.deepEqual(foos, [1]); + assert.strictEqual(await module.value("foo"), 1); + assert.deepStrictEqual(foos, [1]); await runtime._compute(); - test.deepEqual(foos, [1, 2, -1]); // 2 computed prior to being unobserved + assert.deepStrictEqual(foos, [1, 2, -1]); // 2 computed prior to being unobserved await runtime._compute(); - test.deepEqual(foos, [1, 2, -1]); // any change would represent a leak + assert.deepStrictEqual(foos, [1, 2, -1]); // any change would represent a leak }); diff --git a/test/runtime/builtins-test.js b/test/runtime/builtins-test.js index 91def98a..7f9cc7c7 100644 --- a/test/runtime/builtins-test.js +++ b/test/runtime/builtins-test.js @@ -1,34 +1,34 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; -import valueof from "../variable/valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof} from "../variable/valueof.js"; -tape("new Runtime(builtins) allows builtins to be defined as promises", async test => { +it("new Runtime(builtins) allows builtins to be defined as promises", async () => { const runtime = new Runtime({color: Promise.resolve("red")}); const main = runtime.module(); const foo = main.variable(true).define(null, ["color"], color => color); - test.deepEqual(await valueof(foo), {value: "red"}); + assert.deepStrictEqual(await valueof(foo), {value: "red"}); }); -tape("new Runtime(builtins) allows builtins to be defined as functions", async test => { +it("new Runtime(builtins) allows builtins to be defined as functions", async () => { const runtime = new Runtime({color: () => "red"}); const main = runtime.module(); const foo = main.variable(true).define(null, ["color"], color => color); - test.deepEqual(await valueof(foo), {value: "red"}); + assert.deepStrictEqual(await valueof(foo), {value: "red"}); }); -tape("new Runtime(builtins) allows builtins to be defined as async functions", async test => { +it("new Runtime(builtins) allows builtins to be defined as async functions", async () => { const runtime = new Runtime({color: async () => "red"}); const main = runtime.module(); const foo = main.variable(true).define(null, ["color"], color => color); - test.deepEqual(await valueof(foo), {value: "red"}); + assert.deepStrictEqual(await valueof(foo), {value: "red"}); }); -tape("new Runtime(builtins) allows builtins to be defined as generators", async test => { +it("new Runtime(builtins) allows builtins to be defined as generators", async () => { let i = 0; const runtime = new Runtime({i: function*() { while (i < 3) yield ++i; }}); const main = runtime.module(); const foo = main.variable(true).define(null, ["i"], i => i); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(foo), {value: 2}); - test.deepEqual(await valueof(foo), {value: 3}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 3}); }); diff --git a/test/tape.js b/test/tape.js deleted file mode 100644 index 02c53aef..00000000 --- a/test/tape.js +++ /dev/null @@ -1,39 +0,0 @@ -import {JSDOM} from "jsdom"; -import _ from "tape-await"; - -export default function tape(description, options, run) { - if (arguments.length === 2) run = options, options = undefined; - return _(description, wrap(options, run)); -} - -tape.skip = function(description, options, run) { - if (arguments.length === 2) run = options, options = undefined; - return _.skip(description, wrap(options, run)); -}; - -tape.only = function(description, options, run) { - if (arguments.length === 2) run = options, options = undefined; - return _.only(description, wrap(options, run)); -}; - -function wrap(options, run) { - return async test => { - const window = new JSDOM().window; - const document = window.document; - global.window = window; - global.document = document; - global.Element = window.Element; - global.Text = window.Text; - global.Node = window.Node; - try { - await run(test); - await new Promise(resolve => setTimeout(resolve, 20)); - } finally { - delete global.window; - delete global.document; - delete global.Element; - delete global.Text; - delete global.Node; - } - }; -} diff --git a/test/variable/define-test.js b/test/variable/define-test.js index 0fa8b7f1..46eb54c8 100644 --- a/test/variable/define-test.js +++ b/test/variable/define-test.js @@ -1,90 +1,90 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; -import valueof from "./valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof} from "./valueof.js"; -tape("variable.define(name, inputs, definition) can define a variable", async test => { +it("variable.define(name, inputs, definition) can define a variable", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define("foo", [], () => 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(inputs, function) can define an anonymous variable", async test => { +it("variable.define(inputs, function) can define an anonymous variable", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define([], () => 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(name, function) can define a named variable", async test => { +it("variable.define(name, function) can define a named variable", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define("foo", () => 42); const bar = module.variable(true).define("bar", ["foo"], foo => foo); - test.deepEqual(await valueof(foo), {value: 42}); - test.deepEqual(await valueof(bar), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(bar), {value: 42}); }); -tape("variable.define(function) can define an anonymous variable", async test => { +it("variable.define(function) can define an anonymous variable", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define(() => 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(null, inputs, value) can define an anonymous constant", async test => { +it("variable.define(null, inputs, value) can define an anonymous constant", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define(null, [], 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(inputs, value) can define an anonymous constant", async test => { +it("variable.define(inputs, value) can define an anonymous constant", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define([], 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(null, value) can define an anonymous constant", async test => { +it("variable.define(null, value) can define an anonymous constant", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define(null, 42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define(value) can define an anonymous constant", async test => { +it("variable.define(value) can define an anonymous constant", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define(42); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define detects missing inputs", async test => { +it("variable.define detects missing inputs", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true); const bar = module.variable(true).define("bar", ["foo"], foo => foo); - test.deepEqual(await valueof(foo), {value: undefined}); - test.deepEqual(await valueof(bar), {error: "RuntimeError: foo is not defined"}); + assert.deepStrictEqual(await valueof(foo), {value: undefined}); + assert.deepStrictEqual(await valueof(bar), {error: "RuntimeError: foo is not defined"}); foo.define("foo", 1); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 1}); }); -tape("variable.define detects duplicate names", async test => { +it("variable.define detects duplicate names", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define("foo", 1); const bar = module.variable(true).define("foo", 2); - test.deepEqual(await valueof(foo), {error: "RuntimeError: foo is defined more than once"}); - test.deepEqual(await valueof(bar), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(foo), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(bar), {error: "RuntimeError: foo is defined more than once"}); bar.define("bar", 2); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 2}); }); -tape("variable.define recomputes reachability as expected", async test => { +it("variable.define recomputes reachability as expected", async () => { const runtime = new Runtime(); const main = runtime.module(); const module = runtime.module(); @@ -96,21 +96,21 @@ tape("variable.define recomputes reachability as expected", async test => { main.variable().import("baz", module); main.variable().import("quux", module); await runtime._compute(); - test.equal(quux._reachable, true); - test.equal(baz._reachable, true); - test.equal(bar._reachable, true); - test.equal(foo._reachable, true); - test.deepEqual(await valueof(foo), {value: ["bar-42", "baz-42", 42]}); + assert.strictEqual(quux._reachable, true); + assert.strictEqual(baz._reachable, true); + assert.strictEqual(bar._reachable, true); + assert.strictEqual(foo._reachable, true); + assert.deepStrictEqual(await valueof(foo), {value: ["bar-42", "baz-42", 42]}); foo.define("foo", [], () => "foo"); await runtime._compute(); - test.equal(quux._reachable, false); - test.equal(baz._reachable, false); - test.equal(bar._reachable, false); - test.equal(foo._reachable, true); - test.deepEqual(await valueof(foo), {value: "foo"}); + assert.strictEqual(quux._reachable, false); + assert.strictEqual(baz._reachable, false); + assert.strictEqual(bar._reachable, false); + assert.strictEqual(foo._reachable, true); + assert.deepStrictEqual(await valueof(foo), {value: "foo"}); }); -tape("variable.define correctly detects reachability for unreachable cycles", async test => { +it("variable.define correctly detects reachability for unreachable cycles", async () => { let returned = false; const runtime = new Runtime(); const main = runtime.module(); @@ -120,43 +120,43 @@ tape("variable.define correctly detects reachability for unreachable cycles", as const quux = module.define("quux", ["zapp"], function*(zapp) { try { while (true) yield `quux-${zapp}`; } finally { returned = true; }}); const zapp = module.define("zapp", ["bar"], bar => `zaap-${bar}`); await runtime._compute(); - test.equal(bar._reachable, false); - test.equal(baz._reachable, false); - test.equal(quux._reachable, false); - test.equal(zapp._reachable, false); - test.deepEqual(await valueof(bar), {value: undefined}); - test.deepEqual(await valueof(baz), {value: undefined}); - test.deepEqual(await valueof(quux), {value: undefined}); - test.deepEqual(await valueof(zapp), {value: undefined}); + assert.strictEqual(bar._reachable, false); + assert.strictEqual(baz._reachable, false); + assert.strictEqual(quux._reachable, false); + assert.strictEqual(zapp._reachable, false); + assert.deepStrictEqual(await valueof(bar), {value: undefined}); + assert.deepStrictEqual(await valueof(baz), {value: undefined}); + assert.deepStrictEqual(await valueof(quux), {value: undefined}); + assert.deepStrictEqual(await valueof(zapp), {value: undefined}); main.variable().import("bar", module); const foo = main.variable(true).define("foo", ["bar"], bar => bar); await runtime._compute(); - test.equal(foo._reachable, true); - test.equal(bar._reachable, true); - test.equal(baz._reachable, true); - test.equal(quux._reachable, true); - test.equal(zapp._reachable, true); - test.deepEqual(await valueof(bar), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(baz), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(quux), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(zapp), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(foo), {error: "RuntimeError: circular definition"}); + assert.strictEqual(foo._reachable, true); + assert.strictEqual(bar._reachable, true); + assert.strictEqual(baz._reachable, true); + assert.strictEqual(quux._reachable, true); + assert.strictEqual(zapp._reachable, true); + assert.deepStrictEqual(await valueof(bar), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(baz), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(quux), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(zapp), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(foo), {error: "RuntimeError: circular definition"}); foo.define("foo", [], () => "foo"); await runtime._compute(); - test.equal(foo._reachable, true); - test.equal(bar._reachable, false); - test.equal(baz._reachable, false); - test.equal(quux._reachable, false); - test.equal(zapp._reachable, false); - test.deepEqual(await valueof(bar), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(baz), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(quux), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(zapp), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(foo), {value: "foo"}); - test.equal(returned, false); // Generator is never finalized because it has never run. -}); - -tape("variable.define terminates previously reachable generators", async test => { + assert.strictEqual(foo._reachable, true); + assert.strictEqual(bar._reachable, false); + assert.strictEqual(baz._reachable, false); + assert.strictEqual(quux._reachable, false); + assert.strictEqual(zapp._reachable, false); + assert.deepStrictEqual(await valueof(bar), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(baz), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(quux), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(zapp), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(foo), {value: "foo"}); + assert.strictEqual(returned, false); // Generator is never finalized because it has never run. +}); + +it("variable.define terminates previously reachable generators", async () => { let returned = false; const runtime = new Runtime(); const main = runtime.module(); @@ -164,14 +164,14 @@ tape("variable.define terminates previously reachable generators", async test => const bar = module.define("bar", [], function*() { try { while (true) yield 1; } finally { returned = true; }}); const foo = main.variable(true).define("foo", ["bar"], bar => bar); main.variable().import("bar", module); - test.deepEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); foo.define("foo", [], () => "foo"); - test.deepEqual(await valueof(foo), {value: "foo"}); - test.equal(bar._generator, undefined); - test.equal(returned, true); + assert.deepStrictEqual(await valueof(foo), {value: "foo"}); + assert.strictEqual(bar._generator, undefined); + assert.strictEqual(returned, true); }); -tape("variable.define does not terminate reachable generators", async test => { +it("variable.define does not terminate reachable generators", async () => { let returned = false; const runtime = new Runtime(); const main = runtime.module(); @@ -180,133 +180,133 @@ tape("variable.define does not terminate reachable generators", async test => { const baz = main.variable(true).define("baz", ["bar"], bar => bar); const foo = main.variable(true).define("foo", ["bar"], bar => bar); main.variable().import("bar", module); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(baz), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(baz), {value: 1}); foo.define("foo", [], () => "foo"); - test.deepEqual(await valueof(foo), {value: "foo"}); - test.deepEqual(await valueof(baz), {value: 1}); - test.equal(returned, false); + assert.deepStrictEqual(await valueof(foo), {value: "foo"}); + assert.deepStrictEqual(await valueof(baz), {value: 1}); + assert.strictEqual(returned, false); bar._invalidate(); await runtime._compute(); - test.equal(returned, true); + assert.strictEqual(returned, true); }); -tape("variable.define detects duplicate declarations", async test => { +it("variable.define detects duplicate declarations", async () => { const runtime = new Runtime(); const main = runtime.module(); const v1 = main.variable(true).define("foo", [], () => 1); const v2 = main.variable(true).define("foo", [], () => 2); const v3 = main.variable(true).define(null, ["foo"], foo => foo); - test.deepEqual(await valueof(v1), {error: "RuntimeError: foo is defined more than once"}); - test.deepEqual(await valueof(v2), {error: "RuntimeError: foo is defined more than once"}); - test.deepEqual(await valueof(v3), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(v1), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(v2), {error: "RuntimeError: foo is defined more than once"}); + assert.deepStrictEqual(await valueof(v3), {error: "RuntimeError: foo is defined more than once"}); }); -tape("variable.define detects missing inputs and erroneous inputs", async test => { +it("variable.define detects missing inputs and erroneous inputs", async () => { const runtime = new Runtime(); const main = runtime.module(); const v1 = main.variable(true).define("foo", ["baz"], () => 1); const v2 = main.variable(true).define("bar", ["foo"], () => 2); - test.deepEqual(await valueof(v1), {error: "RuntimeError: baz is not defined"}); - test.deepEqual(await valueof(v2), {error: "RuntimeError: baz is not defined"}); + assert.deepStrictEqual(await valueof(v1), {error: "RuntimeError: baz is not defined"}); + assert.deepStrictEqual(await valueof(v2), {error: "RuntimeError: baz is not defined"}); }); -tape("variable.define allows masking of builtins", async test => { +it("variable.define allows masking of builtins", async () => { const runtime = new Runtime({color: "red"}); const main = runtime.module(); const mask = main.define("color", "green"); const foo = main.variable(true).define(null, ["color"], color => color); - test.deepEqual(await valueof(foo), {value: "green"}); + assert.deepStrictEqual(await valueof(foo), {value: "green"}); mask.delete(); - test.deepEqual(await valueof(foo), {value: "red"}); + assert.deepStrictEqual(await valueof(foo), {value: "red"}); }); -tape("variable.define supports promises", async test => { +it("variable.define supports promises", async () => { const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => new Promise(resolve => setImmediate(() => resolve(42)))); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define supports generator cells", async test => { +it("variable.define supports generator cells", async () => { let i = 0; const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], function*() { while (i < 3) yield ++i; }); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(foo), {value: 2}); - test.deepEqual(await valueof(foo), {value: 3}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 3}); }); -tape("variable.define supports generator objects", async test => { +it("variable.define supports generator objects", async () => { function* range(n) { for (let i = 0; i < n; ++i) yield i; } const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => range(3)); - test.deepEqual(await valueof(foo), {value: 0}); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 0}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); }); -tape("variable.define supports a promise that resolves to a generator object", async test => { +it("variable.define supports a promise that resolves to a generator object", async () => { function* range(n) { for (let i = 0; i < n; ++i) yield i; } const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], async () => range(3)); - test.deepEqual(await valueof(foo), {value: 0}); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 0}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); }); -tape("variable.define supports generators that yield promises", async test => { +it("variable.define supports generators that yield promises", async () => { let i = 0; const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], function*() { while (i < 3) yield Promise.resolve(++i); }); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(foo), {value: 2}); - test.deepEqual(await valueof(foo), {value: 3}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 3}); }); -tape("variable.define allows a variable to be redefined", async test => { +it("variable.define allows a variable to be redefined", async () => { const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => 1); const bar = main.variable(true).define("bar", ["foo"], foo => new Promise(resolve => setImmediate(() => resolve(foo)))); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 1}); foo.define("foo", [], () => 2); - test.deepEqual(await valueof(foo), {value: 2}); - test.deepEqual(await valueof(bar), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(bar), {value: 2}); }); -tape("variable.define recomputes downstream values when a variable is renamed", async test => { +it("variable.define recomputes downstream values when a variable is renamed", async () => { const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => 1); const bar = main.variable(true).define("bar", [], () => 2); const baz = main.variable(true).define("baz", ["foo", "bar"], (foo, bar) => foo + bar); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 2}); - test.deepEqual(await valueof(baz), {value: 3}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 2}); + assert.deepStrictEqual(await valueof(baz), {value: 3}); foo.define("quux", [], () => 10); - test.deepEqual(await valueof(foo), {value: 10}); - test.deepEqual(await valueof(bar), {value: 2}); - test.deepEqual(await valueof(baz), {error: "RuntimeError: foo is not defined"}); + assert.deepStrictEqual(await valueof(foo), {value: 10}); + assert.deepStrictEqual(await valueof(bar), {value: 2}); + assert.deepStrictEqual(await valueof(baz), {error: "RuntimeError: foo is not defined"}); }); -tape("variable.define ignores an asynchronous result from a redefined variable", async test => { +it("variable.define ignores an asynchronous result from a redefined variable", async () => { const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => new Promise(resolve => setTimeout(() => resolve("fail"), 150))); await new Promise(setImmediate); foo.define("foo", [], () => "success"); await new Promise(resolve => setTimeout(resolve, 250)); - test.deepEqual(await valueof(foo), {value: "success"}); - test.deepEqual(foo._value, "success"); + assert.deepStrictEqual(await valueof(foo), {value: "success"}); + assert.deepStrictEqual(foo._value, "success"); }); -tape("variable.define ignores an asynchronous result from a redefined input", async test => { +it("variable.define ignores an asynchronous result from a redefined input", async () => { const runtime = new Runtime(); const main = runtime.module(); const bar = main.variable().define("bar", [], () => new Promise(resolve => setTimeout(() => resolve("fail"), 150))); @@ -314,82 +314,82 @@ tape("variable.define ignores an asynchronous result from a redefined input", as await new Promise(setImmediate); bar.define("bar", [], () => "success"); await new Promise(resolve => setTimeout(resolve, 250)); - test.deepEqual(await valueof(foo), {value: "success"}); - test.deepEqual(foo._value, "success"); + assert.deepStrictEqual(await valueof(foo), {value: "success"}); + assert.deepStrictEqual(foo._value, "success"); }); -tape("variable.define does not try to compute unreachable variables", async test => { +it("variable.define does not try to compute unreachable variables", async () => { const runtime = new Runtime(); const main = runtime.module(); let evaluated = false; const foo = main.variable(true).define("foo", [], () => 1); const bar = main.variable().define("bar", ["foo"], (foo) => evaluated = foo); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: undefined}); - test.equals(evaluated, false); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: undefined}); + assert.strictEqual(evaluated, false); }); -tape("variable.define does not try to compute unreachable variables that are outputs of reachable variables", async test => { +it("variable.define does not try to compute unreachable variables that are outputs of reachable variables", async () => { const runtime = new Runtime(); const main = runtime.module(); let evaluated = false; const foo = main.variable(true).define("foo", [], () => 1); const bar = main.variable(true).define("bar", [], () => 2); const baz = main.variable().define("baz", ["foo", "bar"], (foo, bar) => evaluated = foo + bar); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 2}); - test.deepEqual(await valueof(baz), {value: undefined}); - test.equals(evaluated, false); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 2}); + assert.deepStrictEqual(await valueof(baz), {value: undefined}); + assert.strictEqual(evaluated, false); }); -tape("variable.define can reference whitelisted globals", async test => { +it("variable.define can reference whitelisted globals", async () => { const runtime = new Runtime(null, name => name === "magic" ? 21 : undefined); const module = runtime.module(); const foo = module.variable(true).define(["magic"], magic => magic * 2); - test.deepEqual(await valueof(foo), {value: 42}); + assert.deepStrictEqual(await valueof(foo), {value: 42}); }); -tape("variable.define captures the value of whitelisted globals", async test => { +it("variable.define captures the value of whitelisted globals", async () => { let magic = 0; const runtime = new Runtime(null, name => name === "magic" ? ++magic : undefined); const module = runtime.module(); const foo = module.variable(true).define(["magic"], magic => magic * 2); - test.deepEqual(await valueof(foo), {value: 2}); - test.deepEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); }); -tape("variable.define can override whitelisted globals", async test => { +it("variable.define can override whitelisted globals", async () => { const runtime = new Runtime(null, name => name === "magic" ? 1 : undefined); const module = runtime.module(); module.variable().define("magic", [], () => 2); const foo = module.variable(true).define(["magic"], magic => magic * 2); - test.deepEqual(await valueof(foo), {value: 4}); + assert.deepStrictEqual(await valueof(foo), {value: 4}); }); -tape("variable.define can dynamically override whitelisted globals", async test => { +it("variable.define can dynamically override whitelisted globals", async () => { const runtime = new Runtime(null, name => name === "magic" ? 1 : undefined); const module = runtime.module(); const foo = module.variable(true).define(["magic"], magic => magic * 2); - test.deepEqual(await valueof(foo), {value: 2}); + assert.deepStrictEqual(await valueof(foo), {value: 2}); module.variable().define("magic", [], () => 2); - test.deepEqual(await valueof(foo), {value: 4}); + assert.deepStrictEqual(await valueof(foo), {value: 4}); }); -tape("variable.define cannot reference non-whitelisted globals", async test => { +it("variable.define cannot reference non-whitelisted globals", async () => { const runtime = new Runtime(); const module = runtime.module(); const foo = module.variable(true).define(["magic"], magic => magic * 2); - test.deepEqual(await valueof(foo), {error: "RuntimeError: magic is not defined"}); + assert.deepStrictEqual(await valueof(foo), {error: "RuntimeError: magic is not defined"}); }); -tape("variable.define correctly handles globals that throw", async test => { +it("variable.define correctly handles globals that throw", async () => { const runtime = new Runtime(null, name => { if (name === "oops") throw new Error("oops"); }); const module = runtime.module(); const foo = module.variable(true).define(["oops"], oops => oops); - test.deepEqual(await valueof(foo), {error: "RuntimeError: oops"}); + assert.deepStrictEqual(await valueof(foo), {error: "RuntimeError: oops"}); }); -tape("variable.define allows other variables to begin computation before a generator may resume", async test => { +it("variable.define allows other variables to begin computation before a generator may resume", async () => { const runtime = new Runtime(); const module = runtime.module(); const main = runtime.module(); @@ -398,37 +398,37 @@ tape("variable.define allows other variables to begin computation before a gener let valIteration = 0; const onGenFulfilled = value => { if (genIteration === 0) { - test.equals(valIteration, 0); - test.equals(value, 1); - test.equals(i, 1); + assert.strictEqual(valIteration, 0); + assert.strictEqual(value, 1); + assert.strictEqual(i, 1); } else if (genIteration === 1) { - test.equals(valIteration, 1); - test.equals(value, 2); - test.equals(i, 2); + assert.strictEqual(valIteration, 1); + assert.strictEqual(value, 2); + assert.strictEqual(i, 2); } else if (genIteration === 2) { - test.equals(valIteration, 2); - test.equals(value, 3); - test.equals(i, 3); + assert.strictEqual(valIteration, 2); + assert.strictEqual(value, 3); + assert.strictEqual(i, 3); } else { - test.fail(); + assert.fail(); } genIteration++; }; const onValFulfilled = value => { if (valIteration === 0) { - test.equals(genIteration, 1); - test.equals(value, 1); - test.equals(i, 1); + assert.strictEqual(genIteration, 1); + assert.strictEqual(value, 1); + assert.strictEqual(i, 1); } else if (valIteration === 1) { - test.equals(genIteration, 2); - test.equals(value, 2); - test.equals(i, 2); + assert.strictEqual(genIteration, 2); + assert.strictEqual(value, 2); + assert.strictEqual(i, 2); } else if (valIteration === 2) { - test.equals(genIteration, 3); - test.equals(value, 3); - test.equals(i, 3); + assert.strictEqual(genIteration, 3); + assert.strictEqual(value, 3); + assert.strictEqual(i, 3); } else { - test.fail(); + assert.fail(); } valIteration++; }; @@ -442,20 +442,20 @@ tape("variable.define allows other variables to begin computation before a gener }); main.variable().import("gen", module); const val = main.variable({fulfilled: onValFulfilled}).define("val", ["gen"], i => i); - test.equals(await gen._promise, undefined, "gen cell undefined"); - test.equals(await val._promise, undefined, "val cell undefined"); + assert.strictEqual(await gen._promise, undefined, "gen cell undefined"); + assert.strictEqual(await val._promise, undefined, "val cell undefined"); await runtime._compute(); - test.equals(await gen._promise, 1, "gen cell 1"); - test.equals(await val._promise, 1, "val cell 1"); + assert.strictEqual(await gen._promise, 1, "gen cell 1"); + assert.strictEqual(await val._promise, 1, "val cell 1"); await runtime._compute(); - test.equals(await gen._promise, 2, "gen cell 2"); - test.equals(await val._promise, 2, "val cell 2"); + assert.strictEqual(await gen._promise, 2, "gen cell 2"); + assert.strictEqual(await val._promise, 2, "val cell 2"); await runtime._compute(); - test.equals(await gen._promise, 3, "gen cell 3"); - test.equals(await val._promise, 3, "val cell 3"); + assert.strictEqual(await gen._promise, 3, "gen cell 3"); + assert.strictEqual(await val._promise, 3, "val cell 3"); }); -tape("variable.define allows other variables to begin computation before a generator may resume", async test => { +it("variable.define allows other variables to begin computation before a generator may resume", async () => { const runtime = new Runtime(); const main = runtime.module(); let i = 0; @@ -470,19 +470,19 @@ tape("variable.define allows other variables to begin computation before a gener }); const val = main.variable(true).define("val", ["gen"], gen => { j++; - test.equals(gen, j, "gen = j"); - test.equals(gen, i, "gen = i"); + assert.strictEqual(gen, j, "gen = j"); + assert.strictEqual(gen, i, "gen = i"); return gen; }); - test.equals(await gen._promise, undefined, "gen = undefined"); - test.equals(await val._promise, undefined, "val = undefined"); + assert.strictEqual(await gen._promise, undefined, "gen = undefined"); + assert.strictEqual(await val._promise, undefined, "val = undefined"); await runtime._compute(); - test.equals(await gen._promise, 1, "gen cell 1"); - test.equals(await val._promise, 1, "val cell 1"); + assert.strictEqual(await gen._promise, 1, "gen cell 1"); + assert.strictEqual(await val._promise, 1, "val cell 1"); await runtime._compute(); - test.equals(await gen._promise, 2, "gen cell 2"); - test.equals(await val._promise, 2, "val cell 2"); + assert.strictEqual(await gen._promise, 2, "gen cell 2"); + assert.strictEqual(await val._promise, 2, "val cell 2"); await runtime._compute(); - test.equals(await gen._promise, 3, "gen cell 3"); - test.equals(await val._promise, 3, "val cell 3"); + assert.strictEqual(await gen._promise, 3, "gen cell 3"); + assert.strictEqual(await val._promise, 3, "val cell 3"); }); diff --git a/test/variable/delete-test.js b/test/variable/delete-test.js index 8a18f409..a595479a 100644 --- a/test/variable/delete-test.js +++ b/test/variable/delete-test.js @@ -1,15 +1,15 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; -import valueof from "./valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof} from "./valueof.js"; -tape("variable.delete allows a variable to be deleted", async test => { +it("variable.delete allows a variable to be deleted", async () => { const runtime = new Runtime(); const main = runtime.module(); const foo = main.variable(true).define("foo", [], () => 1); const bar = main.variable(true).define("bar", ["foo"], foo => new Promise(resolve => setImmediate(() => resolve(foo)))); - test.deepEqual(await valueof(foo), {value: 1}); - test.deepEqual(await valueof(bar), {value: 1}); + assert.deepStrictEqual(await valueof(foo), {value: 1}); + assert.deepStrictEqual(await valueof(bar), {value: 1}); foo.delete(); - test.deepEqual(await valueof(foo), {value: undefined}); - test.deepEqual(await valueof(bar), {error: "RuntimeError: foo is not defined"}); + assert.deepStrictEqual(await valueof(foo), {value: undefined}); + assert.deepStrictEqual(await valueof(bar), {error: "RuntimeError: foo is not defined"}); }); diff --git a/test/variable/derive-test.js b/test/variable/derive-test.js index 76160190..86e82334 100644 --- a/test/variable/derive-test.js +++ b/test/variable/derive-test.js @@ -1,9 +1,9 @@ -import {Runtime} from "../../src/"; -import identity from "../../src/identity"; -import tape from "../tape"; -import valueof, {delay, promiseInspector, sleep} from "./valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {identity} from "../../src/identity.js"; +import {valueof, promiseInspector, sleep} from "./valueof.js"; -tape("module.derive(overrides, module) injects variables into a copied module", async test => { +it("module.derive(overrides, module) injects variables into a copied module", async () => { const runtime = new Runtime(); const module0 = runtime.module(); const a0 = module0.variable(true).define("a", [], () => 1); @@ -13,25 +13,25 @@ tape("module.derive(overrides, module) injects variables into a copied module", const module1_0 = module0.derive([{name: "d", alias: "b"}], module1); const c1 = module1_0.variable(true).define(null, ["c"], c => c); const d1 = module1.define("d", [], () => 42); - test.deepEqual(await valueof(a0), {value: 1}); - test.deepEqual(await valueof(b0), {value: 2}); - test.deepEqual(await valueof(c0), {value: 3}); - test.deepEqual(await valueof(c1), {value: 43}); - test.deepEqual(await valueof(d1), {value: 42}); + assert.deepStrictEqual(await valueof(a0), {value: 1}); + assert.deepStrictEqual(await valueof(b0), {value: 2}); + assert.deepStrictEqual(await valueof(c0), {value: 3}); + assert.deepStrictEqual(await valueof(c1), {value: 43}); + assert.deepStrictEqual(await valueof(d1), {value: 42}); }); -tape("module.derive(…) copies module-specific builtins", async test => { +it("module.derive(…) copies module-specific builtins", async () => { const runtime = new Runtime(); const module0 = runtime.module(); module0.builtin("a", 1); const b0 = module0.variable(true).define("b", ["a"], a => a + 1); const module1_0 = module0.derive([], module0); const c1 = module1_0.variable(true).define("c", ["a"], a => a + 2); - test.deepEqual(await valueof(b0), {value: 2}); - test.deepEqual(await valueof(c1), {value: 3}); + assert.deepStrictEqual(await valueof(b0), {value: 2}); + assert.deepStrictEqual(await valueof(c1), {value: 3}); }); -tape("module.derive(…) can inject into modules that inject into modules", async test => { +it("module.derive(…) can inject into modules that inject into modules", async () => { const runtime = new Runtime(); // Module A @@ -59,16 +59,16 @@ tape("module.derive(…) can inject into modules that inject into modules", asyn const CB = B.derive([{name: "f", alias: "d"}], C); const g = C.variable(true).import("e", "g", CB); - test.deepEqual(await valueof(g), {value: 5}); - test.strictEqual(g._module, C); - test.strictEqual(g._inputs[0]._module, CB); - test.strictEqual(g._inputs[0]._inputs[0]._module._source, BA); - test.strictEqual(C._source, null); - test.strictEqual(CB._source, B); - test.strictEqual(BA._source, A); + assert.deepStrictEqual(await valueof(g), {value: 5}); + assert.strictEqual(g._module, C); + assert.strictEqual(g._inputs[0]._module, CB); + assert.strictEqual(g._inputs[0]._inputs[0]._module._source, BA); + assert.strictEqual(C._source, null); + assert.strictEqual(CB._source, B); + assert.strictEqual(BA._source, A); }); -tape("module.derive(…) can inject into modules that inject into modules that inject into modules", async test => { +it("module.derive(…) can inject into modules that inject into modules that inject into modules", async () => { const runtime = new Runtime(); // Module A @@ -104,15 +104,15 @@ tape("module.derive(…) can inject into modules that inject into modules that i const DC = C.derive([{name: "h", alias: "f"}], D); const i = D.variable(true).import("g", "i", DC); - test.deepEqual(await valueof(i), {value: 6}); - test.strictEqual(i._module, D); - test.strictEqual(i._inputs[0]._module, DC); - test.strictEqual(i._inputs[0]._module._source, C); - test.strictEqual(i._inputs[0]._inputs[0]._module._source, CB); - test.strictEqual(i._inputs[0]._inputs[0]._module._source._source, B); + assert.deepStrictEqual(await valueof(i), {value: 6}); + assert.strictEqual(i._module, D); + assert.strictEqual(i._inputs[0]._module, DC); + assert.strictEqual(i._inputs[0]._module._source, C); + assert.strictEqual(i._inputs[0]._inputs[0]._module._source, CB); + assert.strictEqual(i._inputs[0]._inputs[0]._module._source._source, B); }); -tape("module.derive(…) does not copy non-injected modules", async test => { +it("module.derive(…) does not copy non-injected modules", async () => { const runtime = new Runtime(); // Module A @@ -137,13 +137,13 @@ tape("module.derive(…) does not copy non-injected modules", async test => { const CB = B.derive([{name: "f", alias: "d"}], C); const g = C.variable(true).import("e", "g", CB); - test.deepEqual(await valueof(g), {value: 3}); - test.strictEqual(g._module, C); - test.strictEqual(g._inputs[0]._module, CB); - test.strictEqual(g._inputs[0]._inputs[0]._module, A); + assert.deepStrictEqual(await valueof(g), {value: 3}); + assert.strictEqual(g._module, C); + assert.strictEqual(g._inputs[0]._module, CB); + assert.strictEqual(g._inputs[0]._inputs[0]._module, A); }); -tape("module.derive(…) does not copy non-injected modules, again", async test => { +it("module.derive(…) does not copy non-injected modules, again", async () => { const runtime = new Runtime(); const A = runtime.module(); A.define("a", () => ({})); @@ -155,11 +155,11 @@ tape("module.derive(…) does not copy non-injected modules, again", async test const a2 = C.variable(true).import("a", "a2", A); const {value: v1} = await valueof(a1); const {value: v2} = await valueof(a2); - test.deepEqual(v1, {}); - test.strictEqual(v1, v2); + assert.deepStrictEqual(v1, {}); + assert.strictEqual(v1, v2); }); -tape("module.derive() supports lazy import-with", async test => { +it("module.derive() supports lazy import-with", async () => { let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve); function define1(runtime, observer) { @@ -189,10 +189,10 @@ tape("module.derive() supports lazy import-with", async test => { await sleep(); resolve2(define2); - test.deepEqual(await inspectorC, 4); + assert.deepStrictEqual(await inspectorC, 4); }); -tape("module.derive() supports lazy transitive import-with", async test => { +it("module.derive() supports lazy transitive import-with", async () => { let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve); let resolve3, promise3 = new Promise((resolve) => resolve3 = resolve); let module2_1; @@ -251,9 +251,9 @@ tape("module.derive() supports lazy transitive import-with", async test => { await sleep(); const module1 = runtime.module(define1); const c1 = module1._scope.get("c"); - test.strictEqual(c1, variableC_1); - test.deepEqual(c1._inputs.map(i => i._name), ["module 2", "@variable"]); - test.strictEqual(runtime._modules.size, 1); + assert.strictEqual(c1, variableC_1); + assert.deepStrictEqual(c1._inputs.map(i => i._name), ["module 2", "@variable"]); + assert.strictEqual(runtime._modules.size, 1); // After module 2 loads, the variable c in module 1 has been redefined; it is // now an import of c from a derived copy of module 2, module 2'. In addition, @@ -261,15 +261,15 @@ tape("module.derive() supports lazy transitive import-with", async test => { resolve2(define2); await sleep(); const module2 = runtime.module(define2); - test.deepEqual(c1._inputs.map(i => i._name), ["c"]); - test.strictEqual(c1._definition, identity); - test.strictEqual(c1._inputs[0]._module, module2_1); - test.strictEqual(module2_1._source, module2); - test.strictEqual(runtime._modules.size, 2); + assert.deepStrictEqual(c1._inputs.map(i => i._name), ["c"]); + assert.strictEqual(c1._definition, identity); + assert.strictEqual(c1._inputs[0]._module, module2_1); + assert.strictEqual(module2_1._source, module2); + assert.strictEqual(runtime._modules.size, 2); const b2_1 = module2_1._scope.get("b"); - test.deepEqual(b2_1._inputs.map(i => i._name), ["b"]); - test.deepEqual(b2_1._definition, identity); - test.deepEqual(b2_1._inputs[0]._module, module1); + assert.deepStrictEqual(b2_1._inputs.map(i => i._name), ["b"]); + assert.deepStrictEqual(b2_1._definition, identity); + assert.deepStrictEqual(b2_1._inputs[0]._module, module1); // After module 3 loads, the variable c in module 2' has been redefined; it is // now an import of c from a derived copy of module 3, module 3'. In addition, @@ -278,13 +278,13 @@ tape("module.derive() supports lazy transitive import-with", async test => { await sleep(); const module3 = runtime.module(define3); const c2_1 = module2_1._scope.get("c"); - test.strictEqual(c2_1._module, module2_1); - test.strictEqual(c2_1._definition, identity); - test.strictEqual(c2_1._inputs[0]._module, module3_2); - test.strictEqual(module3_2._source, module3); + assert.strictEqual(c2_1._module, module2_1); + assert.strictEqual(c2_1._definition, identity); + assert.strictEqual(c2_1._inputs[0]._module, module3_2); + assert.strictEqual(module3_2._source, module3); const b3_2 = module3_2._scope.get("b"); - test.deepEqual(b3_2._inputs.map(i => i._name), ["b"]); - test.deepEqual(b3_2._definition, identity); - test.deepEqual(b3_2._inputs[0]._module, module2_1); - test.deepEqual(await inspectorC, 5); + assert.deepStrictEqual(b3_2._inputs.map(i => i._name), ["b"]); + assert.deepStrictEqual(b3_2._definition, identity); + assert.deepStrictEqual(b3_2._inputs[0]._module, module2_1); + assert.deepStrictEqual(await inspectorC, 5); }); diff --git a/test/variable/import-test.js b/test/variable/import-test.js index da622afb..1534d7b7 100644 --- a/test/variable/import-test.js +++ b/test/variable/import-test.js @@ -1,38 +1,38 @@ -import {Runtime} from "../../src/"; -import tape from "../tape"; -import valueof, {promiseInspector, sleep} from "./valueof"; +import {Runtime} from "@observablehq/runtime"; +import assert from "assert"; +import {valueof, promiseInspector, sleep} from "./valueof.js"; -tape("variable.import(name, module) imports a variable from another module", async test => { +it("variable.import(name, module) imports a variable from another module", async () => { const runtime = new Runtime(); const main = runtime.module(); const module = runtime.module(); module.define("foo", [], () => 42); main.import("foo", module); const bar = main.variable(true).define("bar", ["foo"], foo => `bar-${foo}`); - test.deepEqual(await valueof(bar), {value: "bar-42"}); + assert.deepStrictEqual(await valueof(bar), {value: "bar-42"}); }); -tape("variable.import(name, alias, module) imports a variable from another module under an alias", async test => { +it("variable.import(name, alias, module) imports a variable from another module under an alias", async () => { const runtime = new Runtime(); const main = runtime.module(); const module = runtime.module(); module.define("foo", [], () => 42); main.import("foo", "baz", module); const bar = main.variable(true).define("bar", ["baz"], baz => `bar-${baz}`); - test.deepEqual(await valueof(bar), {value: "bar-42"}); + assert.deepStrictEqual(await valueof(bar), {value: "bar-42"}); }); -tape("variable.import(name, module) does not compute the imported variable unless referenced", async test => { +it("variable.import(name, module) does not compute the imported variable unless referenced", async () => { const runtime = new Runtime(); const main = runtime.module(); const module = runtime.module(); - const foo = module.define("foo", [], () => test.fail()); + const foo = module.define("foo", [], () => assert.fail()); main.import("foo", module); await runtime._computing; - test.equal(foo._reachable, false); + assert.strictEqual(foo._reachable, false); }); -tape("variable.import(name, module) can import a variable that depends on a mutable from another module", async test => { +it("variable.import(name, module) can import a variable that depends on a mutable from another module", async () => { const runtime = new Runtime(); const main = runtime.module(); const module = runtime.module(); @@ -40,10 +40,10 @@ tape("variable.import(name, module) can import a variable that depends on a muta module.define("bar", ["mutable foo"], (foo) => foo); main.import("bar", module); const baz = main.variable(true).define("baz", ["bar"], bar => `baz-${bar}`); - test.deepEqual(await valueof(baz), {value: "baz-13"}); + assert.deepStrictEqual(await valueof(baz), {value: "baz-13"}); }); -tape("variable.import() allows non-circular imported values from circular imports", async test => { +it("variable.import() allows non-circular imported values from circular imports", async () => { const runtime = new Runtime(); const a = runtime.module(); const b = runtime.module(); @@ -53,11 +53,11 @@ tape("variable.import() allows non-circular imported values from circular import b.import("foo", a); const afoobar = a.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'a' + foo + bar); const bfoobar = b.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'b' + foo + bar); - test.deepEqual(await valueof(afoobar), {value: "afoobar"}); - test.deepEqual(await valueof(bfoobar), {value: "bfoobar"}); + assert.deepStrictEqual(await valueof(afoobar), {value: "afoobar"}); + assert.deepStrictEqual(await valueof(bfoobar), {value: "bfoobar"}); }); -tape("variable.import() fails when importing creates a circular reference", async test => { +it("variable.import() fails when importing creates a circular reference", async () => { const runtime = new Runtime(); const a = runtime.module(); const b = runtime.module(); @@ -67,108 +67,103 @@ tape("variable.import() fails when importing creates a circular reference", asyn b.define("bar", ["foo"], (foo) => `${foo}bar`); const afoobar = a.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'a' + foo + bar); const bbarfoo = b.variable(true).define("barfoo", ["bar", "foo"], (bar, foo) => 'b' + bar + foo); - test.deepEqual(await valueof(afoobar), {error: "RuntimeError: circular definition"}); - test.deepEqual(await valueof(bbarfoo), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(afoobar), {error: "RuntimeError: circular definition"}); + assert.deepStrictEqual(await valueof(bbarfoo), {error: "RuntimeError: circular definition"}); }); -tape( - "variable.import() allows direct circular import-with if the resulting variables are not circular", - async test => { - const runtime = new Runtime(); - let a1, b1, a2, b2; - - // Module 1 - // a = 1 - // b - // import {b} with {a} from "2" - function define1() { - const main = runtime.module(); - a1 = main.variable(true).define("a", () => 1); - b1 = main.variable(true).define(["b"], (b) => b); - const child1 = runtime.module(define2).derive(["a"], main); - main.import("b", child1); - return main; - } - - // Module 2 - // b = 2 - // a - // import {a} with {b} from "1" - function define2() { - const main = runtime.module(); - b2 = main.variable(true).define("b", () => 2); - a2 = main.variable(true).define(["a"], (a) => a); - const child1 = runtime.module(define1).derive(["b"], main); - main.import("a", child1); - return main; - } +it("variable.import() allows direct circular import-with if the resulting variables are not circular", async () => { + const runtime = new Runtime(); + let a1, b1, a2, b2; - define1(); + // Module 1 + // a = 1 + // b + // import {b} with {a} from "2" + function define1() { + const main = runtime.module(); + a1 = main.variable(true).define("a", () => 1); + b1 = main.variable(true).define(["b"], (b) => b); + const child1 = runtime.module(define2).derive(["a"], main); + main.import("b", child1); + return main; + } - test.deepEqual(await valueof(a1), {value: 1}); - test.deepEqual(await valueof(b1), {value: 2}); - test.deepEqual(await valueof(a2), {value: 1}); - test.deepEqual(await valueof(b2), {value: 2}); + // Module 2 + // b = 2 + // a + // import {a} with {b} from "1" + function define2() { + const main = runtime.module(); + b2 = main.variable(true).define("b", () => 2); + a2 = main.variable(true).define(["a"], (a) => a); + const child1 = runtime.module(define1).derive(["b"], main); + main.import("a", child1); + return main; } -); -tape( - "variable.import() allows indirect circular import-with if the resulting variables are not circular", - async test => { - const runtime = new Runtime(); - let a, b, c, importA, importB, importC; - - // Module 1 - // a = 1 - // c - // import {c} with {a} from "3" - function define1() { - const main = runtime.module(); - a = main.variable(true).define("a", () => 1); - importC = main.variable(true).define(["c"], (c) => c); - const child3 = runtime.module(define3).derive(["a"], main); - main.import("c", child3); - return main; - } + define1(); - // Module 2 - // b = 2 - // a - // import {a} with {b} from "1" - function define2() { - const main = runtime.module(); - b = main.variable(true).define("b", () => 2); - importA = main.variable(true).define(["a"], (a) => a); - const child1 = runtime.module(define1).derive(["b"], main); - main.import("a", child1); - return main; - } + assert.deepStrictEqual(await valueof(a1), {value: 1}); + assert.deepStrictEqual(await valueof(b1), {value: 2}); + assert.deepStrictEqual(await valueof(a2), {value: 1}); + assert.deepStrictEqual(await valueof(b2), {value: 2}); +} +); - // Module 3 - // c = 3 - // b - // import {b} with {c} from "2" - function define3() { - const main = runtime.module(); - c = main.variable(true).define("c", () => 3); - importB = main.variable(true).define(["b"], (b) => b); - const child2 = runtime.module(define2).derive(["c"], main); - main.import("b", child2); - return main; - } +it("variable.import() allows indirect circular import-with if the resulting variables are not circular", async () => { + const runtime = new Runtime(); + let a, b, c, importA, importB, importC; - define1(); + // Module 1 + // a = 1 + // c + // import {c} with {a} from "3" + function define1() { + const main = runtime.module(); + a = main.variable(true).define("a", () => 1); + importC = main.variable(true).define(["c"], (c) => c); + const child3 = runtime.module(define3).derive(["a"], main); + main.import("c", child3); + return main; + } - test.deepEqual(await valueof(a), {value: 1}); - test.deepEqual(await valueof(b), {value: 2}); - test.deepEqual(await valueof(c), {value: 3}); - test.deepEqual(await valueof(importA), {value: 1}); - test.deepEqual(await valueof(importB), {value: 2}); - test.deepEqual(await valueof(importC), {value: 3}); + // Module 2 + // b = 2 + // a + // import {a} with {b} from "1" + function define2() { + const main = runtime.module(); + b = main.variable(true).define("b", () => 2); + importA = main.variable(true).define(["a"], (a) => a); + const child1 = runtime.module(define1).derive(["b"], main); + main.import("a", child1); + return main; } -); -tape("variable.import() supports lazy imports", async test => { + // Module 3 + // c = 3 + // b + // import {b} with {c} from "2" + function define3() { + const main = runtime.module(); + c = main.variable(true).define("c", () => 3); + importB = main.variable(true).define(["b"], (b) => b); + const child2 = runtime.module(define2).derive(["c"], main); + main.import("b", child2); + return main; + } + + define1(); + + assert.deepStrictEqual(await valueof(a), {value: 1}); + assert.deepStrictEqual(await valueof(b), {value: 2}); + assert.deepStrictEqual(await valueof(c), {value: 3}); + assert.deepStrictEqual(await valueof(importA), {value: 1}); + assert.deepStrictEqual(await valueof(importB), {value: 2}); + assert.deepStrictEqual(await valueof(importC), {value: 3}); +}); + +it("variable.import() supports lazy imports", async () => { let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve); function define1(runtime, observer) { @@ -195,10 +190,10 @@ tape("variable.import() supports lazy imports", async test => { await sleep(); resolve2(define2); - test.deepEqual(await inspectorA, 1); + assert.deepStrictEqual(await inspectorA, 1); }); -tape("variable.import() supports lazy transitive imports", async test => { +it("variable.import() supports lazy transitive imports", async () => { let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve); let resolve3, promise3 = new Promise((resolve) => resolve3 = resolve); @@ -236,5 +231,5 @@ tape("variable.import() supports lazy transitive imports", async test => { resolve2(define2); await sleep(); resolve3(define3); - test.deepEqual(await inspectorA, 3); + assert.deepStrictEqual(await inspectorA, 3); }); diff --git a/test/variable/valueof.js b/test/variable/valueof.js index 6ff2c85c..07c28d70 100644 --- a/test/variable/valueof.js +++ b/test/variable/valueof.js @@ -1,4 +1,4 @@ -export default async function valueof(variable) { +export async function valueof(variable) { await variable._module._runtime._compute(); try { return {value: await variable._promise}; } catch (error) { return {error: error.toString()}; } diff --git a/yarn.lock b/yarn.lock index ff93df9b..c47c33e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.10.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" @@ -21,7 +14,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6": +"@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== @@ -30,31 +23,36 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.3.tgz#2b044ab39fdfa75b4688184f9e573ce3c5b0ff95" + integrity sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^9.4.0" + globals "^13.15.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanwhocodes/config-array@^0.11.6": + version "0.11.7" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.7.tgz#38aec044c6c828f6ed51d5d7ae3d9b9faf6dbb0f" + integrity sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" - minimatch "^3.0.4" + minimatch "^3.0.5" -"@humanwhocodes/object-schema@^1.2.0": +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== @@ -99,6 +97,27 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@observablehq/inspector@^3.2.2": version "3.2.4" resolved "https://registry.yarnpkg.com/@observablehq/inspector/-/inspector-3.2.4.tgz#b620af79e721ae0e26e9bc83ec6e2e26ad260880" @@ -114,52 +133,76 @@ d3-dsv "^2.0.0" d3-require "^1.3.0" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@rollup/plugin-node-resolve@^15.0.1": + version "15.0.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz#72be449b8e06f6367168d5b3cd5e2802e0248971" + integrity sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.0" + is-module "^1.0.0" + resolve "^1.22.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== "@types/node@*": version "18.0.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.1.tgz#e91bd73239b338557a84d1f67f7b9e0f25643870" integrity sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg== -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -abab@^2.0.5, abab@^2.0.6: +abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + acorn "^8.1.0" + acorn-walk "^8.0.2" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.2: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.1.0, acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== -acorn@^8.4.1, acorn@^8.5.0: +acorn@^8.5.0: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== @@ -181,20 +224,10 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-regex@^5.0.1: version "5.0.1" @@ -215,17 +248,18 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: - sprintf-js "~1.0.2" + normalize-path "^3.0.0" + picomatch "^2.0.4" -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== asynckit@^0.4.0: version "0.4.0" @@ -237,6 +271,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +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== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -245,34 +284,45 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +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== + dependencies: + fill-range "^7.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -builtin-modules@^3.1.0: +builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -282,7 +332,7 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -290,6 +340,30 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chokidar@3.5.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" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -371,7 +445,7 @@ d3-require@^1.3.0: resolved "https://registry.yarnpkg.com/d3-require/-/d3-require-1.3.0.tgz#2b97f5e2ebcb64ac0c63c11f30056aea1c74f0ec" integrity sha512-XaNc2azaAwXhGjmCMtxlD+AowpMfLimVsAoTMpqrvb8CWoA4QqyV12mc4Ue6KSoDvfuS831tsumfhDYxGd4FGA== -data-urls@^3.0.0: +data-urls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== @@ -380,53 +454,43 @@ data-urls@^3.0.0: whatwg-mimetype "^3.0.0" whatwg-url "^11.0.0" -debug@4, debug@^4.0.1, debug@^4.1.1: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -decimal.js@^10.3.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" +decimal.js@^10.4.1: + version "10.4.2" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" + integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ== +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -434,80 +498,38 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dotignore@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== dependencies: - minimatch "^3.0.4" + webidl-conversions "^7.0.0" emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" +entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== -es-abstract@^1.19.0, es-abstract@^1.19.5: - version "1.20.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814" - integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - regexp.prototype.flags "^1.4.3" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -520,92 +542,86 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" + integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" + estraverse "^5.2.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.18.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" +eslint-visitor-keys@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" + integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== + +eslint@^8.27.0: + version "8.27.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.27.0.tgz#d547e2f7239994ad1faa4bb5d84e5d809db7cf64" + integrity sha512-0y1bfG2ho7mty+SiILVf9PfuRA49ek4Nc60Wmmu62QlobNR+CeXa4xXIJgcuwSQgZiWaPH+5BDsctpIW0PR/wQ== + dependencies: + "@eslint/eslintrc" "^1.3.3" + "@humanwhocodes/config-array" "^0.11.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^7.1.1" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.3.0" + espree "^9.4.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.15.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + regexpp "^3.2.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.4.0: + version "9.4.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.1.tgz#51d6092615567a2c2cff7833445e37c28c0065bd" + integrity sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.3.0" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -624,20 +640,15 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== esutils@^2.0.2: version "2.0.3" @@ -659,6 +670,13 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -666,6 +684,21 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -674,18 +707,16 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + flatted@^3.1.0: version "3.2.6" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -for-each@~0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -710,51 +741,38 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + is-glob "^4.0.3" -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== dependencies: is-glob "^4.0.1" -glob@^7.1.3, glob@~7.2.0: +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -766,17 +784,17 @@ glob@^7.1.3, glob@~7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.6.0, globals@^13.9.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== +globals@^13.15.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== dependencies: type-fest "^0.20.2" -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== has-flag@^3.0.0: version "3.0.0" @@ -788,49 +806,35 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3, has@~1.0.3: +has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== dependencies: - whatwg-encoding "^1.0.5" + whatwg-encoding "^2.0.0" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: - "@tootallnate/once" "1" + "@tootallnate/once" "2" agent-base "6" debug "4" -https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -838,17 +842,24 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -iconv-lite@0.4, iconv-lite@0.4.24: +iconv-lite@0.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" @@ -871,47 +882,24 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +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: - has-bigints "^1.0.1" + 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" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-builtin-module@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.0.tgz#bb0310dfe881f144ca83f30100ceb10cf58835e0" + integrity sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + builtin-modules "^3.3.0" is-core-module@^2.9.0: version "2.9.0" @@ -920,13 +908,6 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -937,7 +918,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1: +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== @@ -949,58 +930,30 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== isexe@^2.0.0: version "2.0.0" @@ -1021,62 +974,60 @@ jest-worker@^26.2.1: merge-stream "^2.0.0" supports-color "^7.0.0" +js-sdsl@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.5.tgz#1ff1645e6b4d1b028cd3f862db88c9d887f26e2a" + integrity sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q== + js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" -jsdom@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-17.0.0.tgz#3ec82d1d30030649c8defedc45fff6aa3e5d06ae" - integrity sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA== +jsdom@^20.0.2: + version "20.0.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.2.tgz#65ccbed81d5e877c433f353c58bb91ff374127db" + integrity sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA== dependencies: - abab "^2.0.5" - acorn "^8.4.1" - acorn-globals "^6.0.0" + abab "^2.0.6" + acorn "^8.8.0" + acorn-globals "^7.0.0" cssom "^0.5.0" cssstyle "^2.3.0" - data-urls "^3.0.0" - decimal.js "^10.3.1" - domexception "^2.0.1" + data-urls "^3.0.2" + decimal.js "^10.4.1" + domexception "^4.0.0" escodegen "^2.0.0" form-data "^4.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^9.0.0" - ws "^8.0.0" - xml-name-validator "^3.0.0" + tough-cookie "^4.1.2" + w3c-xmlserializer "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.9.0" + xml-name-validator "^4.0.0" json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -1098,22 +1049,25 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - yallist "^4.0.0" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" merge-stream@^2.0.0: version "2.0.0" @@ -1132,60 +1086,81 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@~1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +mocha@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -nwsapi@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c" - integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg== - -object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +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== -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" +nwsapi@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" + integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== once@^1.3.0: version "1.4.0" @@ -1218,6 +1193,20 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -1225,10 +1214,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" + integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== + dependencies: + entities "^4.4.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" @@ -1245,6 +1241,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -1255,11 +1256,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -1270,6 +1266,16 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -1277,31 +1283,34 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== +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: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" + picomatch "^2.2.1" -regexpp@^3.1.0: +regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.11.1, resolve@~1.22.0: +resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -1310,12 +1319,10 @@ resolve@^1.11.1, resolve@~1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w== - dependencies: - through "~2.3.4" +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" @@ -1324,17 +1331,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-node-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - rollup-plugin-terser@^7.0.2: version "7.0.2" resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" @@ -1345,20 +1341,20 @@ rollup-plugin-terser@^7.0.2: serialize-javascript "^4.0.0" terser "^5.0.0" -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.37.1: - version "2.75.7" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9" - integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ== +rollup@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.2.5.tgz#9452168ac083218c8212bf53d2448bdc6b8b0de7" + integrity sha512-/Ha7HhVVofduy+RKWOQJrxe4Qb3xyZo+chcpYiD8SoQa4AG7llhupUtyfKSSrdBM2mWJjhM8wZwmbY23NmlIYw== optionalDependencies: fsevents "~2.3.2" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + rw@1: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" @@ -1369,24 +1365,24 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== dependencies: xmlchars "^2.2.0" -semver@^7.2.1: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== dependencies: - lru-cache "^6.0.0" + randombytes "^2.1.0" serialize-javascript@^4.0.0: version "4.0.0" @@ -1407,24 +1403,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - 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" @@ -1438,12 +1416,7 @@ source-map@^0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1452,33 +1425,6 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@~1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz#824960787db37a9e24711802ed0c1d1c0254f83e" - integrity sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1486,11 +1432,18 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1515,43 +1468,6 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tape-await@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/tape-await/-/tape-await-0.1.2.tgz#41f99110a2bc4728732d8bc058278b2fbf3c0bec" - integrity sha512-Gt1bXilp9uRTVj+DecLDs37tP1XwGXfFzWVqQEfW7foO9TNacy+aN5TdT0Kv6LI5t/9l3iOE4nX2hr2SQ4+OSg== - -tape@^4.13.3: - version "4.15.1" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.1.tgz#88fb662965a11f9be1bddb04c11662d7eceb129e" - integrity sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw== - dependencies: - call-bind "~1.0.2" - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - glob "~7.2.0" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.1.4" - minimist "~1.2.6" - object-inspect "~1.12.0" - resolve "~1.22.0" - resumer "~0.0.0" - string.prototype.trim "~1.2.5" - through "~2.3.8" - terser@^5.0.0: version "5.14.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca" @@ -1567,26 +1483,22 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through@~2.3.4, through@~2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" + is-number "^7.0.0" -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== +tough-cookie@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" + integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== dependencies: + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" tr46@^3.0.0: version "3.0.0" @@ -1614,20 +1526,10 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== uri-js@^4.2.2: version "4.4.1" @@ -1636,51 +1538,32 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: - browser-process-hrtime "^1.0.0" + querystringify "^2.1.1" + requires-port "^1.0.0" -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== +w3c-xmlserializer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" + integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== dependencies: - xml-name-validator "^3.0.0" - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + xml-name-validator "^4.0.0" webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + iconv-lite "0.6.3" whatwg-mimetype@^3.0.0: version "3.0.0" @@ -1695,25 +1578,6 @@ whatwg-url@^11.0.0: tr46 "^3.0.0" webidl-conversions "^7.0.0" -whatwg-url@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-9.1.0.tgz#1b112cf237d72cd64fa7882b9c3f6234a1c3050d" - integrity sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA== - dependencies: - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -1726,27 +1590,79 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.0.0: - version "8.8.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" - integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== +ws@^8.9.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From def5064c9666c2351c4cf80f7119e161958ea5f9 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 19:36:14 -0800 Subject: [PATCH 2/7] node 18 --- .github/workflows/nodejs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index be8b04fc..fd583bae 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - node-version: [14.x, 16.x] + node-version: [14.x, 16.x, 18.x] steps: - uses: actions/checkout@v1 From e32b9b29cec756624335bf46bd8766f4f2e93015 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 20:12:13 -0800 Subject: [PATCH 3/7] next --- package.json | 7 +++++-- rollup.config.js | 4 ++-- yarn.lock | 48 +++++++++++++++++++++++------------------------- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index d650e356..19a72b1b 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,8 @@ "@observablehq/runtime": "./src/index.js" }, "dependencies": { - "@observablehq/inspector": "^3.2.2", - "@observablehq/stdlib": "^3.4.1" + "@observablehq/inspector": "4.0.0-rc.1", + "@observablehq/stdlib": "4.0.0-rc.1" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.0.1", @@ -43,5 +43,8 @@ "module-alias": "^2.2.2", "rollup": "^3.2.5", "rollup-plugin-terser": "^7.0.2" + }, + "publishConfig": { + "tag": "next" } } diff --git a/rollup.config.js b/rollup.config.js index c89c6b5f..7f2dc718 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,6 +1,6 @@ -import node from "rollup-plugin-node-resolve"; +import node from "@rollup/plugin-node-resolve"; import {terser} from "rollup-plugin-terser"; -import * as meta from "./package.json"; +import * as meta from "./package.json" assert {type: "json"}; const copyright = `// @observablehq/runtime v${meta.version} Copyright ${(new Date).getFullYear()} Observable, Inc.`; diff --git a/yarn.lock b/yarn.lock index c47c33e9..52ca7931 100644 --- a/yarn.lock +++ b/yarn.lock @@ -118,19 +118,19 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@observablehq/inspector@^3.2.2": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@observablehq/inspector/-/inspector-3.2.4.tgz#b620af79e721ae0e26e9bc83ec6e2e26ad260880" - integrity sha512-P1TdR95pvvNri0XV6X/R+s9XO70d8ozhOp2cMXEJ2zsiGzB8VjOdrJgRJyLjEJ0OJy7jP9VXFiC1Hej8WgsF5A== +"@observablehq/inspector@4.0.0-rc.1": + version "4.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@observablehq/inspector/-/inspector-4.0.0-rc.1.tgz#ca37cc434b8c593ac85e62e9dc0f1a1861179ee2" + integrity sha512-99XWg3otp6VMu3ozCZbDn8qqnzAslg1bZ3Cis0kcaU2853n0WgXjpglafJvUOEsctqE6Smkm3CJxjhTGwhg1Ow== dependencies: isoformat "^0.2.0" -"@observablehq/stdlib@^3.4.1": - version "3.23.0" - resolved "https://registry.yarnpkg.com/@observablehq/stdlib/-/stdlib-3.23.0.tgz#ebc49c8a18a314ac0008668d70ce99812d828430" - integrity sha512-jMrMYfRd/blszc4YamxRZLBH2lPPxoKS0SEllImVkPILBchLbymTA3JMWXan99NQgOMYkyEnGRJKfhRC7fqbFA== +"@observablehq/stdlib@4.0.0-rc.1": + version "4.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@observablehq/stdlib/-/stdlib-4.0.0-rc.1.tgz#4d52c212645542d1614ef3ada8a1ea676f801c0a" + integrity sha512-kkC59o/wvnmlGN4NHWYh4oP7MYN2KV74biZ7NFCYaFRz0cH9xOssdlGDL8v0iB7/9vQfe+MWuib3Qis1FUczEg== dependencies: - d3-dsv "^2.0.0" + d3-dsv "^3.0.1" d3-require "^1.3.0" "@rollup/plugin-node-resolve@^15.0.1": @@ -395,7 +395,12 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -commander@2, commander@^2.20.0: +commander@7: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -431,13 +436,13 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" -d3-dsv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5" - integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w== +d3-dsv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== dependencies: - commander "2" - iconv-lite "0.4" + commander "7" + iconv-lite "0.6" rw "1" d3-require@^1.3.0: @@ -842,14 +847,7 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" -iconv-lite@0.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@0.6.3: +iconv-lite@0.6, iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -1365,7 +1363,7 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== From 59aebd23161dc045855cf70e8e9126d2322fbe33 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 20:12:37 -0800 Subject: [PATCH 4/7] 5.0.0-rc.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19a72b1b..4d352849 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@observablehq/runtime", - "version": "4.28.0", + "version": "5.0.0-rc.1", "author": { "name": "Observable, Inc.", "url": "https://observablehq.com" From 67cbc75e4bf1db3a2838447c561ef81be8e43236 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 20:48:34 -0800 Subject: [PATCH 5/7] remove jsdom --- package.json | 1 - test/jsdom.js | 39 ------ yarn.lock | 359 ++------------------------------------------------ 3 files changed, 11 insertions(+), 388 deletions(-) delete mode 100644 test/jsdom.js diff --git a/package.json b/package.json index 4d352849..4c4759f6 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "devDependencies": { "@rollup/plugin-node-resolve": "^15.0.1", "eslint": "^8.27.0", - "jsdom": "^20.0.2", "mocha": "^10.1.0", "module-alias": "^2.2.2", "rollup": "^3.2.5", diff --git a/test/jsdom.js b/test/jsdom.js deleted file mode 100644 index 4d0191fd..00000000 --- a/test/jsdom.js +++ /dev/null @@ -1,39 +0,0 @@ -import {JSDOM} from "jsdom"; - -export default function jsdomit(description, run) { - return it(description, withJsdom(run)); -} - -jsdomit.skip = (description, run) => { - return it.skip(description, withJsdom(run)); -}; - -jsdomit.only = (description, run) => { - return it.only(description, withJsdom(run)); -}; - -function withJsdom(run) { - return async () => { - const jsdom = new JSDOM(""); - global.window = jsdom.window; - global.document = jsdom.window.document; - global.navigator = jsdom.window.navigator; - global.Event = jsdom.window.Event; - global.Element = jsdom.window.Element; - global.Node = jsdom.window.Node; - global.NodeList = jsdom.window.NodeList; - global.Text = jsdom.window.Text; - global.HTMLCollection = jsdom.window.HTMLCollection; - try { - return await run(); - } finally { - delete global.window; - delete global.document; - delete global.navigator; - delete global.Event; - delete global.Node; - delete global.NodeList; - delete global.HTMLCollection; - } - }; -} diff --git a/yarn.lock b/yarn.lock index 52ca7931..8e35d9d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,11 +154,6 @@ estree-walker "^2.0.2" picomatch "^2.3.1" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@types/estree@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" @@ -174,45 +169,20 @@ resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== -abab@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" - integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== - -acorn-globals@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" - integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== - dependencies: - acorn "^8.1.0" - acorn-walk "^8.0.2" - acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^8.0.2: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.1.0, acorn@^8.8.0: - version "8.8.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" - integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== - acorn@^8.5.0: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" +acorn@^8.8.0: + version "8.8.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" + integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -261,11 +231,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -388,13 +353,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@7: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -419,23 +377,6 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" - integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - d3-dsv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" @@ -450,16 +391,7 @@ d3-require@^1.3.0: resolved "https://registry.yarnpkg.com/d3-require/-/d3-require-1.3.0.tgz#2b97f5e2ebcb64ac0c63c11f30056aea1c74f0ec" integrity sha512-XaNc2azaAwXhGjmCMtxlD+AowpMfLimVsAoTMpqrvb8CWoA4QqyV12mc4Ue6KSoDvfuS831tsumfhDYxGd4FGA== -data-urls@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" - integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== - dependencies: - abab "^2.0.6" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.2: +debug@4.3.4, debug@^4.1.1, debug@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -471,12 +403,7 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.4.1: - version "10.4.2" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== - -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -486,11 +413,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -503,23 +425,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" - integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== - dependencies: - webidl-conversions "^7.0.0" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -535,18 +445,6 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-scope@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642" @@ -626,11 +524,6 @@ espree@^9.4.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" -esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" @@ -670,7 +563,7 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== @@ -722,15 +615,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -823,31 +707,7 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -html-encoding-sniffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" - integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== - dependencies: - whatwg-encoding "^2.0.0" - -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.6, iconv-lite@0.6.3: +iconv-lite@0.6: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -943,11 +803,6 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -989,38 +844,6 @@ js-yaml@4.1.0, js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^20.0.2: - version "20.0.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.2.tgz#65ccbed81d5e877c433f353c58bb91ff374127db" - integrity sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA== - dependencies: - abab "^2.0.6" - acorn "^8.8.0" - acorn-globals "^7.0.0" - cssom "^0.5.0" - cssstyle "^2.3.0" - data-urls "^3.0.2" - decimal.js "^10.4.1" - domexception "^4.0.0" - escodegen "^2.0.0" - form-data "^4.0.0" - html-encoding-sniffer "^3.0.0" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.1" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.2" - parse5 "^7.1.1" - saxes "^6.0.0" - symbol-tree "^3.2.4" - tough-cookie "^4.1.2" - w3c-xmlserializer "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-encoding "^2.0.0" - whatwg-mimetype "^3.0.0" - whatwg-url "^11.0.0" - ws "^8.9.0" - xml-name-validator "^4.0.0" - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1039,14 +862,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -1072,18 +887,6 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - minimatch@5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" @@ -1155,11 +958,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -nwsapi@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" - integrity sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw== - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1167,18 +965,6 @@ once@^1.3.0: dependencies: wrappy "1" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -1212,13 +998,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse5@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.1.tgz#4649f940ccfb95d8754f37f73078ea20afe0c746" - integrity sha512-kwpuwzB+px5WUg9pyK0IcK/shltJN5/OVhQagxhCQNtT9Y9QRZqNY2e1cmbu/paRh5LMnz/oVTVLBpjFmMZhSg== - dependencies: - entities "^4.4.0" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -1249,26 +1028,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -1298,11 +1062,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -1368,13 +1127,6 @@ safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" - integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== - dependencies: - xmlchars "^2.2.0" - serialize-javascript@6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -1409,7 +1161,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -1461,11 +1213,6 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - terser@^5.0.0: version "5.14.1" resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca" @@ -1488,23 +1235,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -1512,23 +1242,11 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== - dependencies: - prelude-ls "~1.1.2" - type-fest@^0.20.2: version "0.20.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -1536,46 +1254,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -w3c-xmlserializer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz#06cdc3eefb7e4d0b20a560a5a3aeb0d2d9a65923" - integrity sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg== - dependencies: - xml-name-validator "^4.0.0" - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -whatwg-encoding@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" - integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== - dependencies: - iconv-lite "0.6.3" - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -1583,7 +1261,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== @@ -1607,21 +1285,6 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.9.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - -xml-name-validator@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" - integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" From d992b1e29bef691115a907125a1e2627053106e9 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Tue, 8 Nov 2022 20:53:51 -0800 Subject: [PATCH 6/7] break circular import --- src/module.js | 5 ++++- src/runtime.js | 6 +----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/module.js b/src/module.js index e9a90656..3a082157 100644 --- a/src/module.js +++ b/src/module.js @@ -2,9 +2,12 @@ import {constant} from "./constant.js"; import {RuntimeError} from "./errors.js"; import {identity} from "./identity.js"; import {rethrow} from "./rethrow.js"; -import {variable_variable, variable_invalidation, variable_visibility} from "./runtime.js"; import {Variable, TYPE_DUPLICATE, TYPE_IMPLICIT, TYPE_NORMAL, no_observer, variable_stale} from "./variable.js"; +export const variable_variable = Symbol("variable"); +export const variable_invalidation = Symbol("invalidation"); +export const variable_visibility = Symbol("visibility"); + export function Module(runtime, builtins = []) { Object.defineProperties(this, { _runtime: {value: runtime}, diff --git a/src/runtime.js b/src/runtime.js index 8d4fee02..ceef9f7f 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -1,7 +1,7 @@ import {Library, FileAttachments} from "@observablehq/stdlib"; import {RuntimeError} from "./errors.js"; import {generatorish} from "./generatorish.js"; -import {Module} from "./module.js"; +import {Module, variable_variable, variable_invalidation, variable_visibility} from "./module.js"; import {noop} from "./noop.js"; import {Variable, TYPE_IMPLICIT, no_observer, variable_stale} from "./variable.js"; @@ -9,10 +9,6 @@ const frame = typeof requestAnimationFrame === "function" ? requestAnimationFram : typeof setImmediate === "function" ? setImmediate : f => setTimeout(f, 0); -export const variable_variable = Symbol("variable"); -export const variable_invalidation = Symbol("invalidation"); -export const variable_visibility = Symbol("visibility"); - export function Runtime(builtins = new Library, global = window_global) { const builtin = this.module(); Object.defineProperties(this, { From 73288809a77ac1fed60e63bab9a7c35b442d0d58 Mon Sep 17 00:00:00 2001 From: Mike Bostock Date: Wed, 9 Nov 2022 13:01:19 -0800 Subject: [PATCH 7/7] bump versions in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7898e8e4..536edfa0 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,12 @@ For example, to render the “hello” cell from the [“Hello World” notebook ```html - +