diff options
Diffstat (limited to 'test')
-rwxr-xr-x | test/bun.lockb | bin | 0 -> 36614 bytes | |||
-rw-r--r-- | test/js/node/crypto/crypto-lazyhash.test.ts | 13 | ||||
-rw-r--r-- | test/js/node/crypto/crypto.test.ts | 1 | ||||
-rw-r--r-- | test/js/node/events/event-emitter.test.ts | 529 | ||||
-rw-r--r-- | test/js/node/events/node-builtins.test.js | 18 | ||||
-rw-r--r-- | test/scripts/package-lock.json | 896 |
6 files changed, 464 insertions, 993 deletions
diff --git a/test/bun.lockb b/test/bun.lockb Binary files differnew file mode 100755 index 000000000..3b60656d2 --- /dev/null +++ b/test/bun.lockb 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" - } - } - } -} |