aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rwxr-xr-xtest/bun.lockbbin0 -> 36614 bytes
-rw-r--r--test/js/node/crypto/crypto-lazyhash.test.ts13
-rw-r--r--test/js/node/crypto/crypto.test.ts1
-rw-r--r--test/js/node/events/event-emitter.test.ts529
-rw-r--r--test/js/node/events/node-builtins.test.js18
-rw-r--r--test/scripts/package-lock.json896
6 files changed, 464 insertions, 993 deletions
diff --git a/test/bun.lockb b/test/bun.lockb
new file mode 100755
index 000000000..3b60656d2
--- /dev/null
+++ b/test/bun.lockb
Binary files differ
diff --git a/test/js/node/crypto/crypto-lazyhash.test.ts b/test/js/node/crypto/crypto-lazyhash.test.ts
new file mode 100644
index 000000000..78ac4daf7
--- /dev/null
+++ b/test/js/node/crypto/crypto-lazyhash.test.ts
@@ -0,0 +1,13 @@
+import { describe, expect, test } from "bun:test";
+import { Hash, createHash } from "crypto";
+import { Transform } from "stream";
+
+describe("LazyHash quirks", () => {
+ test("hash instanceof Transform", () => {
+ const hash = createHash("sha256");
+ expect(hash instanceof Transform).toBe(true);
+ });
+ test("Hash.prototype instanceof Transform", () => {
+ expect(Hash.prototype instanceof Transform).toBe(true);
+ });
+});
diff --git a/test/js/node/crypto/crypto.test.ts b/test/js/node/crypto/crypto.test.ts
index 6c34501cb..d03940b9f 100644
--- a/test/js/node/crypto/crypto.test.ts
+++ b/test/js/node/crypto/crypto.test.ts
@@ -1,6 +1,5 @@
import { sha, MD5, MD4, SHA1, SHA224, SHA256, SHA384, SHA512, SHA512_256, gc, CryptoHasher } from "bun";
import { it, expect, describe } from "bun:test";
-import { readFileSync } from "fs";
const HashClasses = [MD5, MD4, SHA1, SHA224, SHA256, SHA384, SHA512, SHA512_256];
diff --git a/test/js/node/events/event-emitter.test.ts b/test/js/node/events/event-emitter.test.ts
index 401ccf605..cef309d48 100644
--- a/test/js/node/events/event-emitter.test.ts
+++ b/test/js/node/events/event-emitter.test.ts
@@ -1,34 +1,106 @@
-import { test, describe, expect, it } from "bun:test";
-import { heapStats } from "bun:jsc";
-import { expectMaxObjectTypeCount, gc } from "harness";
+import { test, describe, expect } from "bun:test";
+import { sleep } from "bun";
+
// this is also testing that imports with default and named imports in the same statement work
// our transpiler transform changes this to a var with import.meta.require
import EventEmitter, { getEventListeners, captureRejectionSymbol } from "node:events";
-describe("EventEmitter", () => {
- it("captureRejectionSymbol", () => {
+describe("node:events", () => {
+ test("captureRejectionSymbol", () => {
expect(EventEmitter.captureRejectionSymbol).toBeDefined();
expect(captureRejectionSymbol).toBeDefined();
+ expect(captureRejectionSymbol).toBe(EventEmitter.captureRejectionSymbol);
+ });
+
+ test("once", done => {
+ const emitter = new EventEmitter();
+ EventEmitter.once(emitter, "hey").then(x => {
+ try {
+ expect(x).toEqual([1, 5]);
+ } catch (error) {
+ done(error);
+ }
+ done();
+ });
+ emitter.emit("hey", 1, 5);
});
+
+ test("once (abort)", done => {
+ const emitter = new EventEmitter();
+ const controller = new AbortController();
+ EventEmitter.once(emitter, "hey", { signal: controller.signal })
+ .then(() => done(new Error("Should not be called")))
+ .catch(() => done());
+ controller.abort();
+ });
+
+ test("once (two events in same tick)", done => {
+ const emitter = new EventEmitter();
+ EventEmitter.once(emitter, "hey").then(() => {
+ EventEmitter.once(emitter, "hey").then(data => {
+ try {
+ expect(data).toEqual([3]);
+ } catch (error) {
+ done(error);
+ }
+ done();
+ });
+ setTimeout(() => {
+ emitter.emit("hey", 3);
+ }, 10);
+ });
+ emitter.emit("hey", 1);
+ emitter.emit("hey", 2);
+ });
+
+ // TODO: extensive events.on tests
+ // test("on", () => {
+ // const emitter = new EventEmitter();
+ // const asyncIterator = EventEmitter.on(emitter, "hey");
+
+ // expect(asyncIterator.next).toBeDefined();
+ // expect(asyncIterator[Symbol.asyncIterator]).toBeDefined();
+
+ // const fn = async () => {
+ // const { value } = await asyncIterator.next();
+ // expect(value).toBe(1);
+ // };
+
+ // emitter.emit("hey", 1, 2, 3);
+ // });
+});
+
+describe("EventEmitter", () => {
test("getEventListeners", () => {
expect(getEventListeners(new EventEmitter(), "hey").length).toBe(0);
});
- test("EventEmitter constructor", () => {
+
+ test("constructor", () => {
var emitter = new EventEmitter();
emitter.setMaxListeners(100);
expect(emitter.getMaxListeners()).toBe(100);
});
- test("EventEmitter.removeAllListeners()", () => {
- var emitter = new EventEmitter();
+ test("removeAllListeners()", () => {
+ var emitter = new EventEmitter() as any;
var ran = false;
emitter.on("hey", () => {
ran = true;
});
+ emitter.on("hey", () => {
+ ran = true;
+ });
+ emitter.on("exit", () => {
+ ran = true;
+ });
+ const { _events } = emitter;
emitter.removeAllListeners();
expect(emitter.listenerCount("hey")).toBe(0);
+ expect(emitter.listenerCount("exit")).toBe(0);
emitter.emit("hey");
+ emitter.emit("exit");
expect(ran).toBe(false);
+ expect(_events).not.toBe(emitter._events); // This looks wrong but node.js replaces it too
emitter.on("hey", () => {
ran = true;
});
@@ -37,42 +109,366 @@ describe("EventEmitter", () => {
expect(emitter.listenerCount("hey")).toBe(1);
});
- // These are also tests for the done() function in the test runner.
- test("EventEmitter emit (different tick)", done => {
+ test("removeAllListeners(type)", () => {
var emitter = new EventEmitter();
- emitter.on("wow", () => done());
- queueMicrotask(() => {
+ var ran = false;
+ emitter.on("hey", () => {
+ ran = true;
+ });
+ emitter.on("exit", () => {
+ ran = true;
+ });
+ expect(emitter.listenerCount("hey")).toBe(1);
+ emitter.removeAllListeners("hey");
+ expect(emitter.listenerCount("hey")).toBe(0);
+ expect(emitter.listenerCount("exit")).toBe(1);
+ emitter.emit("hey");
+ expect(ran).toBe(false);
+ emitter.emit("exit");
+ expect(ran).toBe(true);
+ });
+
+ // These are also tests for the done() function in the test runner.
+ describe("emit", () => {
+ test("different tick", done => {
+ var emitter = new EventEmitter();
+ emitter.on("wow", () => done());
+ queueMicrotask(() => {
+ emitter.emit("wow");
+ });
+ });
+
+ // Unlike Jest, bun supports async and done
+ test("async microtask before", done => {
+ (async () => {
+ await 1;
+ var emitter = new EventEmitter();
+ emitter.on("wow", () => done());
+ emitter.emit("wow");
+ })();
+ });
+
+ test("async microtask after", done => {
+ (async () => {
+ var emitter = new EventEmitter();
+ emitter.on("wow", () => done());
+ await 1;
+ emitter.emit("wow");
+ })();
+ });
+
+ test("same tick", done => {
+ var emitter = new EventEmitter();
+
+ emitter.on("wow", () => done());
+
emitter.emit("wow");
});
+
+ test("setTimeout task", done => {
+ var emitter = new EventEmitter();
+ emitter.on("wow", () => done());
+ setTimeout(() => emitter.emit("wow"), 1);
+ });
});
- // Unlike Jest, bun supports async and done
- test("async EventEmitter emit (microtask)", async done => {
- await 1;
- var emitter = new EventEmitter();
- emitter.on("wow", () => done());
- emitter.emit("wow");
+ test("addListener return type", () => {
+ var myEmitter = new EventEmitter();
+ expect(myEmitter.addListener("foo", () => {})).toBe(myEmitter);
});
- test("async EventEmitter emit (microtask) after", async done => {
- var emitter = new EventEmitter();
- emitter.on("wow", () => done());
- await 1;
- emitter.emit("wow");
+ test("addListener validates function", () => {
+ var myEmitter = new EventEmitter();
+ expect(() => myEmitter.addListener("foo", {} as any)).toThrow();
});
- test("EventEmitter emit (same tick)", done => {
- var emitter = new EventEmitter();
+ test("removeListener return type", () => {
+ var myEmitter = new EventEmitter();
+ expect(myEmitter.removeListener("foo", () => {})).toBe(myEmitter);
+ });
+
+ test("once", () => {
+ var myEmitter = new EventEmitter();
+ var calls = 0;
+
+ const fn = () => {
+ calls++;
+ };
- emitter.on("wow", () => done());
+ myEmitter.once("foo", fn);
- emitter.emit("wow");
+ expect(myEmitter.listenerCount("foo")).toBe(1);
+ expect(myEmitter.listeners("foo")).toEqual([fn]);
+
+ myEmitter.emit("foo");
+ myEmitter.emit("foo");
+
+ expect(calls).toBe(1);
+ expect(myEmitter.listenerCount("foo")).toBe(0);
});
- test("EventEmitter emit (setTimeout task)", done => {
- var emitter = new EventEmitter();
- emitter.on("wow", () => done());
- setTimeout(() => emitter.emit("wow"), 1);
+ test("addListener/removeListener aliases", () => {
+ expect(EventEmitter.prototype.addListener).toBe(EventEmitter.prototype.on);
+ expect(EventEmitter.prototype.removeListener).toBe(EventEmitter.prototype.off);
+ });
+
+ test("prependListener", () => {
+ const myEmitter = new EventEmitter();
+ const order: number[] = [];
+
+ myEmitter.on("foo", () => {
+ order.push(1);
+ });
+
+ myEmitter.prependListener("foo", () => {
+ order.push(2);
+ });
+
+ myEmitter.prependListener("foo", () => {
+ order.push(3);
+ });
+
+ myEmitter.on("foo", () => {
+ order.push(4);
+ });
+
+ myEmitter.emit("foo");
+
+ expect(order).toEqual([3, 2, 1, 4]);
+ });
+
+ test("prependOnceListener", () => {
+ const myEmitter = new EventEmitter();
+ const order: number[] = [];
+
+ myEmitter.on("foo", () => {
+ order.push(1);
+ });
+
+ myEmitter.prependOnceListener("foo", () => {
+ order.push(2);
+ });
+ myEmitter.prependOnceListener("foo", () => {
+ order.push(3);
+ });
+
+ myEmitter.on("foo", () => {
+ order.push(4);
+ });
+
+ myEmitter.emit("foo");
+
+ expect(order).toEqual([3, 2, 1, 4]);
+
+ myEmitter.emit("foo");
+
+ expect(order).toEqual([3, 2, 1, 4, 1, 4]);
+ });
+
+ test("listeners", () => {
+ const myEmitter = new EventEmitter();
+ const fn = () => {};
+ myEmitter.on("foo", fn);
+ expect(myEmitter.listeners("foo")).toEqual([fn]);
+ const fn2 = () => {};
+ myEmitter.on("foo", fn2);
+ expect(myEmitter.listeners("foo")).toEqual([fn, fn2]);
+ myEmitter.off("foo", fn2);
+ expect(myEmitter.listeners("foo")).toEqual([fn]);
+ });
+
+ test("rawListeners", () => {
+ const myEmitter = new EventEmitter();
+ const fn = () => {};
+ myEmitter.on("foo", fn);
+ expect(myEmitter.listeners("foo")).toEqual([fn]);
+ const fn2 = () => {};
+ myEmitter.on("foo", fn2);
+ expect(myEmitter.listeners("foo")).toEqual([fn, fn2]);
+ myEmitter.off("foo", fn2);
+ expect(myEmitter.listeners("foo")).toEqual([fn]);
+ });
+
+ test("eventNames", () => {
+ const myEmitter = new EventEmitter();
+ expect(myEmitter.eventNames()).toEqual([]);
+ const fn = () => {};
+ myEmitter.on("foo", fn);
+ expect(myEmitter.eventNames()).toEqual(["foo"]);
+ myEmitter.on("bar", () => {});
+ expect(myEmitter.eventNames()).toEqual(["foo", "bar"]);
+ myEmitter.off("foo", fn);
+ expect(myEmitter.eventNames()).toEqual(["bar"]);
+ });
+
+ test("_eventsCount", () => {
+ const myEmitter = new EventEmitter() as EventEmitter & {
+ _eventsCount: number;
+ };
+ expect(myEmitter._eventsCount).toBe(0);
+ myEmitter.on("foo", () => {});
+ expect(myEmitter._eventsCount).toBe(1);
+ myEmitter.on("foo", () => {});
+ expect(myEmitter._eventsCount).toBe(1);
+ myEmitter.on("bar", () => {});
+ expect(myEmitter._eventsCount).toBe(2);
+ myEmitter.on("foo", () => {});
+ expect(myEmitter._eventsCount).toBe(2);
+ myEmitter.on("bar", () => {});
+ expect(myEmitter._eventsCount).toBe(2);
+ myEmitter.removeAllListeners("foo");
+ expect(myEmitter._eventsCount).toBe(1);
+ });
+
+ test("events.init", () => {
+ // init is a undocumented property that is identical to the constructor except it doesn't return the instance
+ // in node, EventEmitter just calls init()
+ let instance = Object.create(EventEmitter.prototype);
+ (EventEmitter as any).init.call(instance);
+ expect(instance._eventsCount).toBe(0);
+ expect(instance._maxListeners).toBeUndefined();
+ expect(instance._events).toEqual({});
+ expect(instance instanceof EventEmitter).toBe(true);
+ });
+});
+
+describe("EventEmitter error handling", () => {
+ test("unhandled error event throws on emit", () => {
+ const myEmitter = new EventEmitter();
+
+ expect(() => {
+ myEmitter.emit("error", "Hello!");
+ }).toThrow("Hello!");
+ });
+
+ test("unhandled error event throws on emit with no arguments", () => {
+ const myEmitter = new EventEmitter();
+
+ expect(() => {
+ myEmitter.emit("error");
+ }).toThrow("Unhandled error.");
+ });
+
+ test("handled error event", () => {
+ const myEmitter = new EventEmitter();
+
+ let handled = false;
+ myEmitter.on("error", (...args) => {
+ expect(args).toEqual(["Hello", "World"]);
+ handled = true;
+ });
+
+ myEmitter.emit("error", "Hello", "World");
+
+ expect(handled).toBe(true);
+ });
+
+ test("errorMonitor", () => {
+ const myEmitter = new EventEmitter();
+
+ let handled = false;
+ myEmitter.on(EventEmitter.errorMonitor, (...args) => {
+ expect(args).toEqual(["Hello", "World"]);
+ handled = true;
+ });
+
+ myEmitter.on("error", () => {});
+
+ myEmitter.emit("error", "Hello", "World");
+
+ expect(handled).toBe(true);
+ });
+
+ test("errorMonitor (unhandled)", () => {
+ const myEmitter = new EventEmitter();
+
+ let handled = false;
+ myEmitter.on(EventEmitter.errorMonitor, (...args) => {
+ expect(args).toEqual(["Hello", "World"]);
+ handled = true;
+ });
+
+ expect(() => {
+ myEmitter.emit("error", "Hello", "World");
+ }).toThrow("Hello");
+
+ expect(handled).toBe(true);
+ });
+});
+
+describe("EventEmitter captureRejections", () => {
+ // Can't catch the unhandled rejection because we do not have process.on("unhandledRejection")
+ // test("captureRejections off will not capture rejections", async () => {
+ // const myEmitter = new EventEmitter();
+
+ // let handled = false;
+ // myEmitter.on("error", (...args) => {
+ // handled = true;
+ // });
+
+ // myEmitter.on("action", async () => {
+ // throw new Error("Hello World");
+ // });
+
+ // myEmitter.emit("action");
+
+ // await sleep(1);
+
+ // expect(handled).toBe(false);
+ // });
+ test("it captures rejections", async () => {
+ const myEmitter = new EventEmitter({ captureRejections: true });
+
+ let handled: any = null;
+ myEmitter.on("error", (...args) => {
+ handled = args;
+ });
+
+ myEmitter.on("action", async () => {
+ throw 123;
+ });
+
+ myEmitter.emit("action");
+
+ await sleep(5);
+
+ expect(handled).toEqual([123]);
+ });
+ test("it does not capture successful promises", async () => {
+ const myEmitter = new EventEmitter({ captureRejections: true });
+
+ let handled: any = null;
+ myEmitter.on("error", () => {
+ handled = true;
+ });
+
+ myEmitter.on("action", async () => {
+ return 123;
+ });
+
+ myEmitter.emit("action");
+
+ await sleep(5);
+
+ expect(handled).toEqual(null);
+ });
+ test("it does not capture handled rejections", async () => {
+ const myEmitter = new EventEmitter({ captureRejections: true });
+
+ let handled: any = null;
+ myEmitter.on("error", () => {
+ handled = true;
+ });
+
+ myEmitter.on("action", async () => {
+ return Promise.reject(123).catch(() => 234);
+ });
+
+ myEmitter.emit("action");
+
+ await sleep(5);
+
+ expect(handled).toEqual(null);
});
});
@@ -112,53 +508,30 @@ const waysOfCreating = [
},
];
-for (let create of waysOfCreating) {
- it(`${create.toString().slice(10, 40).replaceAll("\n", "\\n").trim()} should work`, () => {
- var myEmitter = create();
- var called = false;
- (myEmitter as EventEmitter).once("event", function () {
- called = true;
- // @ts-ignore
- expect(this).toBe(myEmitter);
- });
- var firstEvents = myEmitter._events;
- expect(myEmitter.listenerCount("event")).toBe(1);
-
- expect(myEmitter.emit("event")).toBe(true);
- expect(myEmitter.listenerCount("event")).toBe(0);
+describe("EventEmitter constructors", () => {
+ for (let create of waysOfCreating) {
+ test(`${create
+ .toString()
+ .slice(6, 52)
+ .replaceAll("\n", "")
+ .trim()
+ .replaceAll(/ {2,}/g, " ")
+ .replace(/^\{ ?/, "")} should work`, () => {
+ var myEmitter = create();
+ var called = false;
+ (myEmitter as EventEmitter).once("event", function () {
+ called = true;
+ // @ts-ignore
+ expect(this).toBe(myEmitter);
+ });
+ var firstEvents = myEmitter._events;
+ expect(myEmitter.listenerCount("event")).toBe(1);
- expect(firstEvents).toBe(myEmitter._events);
- expect(called).toBe(true);
- });
-}
-
-test("EventEmitter.on", () => {
- var myEmitter = new EventEmitter();
- expect(myEmitter.on("foo", () => {})).toBe(myEmitter);
-});
+ expect(myEmitter.emit("event")).toBe(true);
+ expect(myEmitter.listenerCount("event")).toBe(0);
-test("EventEmitter.off", () => {
- var myEmitter = new EventEmitter();
- expect(myEmitter.off("foo", () => {})).toBe(myEmitter);
-});
-
-// Internally, EventEmitter has a JSC::Weak with the thisValue of the listener
-test("EventEmitter GCs", async () => {
- gc();
-
- const startCount = heapStats().objectTypeCounts["EventEmitter"] ?? 0;
- (function () {
- function EventEmitterSubclass(this: any) {
- EventEmitter.call(this);
- }
-
- Object.setPrototypeOf(EventEmitterSubclass.prototype, EventEmitter.prototype);
- Object.setPrototypeOf(EventEmitterSubclass, EventEmitter);
- // @ts-ignore
- var myEmitter = new EventEmitterSubclass();
- myEmitter.on("foo", () => {});
- myEmitter.emit("foo");
- })();
-
- await expectMaxObjectTypeCount(expect, "EventEmitter", startCount);
+ expect(firstEvents).toEqual({ event: firstEvents.event }); // it shouldn't mutate
+ expect(called).toBe(true);
+ });
+ }
});
diff --git a/test/js/node/events/node-builtins.test.js b/test/js/node/events/node-builtins.test.js
deleted file mode 100644
index 67050f31a..000000000
--- a/test/js/node/events/node-builtins.test.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { describe, it, expect } from "bun:test";
-
-import { EventEmitter } from "events";
-var emitters = [EventEmitter, require("events")];
-describe("EventEmitter", () => {
- it("should emit events", () => {
- for (let Emitter of emitters) {
- const emitter = new Emitter();
- var called = false;
- const listener = () => {
- called = true;
- };
- emitter.on("test", listener);
- emitter.emit("test");
- expect(called).toBe(true);
- }
- });
-});
diff --git a/test/scripts/package-lock.json b/test/scripts/package-lock.json
deleted file mode 100644
index 10abe53e4..000000000
--- a/test/scripts/package-lock.json
+++ /dev/null
@@ -1,896 +0,0 @@
-{
- "name": "scripts",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "puppeteer": "^10.4.0"
- }
- },
- "node_modules/@types/node": {
- "version": "16.11.26",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/yauzl": {
- "version": "2.9.2",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/agent-base/node_modules/debug": {
- "version": "4.3.3",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/chownr": {
- "version": "1.1.4",
- "license": "ISC"
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "license": "MIT"
- },
- "node_modules/debug": {
- "version": "4.3.1",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/devtools-protocol": {
- "version": "0.0.901419",
- "license": "BSD-3-Clause"
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/extract-zip": {
- "version": "2.0.1",
- "license": "BSD-2-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "bin": {
- "extract-zip": "cli.js"
- },
- "engines": {
- "node": ">= 10.17.0"
- },
- "optionalDependencies": {
- "@types/yauzl": "^2.9.1"
- }
- },
- "node_modules/extract-zip/node_modules/debug": {
- "version": "4.3.3",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/find-up": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "license": "MIT"
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "license": "ISC"
- },
- "node_modules/get-stream": {
- "version": "5.2.0",
- "license": "MIT",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/https-proxy-agent/node_modules/debug": {
- "version": "4.3.3",
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "license": "ISC"
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.8",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "license": "MIT"
- },
- "node_modules/mkdirp": {
- "version": "0.5.5",
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "license": "MIT"
- },
- "node_modules/node-fetch": {
- "version": "2.6.1",
- "license": "MIT",
- "engines": {
- "node": "4.x || >=6.0.0"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "license": "MIT"
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/progress": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/proxy-from-env": {
- "version": "1.1.0",
- "license": "MIT"
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/puppeteer": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.4.0.tgz",
- "integrity": "sha512-2cP8mBoqnu5gzAVpbZ0fRaobBWZM8GEUF4I1F6WbgHrKV/rz7SX8PG2wMymZgD0wo0UBlg2FBPNxlF/xlqW6+w==",
- "deprecated": "Version no longer supported. Upgrade to @latest",
- "hasInstallScript": true,
- "dependencies": {
- "debug": "4.3.1",
- "devtools-protocol": "0.0.901419",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
- "node-fetch": "2.6.1",
- "pkg-dir": "4.2.0",
- "progress": "2.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.0.0",
- "unbzip2-stream": "1.3.3",
- "ws": "7.4.6"
- },
- "engines": {
- "node": ">=10.18.1"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp": "^0.5.1",
- "pump": "^3.0.0",
- "tar-stream": "^2.0.0"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "license": "MIT",
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/through": {
- "version": "2.3.8",
- "license": "MIT"
- },
- "node_modules/unbzip2-stream": {
- "version": "1.3.3",
- "license": "MIT",
- "dependencies": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "license": "ISC"
- },
- "node_modules/ws": {
- "version": "7.4.6",
- "license": "MIT",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/yauzl": {
- "version": "2.10.0",
- "license": "MIT",
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- }
- },
- "dependencies": {
- "@types/node": {
- "version": "16.11.26",
- "optional": true
- },
- "@types/yauzl": {
- "version": "2.9.2",
- "optional": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "agent-base": {
- "version": "6.0.2",
- "requires": {
- "debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "balanced-match": {
- "version": "1.0.2"
- },
- "base64-js": {
- "version": "1.5.1"
- },
- "bl": {
- "version": "4.1.0",
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-crc32": {
- "version": "0.2.13"
- },
- "chownr": {
- "version": "1.1.4"
- },
- "concat-map": {
- "version": "0.0.1"
- },
- "debug": {
- "version": "4.3.1",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "devtools-protocol": {
- "version": "0.0.901419"
- },
- "end-of-stream": {
- "version": "1.4.4",
- "requires": {
- "once": "^1.4.0"
- }
- },
- "extract-zip": {
- "version": "2.0.1",
- "requires": {
- "@types/yauzl": "^2.9.1",
- "debug": "^4.1.1",
- "get-stream": "^5.1.0",
- "yauzl": "^2.10.0"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "fd-slicer": {
- "version": "1.1.0",
- "requires": {
- "pend": "~1.2.0"
- }
- },
- "find-up": {
- "version": "4.1.0",
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "fs-constants": {
- "version": "1.0.0"
- },
- "fs.realpath": {
- "version": "1.0.0"
- },
- "get-stream": {
- "version": "5.2.0",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "glob": {
- "version": "7.2.0",
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- },
- "dependencies": {
- "debug": {
- "version": "4.3.3",
- "requires": {
- "ms": "2.1.2"
- }
- }
- }
- },
- "ieee754": {
- "version": "1.2.1"
- },
- "inflight": {
- "version": "1.0.6",
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4"
- },
- "locate-path": {
- "version": "5.0.0",
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "minimatch": {
- "version": "3.0.8",
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5"
- },
- "mkdirp": {
- "version": "0.5.5",
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2"
- },
- "node-fetch": {
- "version": "2.6.1"
- },
- "once": {
- "version": "1.4.0",
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "4.1.0",
- "requires": {
- "p-limit": "^2.2.0"
- }
- },
- "p-try": {
- "version": "2.2.0"
- },
- "path-exists": {
- "version": "4.0.0"
- },
- "path-is-absolute": {
- "version": "1.0.1"
- },
- "pend": {
- "version": "1.2.0"
- },
- "pkg-dir": {
- "version": "4.2.0",
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "progress": {
- "version": "2.0.1"
- },
- "proxy-from-env": {
- "version": "1.1.0"
- },
- "pump": {
- "version": "3.0.0",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "puppeteer": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.4.0.tgz",
- "integrity": "sha512-2cP8mBoqnu5gzAVpbZ0fRaobBWZM8GEUF4I1F6WbgHrKV/rz7SX8PG2wMymZgD0wo0UBlg2FBPNxlF/xlqW6+w==",
- "requires": {
- "debug": "4.3.1",
- "devtools-protocol": "0.0.901419",
- "extract-zip": "2.0.1",
- "https-proxy-agent": "5.0.0",
- "node-fetch": "2.6.1",
- "pkg-dir": "4.2.0",
- "progress": "2.0.1",
- "proxy-from-env": "1.1.0",
- "rimraf": "3.0.2",
- "tar-fs": "2.0.0",
- "unbzip2-stream": "1.3.3",
- "ws": "7.4.6"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "rimraf": {
- "version": "3.0.2",
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.2.1"
- },
- "string_decoder": {
- "version": "1.3.0",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "tar-fs": {
- "version": "2.0.0",
- "requires": {
- "chownr": "^1.1.1",
- "mkdirp": "^0.5.1",
- "pump": "^3.0.0",
- "tar-stream": "^2.0.0"
- }
- },
- "tar-stream": {
- "version": "2.2.0",
- "requires": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- }
- },
- "through": {
- "version": "2.3.8"
- },
- "unbzip2-stream": {
- "version": "1.3.3",
- "requires": {
- "buffer": "^5.2.1",
- "through": "^2.3.8"
- }
- },
- "util-deprecate": {
- "version": "1.0.2"
- },
- "wrappy": {
- "version": "1.0.2"
- },
- "ws": {
- "version": "7.4.6",
- "requires": {}
- },
- "yauzl": {
- "version": "2.10.0",
- "requires": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- }
- }
-}