├── .eslintignore
├── src
├── noop.js
├── identity.js
├── constant.js
├── rethrow.js
├── array.js
├── generatorish.js
├── index.js
├── errors.js
├── load.js
├── module.js
├── variable.js
└── runtime.js
├── .gitignore
├── test
├── .eslintrc.json
├── require.html
├── dispose.html
├── dom.html
├── hello-world.html
├── variable
│ ├── valueof.js
│ ├── delete-test.js
│ ├── import-test.js
│ ├── derive-test.js
│ └── define-test.js
├── module
│ ├── builtin-test.js
│ ├── redefine-test.js
│ └── value-test.js
├── tape.js
├── runtime
│ └── builtins-test.js
└── load-test.js
├── .eslintrc.json
├── runtime.sublime-project
├── .github
└── workflows
│ └── nodejs.yml
├── LICENSE
├── package.json
├── rollup.config.js
├── README.md
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/
2 |
--------------------------------------------------------------------------------
/src/noop.js:
--------------------------------------------------------------------------------
1 | export default function() {}
2 |
--------------------------------------------------------------------------------
/src/identity.js:
--------------------------------------------------------------------------------
1 | export default function(x) {
2 | return x;
3 | }
4 |
--------------------------------------------------------------------------------
/src/constant.js:
--------------------------------------------------------------------------------
1 | export default function(x) {
2 | return function() {
3 | return x;
4 | };
5 | }
6 |
--------------------------------------------------------------------------------
/src/rethrow.js:
--------------------------------------------------------------------------------
1 | export default function(e) {
2 | return function() {
3 | throw e;
4 | };
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.sublime-workspace
2 | .DS_Store
3 | .esm-cache/
4 | dist/
5 | node_modules
6 | npm-debug.log
7 |
--------------------------------------------------------------------------------
/test/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../.eslintrc.json",
3 | "rules": {
4 | "no-unreachable": 0
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/src/array.js:
--------------------------------------------------------------------------------
1 | var prototype = Array.prototype;
2 | export var map = prototype.map;
3 | export var forEach = prototype.forEach;
4 |
--------------------------------------------------------------------------------
/src/generatorish.js:
--------------------------------------------------------------------------------
1 | export default function generatorish(value) {
2 | return value
3 | && typeof value.next === "function"
4 | && typeof value.return === "function";
5 | }
6 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import {Inspector} from "@observablehq/inspector";
2 | import {Library} from "@observablehq/stdlib";
3 | import {RuntimeError} from "./errors";
4 | import Runtime from "./runtime";
5 |
6 | export {Inspector, Library, Runtime, RuntimeError};
7 |
--------------------------------------------------------------------------------
/src/errors.js:
--------------------------------------------------------------------------------
1 | export function RuntimeError(message, input) {
2 | this.message = message + "";
3 | this.input = input;
4 | }
5 |
6 | RuntimeError.prototype = Object.create(Error.prototype);
7 | RuntimeError.prototype.name = "RuntimeError";
8 | RuntimeError.prototype.constructor = RuntimeError;
9 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "eslint:recommended",
3 | "parserOptions": {
4 | "sourceType": "module",
5 | "ecmaVersion": 8
6 | },
7 | "env": {
8 | "browser": true,
9 | "es6": true,
10 | "node": true
11 | },
12 | "rules": {
13 | "semi": 2,
14 | "no-process-env": 2,
15 | "no-cond-assign": 0,
16 | "no-redeclare": 0
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/runtime.sublime-project:
--------------------------------------------------------------------------------
1 | {
2 | "folders": [
3 | {
4 | "path": ".",
5 | "file_exclude_patterns": ["*.sublime-workspace"],
6 | "folder_exclude_patterns": [".esm-cache", "dist"]
7 | }
8 | ],
9 | "build_systems": [
10 | {
11 | "name": "yarn test",
12 | "cmd": ["yarn", "test"],
13 | "file_regex": "\\((...*?):([0-9]*):([0-9]*)\\)",
14 | "working_dir": "$project_path"
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/test/require.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | `
155 | }
156 | ]
157 | }
158 | ]
159 | }, null, ({name}) => {
160 | if (name === "foo") return {fulfilled};
161 | });
162 | test.equals((await value).outerHTML, '
');
163 | });
164 |
--------------------------------------------------------------------------------
/test/module/value-test.js:
--------------------------------------------------------------------------------
1 | import {Runtime} from "../../src/";
2 | import tape from "../tape";
3 |
4 | tape("module.value(name) returns a promise to the variable’s next value", async test => {
5 | const runtime = new Runtime();
6 | const module = runtime.module();
7 | module.variable(true).define("foo", [], () => 42);
8 | test.deepEqual(await module.value("foo"), 42);
9 | });
10 |
11 | tape("module.value(name) implicitly makes the variable reachable", async test => {
12 | const runtime = new Runtime();
13 | const module = runtime.module();
14 | module.define("foo", [], () => 42);
15 | test.deepEqual(await module.value("foo"), 42);
16 | });
17 |
18 | tape("module.value(name) supports errors", async test => {
19 | const runtime = new Runtime();
20 | const module = runtime.module();
21 | module.define("foo", [], () => { throw new Error(42); });
22 | try {
23 | await module.value("foo");
24 | test.fail();
25 | } catch (error) {
26 | test.deepEqual(error.message, "42");
27 | }
28 | });
29 |
30 | tape("module.value(name) supports generators", async test => {
31 | const runtime = new Runtime();
32 | const module = runtime.module();
33 | module.define("foo", [], function*() { yield 1; yield 2; yield 3; });
34 | test.deepEqual(await module.value("foo"), 1);
35 | test.deepEqual(await module.value("foo"), 2);
36 | test.deepEqual(await module.value("foo"), 3);
37 | test.deepEqual(await module.value("foo"), 3);
38 | });
39 |
40 | tape("module.value(name) supports generators that throw", async test => {
41 | const runtime = new Runtime();
42 | const module = runtime.module();
43 | module.define("foo", [], function*() { yield 1; throw new Error("fooed"); });
44 | module.define("bar", ["foo"], foo => foo);
45 | const [foo1, bar1] = await Promise.all([module.value("foo"), module.value("bar")]);
46 | test.deepEqual(foo1, 1);
47 | test.deepEqual(bar1, 1);
48 | try {
49 | await module.value("foo");
50 | test.fail();
51 | } catch (error) {
52 | test.deepEqual(error.message, "fooed");
53 | }
54 | try {
55 | await module.value("bar");
56 | test.fail();
57 | } catch (error) {
58 | test.deepEqual(error.message, "fooed");
59 | }
60 | });
61 |
62 | tape("module.value(name) supports async generators", async test => {
63 | const runtime = new Runtime();
64 | const module = runtime.module();
65 | module.define("foo", [], async function*() { yield 1; yield 2; yield 3; });
66 | test.deepEqual(await module.value("foo"), 1);
67 | test.deepEqual(await module.value("foo"), 2);
68 | test.deepEqual(await module.value("foo"), 3);
69 | test.deepEqual(await module.value("foo"), 3);
70 | });
71 |
72 | tape("module.value(name) supports promises", async test => {
73 | const runtime = new Runtime();
74 | const module = runtime.module();
75 | module.define("foo", [], async () => { return await 42; });
76 | test.deepEqual(await module.value("foo"), 42);
77 | });
78 |
79 | tape("module.value(name) supports constants", async test => {
80 | const runtime = new Runtime();
81 | const module = runtime.module();
82 | module.define("foo", [], 42);
83 | test.deepEqual(await module.value("foo"), 42);
84 | });
85 |
86 | tape("module.value(name) supports missing variables", async test => {
87 | const runtime = new Runtime();
88 | const module = runtime.module();
89 | try {
90 | await module.value("bar");
91 | test.fail();
92 | } catch (error) {
93 | test.deepEqual(error.message, "bar is not defined");
94 | }
95 | });
96 |
97 | tape("module.value(name) returns a promise on error", async test => {
98 | const runtime = new Runtime();
99 | const module = runtime.module();
100 | const promise = module.value("bar");
101 | try {
102 | await promise;
103 | test.fail();
104 | } catch (error) {
105 | test.deepEqual(error.message, "bar is not defined");
106 | }
107 | });
108 |
109 | tape("module.value(name) does not force recomputation", async test => {
110 | let foo = 0;
111 | const runtime = new Runtime();
112 | const module = runtime.module();
113 | module.define("foo", [], () => ++foo);
114 | test.deepEqual(await module.value("foo"), 1);
115 | test.deepEqual(await module.value("foo"), 1);
116 | test.deepEqual(await module.value("foo"), 1);
117 | });
118 |
119 | tape("module.value(name) does not expose stale values", async test => {
120 | const runtime = new Runtime();
121 | const module = runtime.module();
122 | let resolve;
123 | const variable = module.define("foo", [], new Promise((y) => (resolve = y)));
124 | const value = module.value("foo");
125 | await new Promise((resolve) => setTimeout(resolve, 100));
126 | variable.define("foo", [], () => "fresh");
127 | resolve("stale");
128 | test.strictEqual(await value, "fresh");
129 | });
130 |
131 | tape("module.value(name) does not continue observing", async test => {
132 | const foos = [];
133 | const runtime = new Runtime();
134 | const module = runtime.module();
135 | module.define("foo", [], async function*() {
136 | try {
137 | foos.push(1), yield 1;
138 | foos.push(2), yield 2;
139 | foos.push(3), yield 3;
140 | } finally {
141 | foos.push(-1);
142 | }
143 | });
144 | test.strictEqual(await module.value("foo"), 1);
145 | test.deepEqual(foos, [1]);
146 | await runtime._compute();
147 | test.deepEqual(foos, [1, 2, -1]); // 2 computed prior to being unobserved
148 | await runtime._compute();
149 | test.deepEqual(foos, [1, 2, -1]); // any change would represent a leak
150 | });
151 |
--------------------------------------------------------------------------------
/src/module.js:
--------------------------------------------------------------------------------
1 | import constant from "./constant";
2 | import {RuntimeError} from "./errors";
3 | import identity from "./identity";
4 | import rethrow from "./rethrow";
5 | import {variable_variable, variable_invalidation, variable_visibility} from "./runtime";
6 | import Variable, {TYPE_DUPLICATE, TYPE_IMPLICIT, TYPE_NORMAL, no_observer, variable_stale} from "./variable";
7 |
8 | export default function Module(runtime, builtins = []) {
9 | Object.defineProperties(this, {
10 | _runtime: {value: runtime},
11 | _scope: {value: new Map},
12 | _builtins: {value: new Map([
13 | ["@variable", variable_variable],
14 | ["invalidation", variable_invalidation],
15 | ["visibility", variable_visibility],
16 | ...builtins
17 | ])},
18 | _source: {value: null, writable: true}
19 | });
20 | }
21 |
22 | Object.defineProperties(Module.prototype, {
23 | _resolve: {value: module_resolve, writable: true, configurable: true},
24 | redefine: {value: module_redefine, writable: true, configurable: true},
25 | define: {value: module_define, writable: true, configurable: true},
26 | derive: {value: module_derive, writable: true, configurable: true},
27 | import: {value: module_import, writable: true, configurable: true},
28 | value: {value: module_value, writable: true, configurable: true},
29 | variable: {value: module_variable, writable: true, configurable: true},
30 | builtin: {value: module_builtin, writable: true, configurable: true}
31 | });
32 |
33 | function module_redefine(name) {
34 | var v = this._scope.get(name);
35 | if (!v) throw new RuntimeError(name + " is not defined");
36 | if (v._type === TYPE_DUPLICATE) throw new RuntimeError(name + " is defined more than once");
37 | return v.define.apply(v, arguments);
38 | }
39 |
40 | function module_define() {
41 | var v = new Variable(TYPE_NORMAL, this);
42 | return v.define.apply(v, arguments);
43 | }
44 |
45 | function module_import() {
46 | var v = new Variable(TYPE_NORMAL, this);
47 | return v.import.apply(v, arguments);
48 | }
49 |
50 | function module_variable(observer) {
51 | return new Variable(TYPE_NORMAL, this, observer);
52 | }
53 |
54 | async function module_value(name) {
55 | var v = this._scope.get(name);
56 | if (!v) throw new RuntimeError(name + " is not defined");
57 | if (v._observer === no_observer) {
58 | v = this.variable(true).define([name], identity);
59 | try {
60 | return await module_revalue(this._runtime, v);
61 | } finally {
62 | v.delete();
63 | }
64 | } else {
65 | return module_revalue(this._runtime, v);
66 | }
67 | }
68 |
69 | // If the variable is redefined before its value resolves, try again.
70 | async function module_revalue(runtime, variable) {
71 | await runtime._compute();
72 | try {
73 | return await variable._promise;
74 | } catch (error) {
75 | if (error === variable_stale) return module_revalue(runtime, variable);
76 | throw error;
77 | }
78 | }
79 |
80 | function module_derive(injects, injectModule) {
81 | const map = new Map();
82 | const modules = new Set();
83 | const copies = [];
84 |
85 | // Given a module, derives an alias of that module with an initially-empty
86 | // definition. The variables will be copied later in a second pass below.
87 | function alias(source) {
88 | let target = map.get(source);
89 | if (target) return target;
90 | target = new Module(source._runtime, source._builtins);
91 | target._source = source;
92 | map.set(source, target);
93 | copies.push([target, source]);
94 | modules.add(source);
95 | return target;
96 | }
97 |
98 | // Inject the given variables as reverse imports into the derived module.
99 | const derive = alias(this);
100 | for (const inject of injects) {
101 | const {alias, name} = typeof inject === "object" ? inject : {name: inject};
102 | derive.import(name, alias == null ? name : alias, injectModule);
103 | }
104 |
105 | // Iterate over all the variables (currently) in this module. If any
106 | // represents an import-with (i.e., an import of a module with a _source), the
107 | // transitive import-with must be copied, too, as direct injections may affect
108 | // transitive injections. Note that an import-with can only be created with
109 | // module.derive and hence it’s not possible for an import-with to be added
110 | // later; therefore we only need to apply this check once, now.
111 | for (const module of modules) {
112 | for (const [name, variable] of module._scope) {
113 | if (variable._definition === identity) { // import
114 | if (module === this && derive._scope.has(name)) continue; // overridden by injection
115 | const importedModule = variable._inputs[0]._module;
116 | if (importedModule._source) alias(importedModule);
117 | }
118 | }
119 | }
120 |
121 | // Finally, with the modules resolved, copy the variable definitions.
122 | for (const [target, source] of copies) {
123 | for (const [name, sourceVariable] of source._scope) {
124 | const targetVariable = target._scope.get(name);
125 | if (targetVariable && targetVariable._type !== TYPE_IMPLICIT) continue; // preserve injection
126 | if (sourceVariable._definition === identity) { // import
127 | const sourceInput = sourceVariable._inputs[0];
128 | const sourceModule = sourceInput._module;
129 | target.import(sourceInput._name, name, map.get(sourceModule) || sourceModule);
130 | } else { // non-import
131 | target.define(name, sourceVariable._inputs.map(variable_name), sourceVariable._definition);
132 | }
133 | }
134 | }
135 |
136 | return derive;
137 | }
138 |
139 | function module_resolve(name) {
140 | var variable = this._scope.get(name), value;
141 | if (!variable) {
142 | variable = new Variable(TYPE_IMPLICIT, this);
143 | if (this._builtins.has(name)) {
144 | variable.define(name, constant(this._builtins.get(name)));
145 | } else if (this._runtime._builtin._scope.has(name)) {
146 | variable.import(name, this._runtime._builtin);
147 | } else {
148 | try {
149 | value = this._runtime._global(name);
150 | } catch (error) {
151 | return variable.define(name, rethrow(error));
152 | }
153 | if (value === undefined) {
154 | this._scope.set(variable._name = name, variable);
155 | } else {
156 | variable.define(name, constant(value));
157 | }
158 | }
159 | }
160 | return variable;
161 | }
162 |
163 | function module_builtin(name, value) {
164 | this._builtins.set(name, value);
165 | }
166 |
167 | function variable_name(variable) {
168 | return variable._name;
169 | }
170 |
--------------------------------------------------------------------------------
/src/variable.js:
--------------------------------------------------------------------------------
1 | import {map} from "./array";
2 | import constant from "./constant";
3 | import {RuntimeError} from "./errors";
4 | import identity from "./identity";
5 | import noop from "./noop";
6 |
7 | export var TYPE_NORMAL = 1; // a normal variable
8 | export var TYPE_IMPLICIT = 2; // created on reference
9 | export var TYPE_DUPLICATE = 3; // created on duplicate definition
10 |
11 | export var no_observer = {};
12 |
13 | export default function Variable(type, module, observer) {
14 | if (!observer) observer = no_observer;
15 | Object.defineProperties(this, {
16 | _observer: {value: observer, writable: true},
17 | _definition: {value: variable_undefined, writable: true},
18 | _duplicate: {value: undefined, writable: true},
19 | _duplicates: {value: undefined, writable: true},
20 | _indegree: {value: NaN, writable: true}, // The number of computing inputs.
21 | _inputs: {value: [], writable: true},
22 | _invalidate: {value: noop, writable: true},
23 | _module: {value: module},
24 | _name: {value: null, writable: true},
25 | _outputs: {value: new Set, writable: true},
26 | _promise: {value: Promise.resolve(undefined), writable: true},
27 | _reachable: {value: observer !== no_observer, writable: true}, // Is this variable transitively visible?
28 | _rejector: {value: variable_rejector(this)},
29 | _type: {value: type},
30 | _value: {value: undefined, writable: true},
31 | _version: {value: 0, writable: true}
32 | });
33 | }
34 |
35 | Object.defineProperties(Variable.prototype, {
36 | _pending: {value: variable_pending, writable: true, configurable: true},
37 | _fulfilled: {value: variable_fulfilled, writable: true, configurable: true},
38 | _rejected: {value: variable_rejected, writable: true, configurable: true},
39 | define: {value: variable_define, writable: true, configurable: true},
40 | delete: {value: variable_delete, writable: true, configurable: true},
41 | import: {value: variable_import, writable: true, configurable: true}
42 | });
43 |
44 | function variable_attach(variable) {
45 | variable._module._runtime._dirty.add(variable);
46 | variable._outputs.add(this);
47 | }
48 |
49 | function variable_detach(variable) {
50 | variable._module._runtime._dirty.add(variable);
51 | variable._outputs.delete(this);
52 | }
53 |
54 | function variable_undefined() {
55 | throw variable_undefined;
56 | }
57 |
58 | export function variable_stale() {
59 | throw variable_stale;
60 | }
61 |
62 | function variable_rejector(variable) {
63 | return function(error) {
64 | if (error === variable_stale) throw error;
65 | if (error === variable_undefined) throw new RuntimeError(variable._name + " is not defined", variable._name);
66 | if (error instanceof Error && error.message) throw new RuntimeError(error.message, variable._name);
67 | throw new RuntimeError(variable._name + " could not be resolved", variable._name);
68 | };
69 | }
70 |
71 | function variable_duplicate(name) {
72 | return function() {
73 | throw new RuntimeError(name + " is defined more than once");
74 | };
75 | }
76 |
77 | function variable_define(name, inputs, definition) {
78 | switch (arguments.length) {
79 | case 1: {
80 | definition = name, name = inputs = null;
81 | break;
82 | }
83 | case 2: {
84 | definition = inputs;
85 | if (typeof name === "string") inputs = null;
86 | else inputs = name, name = null;
87 | break;
88 | }
89 | }
90 | return variable_defineImpl.call(this,
91 | name == null ? null : name + "",
92 | inputs == null ? [] : map.call(inputs, this._module._resolve, this._module),
93 | typeof definition === "function" ? definition : constant(definition)
94 | );
95 | }
96 |
97 | function variable_defineImpl(name, inputs, definition) {
98 | var scope = this._module._scope, runtime = this._module._runtime;
99 |
100 | this._inputs.forEach(variable_detach, this);
101 | inputs.forEach(variable_attach, this);
102 | this._inputs = inputs;
103 | this._definition = definition;
104 | this._value = undefined;
105 |
106 | // Is this an active variable (that may require disposal)?
107 | if (definition === noop) runtime._variables.delete(this);
108 | else runtime._variables.add(this);
109 |
110 | // Did the variable’s name change? Time to patch references!
111 | if (name !== this._name || scope.get(name) !== this) {
112 | var error, found;
113 |
114 | if (this._name) { // Did this variable previously have a name?
115 | if (this._outputs.size) { // And did other variables reference this variable?
116 | scope.delete(this._name);
117 | found = this._module._resolve(this._name);
118 | found._outputs = this._outputs, this._outputs = new Set;
119 | found._outputs.forEach(function(output) { output._inputs[output._inputs.indexOf(this)] = found; }, this);
120 | found._outputs.forEach(runtime._updates.add, runtime._updates);
121 | runtime._dirty.add(found).add(this);
122 | scope.set(this._name, found);
123 | } else if ((found = scope.get(this._name)) === this) { // Do no other variables reference this variable?
124 | scope.delete(this._name); // It’s safe to delete!
125 | } else if (found._type === TYPE_DUPLICATE) { // Do other variables assign this name?
126 | found._duplicates.delete(this); // This variable no longer assigns this name.
127 | this._duplicate = undefined;
128 | if (found._duplicates.size === 1) { // Is there now only one variable assigning this name?
129 | found = found._duplicates.keys().next().value; // Any references are now fixed!
130 | error = scope.get(this._name);
131 | found._outputs = error._outputs, error._outputs = new Set;
132 | found._outputs.forEach(function(output) { output._inputs[output._inputs.indexOf(error)] = found; });
133 | found._definition = found._duplicate, found._duplicate = undefined;
134 | runtime._dirty.add(error).add(found);
135 | runtime._updates.add(found);
136 | scope.set(this._name, found);
137 | }
138 | } else {
139 | throw new Error;
140 | }
141 | }
142 |
143 | if (this._outputs.size) throw new Error;
144 |
145 | if (name) { // Does this variable have a new name?
146 | if (found = scope.get(name)) { // Do other variables reference or assign this name?
147 | if (found._type === TYPE_DUPLICATE) { // Do multiple other variables already define this name?
148 | this._definition = variable_duplicate(name), this._duplicate = definition;
149 | found._duplicates.add(this);
150 | } else if (found._type === TYPE_IMPLICIT) { // Are the variable references broken?
151 | this._outputs = found._outputs, found._outputs = new Set; // Now they’re fixed!
152 | this._outputs.forEach(function(output) { output._inputs[output._inputs.indexOf(found)] = this; }, this);
153 | runtime._dirty.add(found).add(this);
154 | scope.set(name, this);
155 | } else { // Does another variable define this name?
156 | found._duplicate = found._definition, this._duplicate = definition; // Now they’re duplicates.
157 | error = new Variable(TYPE_DUPLICATE, this._module);
158 | error._name = name;
159 | error._definition = this._definition = found._definition = variable_duplicate(name);
160 | error._outputs = found._outputs, found._outputs = new Set;
161 | error._outputs.forEach(function(output) { output._inputs[output._inputs.indexOf(found)] = error; });
162 | error._duplicates = new Set([this, found]);
163 | runtime._dirty.add(found).add(error);
164 | runtime._updates.add(found).add(error);
165 | scope.set(name, error);
166 | }
167 | } else {
168 | scope.set(name, this);
169 | }
170 | }
171 |
172 | this._name = name;
173 | }
174 |
175 | // If this redefined variable was previously evaluated, invalidate it. (If the
176 | // variable was never evaluated, then the invalidated value could never have
177 | // been exposed and we can avoid this extra work.)
178 | if (this._version > 0) ++this._version;
179 |
180 | runtime._updates.add(this);
181 | runtime._compute();
182 | return this;
183 | }
184 |
185 | function variable_import(remote, name, module) {
186 | if (arguments.length < 3) module = name, name = remote;
187 | return variable_defineImpl.call(this, name + "", [module._resolve(remote + "")], identity);
188 | }
189 |
190 | function variable_delete() {
191 | return variable_defineImpl.call(this, null, [], noop);
192 | }
193 |
194 | function variable_pending() {
195 | if (this._observer.pending) this._observer.pending();
196 | }
197 |
198 | function variable_fulfilled(value) {
199 | if (this._observer.fulfilled) this._observer.fulfilled(value, this._name);
200 | }
201 |
202 | function variable_rejected(error) {
203 | if (this._observer.rejected) this._observer.rejected(error, this._name);
204 | }
205 |
--------------------------------------------------------------------------------
/test/variable/import-test.js:
--------------------------------------------------------------------------------
1 | import {Runtime} from "../../src/";
2 | import tape from "../tape";
3 | import valueof, {promiseInspector, sleep} from "./valueof";
4 |
5 | tape("variable.import(name, module) imports a variable from another module", async test => {
6 | const runtime = new Runtime();
7 | const main = runtime.module();
8 | const module = runtime.module();
9 | module.define("foo", [], () => 42);
10 | main.import("foo", module);
11 | const bar = main.variable(true).define("bar", ["foo"], foo => `bar-${foo}`);
12 | test.deepEqual(await valueof(bar), {value: "bar-42"});
13 | });
14 |
15 | tape("variable.import(name, alias, module) imports a variable from another module under an alias", async test => {
16 | const runtime = new Runtime();
17 | const main = runtime.module();
18 | const module = runtime.module();
19 | module.define("foo", [], () => 42);
20 | main.import("foo", "baz", module);
21 | const bar = main.variable(true).define("bar", ["baz"], baz => `bar-${baz}`);
22 | test.deepEqual(await valueof(bar), {value: "bar-42"});
23 | });
24 |
25 | tape("variable.import(name, module) does not compute the imported variable unless referenced", async test => {
26 | const runtime = new Runtime();
27 | const main = runtime.module();
28 | const module = runtime.module();
29 | const foo = module.define("foo", [], () => test.fail());
30 | main.import("foo", module);
31 | await runtime._computing;
32 | test.equal(foo._reachable, false);
33 | });
34 |
35 | tape("variable.import(name, module) can import a variable that depends on a mutable from another module", async test => {
36 | const runtime = new Runtime();
37 | const main = runtime.module();
38 | const module = runtime.module();
39 | module.define("mutable foo", [], () => 13);
40 | module.define("bar", ["mutable foo"], (foo) => foo);
41 | main.import("bar", module);
42 | const baz = main.variable(true).define("baz", ["bar"], bar => `baz-${bar}`);
43 | test.deepEqual(await valueof(baz), {value: "baz-13"});
44 | });
45 |
46 | tape("variable.import() allows non-circular imported values from circular imports", async test => {
47 | const runtime = new Runtime();
48 | const a = runtime.module();
49 | const b = runtime.module();
50 | a.define("foo", [], () => "foo");
51 | b.define("bar", [], () => "bar");
52 | a.import("bar", b);
53 | b.import("foo", a);
54 | const afoobar = a.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'a' + foo + bar);
55 | const bfoobar = b.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'b' + foo + bar);
56 | test.deepEqual(await valueof(afoobar), {value: "afoobar"});
57 | test.deepEqual(await valueof(bfoobar), {value: "bfoobar"});
58 | });
59 |
60 | tape("variable.import() fails when importing creates a circular reference", async test => {
61 | const runtime = new Runtime();
62 | const a = runtime.module();
63 | const b = runtime.module();
64 | a.import("bar", b);
65 | a.define("foo", ["bar"], (bar) => `foo${bar}`);
66 | b.import("foo", a);
67 | b.define("bar", ["foo"], (foo) => `${foo}bar`);
68 | const afoobar = a.variable(true).define("foobar", ["foo", "bar"], (foo, bar) => 'a' + foo + bar);
69 | const bbarfoo = b.variable(true).define("barfoo", ["bar", "foo"], (bar, foo) => 'b' + bar + foo);
70 | test.deepEqual(await valueof(afoobar), {error: "RuntimeError: circular definition"});
71 | test.deepEqual(await valueof(bbarfoo), {error: "RuntimeError: circular definition"});
72 | });
73 |
74 | tape(
75 | "variable.import() allows direct circular import-with if the resulting variables are not circular",
76 | async test => {
77 | const runtime = new Runtime();
78 | let a1, b1, a2, b2;
79 |
80 | // Module 1
81 | // a = 1
82 | // b
83 | // import {b} with {a} from "2"
84 | function define1() {
85 | const main = runtime.module();
86 | a1 = main.variable(true).define("a", () => 1);
87 | b1 = main.variable(true).define(["b"], (b) => b);
88 | const child1 = runtime.module(define2).derive(["a"], main);
89 | main.import("b", child1);
90 | return main;
91 | }
92 |
93 | // Module 2
94 | // b = 2
95 | // a
96 | // import {a} with {b} from "1"
97 | function define2() {
98 | const main = runtime.module();
99 | b2 = main.variable(true).define("b", () => 2);
100 | a2 = main.variable(true).define(["a"], (a) => a);
101 | const child1 = runtime.module(define1).derive(["b"], main);
102 | main.import("a", child1);
103 | return main;
104 | }
105 |
106 | define1();
107 |
108 | test.deepEqual(await valueof(a1), {value: 1});
109 | test.deepEqual(await valueof(b1), {value: 2});
110 | test.deepEqual(await valueof(a2), {value: 1});
111 | test.deepEqual(await valueof(b2), {value: 2});
112 | }
113 | );
114 |
115 | tape(
116 | "variable.import() allows indirect circular import-with if the resulting variables are not circular",
117 | async test => {
118 | const runtime = new Runtime();
119 | let a, b, c, importA, importB, importC;
120 |
121 | // Module 1
122 | // a = 1
123 | // c
124 | // import {c} with {a} from "3"
125 | function define1() {
126 | const main = runtime.module();
127 | a = main.variable(true).define("a", () => 1);
128 | importC = main.variable(true).define(["c"], (c) => c);
129 | const child3 = runtime.module(define3).derive(["a"], main);
130 | main.import("c", child3);
131 | return main;
132 | }
133 |
134 | // Module 2
135 | // b = 2
136 | // a
137 | // import {a} with {b} from "1"
138 | function define2() {
139 | const main = runtime.module();
140 | b = main.variable(true).define("b", () => 2);
141 | importA = main.variable(true).define(["a"], (a) => a);
142 | const child1 = runtime.module(define1).derive(["b"], main);
143 | main.import("a", child1);
144 | return main;
145 | }
146 |
147 | // Module 3
148 | // c = 3
149 | // b
150 | // import {b} with {c} from "2"
151 | function define3() {
152 | const main = runtime.module();
153 | c = main.variable(true).define("c", () => 3);
154 | importB = main.variable(true).define(["b"], (b) => b);
155 | const child2 = runtime.module(define2).derive(["c"], main);
156 | main.import("b", child2);
157 | return main;
158 | }
159 |
160 | define1();
161 |
162 | test.deepEqual(await valueof(a), {value: 1});
163 | test.deepEqual(await valueof(b), {value: 2});
164 | test.deepEqual(await valueof(c), {value: 3});
165 | test.deepEqual(await valueof(importA), {value: 1});
166 | test.deepEqual(await valueof(importB), {value: 2});
167 | test.deepEqual(await valueof(importC), {value: 3});
168 | }
169 | );
170 |
171 | tape("variable.import() supports lazy imports", async test => {
172 | let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve);
173 |
174 | function define1(runtime, observer) {
175 | const main = runtime.module();
176 | main.define("module 1", async () => runtime.module(await promise2));
177 | main.define("a", ["module 1", "@variable"], (_, v) => v.import("a", _));
178 | main.variable(observer("imported a")).define("imported a", ["a"], a => a);
179 | return main;
180 | }
181 |
182 | function define2(runtime, observer) {
183 | const main = runtime.module();
184 | main.variable(observer("a")).define("a", [], () => 1);
185 | return main;
186 | }
187 |
188 | const runtime = new Runtime();
189 | const inspectorA = promiseInspector();
190 | runtime.module(define1, name => {
191 | if (name === "imported a") {
192 | return inspectorA;
193 | }
194 | });
195 |
196 | await sleep();
197 | resolve2(define2);
198 | test.deepEqual(await inspectorA, 1);
199 | });
200 |
201 | tape("variable.import() supports lazy transitive imports", async test => {
202 | let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve);
203 | let resolve3, promise3 = new Promise((resolve) => resolve3 = resolve);
204 |
205 | function define1(runtime, observer) {
206 | const main = runtime.module();
207 | main.define("module 1", async () => runtime.module(await promise2));
208 | main.define("b", ["module 1", "@variable"], (_, v) => v.import("b", _));
209 | main.variable(observer("a")).define("a", ["b"], b => b + 1);
210 | return main;
211 | }
212 |
213 | function define2(runtime, observer) {
214 | const main = runtime.module();
215 | main.define("module 1", async () => runtime.module(await promise3));
216 | main.define("c", ["module 1", "@variable"], (_, v) => v.import("c", _));
217 | main.variable(observer("b")).define("b", ["c"], c => c + 1);
218 | return main;
219 | }
220 |
221 | function define3(runtime, observer) {
222 | const main = runtime.module();
223 | main.variable(observer("c")).define("c", [], () => 1);
224 | return main;
225 | }
226 |
227 | const runtime = new Runtime();
228 | const inspectorA = promiseInspector();
229 | runtime.module(define1, name => {
230 | if (name === "a") {
231 | return inspectorA;
232 | }
233 | });
234 |
235 | await sleep();
236 | resolve2(define2);
237 | await sleep();
238 | resolve3(define3);
239 | test.deepEqual(await inspectorA, 3);
240 | });
241 |
--------------------------------------------------------------------------------
/test/variable/derive-test.js:
--------------------------------------------------------------------------------
1 | import {Runtime} from "../../src/";
2 | import identity from "../../src/identity";
3 | import tape from "../tape";
4 | import valueof, {delay, promiseInspector, sleep} from "./valueof";
5 |
6 | tape("module.derive(overrides, module) injects variables into a copied module", async test => {
7 | const runtime = new Runtime();
8 | const module0 = runtime.module();
9 | const a0 = module0.variable(true).define("a", [], () => 1);
10 | const b0 = module0.variable(true).define("b", [], () => 2);
11 | const c0 = module0.variable(true).define("c", ["a", "b"], (a, b) => a + b);
12 | const module1 = runtime.module();
13 | const module1_0 = module0.derive([{name: "d", alias: "b"}], module1);
14 | const c1 = module1_0.variable(true).define(null, ["c"], c => c);
15 | const d1 = module1.define("d", [], () => 42);
16 | test.deepEqual(await valueof(a0), {value: 1});
17 | test.deepEqual(await valueof(b0), {value: 2});
18 | test.deepEqual(await valueof(c0), {value: 3});
19 | test.deepEqual(await valueof(c1), {value: 43});
20 | test.deepEqual(await valueof(d1), {value: 42});
21 | });
22 |
23 | tape("module.derive(…) copies module-specific builtins", async test => {
24 | const runtime = new Runtime();
25 | const module0 = runtime.module();
26 | module0.builtin("a", 1);
27 | const b0 = module0.variable(true).define("b", ["a"], a => a + 1);
28 | const module1_0 = module0.derive([], module0);
29 | const c1 = module1_0.variable(true).define("c", ["a"], a => a + 2);
30 | test.deepEqual(await valueof(b0), {value: 2});
31 | test.deepEqual(await valueof(c1), {value: 3});
32 | });
33 |
34 | tape("module.derive(…) can inject into modules that inject into modules", async test => {
35 | const runtime = new Runtime();
36 |
37 | // Module A
38 | // a = 1
39 | // b = 2
40 | // c = a + b
41 | const A = runtime.module();
42 | A.define("a", 1);
43 | A.define("b", 2);
44 | A.define("c", ["a", "b"], (a, b) => a + b);
45 |
46 | // Module B
47 | // d = 3
48 | // import {c as e} with {d as b} from "A"
49 | const B = runtime.module();
50 | B.define("d", 3);
51 | const BA = A.derive([{name: "d", alias: "b"}], B);
52 | B.import("c", "e", BA);
53 |
54 | // Module C
55 | // f = 4
56 | // import {e as g} with {f as d} from "B"
57 | const C = runtime.module();
58 | C.define("f", 4);
59 | const CB = B.derive([{name: "f", alias: "d"}], C);
60 | const g = C.variable(true).import("e", "g", CB);
61 |
62 | test.deepEqual(await valueof(g), {value: 5});
63 | test.strictEqual(g._module, C);
64 | test.strictEqual(g._inputs[0]._module, CB);
65 | test.strictEqual(g._inputs[0]._inputs[0]._module._source, BA);
66 | test.strictEqual(C._source, null);
67 | test.strictEqual(CB._source, B);
68 | test.strictEqual(BA._source, A);
69 | });
70 |
71 | tape("module.derive(…) can inject into modules that inject into modules that inject into modules", async test => {
72 | const runtime = new Runtime();
73 |
74 | // Module A
75 | // a = 1
76 | // b = 2
77 | // c = a + b
78 | const A = runtime.module();
79 | A.define("a", 1);
80 | A.define("b", 2);
81 | A.define("c", ["a", "b"], (a, b) => a + b);
82 |
83 | // Module B
84 | // d = 3
85 | // import {c as e} with {d as b} from "A"
86 | const B = runtime.module();
87 | B.define("d", 3);
88 | const BA = A.derive([{name: "d", alias: "b"}], B);
89 | B.import("c", "e", BA);
90 |
91 | // Module C
92 | // f = 4
93 | // import {e as g} with {f as d} from "B"
94 | const C = runtime.module();
95 | C.define("f", 4);
96 | const CB = B.derive([{name: "f", alias: "d"}], C);
97 | C.import("e", "g", CB);
98 |
99 | // Module D
100 | // h = 5
101 | // import {g as i} with {h as f} from "C"
102 | const D = runtime.module();
103 | D.define("h", 5);
104 | const DC = C.derive([{name: "h", alias: "f"}], D);
105 | const i = D.variable(true).import("g", "i", DC);
106 |
107 | test.deepEqual(await valueof(i), {value: 6});
108 | test.strictEqual(i._module, D);
109 | test.strictEqual(i._inputs[0]._module, DC);
110 | test.strictEqual(i._inputs[0]._module._source, C);
111 | test.strictEqual(i._inputs[0]._inputs[0]._module._source, CB);
112 | test.strictEqual(i._inputs[0]._inputs[0]._module._source._source, B);
113 | });
114 |
115 | tape("module.derive(…) does not copy non-injected modules", async test => {
116 | const runtime = new Runtime();
117 |
118 | // Module A
119 | // a = 1
120 | // b = 2
121 | // c = a + b
122 | const A = runtime.module();
123 | A.define("a", 1);
124 | A.define("b", 2);
125 | A.define("c", ["a", "b"], (a, b) => a + b);
126 |
127 | // Module B
128 | // import {c as e} from "A"
129 | const B = runtime.module();
130 | B.import("c", "e", A);
131 |
132 | // Module C
133 | // f = 4
134 | // import {e as g} with {f as d} from "B"
135 | const C = runtime.module();
136 | C.define("f", 4);
137 | const CB = B.derive([{name: "f", alias: "d"}], C);
138 | const g = C.variable(true).import("e", "g", CB);
139 |
140 | test.deepEqual(await valueof(g), {value: 3});
141 | test.strictEqual(g._module, C);
142 | test.strictEqual(g._inputs[0]._module, CB);
143 | test.strictEqual(g._inputs[0]._inputs[0]._module, A);
144 | });
145 |
146 | tape("module.derive(…) does not copy non-injected modules, again", async test => {
147 | const runtime = new Runtime();
148 | const A = runtime.module();
149 | A.define("a", () => ({}));
150 | const B = runtime.module();
151 | B.import("a", A);
152 | const C = runtime.module();
153 | const CB = B.derive([], C);
154 | const a1 = C.variable(true).import("a", "a1", CB);
155 | const a2 = C.variable(true).import("a", "a2", A);
156 | const {value: v1} = await valueof(a1);
157 | const {value: v2} = await valueof(a2);
158 | test.deepEqual(v1, {});
159 | test.strictEqual(v1, v2);
160 | });
161 |
162 | tape("module.derive() supports lazy import-with", async test => {
163 | let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve);
164 |
165 | function define1(runtime, observer) {
166 | const main = runtime.module();
167 | main.define("module 1", ["@variable"], async (v) => runtime.module(await promise2).derive([{name: "b"}], v._module));
168 | main.define("c", ["module 1", "@variable"], (_, v) => v.import("c", _));
169 | main.variable(observer("b")).define("b", [], () => 3);
170 | main.variable(observer("imported c")).define("imported c", ["c"], c => c);
171 | return main;
172 | }
173 |
174 | function define2(runtime, observer) {
175 | const main = runtime.module();
176 | main.variable(observer("a")).define("a", [], () => 1);
177 | main.variable(observer("b")).define("b", [], () => 2);
178 | main.variable(observer("c")).define("c", ["a", "b"], (a, b) => a + b);
179 | return main;
180 | }
181 |
182 | const runtime = new Runtime();
183 | const inspectorC = promiseInspector();
184 | runtime.module(define1, name => {
185 | if (name === "imported c") {
186 | return inspectorC;
187 | }
188 | });
189 |
190 | await sleep();
191 | resolve2(define2);
192 | test.deepEqual(await inspectorC, 4);
193 | });
194 |
195 | tape("module.derive() supports lazy transitive import-with", async test => {
196 | let resolve2, promise2 = new Promise((resolve) => resolve2 = resolve);
197 | let resolve3, promise3 = new Promise((resolve) => resolve3 = resolve);
198 | let module2_1;
199 | let module3_2;
200 | let variableC_1;
201 |
202 | // Module 1
203 | // b = 4
204 | // imported c = c
205 | // import {c} with {b} from "2"
206 | function define1(runtime, observer) {
207 | const main = runtime.module();
208 | main.define("module 2", ["@variable"], async (v) => (module2_1 = runtime.module(await promise2).derive([{name: "b"}], v._module)));
209 | variableC_1 = main.define("c", ["module 2", "@variable"], (_, v) => v.import("c", _));
210 | main.variable(observer("b")).define("b", [], () => 4);
211 | main.variable(observer("imported c")).define("imported c", ["c"], c => c);
212 | return main;
213 | }
214 |
215 | // Module 2
216 | // b = 3
217 | // c
218 | // import {c} with {b} from "3"
219 | function define2(runtime, observer) {
220 | const main = runtime.module();
221 | main.define("module 3", ["@variable"], async (v) => (module3_2 = runtime.module(await promise3).derive([{name: "b"}], v._module)));
222 | main.define("c", ["module 3", "@variable"], (_, v) => v.import("c", _));
223 | main.variable(observer("b")).define("b", [], () => 3);
224 | main.variable(observer()).define(["c"], c => c);
225 | return main;
226 | }
227 |
228 | // Module 3
229 | // a = 1
230 | // b = 2
231 | // c = a + b
232 | function define3(runtime, observer) {
233 | const main = runtime.module();
234 | main.variable(observer("a")).define("a", [], () => 1);
235 | main.variable(observer("b")).define("b", [], () => 2);
236 | main.variable(observer("c")).define("c", ["a", "b"], (a, b) => a + b);
237 | return main;
238 | }
239 |
240 | const runtime = new Runtime();
241 | const inspectorC = promiseInspector();
242 | runtime.module(define1, name => {
243 | if (name === "imported c") {
244 | return inspectorC;
245 | }
246 | });
247 |
248 | // Initially c in module 1 is not an import; it’s a placeholder that depends
249 | // on an internal variable called “module 2”. Also, only one module yet
250 | // exists, because module 2 has not yet loaded.
251 | await sleep();
252 | const module1 = runtime.module(define1);
253 | const c1 = module1._scope.get("c");
254 | test.strictEqual(c1, variableC_1);
255 | test.deepEqual(c1._inputs.map(i => i._name), ["module 2", "@variable"]);
256 | test.strictEqual(runtime._modules.size, 1);
257 |
258 | // After module 2 loads, the variable c in module 1 has been redefined; it is
259 | // now an import of c from a derived copy of module 2, module 2'. In addition,
260 | // the variable b in module 2' is now an import from module 1.
261 | resolve2(define2);
262 | await sleep();
263 | const module2 = runtime.module(define2);
264 | test.deepEqual(c1._inputs.map(i => i._name), ["c"]);
265 | test.strictEqual(c1._definition, identity);
266 | test.strictEqual(c1._inputs[0]._module, module2_1);
267 | test.strictEqual(module2_1._source, module2);
268 | test.strictEqual(runtime._modules.size, 2);
269 | const b2_1 = module2_1._scope.get("b");
270 | test.deepEqual(b2_1._inputs.map(i => i._name), ["b"]);
271 | test.deepEqual(b2_1._definition, identity);
272 | test.deepEqual(b2_1._inputs[0]._module, module1);
273 |
274 | // After module 3 loads, the variable c in module 2' has been redefined; it is
275 | // now an import of c from a derived copy of module 3, module 3'. In addition,
276 | // the variable b in module 3' is now an import from module 2'.
277 | resolve3(define3);
278 | await sleep();
279 | const module3 = runtime.module(define3);
280 | const c2_1 = module2_1._scope.get("c");
281 | test.strictEqual(c2_1._module, module2_1);
282 | test.strictEqual(c2_1._definition, identity);
283 | test.strictEqual(c2_1._inputs[0]._module, module3_2);
284 | test.strictEqual(module3_2._source, module3);
285 | const b3_2 = module3_2._scope.get("b");
286 | test.deepEqual(b3_2._inputs.map(i => i._name), ["b"]);
287 | test.deepEqual(b3_2._definition, identity);
288 | test.deepEqual(b3_2._inputs[0]._module, module2_1);
289 | test.deepEqual(await inspectorC, 5);
290 | });
291 |
--------------------------------------------------------------------------------
/src/runtime.js:
--------------------------------------------------------------------------------
1 | import {Library, FileAttachments} from "@observablehq/stdlib";
2 | import {RuntimeError} from "./errors";
3 | import generatorish from "./generatorish";
4 | import load from "./load";
5 | import Module from "./module";
6 | import noop from "./noop";
7 | import Variable, {TYPE_IMPLICIT, no_observer, variable_stale} from "./variable";
8 |
9 | const frame = typeof requestAnimationFrame === "function" ? requestAnimationFrame
10 | : typeof setImmediate === "function" ? setImmediate
11 | : f => setTimeout(f, 0);
12 |
13 | export var variable_variable = {};
14 | export var variable_invalidation = {};
15 | export var variable_visibility = {};
16 |
17 | export default function Runtime(builtins = new Library, global = window_global) {
18 | var builtin = this.module();
19 | Object.defineProperties(this, {
20 | _dirty: {value: new Set},
21 | _updates: {value: new Set},
22 | _precomputes: {value: [], writable: true},
23 | _computing: {value: null, writable: true},
24 | _init: {value: null, writable: true},
25 | _modules: {value: new Map},
26 | _variables: {value: new Set},
27 | _disposed: {value: false, writable: true},
28 | _builtin: {value: builtin},
29 | _global: {value: global}
30 | });
31 | if (builtins) for (var name in builtins) {
32 | (new Variable(TYPE_IMPLICIT, builtin)).define(name, [], builtins[name]);
33 | }
34 | }
35 |
36 | Object.defineProperties(Runtime, {
37 | load: {value: load, writable: true, configurable: true}
38 | });
39 |
40 | Object.defineProperties(Runtime.prototype, {
41 | _precompute: {value: runtime_precompute, writable: true, configurable: true},
42 | _compute: {value: runtime_compute, writable: true, configurable: true},
43 | _computeSoon: {value: runtime_computeSoon, writable: true, configurable: true},
44 | _computeNow: {value: runtime_computeNow, writable: true, configurable: true},
45 | dispose: {value: runtime_dispose, writable: true, configurable: true},
46 | module: {value: runtime_module, writable: true, configurable: true},
47 | fileAttachments: {value: FileAttachments, writable: true, configurable: true}
48 | });
49 |
50 | function runtime_dispose() {
51 | this._computing = Promise.resolve();
52 | this._disposed = true;
53 | this._variables.forEach(v => {
54 | v._invalidate();
55 | v._version = NaN;
56 | });
57 | }
58 |
59 | function runtime_module(define, observer = noop) {
60 | let module;
61 | if (define === undefined) {
62 | if (module = this._init) {
63 | this._init = null;
64 | return module;
65 | }
66 | return new Module(this);
67 | }
68 | module = this._modules.get(define);
69 | if (module) return module;
70 | this._init = module = new Module(this);
71 | this._modules.set(define, module);
72 | try {
73 | define(this, observer);
74 | } finally {
75 | this._init = null;
76 | }
77 | return module;
78 | }
79 |
80 | function runtime_precompute(callback) {
81 | this._precomputes.push(callback);
82 | this._compute();
83 | }
84 |
85 | function runtime_compute() {
86 | return this._computing || (this._computing = this._computeSoon());
87 | }
88 |
89 | function runtime_computeSoon() {
90 | return new Promise(frame).then(() => this._disposed ? undefined : this._computeNow());
91 | }
92 |
93 | async function runtime_computeNow() {
94 | var queue = [],
95 | variables,
96 | variable,
97 | precomputes = this._precomputes;
98 |
99 | // If there are any paused generators, resume them before computing so they
100 | // can update (if synchronous) before computing downstream variables.
101 | if (precomputes.length) {
102 | this._precomputes = [];
103 | for (const callback of precomputes) callback();
104 | await runtime_defer(3);
105 | }
106 |
107 | // Compute the reachability of the transitive closure of dirty variables.
108 | // Any newly-reachable variable must also be recomputed.
109 | // Any no-longer-reachable variable must be terminated.
110 | variables = new Set(this._dirty);
111 | variables.forEach(function(variable) {
112 | variable._inputs.forEach(variables.add, variables);
113 | const reachable = variable_reachable(variable);
114 | if (reachable > variable._reachable) {
115 | this._updates.add(variable);
116 | } else if (reachable < variable._reachable) {
117 | variable._invalidate();
118 | }
119 | variable._reachable = reachable;
120 | }, this);
121 |
122 | // Compute the transitive closure of updating, reachable variables.
123 | variables = new Set(this._updates);
124 | variables.forEach(function(variable) {
125 | if (variable._reachable) {
126 | variable._indegree = 0;
127 | variable._outputs.forEach(variables.add, variables);
128 | } else {
129 | variable._indegree = NaN;
130 | variables.delete(variable);
131 | }
132 | });
133 |
134 | this._computing = null;
135 | this._updates.clear();
136 | this._dirty.clear();
137 |
138 | // Compute the indegree of updating variables.
139 | variables.forEach(function(variable) {
140 | variable._outputs.forEach(variable_increment);
141 | });
142 |
143 | do {
144 | // Identify the root variables (those with no updating inputs).
145 | variables.forEach(function(variable) {
146 | if (variable._indegree === 0) {
147 | queue.push(variable);
148 | }
149 | });
150 |
151 | // Compute the variables in topological order.
152 | while (variable = queue.pop()) {
153 | variable_compute(variable);
154 | variable._outputs.forEach(postqueue);
155 | variables.delete(variable);
156 | }
157 |
158 | // Any remaining variables are circular, or depend on them.
159 | variables.forEach(function(variable) {
160 | if (variable_circular(variable)) {
161 | variable_error(variable, new RuntimeError("circular definition"));
162 | variable._outputs.forEach(variable_decrement);
163 | variables.delete(variable);
164 | }
165 | });
166 | } while (variables.size);
167 |
168 | function postqueue(variable) {
169 | if (--variable._indegree === 0) {
170 | queue.push(variable);
171 | }
172 | }
173 | }
174 |
175 | // We want to give generators, if they’re defined synchronously, a chance to
176 | // update before computing downstream variables. This creates a synchronous
177 | // promise chain of the given depth that we’ll await before recomputing
178 | // downstream variables.
179 | function runtime_defer(depth = 0) {
180 | let p = Promise.resolve();
181 | for (let i = 0; i < depth; ++i) p = p.then(() => {});
182 | return p;
183 | }
184 |
185 | function variable_circular(variable) {
186 | const inputs = new Set(variable._inputs);
187 | for (const i of inputs) {
188 | if (i === variable) return true;
189 | i._inputs.forEach(inputs.add, inputs);
190 | }
191 | return false;
192 | }
193 |
194 | function variable_increment(variable) {
195 | ++variable._indegree;
196 | }
197 |
198 | function variable_decrement(variable) {
199 | --variable._indegree;
200 | }
201 |
202 | function variable_value(variable) {
203 | return variable._promise.catch(variable._rejector);
204 | }
205 |
206 | function variable_invalidator(variable) {
207 | return new Promise(function(resolve) {
208 | variable._invalidate = resolve;
209 | });
210 | }
211 |
212 | function variable_intersector(invalidation, variable) {
213 | let node = typeof IntersectionObserver === "function" && variable._observer && variable._observer._node;
214 | let visible = !node, resolve = noop, reject = noop, promise, observer;
215 | if (node) {
216 | observer = new IntersectionObserver(([entry]) => (visible = entry.isIntersecting) && (promise = null, resolve()));
217 | observer.observe(node);
218 | invalidation.then(() => (observer.disconnect(), observer = null, reject()));
219 | }
220 | return function(value) {
221 | if (visible) return Promise.resolve(value);
222 | if (!observer) return Promise.reject();
223 | if (!promise) promise = new Promise((y, n) => (resolve = y, reject = n));
224 | return promise.then(() => value);
225 | };
226 | }
227 |
228 | function variable_compute(variable) {
229 | variable._invalidate();
230 | variable._invalidate = noop;
231 | variable._pending();
232 |
233 | const value0 = variable._value;
234 | const version = ++variable._version;
235 |
236 | // Lazily-constructed invalidation variable; only constructed if referenced as an input.
237 | let invalidation = null;
238 |
239 | // If the variable doesn’t have any inputs, we can optimize slightly.
240 | const promise = variable._promise = (variable._inputs.length
241 | ? Promise.all(variable._inputs.map(variable_value)).then(define)
242 | : new Promise(resolve => resolve(variable._definition.call(value0))))
243 | .then(generate);
244 |
245 | // Compute the initial value of the variable.
246 | function define(inputs) {
247 | if (variable._version !== version) throw variable_stale;
248 |
249 | // Replace any reference to invalidation with the promise, lazily.
250 | for (var i = 0, n = inputs.length; i < n; ++i) {
251 | switch (inputs[i]) {
252 | case variable_invalidation: {
253 | inputs[i] = invalidation = variable_invalidator(variable);
254 | break;
255 | }
256 | case variable_visibility: {
257 | if (!invalidation) invalidation = variable_invalidator(variable);
258 | inputs[i] = variable_intersector(invalidation, variable);
259 | break;
260 | }
261 | case variable_variable: {
262 | inputs[i] = variable;
263 | break;
264 | }
265 | }
266 | }
267 |
268 | return variable._definition.apply(value0, inputs);
269 | }
270 |
271 | // If the value is a generator, then retrieve its first value, and dispose of
272 | // the generator if the variable is invalidated. Note that the cell may
273 | // already have been invalidated here, in which case we need to terminate the
274 | // generator immediately!
275 | function generate(value) {
276 | if (variable._version !== version) throw variable_stale;
277 | if (generatorish(value)) {
278 | (invalidation || variable_invalidator(variable)).then(variable_return(value));
279 | return variable_generate(variable, version, value);
280 | }
281 | return value;
282 | }
283 |
284 | promise.then((value) => {
285 | variable._value = value;
286 | variable._fulfilled(value);
287 | }, (error) => {
288 | if (error === variable_stale) return;
289 | variable._value = undefined;
290 | variable._rejected(error);
291 | });
292 | }
293 |
294 | function variable_generate(variable, version, generator) {
295 | const runtime = variable._module._runtime;
296 | let currentValue; // so that yield resolves to the yielded value
297 |
298 | // Retrieve the next value from the generator; if successful, invoke the
299 | // specified callback. The returned promise resolves to the yielded value, or
300 | // to undefined if the generator is done.
301 | function compute(onfulfilled) {
302 | return new Promise(resolve => resolve(generator.next(currentValue))).then(({done, value}) => {
303 | return done ? undefined : Promise.resolve(value).then(onfulfilled);
304 | });
305 | }
306 |
307 | // Retrieve the next value from the generator; if successful, fulfill the
308 | // variable, compute downstream variables, and schedule the next value to be
309 | // pulled from the generator at the start of the next animation frame. If not
310 | // successful, reject the variable, compute downstream variables, and return.
311 | function recompute() {
312 | const promise = compute((value) => {
313 | if (variable._version !== version) throw variable_stale;
314 | currentValue = value;
315 | postcompute(value, promise).then(() => runtime._precompute(recompute));
316 | variable._fulfilled(value);
317 | return value;
318 | });
319 | promise.catch((error) => {
320 | if (error === variable_stale || variable._version !== version) return;
321 | postcompute(undefined, promise);
322 | variable._rejected(error);
323 | });
324 | }
325 |
326 | // After the generator fulfills or rejects, set its current value, promise,
327 | // and schedule any downstream variables for update.
328 | function postcompute(value, promise) {
329 | variable._value = value;
330 | variable._promise = promise;
331 | variable._outputs.forEach(runtime._updates.add, runtime._updates);
332 | return runtime._compute();
333 | }
334 |
335 | // When retrieving the first value from the generator, the promise graph is
336 | // already established, so we only need to queue the next pull.
337 | return compute((value) => {
338 | if (variable._version !== version) throw variable_stale;
339 | currentValue = value;
340 | runtime._precompute(recompute);
341 | return value;
342 | });
343 | }
344 |
345 | function variable_error(variable, error) {
346 | variable._invalidate();
347 | variable._invalidate = noop;
348 | variable._pending();
349 | ++variable._version;
350 | variable._indegree = NaN;
351 | (variable._promise = Promise.reject(error)).catch(noop);
352 | variable._value = undefined;
353 | variable._rejected(error);
354 | }
355 |
356 | function variable_return(generator) {
357 | return function() {
358 | generator.return();
359 | };
360 | }
361 |
362 | function variable_reachable(variable) {
363 | if (variable._observer !== no_observer) return true; // Directly reachable.
364 | var outputs = new Set(variable._outputs);
365 | for (const output of outputs) {
366 | if (output._observer !== no_observer) return true;
367 | output._outputs.forEach(outputs.add, outputs);
368 | }
369 | return false;
370 | }
371 |
372 | function window_global(name) {
373 | return window[name];
374 | }
375 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # @observablehq/runtime
2 |
3 | [](https://github.com/observablehq/runtime/actions?workflow=Node+CI) [](https://greenkeeper.io/)
4 |
5 | The [Observable runtime](https://observablehq.com/@observablehq/how-observable-runs) lets you run Observable notebooks as true reactive programs [in any JavaScript environment](https://observablehq.com/@observablehq/downloading-and-embedding-notebooks): on your personal website, integrated into your web application or interactive dashboard. Take your notebook to any distant shore the web platform reaches.
6 |
7 | For example, to render the “hello” cell from the [“Hello World” notebook](https://observablehq.com/@observablehq/hello-world):
8 |
9 | ```html
10 |
11 |
12 |
13 |
14 |
29 | ```
30 |
31 | To render the entire notebook into the body, use [Inspector.into](https://github.com/observablehq/inspector/blob/master/README.md#Inspector_into):
32 |
33 | ```js
34 | const runtime = new Runtime();
35 | const main = runtime.module(define, Inspector.into(document.body));
36 | ```
37 |
38 | For more control, implement a [custom observer](#observers) in place of the standard inspector. The returned object may implement [*observer*.pending](#observer_pending), [*observer*.fulfilled](#observer_fulfilled) and [*observer*.rejected](#observer_rejected) methods to be notified when the corresponding *variable* changes state. For example:
39 |
40 | ```js
41 | const runtime = new Runtime();
42 | const main = runtime.module(define, name => {
43 | return {
44 | pending() {
45 | console.log(`${name}: pending`);
46 | },
47 | fulfilled(value) {
48 | console.log(`${name}: fullfilled`, value);
49 | },
50 | rejected(error) {
51 | console.error(`${name}: rejected`, error);
52 | }
53 | };
54 | });
55 | ```
56 |
57 | Variables which are not associated with an *observer*, or aren’t indirectly depended on by a variable that is associated with an *observer*, will not be evaluated. To force a variable to be evaluated, return true. See [*module*.variable](#module_variable).
58 |
59 | ## API Reference
60 |
61 | ### Runtimes
62 |
63 |
# new
Runtime(
builtins = new Library[,
global]) [<>](https://github.com/observablehq/runtime/blob/master/src/runtime.js "Source")
64 |
65 | Returns a new [runtime](#runtimes). If *builtins* is specified, each property on the *builtins* object defines a builtin variable for the runtime. These builtins are available as named inputs to any [defined variables](#variable_define) on any [module](#modules) associated with this runtime. If *builtins* is not specified, it defaults to the [standard library](https://github.com/observablehq/stdlib/blob/master/README.md). If a *global* function is specified, it will be invoked with the name of any unresolved reference, and must return the corresponding value or undefined (to trigger a ReferenceError); if *global* is not specified, unresolved values will be resolved from the global window.
66 |
67 | Many Observable notebooks rely on the [standard library](https://github.com/observablehq/stdlib) builtins. To instead specify a custom set of builtins:
68 |
69 | ```js
70 | const runtime = new Runtime({color: "red"});
71 | ```
72 |
73 | Or to define a new builtin, or override an existing one:
74 |
75 | ```js
76 | const runtime = new Runtime(Object.assign(new Library, {color: "red"}));
77 | ```
78 |
79 | To refer to the `color` builtin from a variable:
80 |
81 | ```js
82 | const module = runtime.module();
83 | const inspector = new Inspector(document.querySelector("#hello"));
84 | module.variable(inspector).define(["color"], color => `Hello, ${color}.`);
85 | ```
86 |
87 | This would produce the following output:
88 |
89 | > Hello, red.
90 |
91 | Unlike [variables](#variables), builtins cannot depend on the value of other variables or builtins; they are defined with no inputs. If a builtin is defined as a function, it will be invoked lazily to determine the value of the builtin. If you wish for the value of a builtin to be a function, the builtin must be defined either as a promise that resolves to a function or as a function that returns a function. Builtins may also be defined as generators for dynamic values; see [now](https://github.com/observablehq/stdlib/blob/master/README.md#now) for example.
92 |
93 |
# runtime.
module([
define][,
observer]) [<>](https://github.com/observablehq/runtime/blob/master/src/runtime.js "Source")
94 |
95 | Returns a new [module](#modules) for this [runtime](#runtimes).
96 |
97 | If *define* is specified, it is a function which defines the new module’s [variables](#variables) by calling *runtime*.module (with no arguments) and then calling [*module*.variable](#module_variable) on the returned module as desired. If this runtime already has a module for the specified *define* function, the existing module is returned; otherwise, a new module is created, and the *define* function is called, being passed this runtime and the specified *observer* factory function. If *define* is not specified, a new module is created and returned.
98 |
99 | If an *observer* factory function is specified, it is called for each named variable in the returned module, being passed the variable’s name. The [standard inspector](#inspector) is available as a ready-made observer: it displays DOM elements “as-is” and renders interactive displays for other arbitrary values such as numbers and objects.
100 |
101 |
# runtime.
dispose() [<>](https://github.com/observablehq/runtime/blob/master/src/runtime.js "Source")
102 |
103 | Disposes this runtime, invalidating all active variables and disabling future computation.
104 |
105 | ### Modules
106 |
107 | A module is a namespace for [variables](#variables); within a module, variables should typically have unique names. [Imports](#variable_import) allow variables to be referenced across modules.
108 |
109 |
# module.
variable([
observer]) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
110 |
111 | Returns a new [variable](#variables) for this [module](#modules). The variable is initially undefined.
112 |
113 | If *observer* is specified, the specified [observer](#observers) will be notified when the returned variable changes state, via the [observer.*pending*](#observer_pending), [observer.*fulfilled*](#observer_fulfilled) and [observer.*rejected*](#observer_rejected) methods. See the [standard inspector](https://github.com/observablehq/inspector/blob/master/README.md) for a convenient default observer implementation.
114 |
115 | A variable without an associated *observer* is only computed if any transitive output of the variable has an *observer*; variables are computed on an as-needed basis for display. This is particularly useful when the runtime has multiple modules (as with [imports](#variable_import)): only the needed variables from imported modules are computed.
116 |
117 |
# module.
derive(
specifiers,
source) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
118 |
119 | Returns a derived copy of this [module](#modules), where each variable in *specifiers* is replaced by an [import](#variable_import) from the specified *source* module. The *specifiers* are specified as an array of objects with the following properties:
120 |
121 | * *specifier*.name - the name of the variable to import from *source*.
122 | * *specifier*.alias - the name of the variable to redefine in this module.
123 |
124 | If *specifier*.alias is not specified, it defaults to *specifier*.name. A *specifier* may also be specified as a string, in which case the string is treated as both the name and the alias. For example, consider the following module which defines two constants *a* and *b*, and a variable *c* that represents their sum:
125 |
126 | ```js
127 | const module0 = runtime.module();
128 | module0.variable().define("a", 1);
129 | module0.variable().define("b", 2);
130 | module0.variable().define("c", ["a", "b"], (a, b) => a + b);
131 | ```
132 |
133 | To derive a new module that redefines *b*:
134 |
135 | ```js
136 | const module1 = runtime.module();
137 | const module1_0 = module0.derive(["b"], module1);
138 | module1.variable().define("b", 3);
139 | module1.variable().import("c", module1_0);
140 | ```
141 |
142 | The value of *c* in the derived module is now 1 + 3 = 4, whereas the value of *c* in the original module remains 1 + 2 = 3.
143 |
144 |
# module.
define(\[
name, \]\[
inputs, \]
definition) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
145 |
146 | A convenience method for [*variable*.define](#variable_define); equivalent to:
147 |
148 | ```js
149 | module.variable().define(name, inputs, definition)
150 | ```
151 |
152 |
# module.
import(
name, [
alias, ]
from) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
153 |
154 | A convenience method for [*variable*.import](#variable_import); equivalent to:
155 |
156 | ```js
157 | module.variable().import(name, alias, from)
158 | ```
159 |
160 |
# module.
redefine(
name[,
inputs],
definition) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
161 |
162 | Redefines the *variable* with the specified *name* on this module. If no such variable exists, or if more than one variable has the specified *name*, throws a runtime error.
163 |
164 |
# module.
value(
name) [<>](https://github.com/observablehq/runtime/blob/master/src/module.js "Source")
165 |
166 | Returns a promise to the next value of the *variable* with the specified *name* on this module. If no such variable exists, or if more than one variable has the specified *name*, throws a runtime error.
167 |
168 | ### Variables
169 |
170 | A variable defines a piece of state in a reactive program, akin to a cell in a spreadsheet. Variables may be named to allow the definition of derived variables: variables whose value is computed from other variables’ values. Variables are scoped by a [module](#modules) and evaluated by a [runtime](#runtimes).
171 |
172 |
# variable.
define(\[
name, \]\[
inputs, \]
definition) [<>](https://github.com/observablehq/runtime/blob/master/src/variable.js "Source")
173 |
174 | Redefines this variable to have the specified *name*, taking the variables with the names specified in *inputs* as arguments to the specified *definition* function. If *name* is null or not specified, this variable is anonymous and may not be referred to by other variables. The named *inputs* refer to other variables (possibly [imported](#variable_import)) in this variable’s module. Circular inputs are not allowed; the variable will throw a ReferenceError upon evaluation. If *inputs* is not specified, it defaults to the empty array. If *definition* is not a function, the variable is defined to have the constant value of *definition*.
175 |
176 | The *definition* function may return a promise; derived variables will be computed after the promise resolves. The *definition* function may likewise return a generator; the runtime will pull values from the generator on every animation frame, or if the generator yielded a promise, after the promise is resolved. When the *definition* is invoked, the value of `this` is the variable’s previous value, or undefined if this is the first time the variable is being computed under its current definition. Thus, the previous value is preserved only when input values change; it is *not* preserved if the variable is explicitly redefined.
177 |
178 | For example, consider the following module that starts with a single undefined variable, *a*:
179 |
180 | ```js
181 | const runtime = new Runtime(builtins);
182 |
183 | const module = runtime.module();
184 |
185 | const a = module.variable();
186 | ```
187 |
188 | To define variable *a* with the name `foo` and the constant value 42:
189 |
190 | ```js
191 | a.define("foo", 42);
192 | ```
193 |
194 | This is equivalent to:
195 |
196 | ```js
197 | a.define("foo", [], () => 42);
198 | ```
199 |
200 | To define an anonymous variable *b* that takes `foo` as input:
201 |
202 | ```js
203 | const b = module.variable();
204 |
205 | b.define(["foo"], foo => foo * 2);
206 | ```
207 |
208 | This is equivalent to:
209 |
210 | ```js
211 | b.define(null, ["foo"], foo => foo * 2);
212 | ```
213 |
214 | Note that the JavaScript symbols in the above example code (*a* and *b*) have no relation to the variable names (`foo` and null); variable names can change when a variable is redefined or deleted. Each variable corresponds to a cell in an Observable notebook, but the cell can be redefined to have a different name or definition.
215 |
216 | If more than one variable has the same *name* at the same time in the same module, these variables’ definitions are temporarily overridden to throw a ReferenceError. When and if the duplicate variables are [deleted](#variable_delete), or are redefined to have unique names, the original definition of the remaining variable (if any) is restored. For example, here variables *a* and *b* will throw a ReferenceError:
217 |
218 | ```js
219 | const module = new Runtime(builtins).module();
220 | const a = module.variable().define("foo", 1);
221 | const b = module.variable().define("foo", 2);
222 | ```
223 |
224 | If *a* or *b* is redefined to have a different name, both *a* and *b* will subsequently resolve to their desired values:
225 |
226 | ```js
227 | b.define("bar", 2);
228 | ```
229 |
230 | Likewise deleting *a* or *b* would allow the other variable to resolve to its desired value.
231 |
232 |
# variable.
import(
name, [
alias, ]
module) [<>](https://github.com/observablehq/runtime/blob/master/src/variable.js "Source")
233 |
234 | Redefines this variable as an alias of the variable with the specified *name* in the specified [*module*](#modules). The subsequent name of this variable is the specified *name*, or if specified, the given *alias*. The order of arguments corresponds to the standard import statement: `import {name as alias} from "module"`. For example, consider a module which defines a variable named `foo`:
235 |
236 | ```js
237 | const runtime = new Runtime(builtins);
238 |
239 | const module0 = runtime.module();
240 |
241 | module0.variable().define("foo", 42);
242 | ```
243 |
244 | To import `foo` into another module:
245 |
246 | ```js
247 | const module1 = runtime.module();
248 |
249 | module1.variable().import("foo", module0);
250 | ```
251 |
252 | Now the variable `foo` is available to other variables in *module1*:
253 |
254 | ```js
255 | module1.variable().define(["foo"], foo => `Hello, ${foo}.`);
256 | ```
257 |
258 | This would produce the following output:
259 |
260 | > Hello, 42.
261 |
262 | To import `foo` into *module1* under the alias `bar`:
263 |
264 | ```js
265 | module1.variable().import("foo", "bar", module0);
266 | ```
267 |
268 |
# variable.
delete() [<>](https://github.com/observablehq/runtime/blob/master/src/variable.js "Source")
269 |
270 | Deletes this variable’s current definition and name, if any. Any variable in this module that references this variable as an input will subsequently throw a ReferenceError. If exactly one other variable defined this variable’s previous name, such that that variable throws a ReferenceError due to its duplicate definition, that variable’s original definition is restored.
271 |
272 | ### Observers
273 |
274 | An observer watches a [variable](#variables), being notified via asynchronous callback whenever the variable changes state. See the [standard inspector](https://github.com/observablehq/inspector) for reference.
275 |
276 |
# observer.
pending()
277 |
278 | Called shortly before the variable is computed. For a generator variable, this occurs before the generator is constructed, but not before each subsequent value is pulled from the generator.
279 |
280 |
# observer.
fulfilled(
value)
281 |
282 | Called shortly after the variable is fulfilled with a new *value*.
283 |
284 |
# observer.
rejected(
error)
285 |
286 | Called shortly after the variable is rejected with the given *error*.
287 |
288 | ### Library
289 |
290 | For convenience, this module re-exports the [Observable standard library](https://github.com/observablehq/stdlib).
291 |
292 | ### Inspector
293 |
294 | For convenience, this module re-exports the [Observable standard inspector](https://github.com/observablehq/inspector).
295 |
--------------------------------------------------------------------------------
/test/variable/define-test.js:
--------------------------------------------------------------------------------
1 | import {Runtime} from "../../src/";
2 | import tape from "../tape";
3 | import valueof from "./valueof";
4 |
5 | tape("variable.define(name, inputs, definition) can define a variable", async test => {
6 | const runtime = new Runtime();
7 | const module = runtime.module();
8 | const foo = module.variable(true).define("foo", [], () => 42);
9 | test.deepEqual(await valueof(foo), {value: 42});
10 | });
11 |
12 | tape("variable.define(inputs, function) can define an anonymous variable", async test => {
13 | const runtime = new Runtime();
14 | const module = runtime.module();
15 | const foo = module.variable(true).define([], () => 42);
16 | test.deepEqual(await valueof(foo), {value: 42});
17 | });
18 |
19 | tape("variable.define(name, function) can define a named variable", async test => {
20 | const runtime = new Runtime();
21 | const module = runtime.module();
22 | const foo = module.variable(true).define("foo", () => 42);
23 | const bar = module.variable(true).define("bar", ["foo"], foo => foo);
24 | test.deepEqual(await valueof(foo), {value: 42});
25 | test.deepEqual(await valueof(bar), {value: 42});
26 | });
27 |
28 | tape("variable.define(function) can define an anonymous variable", async test => {
29 | const runtime = new Runtime();
30 | const module = runtime.module();
31 | const foo = module.variable(true).define(() => 42);
32 | test.deepEqual(await valueof(foo), {value: 42});
33 | });
34 |
35 | tape("variable.define(null, inputs, value) can define an anonymous constant", async test => {
36 | const runtime = new Runtime();
37 | const module = runtime.module();
38 | const foo = module.variable(true).define(null, [], 42);
39 | test.deepEqual(await valueof(foo), {value: 42});
40 | });
41 |
42 | tape("variable.define(inputs, value) can define an anonymous constant", async test => {
43 | const runtime = new Runtime();
44 | const module = runtime.module();
45 | const foo = module.variable(true).define([], 42);
46 | test.deepEqual(await valueof(foo), {value: 42});
47 | });
48 |
49 | tape("variable.define(null, value) can define an anonymous constant", async test => {
50 | const runtime = new Runtime();
51 | const module = runtime.module();
52 | const foo = module.variable(true).define(null, 42);
53 | test.deepEqual(await valueof(foo), {value: 42});
54 | });
55 |
56 | tape("variable.define(value) can define an anonymous constant", async test => {
57 | const runtime = new Runtime();
58 | const module = runtime.module();
59 | const foo = module.variable(true).define(42);
60 | test.deepEqual(await valueof(foo), {value: 42});
61 | });
62 |
63 | tape("variable.define detects missing inputs", async test => {
64 | const runtime = new Runtime();
65 | const module = runtime.module();
66 | const foo = module.variable(true);
67 | const bar = module.variable(true).define("bar", ["foo"], foo => foo);
68 | test.deepEqual(await valueof(foo), {value: undefined});
69 | test.deepEqual(await valueof(bar), {error: "RuntimeError: foo is not defined"});
70 | foo.define("foo", 1);
71 | test.deepEqual(await valueof(foo), {value: 1});
72 | test.deepEqual(await valueof(bar), {value: 1});
73 | });
74 |
75 | tape("variable.define detects duplicate names", async test => {
76 | const runtime = new Runtime();
77 | const module = runtime.module();
78 | const foo = module.variable(true).define("foo", 1);
79 | const bar = module.variable(true).define("foo", 2);
80 | test.deepEqual(await valueof(foo), {error: "RuntimeError: foo is defined more than once"});
81 | test.deepEqual(await valueof(bar), {error: "RuntimeError: foo is defined more than once"});
82 | bar.define("bar", 2);
83 | test.deepEqual(await valueof(foo), {value: 1});
84 | test.deepEqual(await valueof(bar), {value: 2});
85 | });
86 |
87 | tape("variable.define recomputes reachability as expected", async test => {
88 | const runtime = new Runtime();
89 | const main = runtime.module();
90 | const module = runtime.module();
91 | const quux = module.define("quux", [], () => 42);
92 | const baz = module.define("baz", ["quux"], quux => `baz-${quux}`);
93 | const bar = module.define("bar", ["quux"], quux => `bar-${quux}`);
94 | const foo = main.variable(true).define("foo", ["bar", "baz", "quux"], (bar, baz, quux) => [bar, baz, quux]);
95 | main.variable().import("bar", module);
96 | main.variable().import("baz", module);
97 | main.variable().import("quux", module);
98 | await runtime._compute();
99 | test.equal(quux._reachable, true);
100 | test.equal(baz._reachable, true);
101 | test.equal(bar._reachable, true);
102 | test.equal(foo._reachable, true);
103 | test.deepEqual(await valueof(foo), {value: ["bar-42", "baz-42", 42]});
104 | foo.define("foo", [], () => "foo");
105 | await runtime._compute();
106 | test.equal(quux._reachable, false);
107 | test.equal(baz._reachable, false);
108 | test.equal(bar._reachable, false);
109 | test.equal(foo._reachable, true);
110 | test.deepEqual(await valueof(foo), {value: "foo"});
111 | });
112 |
113 | tape("variable.define correctly detects reachability for unreachable cycles", async test => {
114 | let returned = false;
115 | const runtime = new Runtime();
116 | const main = runtime.module();
117 | const module = runtime.module();
118 | const bar = module.define("bar", ["baz"], baz => `bar-${baz}`);
119 | const baz = module.define("baz", ["quux"], quux => `baz-${quux}`);
120 | const quux = module.define("quux", ["zapp"], function*(zapp) { try { while (true) yield `quux-${zapp}`; } finally { returned = true; }});
121 | const zapp = module.define("zapp", ["bar"], bar => `zaap-${bar}`);
122 | await runtime._compute();
123 | test.equal(bar._reachable, false);
124 | test.equal(baz._reachable, false);
125 | test.equal(quux._reachable, false);
126 | test.equal(zapp._reachable, false);
127 | test.deepEqual(await valueof(bar), {value: undefined});
128 | test.deepEqual(await valueof(baz), {value: undefined});
129 | test.deepEqual(await valueof(quux), {value: undefined});
130 | test.deepEqual(await valueof(zapp), {value: undefined});
131 | main.variable().import("bar", module);
132 | const foo = main.variable(true).define("foo", ["bar"], bar => bar);
133 | await runtime._compute();
134 | test.equal(foo._reachable, true);
135 | test.equal(bar._reachable, true);
136 | test.equal(baz._reachable, true);
137 | test.equal(quux._reachable, true);
138 | test.equal(zapp._reachable, true);
139 | test.deepEqual(await valueof(bar), {error: "RuntimeError: circular definition"});
140 | test.deepEqual(await valueof(baz), {error: "RuntimeError: circular definition"});
141 | test.deepEqual(await valueof(quux), {error: "RuntimeError: circular definition"});
142 | test.deepEqual(await valueof(zapp), {error: "RuntimeError: circular definition"});
143 | test.deepEqual(await valueof(foo), {error: "RuntimeError: circular definition"});
144 | foo.define("foo", [], () => "foo");
145 | await runtime._compute();
146 | test.equal(foo._reachable, true);
147 | test.equal(bar._reachable, false);
148 | test.equal(baz._reachable, false);
149 | test.equal(quux._reachable, false);
150 | test.equal(zapp._reachable, false);
151 | test.deepEqual(await valueof(bar), {error: "RuntimeError: circular definition"});
152 | test.deepEqual(await valueof(baz), {error: "RuntimeError: circular definition"});
153 | test.deepEqual(await valueof(quux), {error: "RuntimeError: circular definition"});
154 | test.deepEqual(await valueof(zapp), {error: "RuntimeError: circular definition"});
155 | test.deepEqual(await valueof(foo), {value: "foo"});
156 | test.equal(returned, false); // Generator is never finalized because it has never run.
157 | });
158 |
159 | tape("variable.define terminates previously reachable generators", async test => {
160 | let returned = false;
161 | const runtime = new Runtime();
162 | const main = runtime.module();
163 | const module = runtime.module();
164 | const bar = module.define("bar", [], function*() { try { while (true) yield 1; } finally { returned = true; }});
165 | const foo = main.variable(true).define("foo", ["bar"], bar => bar);
166 | main.variable().import("bar", module);
167 | test.deepEqual(await valueof(foo), {value: 1});
168 | foo.define("foo", [], () => "foo");
169 | test.deepEqual(await valueof(foo), {value: "foo"});
170 | test.equal(bar._generator, undefined);
171 | test.equal(returned, true);
172 | });
173 |
174 | tape("variable.define does not terminate reachable generators", async test => {
175 | let returned = false;
176 | const runtime = new Runtime();
177 | const main = runtime.module();
178 | const module = runtime.module();
179 | const bar = module.define("bar", [], function*() { try { while (true) yield 1; } finally { returned = true; }});
180 | const baz = main.variable(true).define("baz", ["bar"], bar => bar);
181 | const foo = main.variable(true).define("foo", ["bar"], bar => bar);
182 | main.variable().import("bar", module);
183 | test.deepEqual(await valueof(foo), {value: 1});
184 | test.deepEqual(await valueof(baz), {value: 1});
185 | foo.define("foo", [], () => "foo");
186 | test.deepEqual(await valueof(foo), {value: "foo"});
187 | test.deepEqual(await valueof(baz), {value: 1});
188 | test.equal(returned, false);
189 | bar._invalidate();
190 | await runtime._compute();
191 | test.equal(returned, true);
192 | });
193 |
194 | tape("variable.define detects duplicate declarations", async test => {
195 | const runtime = new Runtime();
196 | const main = runtime.module();
197 | const v1 = main.variable(true).define("foo", [], () => 1);
198 | const v2 = main.variable(true).define("foo", [], () => 2);
199 | const v3 = main.variable(true).define(null, ["foo"], foo => foo);
200 | test.deepEqual(await valueof(v1), {error: "RuntimeError: foo is defined more than once"});
201 | test.deepEqual(await valueof(v2), {error: "RuntimeError: foo is defined more than once"});
202 | test.deepEqual(await valueof(v3), {error: "RuntimeError: foo is defined more than once"});
203 | });
204 |
205 | tape("variable.define detects missing inputs and erroneous inputs", async test => {
206 | const runtime = new Runtime();
207 | const main = runtime.module();
208 | const v1 = main.variable(true).define("foo", ["baz"], () => 1);
209 | const v2 = main.variable(true).define("bar", ["foo"], () => 2);
210 | test.deepEqual(await valueof(v1), {error: "RuntimeError: baz is not defined"});
211 | test.deepEqual(await valueof(v2), {error: "RuntimeError: baz is not defined"});
212 | });
213 |
214 | tape("variable.define allows masking of builtins", async test => {
215 | const runtime = new Runtime({color: "red"});
216 | const main = runtime.module();
217 | const mask = main.define("color", "green");
218 | const foo = main.variable(true).define(null, ["color"], color => color);
219 | test.deepEqual(await valueof(foo), {value: "green"});
220 | mask.delete();
221 | test.deepEqual(await valueof(foo), {value: "red"});
222 | });
223 |
224 | tape("variable.define supports promises", async test => {
225 | const runtime = new Runtime();
226 | const main = runtime.module();
227 | const foo = main.variable(true).define("foo", [], () => new Promise(resolve => setImmediate(() => resolve(42))));
228 | test.deepEqual(await valueof(foo), {value: 42});
229 | });
230 |
231 | tape("variable.define supports generator cells", async test => {
232 | let i = 0;
233 | const runtime = new Runtime();
234 | const main = runtime.module();
235 | const foo = main.variable(true).define("foo", [], function*() { while (i < 3) yield ++i; });
236 | test.deepEqual(await valueof(foo), {value: 1});
237 | test.deepEqual(await valueof(foo), {value: 2});
238 | test.deepEqual(await valueof(foo), {value: 3});
239 | });
240 |
241 | tape("variable.define supports generator objects", async test => {
242 | function* range(n) { for (let i = 0; i < n; ++i) yield i; }
243 | const runtime = new Runtime();
244 | const main = runtime.module();
245 | const foo = main.variable(true).define("foo", [], () => range(3));
246 | test.deepEqual(await valueof(foo), {value: 0});
247 | test.deepEqual(await valueof(foo), {value: 1});
248 | test.deepEqual(await valueof(foo), {value: 2});
249 | });
250 |
251 | tape("variable.define supports a promise that resolves to a generator object", async test => {
252 | function* range(n) { for (let i = 0; i < n; ++i) yield i; }
253 | const runtime = new Runtime();
254 | const main = runtime.module();
255 | const foo = main.variable(true).define("foo", [], async () => range(3));
256 | test.deepEqual(await valueof(foo), {value: 0});
257 | test.deepEqual(await valueof(foo), {value: 1});
258 | test.deepEqual(await valueof(foo), {value: 2});
259 | });
260 |
261 | tape("variable.define supports generators that yield promises", async test => {
262 | let i = 0;
263 | const runtime = new Runtime();
264 | const main = runtime.module();
265 | const foo = main.variable(true).define("foo", [], function*() { while (i < 3) yield Promise.resolve(++i); });
266 | test.deepEqual(await valueof(foo), {value: 1});
267 | test.deepEqual(await valueof(foo), {value: 2});
268 | test.deepEqual(await valueof(foo), {value: 3});
269 | });
270 |
271 | tape("variable.define allows a variable to be redefined", async test => {
272 | const runtime = new Runtime();
273 | const main = runtime.module();
274 | const foo = main.variable(true).define("foo", [], () => 1);
275 | const bar = main.variable(true).define("bar", ["foo"], foo => new Promise(resolve => setImmediate(() => resolve(foo))));
276 | test.deepEqual(await valueof(foo), {value: 1});
277 | test.deepEqual(await valueof(bar), {value: 1});
278 | foo.define("foo", [], () => 2);
279 | test.deepEqual(await valueof(foo), {value: 2});
280 | test.deepEqual(await valueof(bar), {value: 2});
281 | });
282 |
283 | tape("variable.define recomputes downstream values when a variable is renamed", async test => {
284 | const runtime = new Runtime();
285 | const main = runtime.module();
286 | const foo = main.variable(true).define("foo", [], () => 1);
287 | const bar = main.variable(true).define("bar", [], () => 2);
288 | const baz = main.variable(true).define("baz", ["foo", "bar"], (foo, bar) => foo + bar);
289 | test.deepEqual(await valueof(foo), {value: 1});
290 | test.deepEqual(await valueof(bar), {value: 2});
291 | test.deepEqual(await valueof(baz), {value: 3});
292 | foo.define("quux", [], () => 10);
293 | test.deepEqual(await valueof(foo), {value: 10});
294 | test.deepEqual(await valueof(bar), {value: 2});
295 | test.deepEqual(await valueof(baz), {error: "RuntimeError: foo is not defined"});
296 | });
297 |
298 | tape("variable.define ignores an asynchronous result from a redefined variable", async test => {
299 | const runtime = new Runtime();
300 | const main = runtime.module();
301 | const foo = main.variable(true).define("foo", [], () => new Promise(resolve => setTimeout(() => resolve("fail"), 150)));
302 | await new Promise(setImmediate);
303 | foo.define("foo", [], () => "success");
304 | await new Promise(resolve => setTimeout(resolve, 250));
305 | test.deepEqual(await valueof(foo), {value: "success"});
306 | test.deepEqual(foo._value, "success");
307 | });
308 |
309 | tape("variable.define ignores an asynchronous result from a redefined input", async test => {
310 | const runtime = new Runtime();
311 | const main = runtime.module();
312 | const bar = main.variable().define("bar", [], () => new Promise(resolve => setTimeout(() => resolve("fail"), 150)));
313 | const foo = main.variable(true).define("foo", ["bar"], bar => bar);
314 | await new Promise(setImmediate);
315 | bar.define("bar", [], () => "success");
316 | await new Promise(resolve => setTimeout(resolve, 250));
317 | test.deepEqual(await valueof(foo), {value: "success"});
318 | test.deepEqual(foo._value, "success");
319 | });
320 |
321 | tape("variable.define does not try to compute unreachable variables", async test => {
322 | const runtime = new Runtime();
323 | const main = runtime.module();
324 | let evaluated = false;
325 | const foo = main.variable(true).define("foo", [], () => 1);
326 | const bar = main.variable().define("bar", ["foo"], (foo) => evaluated = foo);
327 | test.deepEqual(await valueof(foo), {value: 1});
328 | test.deepEqual(await valueof(bar), {value: undefined});
329 | test.equals(evaluated, false);
330 | });
331 |
332 | tape("variable.define does not try to compute unreachable variables that are outputs of reachable variables", async test => {
333 | const runtime = new Runtime();
334 | const main = runtime.module();
335 | let evaluated = false;
336 | const foo = main.variable(true).define("foo", [], () => 1);
337 | const bar = main.variable(true).define("bar", [], () => 2);
338 | const baz = main.variable().define("baz", ["foo", "bar"], (foo, bar) => evaluated = foo + bar);
339 | test.deepEqual(await valueof(foo), {value: 1});
340 | test.deepEqual(await valueof(bar), {value: 2});
341 | test.deepEqual(await valueof(baz), {value: undefined});
342 | test.equals(evaluated, false);
343 | });
344 |
345 | tape("variable.define can reference whitelisted globals", async test => {
346 | const runtime = new Runtime(null, name => name === "magic" ? 21 : undefined);
347 | const module = runtime.module();
348 | const foo = module.variable(true).define(["magic"], magic => magic * 2);
349 | test.deepEqual(await valueof(foo), {value: 42});
350 | });
351 |
352 | tape("variable.define captures the value of whitelisted globals", async test => {
353 | let magic = 0;
354 | const runtime = new Runtime(null, name => name === "magic" ? ++magic : undefined);
355 | const module = runtime.module();
356 | const foo = module.variable(true).define(["magic"], magic => magic * 2);
357 | test.deepEqual(await valueof(foo), {value: 2});
358 | test.deepEqual(await valueof(foo), {value: 2});
359 | });
360 |
361 | tape("variable.define can override whitelisted globals", async test => {
362 | const runtime = new Runtime(null, name => name === "magic" ? 1 : undefined);
363 | const module = runtime.module();
364 | module.variable().define("magic", [], () => 2);
365 | const foo = module.variable(true).define(["magic"], magic => magic * 2);
366 | test.deepEqual(await valueof(foo), {value: 4});
367 | });
368 |
369 | tape("variable.define can dynamically override whitelisted globals", async test => {
370 | const runtime = new Runtime(null, name => name === "magic" ? 1 : undefined);
371 | const module = runtime.module();
372 | const foo = module.variable(true).define(["magic"], magic => magic * 2);
373 | test.deepEqual(await valueof(foo), {value: 2});
374 | module.variable().define("magic", [], () => 2);
375 | test.deepEqual(await valueof(foo), {value: 4});
376 | });
377 |
378 | tape("variable.define cannot reference non-whitelisted globals", async test => {
379 | const runtime = new Runtime();
380 | const module = runtime.module();
381 | const foo = module.variable(true).define(["magic"], magic => magic * 2);
382 | test.deepEqual(await valueof(foo), {error: "RuntimeError: magic is not defined"});
383 | });
384 |
385 | tape("variable.define correctly handles globals that throw", async test => {
386 | const runtime = new Runtime(null, name => { if (name === "oops") throw new Error("oops"); });
387 | const module = runtime.module();
388 | const foo = module.variable(true).define(["oops"], oops => oops);
389 | test.deepEqual(await valueof(foo), {error: "RuntimeError: oops"});
390 | });
391 |
392 | tape("variable.define allows other variables to begin computation before a generator may resume", async test => {
393 | const runtime = new Runtime();
394 | const module = runtime.module();
395 | const main = runtime.module();
396 | let i = 0;
397 | let genIteration = 0;
398 | let valIteration = 0;
399 | const onGenFulfilled = value => {
400 | if (genIteration === 0) {
401 | test.equals(valIteration, 0);
402 | test.equals(value, 1);
403 | test.equals(i, 1);
404 | } else if (genIteration === 1) {
405 | test.equals(valIteration, 1);
406 | test.equals(value, 2);
407 | test.equals(i, 2);
408 | } else if (genIteration === 2) {
409 | test.equals(valIteration, 2);
410 | test.equals(value, 3);
411 | test.equals(i, 3);
412 | } else {
413 | test.fail();
414 | }
415 | genIteration++;
416 | };
417 | const onValFulfilled = value => {
418 | if (valIteration === 0) {
419 | test.equals(genIteration, 1);
420 | test.equals(value, 1);
421 | test.equals(i, 1);
422 | } else if (valIteration === 1) {
423 | test.equals(genIteration, 2);
424 | test.equals(value, 2);
425 | test.equals(i, 2);
426 | } else if (valIteration === 2) {
427 | test.equals(genIteration, 3);
428 | test.equals(value, 3);
429 | test.equals(i, 3);
430 | } else {
431 | test.fail();
432 | }
433 | valIteration++;
434 | };
435 | const gen = module.variable({fulfilled: onGenFulfilled}).define("gen", [], function*() {
436 | i++;
437 | yield i;
438 | i++;
439 | yield i;
440 | i++;
441 | yield i;
442 | });
443 | main.variable().import("gen", module);
444 | const val = main.variable({fulfilled: onValFulfilled}).define("val", ["gen"], i => i);
445 | test.equals(await gen._promise, undefined, "gen cell undefined");
446 | test.equals(await val._promise, undefined, "val cell undefined");
447 | await runtime._compute();
448 | test.equals(await gen._promise, 1, "gen cell 1");
449 | test.equals(await val._promise, 1, "val cell 1");
450 | await runtime._compute();
451 | test.equals(await gen._promise, 2, "gen cell 2");
452 | test.equals(await val._promise, 2, "val cell 2");
453 | await runtime._compute();
454 | test.equals(await gen._promise, 3, "gen cell 3");
455 | test.equals(await val._promise, 3, "val cell 3");
456 | });
457 |
458 | tape("variable.define allows other variables to begin computation before a generator may resume", async test => {
459 | const runtime = new Runtime();
460 | const main = runtime.module();
461 | let i = 0;
462 | let j = 0;
463 | const gen = main.variable().define("gen", [], function*() {
464 | i++;
465 | yield i;
466 | i++;
467 | yield i;
468 | i++;
469 | yield i;
470 | });
471 | const val = main.variable(true).define("val", ["gen"], gen => {
472 | j++;
473 | test.equals(gen, j, "gen = j");
474 | test.equals(gen, i, "gen = i");
475 | return gen;
476 | });
477 | test.equals(await gen._promise, undefined, "gen = undefined");
478 | test.equals(await val._promise, undefined, "val = undefined");
479 | await runtime._compute();
480 | test.equals(await gen._promise, 1, "gen cell 1");
481 | test.equals(await val._promise, 1, "val cell 1");
482 | await runtime._compute();
483 | test.equals(await gen._promise, 2, "gen cell 2");
484 | test.equals(await val._promise, 2, "val cell 2");
485 | await runtime._compute();
486 | test.equals(await gen._promise, 3, "gen cell 3");
487 | test.equals(await val._promise, 3, "val cell 3");
488 | });
489 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@7.12.11":
6 | version "7.12.11"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
9 | dependencies:
10 | "@babel/highlight" "^7.10.4"
11 |
12 | "@babel/code-frame@^7.10.4":
13 | version "7.18.6"
14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a"
15 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==
16 | dependencies:
17 | "@babel/highlight" "^7.18.6"
18 |
19 | "@babel/helper-validator-identifier@^7.18.6":
20 | version "7.18.6"
21 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076"
22 | integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==
23 |
24 | "@babel/highlight@^7.10.4", "@babel/highlight@^7.18.6":
25 | version "7.18.6"
26 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf"
27 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==
28 | dependencies:
29 | "@babel/helper-validator-identifier" "^7.18.6"
30 | chalk "^2.0.0"
31 | js-tokens "^4.0.0"
32 |
33 | "@eslint/eslintrc@^0.4.3":
34 | version "0.4.3"
35 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
36 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
37 | dependencies:
38 | ajv "^6.12.4"
39 | debug "^4.1.1"
40 | espree "^7.3.0"
41 | globals "^13.9.0"
42 | ignore "^4.0.6"
43 | import-fresh "^3.2.1"
44 | js-yaml "^3.13.1"
45 | minimatch "^3.0.4"
46 | strip-json-comments "^3.1.1"
47 |
48 | "@humanwhocodes/config-array@^0.5.0":
49 | version "0.5.0"
50 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
51 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
52 | dependencies:
53 | "@humanwhocodes/object-schema" "^1.2.0"
54 | debug "^4.1.1"
55 | minimatch "^3.0.4"
56 |
57 | "@humanwhocodes/object-schema@^1.2.0":
58 | version "1.2.1"
59 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
60 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
61 |
62 | "@jridgewell/gen-mapping@^0.3.0":
63 | version "0.3.2"
64 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9"
65 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==
66 | dependencies:
67 | "@jridgewell/set-array" "^1.0.1"
68 | "@jridgewell/sourcemap-codec" "^1.4.10"
69 | "@jridgewell/trace-mapping" "^0.3.9"
70 |
71 | "@jridgewell/resolve-uri@^3.0.3":
72 | version "3.0.8"
73 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1"
74 | integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==
75 |
76 | "@jridgewell/set-array@^1.0.1":
77 | version "1.1.2"
78 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
79 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
80 |
81 | "@jridgewell/source-map@^0.3.2":
82 | version "0.3.2"
83 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
84 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==
85 | dependencies:
86 | "@jridgewell/gen-mapping" "^0.3.0"
87 | "@jridgewell/trace-mapping" "^0.3.9"
88 |
89 | "@jridgewell/sourcemap-codec@^1.4.10":
90 | version "1.4.14"
91 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
92 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
93 |
94 | "@jridgewell/trace-mapping@^0.3.9":
95 | version "0.3.14"
96 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed"
97 | integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==
98 | dependencies:
99 | "@jridgewell/resolve-uri" "^3.0.3"
100 | "@jridgewell/sourcemap-codec" "^1.4.10"
101 |
102 | "@observablehq/inspector@^3.2.2":
103 | version "3.2.4"
104 | resolved "https://registry.yarnpkg.com/@observablehq/inspector/-/inspector-3.2.4.tgz#b620af79e721ae0e26e9bc83ec6e2e26ad260880"
105 | integrity sha512-P1TdR95pvvNri0XV6X/R+s9XO70d8ozhOp2cMXEJ2zsiGzB8VjOdrJgRJyLjEJ0OJy7jP9VXFiC1Hej8WgsF5A==
106 | dependencies:
107 | isoformat "^0.2.0"
108 |
109 | "@observablehq/stdlib@^3.4.1":
110 | version "3.20.0"
111 | resolved "https://registry.yarnpkg.com/@observablehq/stdlib/-/stdlib-3.20.0.tgz#04ea456d49207b3867ac5efcfb212329123ee0dd"
112 | integrity sha512-7T6g2oVbwnDWDjczIryoPEULOyt+ICCLlDKyUMYRZkfdpxQp0Gvg238xTVU3z70MeXY9vNksvqdH2Lbo5jYYyA==
113 | dependencies:
114 | d3-dsv "^2.0.0"
115 | d3-require "^1.3.0"
116 |
117 | "@tootallnate/once@1":
118 | version "1.1.2"
119 | resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
120 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
121 |
122 | "@types/node@*":
123 | version "18.0.1"
124 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.1.tgz#e91bd73239b338557a84d1f67f7b9e0f25643870"
125 | integrity sha512-CmR8+Tsy95hhwtZBKJBs0/FFq4XX7sDZHlGGf+0q+BRZfMbOTkzkj0AFAuTyXbObDIoanaBBW0+KEW+m3N16Wg==
126 |
127 | "@types/resolve@0.0.8":
128 | version "0.0.8"
129 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194"
130 | integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==
131 | dependencies:
132 | "@types/node" "*"
133 |
134 | abab@^2.0.5, abab@^2.0.6:
135 | version "2.0.6"
136 | resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
137 | integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
138 |
139 | acorn-globals@^6.0.0:
140 | version "6.0.0"
141 | resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
142 | integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
143 | dependencies:
144 | acorn "^7.1.1"
145 | acorn-walk "^7.1.1"
146 |
147 | acorn-jsx@^5.3.1:
148 | version "5.3.2"
149 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
150 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
151 |
152 | acorn-walk@^7.1.1:
153 | version "7.2.0"
154 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
155 | integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
156 |
157 | acorn@^7.1.1, acorn@^7.4.0:
158 | version "7.4.1"
159 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
160 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
161 |
162 | acorn@^8.4.1, acorn@^8.5.0:
163 | version "8.7.1"
164 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
165 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
166 |
167 | agent-base@6:
168 | version "6.0.2"
169 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
170 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
171 | dependencies:
172 | debug "4"
173 |
174 | ajv@^6.10.0, ajv@^6.12.4:
175 | version "6.12.6"
176 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
177 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
178 | dependencies:
179 | fast-deep-equal "^3.1.1"
180 | fast-json-stable-stringify "^2.0.0"
181 | json-schema-traverse "^0.4.1"
182 | uri-js "^4.2.2"
183 |
184 | ajv@^8.0.1:
185 | version "8.11.0"
186 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
187 | integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
188 | dependencies:
189 | fast-deep-equal "^3.1.1"
190 | json-schema-traverse "^1.0.0"
191 | require-from-string "^2.0.2"
192 | uri-js "^4.2.2"
193 |
194 | ansi-colors@^4.1.1:
195 | version "4.1.3"
196 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
197 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
198 |
199 | ansi-regex@^5.0.1:
200 | version "5.0.1"
201 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
202 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
203 |
204 | ansi-styles@^3.2.1:
205 | version "3.2.1"
206 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
207 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
208 | dependencies:
209 | color-convert "^1.9.0"
210 |
211 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
212 | version "4.3.0"
213 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
214 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
215 | dependencies:
216 | color-convert "^2.0.1"
217 |
218 | argparse@^1.0.7:
219 | version "1.0.10"
220 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
221 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
222 | dependencies:
223 | sprintf-js "~1.0.2"
224 |
225 | astral-regex@^2.0.0:
226 | version "2.0.0"
227 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
228 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
229 |
230 | asynckit@^0.4.0:
231 | version "0.4.0"
232 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
233 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
234 |
235 | balanced-match@^1.0.0:
236 | version "1.0.2"
237 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
238 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
239 |
240 | brace-expansion@^1.1.7:
241 | version "1.1.11"
242 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
243 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
244 | dependencies:
245 | balanced-match "^1.0.0"
246 | concat-map "0.0.1"
247 |
248 | browser-process-hrtime@^1.0.0:
249 | version "1.0.0"
250 | resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
251 | integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
252 |
253 | buffer-from@^1.0.0:
254 | version "1.1.2"
255 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
256 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
257 |
258 | builtin-modules@^3.1.0:
259 | version "3.3.0"
260 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6"
261 | integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==
262 |
263 | call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2:
264 | version "1.0.2"
265 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
266 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
267 | dependencies:
268 | function-bind "^1.1.1"
269 | get-intrinsic "^1.0.2"
270 |
271 | callsites@^3.0.0:
272 | version "3.1.0"
273 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
274 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
275 |
276 | chalk@^2.0.0:
277 | version "2.4.2"
278 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
279 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
280 | dependencies:
281 | ansi-styles "^3.2.1"
282 | escape-string-regexp "^1.0.5"
283 | supports-color "^5.3.0"
284 |
285 | chalk@^4.0.0:
286 | version "4.1.2"
287 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
288 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
289 | dependencies:
290 | ansi-styles "^4.1.0"
291 | supports-color "^7.1.0"
292 |
293 | color-convert@^1.9.0:
294 | version "1.9.3"
295 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
296 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
297 | dependencies:
298 | color-name "1.1.3"
299 |
300 | color-convert@^2.0.1:
301 | version "2.0.1"
302 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
303 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
304 | dependencies:
305 | color-name "~1.1.4"
306 |
307 | color-name@1.1.3:
308 | version "1.1.3"
309 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
310 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
311 |
312 | color-name@~1.1.4:
313 | version "1.1.4"
314 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
315 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
316 |
317 | combined-stream@^1.0.8:
318 | version "1.0.8"
319 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
320 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
321 | dependencies:
322 | delayed-stream "~1.0.0"
323 |
324 | commander@2, commander@^2.20.0:
325 | version "2.20.3"
326 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
327 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
328 |
329 | concat-map@0.0.1:
330 | version "0.0.1"
331 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
332 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
333 |
334 | cross-spawn@^7.0.2:
335 | version "7.0.3"
336 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
337 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
338 | dependencies:
339 | path-key "^3.1.0"
340 | shebang-command "^2.0.0"
341 | which "^2.0.1"
342 |
343 | cssom@^0.5.0:
344 | version "0.5.0"
345 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36"
346 | integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==
347 |
348 | cssom@~0.3.6:
349 | version "0.3.8"
350 | resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
351 | integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
352 |
353 | cssstyle@^2.3.0:
354 | version "2.3.0"
355 | resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
356 | integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
357 | dependencies:
358 | cssom "~0.3.6"
359 |
360 | d3-dsv@^2.0.0:
361 | version "2.0.0"
362 | resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-2.0.0.tgz#b37b194b6df42da513a120d913ad1be22b5fe7c5"
363 | integrity sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==
364 | dependencies:
365 | commander "2"
366 | iconv-lite "0.4"
367 | rw "1"
368 |
369 | d3-require@^1.3.0:
370 | version "1.3.0"
371 | resolved "https://registry.yarnpkg.com/d3-require/-/d3-require-1.3.0.tgz#2b97f5e2ebcb64ac0c63c11f30056aea1c74f0ec"
372 | integrity sha512-XaNc2azaAwXhGjmCMtxlD+AowpMfLimVsAoTMpqrvb8CWoA4QqyV12mc4Ue6KSoDvfuS831tsumfhDYxGd4FGA==
373 |
374 | data-urls@^3.0.0:
375 | version "3.0.2"
376 | resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143"
377 | integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==
378 | dependencies:
379 | abab "^2.0.6"
380 | whatwg-mimetype "^3.0.0"
381 | whatwg-url "^11.0.0"
382 |
383 | debug@4, debug@^4.0.1, debug@^4.1.1:
384 | version "4.3.4"
385 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
386 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
387 | dependencies:
388 | ms "2.1.2"
389 |
390 | decimal.js@^10.3.1:
391 | version "10.3.1"
392 | resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"
393 | integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==
394 |
395 | deep-equal@~1.1.1:
396 | version "1.1.1"
397 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a"
398 | integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
399 | dependencies:
400 | is-arguments "^1.0.4"
401 | is-date-object "^1.0.1"
402 | is-regex "^1.0.4"
403 | object-is "^1.0.1"
404 | object-keys "^1.1.1"
405 | regexp.prototype.flags "^1.2.0"
406 |
407 | deep-is@^0.1.3, deep-is@~0.1.3:
408 | version "0.1.4"
409 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
410 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
411 |
412 | define-properties@^1.1.3, define-properties@^1.1.4:
413 | version "1.1.4"
414 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
415 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
416 | dependencies:
417 | has-property-descriptors "^1.0.0"
418 | object-keys "^1.1.1"
419 |
420 | defined@~1.0.0:
421 | version "1.0.0"
422 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
423 | integrity sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==
424 |
425 | delayed-stream@~1.0.0:
426 | version "1.0.0"
427 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
428 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
429 |
430 | doctrine@^3.0.0:
431 | version "3.0.0"
432 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
433 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
434 | dependencies:
435 | esutils "^2.0.2"
436 |
437 | domexception@^2.0.1:
438 | version "2.0.1"
439 | resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
440 | integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
441 | dependencies:
442 | webidl-conversions "^5.0.0"
443 |
444 | dotignore@~0.1.2:
445 | version "0.1.2"
446 | resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905"
447 | integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==
448 | dependencies:
449 | minimatch "^3.0.4"
450 |
451 | emoji-regex@^8.0.0:
452 | version "8.0.0"
453 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
454 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
455 |
456 | enquirer@^2.3.5:
457 | version "2.3.6"
458 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
459 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
460 | dependencies:
461 | ansi-colors "^4.1.1"
462 |
463 | es-abstract@^1.19.0, es-abstract@^1.19.5:
464 | version "1.20.1"
465 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
466 | integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
467 | dependencies:
468 | call-bind "^1.0.2"
469 | es-to-primitive "^1.2.1"
470 | function-bind "^1.1.1"
471 | function.prototype.name "^1.1.5"
472 | get-intrinsic "^1.1.1"
473 | get-symbol-description "^1.0.0"
474 | has "^1.0.3"
475 | has-property-descriptors "^1.0.0"
476 | has-symbols "^1.0.3"
477 | internal-slot "^1.0.3"
478 | is-callable "^1.2.4"
479 | is-negative-zero "^2.0.2"
480 | is-regex "^1.1.4"
481 | is-shared-array-buffer "^1.0.2"
482 | is-string "^1.0.7"
483 | is-weakref "^1.0.2"
484 | object-inspect "^1.12.0"
485 | object-keys "^1.1.1"
486 | object.assign "^4.1.2"
487 | regexp.prototype.flags "^1.4.3"
488 | string.prototype.trimend "^1.0.5"
489 | string.prototype.trimstart "^1.0.5"
490 | unbox-primitive "^1.0.2"
491 |
492 | es-to-primitive@^1.2.1:
493 | version "1.2.1"
494 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
495 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
496 | dependencies:
497 | is-callable "^1.1.4"
498 | is-date-object "^1.0.1"
499 | is-symbol "^1.0.2"
500 |
501 | escape-string-regexp@^1.0.5:
502 | version "1.0.5"
503 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
504 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
505 |
506 | escape-string-regexp@^4.0.0:
507 | version "4.0.0"
508 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
509 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
510 |
511 | escodegen@^2.0.0:
512 | version "2.0.0"
513 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
514 | integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==
515 | dependencies:
516 | esprima "^4.0.1"
517 | estraverse "^5.2.0"
518 | esutils "^2.0.2"
519 | optionator "^0.8.1"
520 | optionalDependencies:
521 | source-map "~0.6.1"
522 |
523 | eslint-scope@^5.1.1:
524 | version "5.1.1"
525 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
526 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
527 | dependencies:
528 | esrecurse "^4.3.0"
529 | estraverse "^4.1.1"
530 |
531 | eslint-utils@^2.1.0:
532 | version "2.1.0"
533 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
534 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
535 | dependencies:
536 | eslint-visitor-keys "^1.1.0"
537 |
538 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
539 | version "1.3.0"
540 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
541 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
542 |
543 | eslint-visitor-keys@^2.0.0:
544 | version "2.1.0"
545 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
546 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
547 |
548 | eslint@^7.18.0:
549 | version "7.32.0"
550 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
551 | integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
552 | dependencies:
553 | "@babel/code-frame" "7.12.11"
554 | "@eslint/eslintrc" "^0.4.3"
555 | "@humanwhocodes/config-array" "^0.5.0"
556 | ajv "^6.10.0"
557 | chalk "^4.0.0"
558 | cross-spawn "^7.0.2"
559 | debug "^4.0.1"
560 | doctrine "^3.0.0"
561 | enquirer "^2.3.5"
562 | escape-string-regexp "^4.0.0"
563 | eslint-scope "^5.1.1"
564 | eslint-utils "^2.1.0"
565 | eslint-visitor-keys "^2.0.0"
566 | espree "^7.3.1"
567 | esquery "^1.4.0"
568 | esutils "^2.0.2"
569 | fast-deep-equal "^3.1.3"
570 | file-entry-cache "^6.0.1"
571 | functional-red-black-tree "^1.0.1"
572 | glob-parent "^5.1.2"
573 | globals "^13.6.0"
574 | ignore "^4.0.6"
575 | import-fresh "^3.0.0"
576 | imurmurhash "^0.1.4"
577 | is-glob "^4.0.0"
578 | js-yaml "^3.13.1"
579 | json-stable-stringify-without-jsonify "^1.0.1"
580 | levn "^0.4.1"
581 | lodash.merge "^4.6.2"
582 | minimatch "^3.0.4"
583 | natural-compare "^1.4.0"
584 | optionator "^0.9.1"
585 | progress "^2.0.0"
586 | regexpp "^3.1.0"
587 | semver "^7.2.1"
588 | strip-ansi "^6.0.0"
589 | strip-json-comments "^3.1.0"
590 | table "^6.0.9"
591 | text-table "^0.2.0"
592 | v8-compile-cache "^2.0.3"
593 |
594 | esm@^3.2.25:
595 | version "3.2.25"
596 | resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
597 | integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
598 |
599 | espree@^7.3.0, espree@^7.3.1:
600 | version "7.3.1"
601 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
602 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
603 | dependencies:
604 | acorn "^7.4.0"
605 | acorn-jsx "^5.3.1"
606 | eslint-visitor-keys "^1.3.0"
607 |
608 | esprima@^4.0.0, esprima@^4.0.1:
609 | version "4.0.1"
610 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
611 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
612 |
613 | esquery@^1.4.0:
614 | version "1.4.0"
615 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
616 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
617 | dependencies:
618 | estraverse "^5.1.0"
619 |
620 | esrecurse@^4.3.0:
621 | version "4.3.0"
622 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
623 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
624 | dependencies:
625 | estraverse "^5.2.0"
626 |
627 | estraverse@^4.1.1:
628 | version "4.3.0"
629 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
630 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
631 |
632 | estraverse@^5.1.0, estraverse@^5.2.0:
633 | version "5.3.0"
634 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
635 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
636 |
637 | estree-walker@^0.6.1:
638 | version "0.6.1"
639 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362"
640 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==
641 |
642 | esutils@^2.0.2:
643 | version "2.0.3"
644 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
645 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
646 |
647 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
648 | version "3.1.3"
649 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
650 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
651 |
652 | fast-json-stable-stringify@^2.0.0:
653 | version "2.1.0"
654 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
655 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
656 |
657 | fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
658 | version "2.0.6"
659 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
660 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
661 |
662 | file-entry-cache@^6.0.1:
663 | version "6.0.1"
664 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
665 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
666 | dependencies:
667 | flat-cache "^3.0.4"
668 |
669 | flat-cache@^3.0.4:
670 | version "3.0.4"
671 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
672 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
673 | dependencies:
674 | flatted "^3.1.0"
675 | rimraf "^3.0.2"
676 |
677 | flatted@^3.1.0:
678 | version "3.2.6"
679 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2"
680 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==
681 |
682 | for-each@~0.3.3:
683 | version "0.3.3"
684 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
685 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
686 | dependencies:
687 | is-callable "^1.1.3"
688 |
689 | form-data@^4.0.0:
690 | version "4.0.0"
691 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
692 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
693 | dependencies:
694 | asynckit "^0.4.0"
695 | combined-stream "^1.0.8"
696 | mime-types "^2.1.12"
697 |
698 | fs.realpath@^1.0.0:
699 | version "1.0.0"
700 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
701 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
702 |
703 | fsevents@~2.3.2:
704 | version "2.3.2"
705 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
706 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
707 |
708 | function-bind@^1.1.1:
709 | version "1.1.1"
710 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
711 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
712 |
713 | function.prototype.name@^1.1.5:
714 | version "1.1.5"
715 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
716 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
717 | dependencies:
718 | call-bind "^1.0.2"
719 | define-properties "^1.1.3"
720 | es-abstract "^1.19.0"
721 | functions-have-names "^1.2.2"
722 |
723 | functional-red-black-tree@^1.0.1:
724 | version "1.0.1"
725 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
726 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
727 |
728 | functions-have-names@^1.2.2:
729 | version "1.2.3"
730 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
731 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
732 |
733 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
734 | version "1.1.2"
735 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
736 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
737 | dependencies:
738 | function-bind "^1.1.1"
739 | has "^1.0.3"
740 | has-symbols "^1.0.3"
741 |
742 | get-symbol-description@^1.0.0:
743 | version "1.0.0"
744 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
745 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
746 | dependencies:
747 | call-bind "^1.0.2"
748 | get-intrinsic "^1.1.1"
749 |
750 | glob-parent@^5.1.2:
751 | version "5.1.2"
752 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
753 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
754 | dependencies:
755 | is-glob "^4.0.1"
756 |
757 | glob@^7.1.3, glob@~7.2.0:
758 | version "7.2.3"
759 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
760 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
761 | dependencies:
762 | fs.realpath "^1.0.0"
763 | inflight "^1.0.4"
764 | inherits "2"
765 | minimatch "^3.1.1"
766 | once "^1.3.0"
767 | path-is-absolute "^1.0.0"
768 |
769 | globals@^13.6.0, globals@^13.9.0:
770 | version "13.15.0"
771 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac"
772 | integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==
773 | dependencies:
774 | type-fest "^0.20.2"
775 |
776 | has-bigints@^1.0.1, has-bigints@^1.0.2:
777 | version "1.0.2"
778 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
779 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
780 |
781 | has-flag@^3.0.0:
782 | version "3.0.0"
783 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
784 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
785 |
786 | has-flag@^4.0.0:
787 | version "4.0.0"
788 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
789 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
790 |
791 | has-property-descriptors@^1.0.0:
792 | version "1.0.0"
793 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
794 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
795 | dependencies:
796 | get-intrinsic "^1.1.1"
797 |
798 | has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
799 | version "1.0.3"
800 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
801 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
802 |
803 | has-tostringtag@^1.0.0:
804 | version "1.0.0"
805 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
806 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
807 | dependencies:
808 | has-symbols "^1.0.2"
809 |
810 | has@^1.0.3, has@~1.0.3:
811 | version "1.0.3"
812 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
813 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
814 | dependencies:
815 | function-bind "^1.1.1"
816 |
817 | html-encoding-sniffer@^2.0.1:
818 | version "2.0.1"
819 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
820 | integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
821 | dependencies:
822 | whatwg-encoding "^1.0.5"
823 |
824 | http-proxy-agent@^4.0.1:
825 | version "4.0.1"
826 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
827 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
828 | dependencies:
829 | "@tootallnate/once" "1"
830 | agent-base "6"
831 | debug "4"
832 |
833 | https-proxy-agent@^5.0.0:
834 | version "5.0.1"
835 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
836 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
837 | dependencies:
838 | agent-base "6"
839 | debug "4"
840 |
841 | iconv-lite@0.4, iconv-lite@0.4.24:
842 | version "0.4.24"
843 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
844 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
845 | dependencies:
846 | safer-buffer ">= 2.1.2 < 3"
847 |
848 | ignore@^4.0.6:
849 | version "4.0.6"
850 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
851 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
852 |
853 | import-fresh@^3.0.0, import-fresh@^3.2.1:
854 | version "3.3.0"
855 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
856 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
857 | dependencies:
858 | parent-module "^1.0.0"
859 | resolve-from "^4.0.0"
860 |
861 | imurmurhash@^0.1.4:
862 | version "0.1.4"
863 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
864 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
865 |
866 | inflight@^1.0.4:
867 | version "1.0.6"
868 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
869 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
870 | dependencies:
871 | once "^1.3.0"
872 | wrappy "1"
873 |
874 | inherits@2, inherits@~2.0.4:
875 | version "2.0.4"
876 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
877 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
878 |
879 | internal-slot@^1.0.3:
880 | version "1.0.3"
881 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
882 | integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
883 | dependencies:
884 | get-intrinsic "^1.1.0"
885 | has "^1.0.3"
886 | side-channel "^1.0.4"
887 |
888 | is-arguments@^1.0.4:
889 | version "1.1.1"
890 | resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b"
891 | integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
892 | dependencies:
893 | call-bind "^1.0.2"
894 | has-tostringtag "^1.0.0"
895 |
896 | is-bigint@^1.0.1:
897 | version "1.0.4"
898 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
899 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
900 | dependencies:
901 | has-bigints "^1.0.1"
902 |
903 | is-boolean-object@^1.1.0:
904 | version "1.1.2"
905 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
906 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
907 | dependencies:
908 | call-bind "^1.0.2"
909 | has-tostringtag "^1.0.0"
910 |
911 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4:
912 | version "1.2.4"
913 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
914 | integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
915 |
916 | is-core-module@^2.9.0:
917 | version "2.9.0"
918 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
919 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
920 | dependencies:
921 | has "^1.0.3"
922 |
923 | is-date-object@^1.0.1:
924 | version "1.0.5"
925 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
926 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
927 | dependencies:
928 | has-tostringtag "^1.0.0"
929 |
930 | is-extglob@^2.1.1:
931 | version "2.1.1"
932 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
933 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
934 |
935 | is-fullwidth-code-point@^3.0.0:
936 | version "3.0.0"
937 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
938 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
939 |
940 | is-glob@^4.0.0, is-glob@^4.0.1:
941 | version "4.0.3"
942 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
943 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
944 | dependencies:
945 | is-extglob "^2.1.1"
946 |
947 | is-module@^1.0.0:
948 | version "1.0.0"
949 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
950 | integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
951 |
952 | is-negative-zero@^2.0.2:
953 | version "2.0.2"
954 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
955 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
956 |
957 | is-number-object@^1.0.4:
958 | version "1.0.7"
959 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
960 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
961 | dependencies:
962 | has-tostringtag "^1.0.0"
963 |
964 | is-potential-custom-element-name@^1.0.1:
965 | version "1.0.1"
966 | resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
967 | integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==
968 |
969 | is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4:
970 | version "1.1.4"
971 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
972 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
973 | dependencies:
974 | call-bind "^1.0.2"
975 | has-tostringtag "^1.0.0"
976 |
977 | is-shared-array-buffer@^1.0.2:
978 | version "1.0.2"
979 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
980 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
981 | dependencies:
982 | call-bind "^1.0.2"
983 |
984 | is-string@^1.0.5, is-string@^1.0.7:
985 | version "1.0.7"
986 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
987 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
988 | dependencies:
989 | has-tostringtag "^1.0.0"
990 |
991 | is-symbol@^1.0.2, is-symbol@^1.0.3:
992 | version "1.0.4"
993 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
994 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
995 | dependencies:
996 | has-symbols "^1.0.2"
997 |
998 | is-weakref@^1.0.2:
999 | version "1.0.2"
1000 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1001 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1002 | dependencies:
1003 | call-bind "^1.0.2"
1004 |
1005 | isexe@^2.0.0:
1006 | version "2.0.0"
1007 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1008 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1009 |
1010 | isoformat@^0.2.0:
1011 | version "0.2.1"
1012 | resolved "https://registry.yarnpkg.com/isoformat/-/isoformat-0.2.1.tgz#2526344a4276a101b2881848dc337d1d2ae74494"
1013 | integrity sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ==
1014 |
1015 | jest-worker@^26.2.1:
1016 | version "26.6.2"
1017 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed"
1018 | integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==
1019 | dependencies:
1020 | "@types/node" "*"
1021 | merge-stream "^2.0.0"
1022 | supports-color "^7.0.0"
1023 |
1024 | js-tokens@^4.0.0:
1025 | version "4.0.0"
1026 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1027 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1028 |
1029 | js-yaml@^3.13.1:
1030 | version "3.14.1"
1031 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
1032 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
1033 | dependencies:
1034 | argparse "^1.0.7"
1035 | esprima "^4.0.0"
1036 |
1037 | jsdom@^17.0.0:
1038 | version "17.0.0"
1039 | resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-17.0.0.tgz#3ec82d1d30030649c8defedc45fff6aa3e5d06ae"
1040 | integrity sha512-MUq4XdqwtNurZDVeKScENMPHnkgmdIvMzZ1r1NSwHkDuaqI6BouPjr+17COo4/19oLNnmdpFDPOHVpgIZmZ+VA==
1041 | dependencies:
1042 | abab "^2.0.5"
1043 | acorn "^8.4.1"
1044 | acorn-globals "^6.0.0"
1045 | cssom "^0.5.0"
1046 | cssstyle "^2.3.0"
1047 | data-urls "^3.0.0"
1048 | decimal.js "^10.3.1"
1049 | domexception "^2.0.1"
1050 | escodegen "^2.0.0"
1051 | form-data "^4.0.0"
1052 | html-encoding-sniffer "^2.0.1"
1053 | http-proxy-agent "^4.0.1"
1054 | https-proxy-agent "^5.0.0"
1055 | is-potential-custom-element-name "^1.0.1"
1056 | nwsapi "^2.2.0"
1057 | parse5 "6.0.1"
1058 | saxes "^5.0.1"
1059 | symbol-tree "^3.2.4"
1060 | tough-cookie "^4.0.0"
1061 | w3c-hr-time "^1.0.2"
1062 | w3c-xmlserializer "^2.0.0"
1063 | webidl-conversions "^6.1.0"
1064 | whatwg-encoding "^1.0.5"
1065 | whatwg-mimetype "^2.3.0"
1066 | whatwg-url "^9.0.0"
1067 | ws "^8.0.0"
1068 | xml-name-validator "^3.0.0"
1069 |
1070 | json-schema-traverse@^0.4.1:
1071 | version "0.4.1"
1072 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1073 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1074 |
1075 | json-schema-traverse@^1.0.0:
1076 | version "1.0.0"
1077 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1078 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1079 |
1080 | json-stable-stringify-without-jsonify@^1.0.1:
1081 | version "1.0.1"
1082 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1083 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
1084 |
1085 | levn@^0.4.1:
1086 | version "0.4.1"
1087 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1088 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1089 | dependencies:
1090 | prelude-ls "^1.2.1"
1091 | type-check "~0.4.0"
1092 |
1093 | levn@~0.3.0:
1094 | version "0.3.0"
1095 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
1096 | integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
1097 | dependencies:
1098 | prelude-ls "~1.1.2"
1099 | type-check "~0.3.2"
1100 |
1101 | lodash.merge@^4.6.2:
1102 | version "4.6.2"
1103 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1104 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1105 |
1106 | lodash.truncate@^4.4.2:
1107 | version "4.4.2"
1108 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
1109 | integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==
1110 |
1111 | lru-cache@^6.0.0:
1112 | version "6.0.0"
1113 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1114 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1115 | dependencies:
1116 | yallist "^4.0.0"
1117 |
1118 | merge-stream@^2.0.0:
1119 | version "2.0.0"
1120 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1121 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1122 |
1123 | mime-db@1.52.0:
1124 | version "1.52.0"
1125 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
1126 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1127 |
1128 | mime-types@^2.1.12:
1129 | version "2.1.35"
1130 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
1131 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1132 | dependencies:
1133 | mime-db "1.52.0"
1134 |
1135 | minimatch@^3.0.4, minimatch@^3.1.1:
1136 | version "3.1.2"
1137 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1138 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1139 | dependencies:
1140 | brace-expansion "^1.1.7"
1141 |
1142 | minimist@~1.2.6:
1143 | version "1.2.6"
1144 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
1145 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
1146 |
1147 | ms@2.1.2:
1148 | version "2.1.2"
1149 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1150 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1151 |
1152 | natural-compare@^1.4.0:
1153 | version "1.4.0"
1154 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
1155 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
1156 |
1157 | nwsapi@^2.2.0:
1158 | version "2.2.1"
1159 | resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.1.tgz#10a9f268fbf4c461249ebcfe38e359aa36e2577c"
1160 | integrity sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==
1161 |
1162 | object-inspect@^1.12.0, object-inspect@^1.9.0, object-inspect@~1.12.0:
1163 | version "1.12.2"
1164 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
1165 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
1166 |
1167 | object-is@^1.0.1:
1168 | version "1.1.5"
1169 | resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac"
1170 | integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
1171 | dependencies:
1172 | call-bind "^1.0.2"
1173 | define-properties "^1.1.3"
1174 |
1175 | object-keys@^1.1.1:
1176 | version "1.1.1"
1177 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1178 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1179 |
1180 | object.assign@^4.1.2:
1181 | version "4.1.2"
1182 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
1183 | integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
1184 | dependencies:
1185 | call-bind "^1.0.0"
1186 | define-properties "^1.1.3"
1187 | has-symbols "^1.0.1"
1188 | object-keys "^1.1.1"
1189 |
1190 | once@^1.3.0:
1191 | version "1.4.0"
1192 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1193 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1194 | dependencies:
1195 | wrappy "1"
1196 |
1197 | optionator@^0.8.1:
1198 | version "0.8.3"
1199 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
1200 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
1201 | dependencies:
1202 | deep-is "~0.1.3"
1203 | fast-levenshtein "~2.0.6"
1204 | levn "~0.3.0"
1205 | prelude-ls "~1.1.2"
1206 | type-check "~0.3.2"
1207 | word-wrap "~1.2.3"
1208 |
1209 | optionator@^0.9.1:
1210 | version "0.9.1"
1211 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
1212 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
1213 | dependencies:
1214 | deep-is "^0.1.3"
1215 | fast-levenshtein "^2.0.6"
1216 | levn "^0.4.1"
1217 | prelude-ls "^1.2.1"
1218 | type-check "^0.4.0"
1219 | word-wrap "^1.2.3"
1220 |
1221 | parent-module@^1.0.0:
1222 | version "1.0.1"
1223 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1224 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1225 | dependencies:
1226 | callsites "^3.0.0"
1227 |
1228 | parse5@6.0.1:
1229 | version "6.0.1"
1230 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
1231 | integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
1232 |
1233 | path-is-absolute@^1.0.0:
1234 | version "1.0.1"
1235 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1236 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1237 |
1238 | path-key@^3.1.0:
1239 | version "3.1.1"
1240 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1241 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1242 |
1243 | path-parse@^1.0.7:
1244 | version "1.0.7"
1245 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1246 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1247 |
1248 | prelude-ls@^1.2.1:
1249 | version "1.2.1"
1250 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
1251 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
1252 |
1253 | prelude-ls@~1.1.2:
1254 | version "1.1.2"
1255 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
1256 | integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
1257 |
1258 | progress@^2.0.0:
1259 | version "2.0.3"
1260 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
1261 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
1262 |
1263 | psl@^1.1.33:
1264 | version "1.9.0"
1265 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
1266 | integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
1267 |
1268 | punycode@^2.1.0, punycode@^2.1.1:
1269 | version "2.1.1"
1270 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
1271 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
1272 |
1273 | randombytes@^2.1.0:
1274 | version "2.1.0"
1275 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1276 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1277 | dependencies:
1278 | safe-buffer "^5.1.0"
1279 |
1280 | regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.3:
1281 | version "1.4.3"
1282 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
1283 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
1284 | dependencies:
1285 | call-bind "^1.0.2"
1286 | define-properties "^1.1.3"
1287 | functions-have-names "^1.2.2"
1288 |
1289 | regexpp@^3.1.0:
1290 | version "3.2.0"
1291 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
1292 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
1293 |
1294 | require-from-string@^2.0.2:
1295 | version "2.0.2"
1296 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1297 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1298 |
1299 | resolve-from@^4.0.0:
1300 | version "4.0.0"
1301 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
1302 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
1303 |
1304 | resolve@^1.11.1, resolve@~1.22.0:
1305 | version "1.22.1"
1306 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
1307 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
1308 | dependencies:
1309 | is-core-module "^2.9.0"
1310 | path-parse "^1.0.7"
1311 | supports-preserve-symlinks-flag "^1.0.0"
1312 |
1313 | resumer@~0.0.0:
1314 | version "0.0.0"
1315 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
1316 | integrity sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==
1317 | dependencies:
1318 | through "~2.3.4"
1319 |
1320 | rimraf@^3.0.2:
1321 | version "3.0.2"
1322 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
1323 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1324 | dependencies:
1325 | glob "^7.1.3"
1326 |
1327 | rollup-plugin-node-resolve@^5.2.0:
1328 | version "5.2.0"
1329 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523"
1330 | integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==
1331 | dependencies:
1332 | "@types/resolve" "0.0.8"
1333 | builtin-modules "^3.1.0"
1334 | is-module "^1.0.0"
1335 | resolve "^1.11.1"
1336 | rollup-pluginutils "^2.8.1"
1337 |
1338 | rollup-plugin-terser@^7.0.2:
1339 | version "7.0.2"
1340 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d"
1341 | integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==
1342 | dependencies:
1343 | "@babel/code-frame" "^7.10.4"
1344 | jest-worker "^26.2.1"
1345 | serialize-javascript "^4.0.0"
1346 | terser "^5.0.0"
1347 |
1348 | rollup-pluginutils@^2.8.1:
1349 | version "2.8.2"
1350 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e"
1351 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==
1352 | dependencies:
1353 | estree-walker "^0.6.1"
1354 |
1355 | rollup@^2.37.1:
1356 | version "2.75.7"
1357 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9"
1358 | integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==
1359 | optionalDependencies:
1360 | fsevents "~2.3.2"
1361 |
1362 | rw@1:
1363 | version "1.3.3"
1364 | resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
1365 | integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
1366 |
1367 | safe-buffer@^5.1.0:
1368 | version "5.2.1"
1369 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1370 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1371 |
1372 | "safer-buffer@>= 2.1.2 < 3":
1373 | version "2.1.2"
1374 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
1375 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1376 |
1377 | saxes@^5.0.1:
1378 | version "5.0.1"
1379 | resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
1380 | integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
1381 | dependencies:
1382 | xmlchars "^2.2.0"
1383 |
1384 | semver@^7.2.1:
1385 | version "7.3.7"
1386 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
1387 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
1388 | dependencies:
1389 | lru-cache "^6.0.0"
1390 |
1391 | serialize-javascript@^4.0.0:
1392 | version "4.0.0"
1393 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa"
1394 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
1395 | dependencies:
1396 | randombytes "^2.1.0"
1397 |
1398 | shebang-command@^2.0.0:
1399 | version "2.0.0"
1400 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1401 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1402 | dependencies:
1403 | shebang-regex "^3.0.0"
1404 |
1405 | shebang-regex@^3.0.0:
1406 | version "3.0.0"
1407 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1408 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1409 |
1410 | side-channel@^1.0.4:
1411 | version "1.0.4"
1412 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
1413 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
1414 | dependencies:
1415 | call-bind "^1.0.0"
1416 | get-intrinsic "^1.0.2"
1417 | object-inspect "^1.9.0"
1418 |
1419 | slice-ansi@^4.0.0:
1420 | version "4.0.0"
1421 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
1422 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
1423 | dependencies:
1424 | ansi-styles "^4.0.0"
1425 | astral-regex "^2.0.0"
1426 | is-fullwidth-code-point "^3.0.0"
1427 |
1428 | source-map-support@~0.5.20:
1429 | version "0.5.21"
1430 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
1431 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
1432 | dependencies:
1433 | buffer-from "^1.0.0"
1434 | source-map "^0.6.0"
1435 |
1436 | source-map@^0.6.0, source-map@~0.6.1:
1437 | version "0.6.1"
1438 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1439 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1440 |
1441 | sprintf-js@~1.0.2:
1442 | version "1.0.3"
1443 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1444 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
1445 |
1446 | string-width@^4.2.3:
1447 | version "4.2.3"
1448 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1449 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1450 | dependencies:
1451 | emoji-regex "^8.0.0"
1452 | is-fullwidth-code-point "^3.0.0"
1453 | strip-ansi "^6.0.1"
1454 |
1455 | string.prototype.trim@~1.2.5:
1456 | version "1.2.6"
1457 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.6.tgz#824960787db37a9e24711802ed0c1d1c0254f83e"
1458 | integrity sha512-8lMR2m+U0VJTPp6JjvJTtGyc4FIGq9CdRt7O9p6T0e6K4vjU+OP+SQJpbe/SBmRcCUIvNUnjsbmY6lnMp8MhsQ==
1459 | dependencies:
1460 | call-bind "^1.0.2"
1461 | define-properties "^1.1.4"
1462 | es-abstract "^1.19.5"
1463 |
1464 | string.prototype.trimend@^1.0.5:
1465 | version "1.0.5"
1466 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
1467 | integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
1468 | dependencies:
1469 | call-bind "^1.0.2"
1470 | define-properties "^1.1.4"
1471 | es-abstract "^1.19.5"
1472 |
1473 | string.prototype.trimstart@^1.0.5:
1474 | version "1.0.5"
1475 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
1476 | integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
1477 | dependencies:
1478 | call-bind "^1.0.2"
1479 | define-properties "^1.1.4"
1480 | es-abstract "^1.19.5"
1481 |
1482 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1483 | version "6.0.1"
1484 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1485 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1486 | dependencies:
1487 | ansi-regex "^5.0.1"
1488 |
1489 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
1490 | version "3.1.1"
1491 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1492 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1493 |
1494 | supports-color@^5.3.0:
1495 | version "5.5.0"
1496 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1497 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1498 | dependencies:
1499 | has-flag "^3.0.0"
1500 |
1501 | supports-color@^7.0.0, supports-color@^7.1.0:
1502 | version "7.2.0"
1503 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1504 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1505 | dependencies:
1506 | has-flag "^4.0.0"
1507 |
1508 | supports-preserve-symlinks-flag@^1.0.0:
1509 | version "1.0.0"
1510 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1511 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1512 |
1513 | symbol-tree@^3.2.4:
1514 | version "3.2.4"
1515 | resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
1516 | integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
1517 |
1518 | table@^6.0.9:
1519 | version "6.8.0"
1520 | resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
1521 | integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
1522 | dependencies:
1523 | ajv "^8.0.1"
1524 | lodash.truncate "^4.4.2"
1525 | slice-ansi "^4.0.0"
1526 | string-width "^4.2.3"
1527 | strip-ansi "^6.0.1"
1528 |
1529 | tape-await@^0.1.2:
1530 | version "0.1.2"
1531 | resolved "https://registry.yarnpkg.com/tape-await/-/tape-await-0.1.2.tgz#41f99110a2bc4728732d8bc058278b2fbf3c0bec"
1532 | integrity sha512-Gt1bXilp9uRTVj+DecLDs37tP1XwGXfFzWVqQEfW7foO9TNacy+aN5TdT0Kv6LI5t/9l3iOE4nX2hr2SQ4+OSg==
1533 |
1534 | tape@^4.13.3:
1535 | version "4.15.1"
1536 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.1.tgz#88fb662965a11f9be1bddb04c11662d7eceb129e"
1537 | integrity sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw==
1538 | dependencies:
1539 | call-bind "~1.0.2"
1540 | deep-equal "~1.1.1"
1541 | defined "~1.0.0"
1542 | dotignore "~0.1.2"
1543 | for-each "~0.3.3"
1544 | glob "~7.2.0"
1545 | has "~1.0.3"
1546 | inherits "~2.0.4"
1547 | is-regex "~1.1.4"
1548 | minimist "~1.2.6"
1549 | object-inspect "~1.12.0"
1550 | resolve "~1.22.0"
1551 | resumer "~0.0.0"
1552 | string.prototype.trim "~1.2.5"
1553 | through "~2.3.8"
1554 |
1555 | terser@^5.0.0:
1556 | version "5.14.1"
1557 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.1.tgz#7c95eec36436cb11cf1902cc79ac564741d19eca"
1558 | integrity sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==
1559 | dependencies:
1560 | "@jridgewell/source-map" "^0.3.2"
1561 | acorn "^8.5.0"
1562 | commander "^2.20.0"
1563 | source-map-support "~0.5.20"
1564 |
1565 | text-table@^0.2.0:
1566 | version "0.2.0"
1567 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1568 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
1569 |
1570 | through@~2.3.4, through@~2.3.8:
1571 | version "2.3.8"
1572 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1573 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
1574 |
1575 | tough-cookie@^4.0.0:
1576 | version "4.0.0"
1577 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4"
1578 | integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==
1579 | dependencies:
1580 | psl "^1.1.33"
1581 | punycode "^2.1.1"
1582 | universalify "^0.1.2"
1583 |
1584 | tr46@^2.1.0:
1585 | version "2.1.0"
1586 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240"
1587 | integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==
1588 | dependencies:
1589 | punycode "^2.1.1"
1590 |
1591 | tr46@^3.0.0:
1592 | version "3.0.0"
1593 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9"
1594 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==
1595 | dependencies:
1596 | punycode "^2.1.1"
1597 |
1598 | type-check@^0.4.0, type-check@~0.4.0:
1599 | version "0.4.0"
1600 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
1601 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
1602 | dependencies:
1603 | prelude-ls "^1.2.1"
1604 |
1605 | type-check@~0.3.2:
1606 | version "0.3.2"
1607 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1608 | integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
1609 | dependencies:
1610 | prelude-ls "~1.1.2"
1611 |
1612 | type-fest@^0.20.2:
1613 | version "0.20.2"
1614 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
1615 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
1616 |
1617 | unbox-primitive@^1.0.2:
1618 | version "1.0.2"
1619 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
1620 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
1621 | dependencies:
1622 | call-bind "^1.0.2"
1623 | has-bigints "^1.0.2"
1624 | has-symbols "^1.0.3"
1625 | which-boxed-primitive "^1.0.2"
1626 |
1627 | universalify@^0.1.2:
1628 | version "0.1.2"
1629 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
1630 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
1631 |
1632 | uri-js@^4.2.2:
1633 | version "4.4.1"
1634 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1635 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1636 | dependencies:
1637 | punycode "^2.1.0"
1638 |
1639 | v8-compile-cache@^2.0.3:
1640 | version "2.3.0"
1641 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
1642 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
1643 |
1644 | w3c-hr-time@^1.0.2:
1645 | version "1.0.2"
1646 | resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
1647 | integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
1648 | dependencies:
1649 | browser-process-hrtime "^1.0.0"
1650 |
1651 | w3c-xmlserializer@^2.0.0:
1652 | version "2.0.0"
1653 | resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
1654 | integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
1655 | dependencies:
1656 | xml-name-validator "^3.0.0"
1657 |
1658 | webidl-conversions@^5.0.0:
1659 | version "5.0.0"
1660 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
1661 | integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
1662 |
1663 | webidl-conversions@^6.1.0:
1664 | version "6.1.0"
1665 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
1666 | integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
1667 |
1668 | webidl-conversions@^7.0.0:
1669 | version "7.0.0"
1670 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
1671 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
1672 |
1673 | whatwg-encoding@^1.0.5:
1674 | version "1.0.5"
1675 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
1676 | integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
1677 | dependencies:
1678 | iconv-lite "0.4.24"
1679 |
1680 | whatwg-mimetype@^2.3.0:
1681 | version "2.3.0"
1682 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
1683 | integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
1684 |
1685 | whatwg-mimetype@^3.0.0:
1686 | version "3.0.0"
1687 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7"
1688 | integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==
1689 |
1690 | whatwg-url@^11.0.0:
1691 | version "11.0.0"
1692 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018"
1693 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==
1694 | dependencies:
1695 | tr46 "^3.0.0"
1696 | webidl-conversions "^7.0.0"
1697 |
1698 | whatwg-url@^9.0.0:
1699 | version "9.1.0"
1700 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-9.1.0.tgz#1b112cf237d72cd64fa7882b9c3f6234a1c3050d"
1701 | integrity sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==
1702 | dependencies:
1703 | tr46 "^2.1.0"
1704 | webidl-conversions "^6.1.0"
1705 |
1706 | which-boxed-primitive@^1.0.2:
1707 | version "1.0.2"
1708 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
1709 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
1710 | dependencies:
1711 | is-bigint "^1.0.1"
1712 | is-boolean-object "^1.1.0"
1713 | is-number-object "^1.0.4"
1714 | is-string "^1.0.5"
1715 | is-symbol "^1.0.3"
1716 |
1717 | which@^2.0.1:
1718 | version "2.0.2"
1719 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1720 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1721 | dependencies:
1722 | isexe "^2.0.0"
1723 |
1724 | word-wrap@^1.2.3, word-wrap@~1.2.3:
1725 | version "1.2.3"
1726 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
1727 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
1728 |
1729 | wrappy@1:
1730 | version "1.0.2"
1731 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1732 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1733 |
1734 | ws@^8.0.0:
1735 | version "8.8.0"
1736 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769"
1737 | integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==
1738 |
1739 | xml-name-validator@^3.0.0:
1740 | version "3.0.0"
1741 | resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
1742 | integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
1743 |
1744 | xmlchars@^2.2.0:
1745 | version "2.2.0"
1746 | resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
1747 | integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
1748 |
1749 | yallist@^4.0.0:
1750 | version "4.0.0"
1751 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
1752 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
1753 |
--------------------------------------------------------------------------------