diff --git a/.github/workflows/validating.yml b/.github/workflows/validating.yml
index 173631b57..5028f783f 100644
--- a/.github/workflows/validating.yml
+++ b/.github/workflows/validating.yml
@@ -24,15 +24,12 @@ jobs:
- name: Build
run: yarn run build
- - name: Run test
- run: yarn run test
-
- uses: cypress-io/github-action@v6
with:
install-command : yarn install --immutable --immutable-cache
# fix issue with "Cannot find module 'cypress'"
# https://github.com/cypress-io/github-action/issues/430#issuecomment-949936528
- command: yarn test:e2e
+ command: yarn run test
start: yarn start-test-server
wait-on: "http://localhost:8888"
wait-on-timeout: 5
diff --git a/.gitignore b/.gitignore
index c9d9629b3..f232089ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,8 @@ _config.yaml
dist
.parcel-cache
+cypress/screenshots/
+
# The GitLab pages artifacts
public
diff --git a/cypress.config.js b/cypress.config.js
index 6d7cd2a75..47d8beab2 100644
--- a/cypress.config.js
+++ b/cypress.config.js
@@ -2,11 +2,10 @@ const { defineConfig } = require('cypress')
module.exports = defineConfig({
e2e: {
- // We've imported your old cypress plugins here.
- // You may want to clean this up later by importing these.
- setupNodeEvents(on, config) {
- return require('./cypress/plugins/index.js')(on, config)
- },
baseUrl: 'http://localhost:8888',
+ specPattern: [
+ "cypress/e2e/**/*.cy.{js,jsx,ts,tsx}",
+ "cypress/unit/**/*.cy.{js,jsx,ts,tsx}",
+ ],
},
})
diff --git a/cypress/e2e/1-basic/zero_configuration.cy.js b/cypress/e2e/1-basic/zero_configuration.cy.js
index 915f73c7b..87d0f14e9 100644
--- a/cypress/e2e/1-basic/zero_configuration.cy.js
+++ b/cypress/e2e/1-basic/zero_configuration.cy.js
@@ -14,9 +14,7 @@ describe("Dropzone with zero configuration", () => {
cy.wait("@upload").then((interception) => {
expect(interception.response.statusCode).to.eq(200);
- expect(interception.response.body).to.deep.eq({
- success: true,
- });
+ expect(interception.response.body).to.deep.eq({ success: true });
});
});
@@ -25,13 +23,17 @@ describe("Dropzone with zero configuration", () => {
cy.get(".dropzone")
.selectFile("cypress/fixtures/image.jpg", { action: "drag-drop" })
- .selectFile("cypress/fixtures/image.tiff", { action: "drag-drop" })
+ .selectFile("cypress/fixtures/image.tiff", { action: "drag-drop" });
+ // wait for BOTH uploads
cy.wait("@upload").then((interception) => {
expect(interception.response.statusCode).to.eq(200);
- expect(interception.response.body).to.deep.eq({
- success: true,
- });
+ expect(interception.response.body).to.deep.eq({ success: true });
+ });
+
+ cy.wait("@upload").then((interception) => {
+ expect(interception.response.statusCode).to.eq(200);
+ expect(interception.response.body).to.deep.eq({ success: true });
});
});
});
diff --git a/test/unit-tests/README.md b/cypress/e2e/README.md
similarity index 100%
rename from test/unit-tests/README.md
rename to cypress/e2e/README.md
diff --git a/cypress/support/index.js b/cypress/support/index.js
new file mode 100644
index 000000000..c40970173
--- /dev/null
+++ b/cypress/support/index.js
@@ -0,0 +1,16 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
+globalThis.sleep = (delay) =>
+ new Promise((resolve) => setTimeout(resolve, delay));
diff --git a/cypress/support/unit.js b/cypress/support/unit.js
new file mode 100644
index 000000000..71550f181
--- /dev/null
+++ b/cypress/support/unit.js
@@ -0,0 +1,14 @@
+// ***********************************************************
+// This example support/index.js is processed and
+// loaded automatically before your test files.
+//
+// This is a great place to put global configuration and
+// behavior that modifies Cypress.
+//
+// You can change the location of this file or turn off
+// automatically serving support files with the
+// 'supportFile' configuration option.
+//
+// You can read more here:
+// https://on.cypress.io/configuration
+// ***********************************************************
diff --git a/test/unit-tests/all.js b/cypress/unit/all.cy.js
similarity index 52%
rename from test/unit-tests/all.js
rename to cypress/unit/all.cy.js
index bbe93867e..c7c39b806 100644
--- a/test/unit-tests/all.js
+++ b/cypress/unit/all.cy.js
@@ -4,7 +4,7 @@ describe("Dropzone", function () {
let getMockFile = (
type = "text/html",
filename = "test file name",
- contents = ["file contents"]
+ contents = ["file contents"],
) => {
let file = new File(contents, filename, { type: type });
file.status = Dropzone.ADDED;
@@ -15,9 +15,6 @@ describe("Dropzone", function () {
return file;
};
- let xhr = null;
- beforeEach(() => (xhr = sinon.useFakeXMLHttpRequest()));
-
describe("constructor()", function () {
let dropzone = null;
@@ -29,37 +26,37 @@ describe("Dropzone", function () {
it("should throw an exception if the element is invalid", () =>
expect(() => (dropzone = new Dropzone("#invalid-element"))).to.throw(
- "Invalid dropzone element: not an instance of HTMLElement."
+ "Invalid dropzone element: not an instance of HTMLElement.",
));
it("should throw an exception if assigned twice to the same element", function () {
let element = document.createElement("div");
dropzone = new Dropzone(element, { url: "url" });
return expect(() => new Dropzone(element, { url: "url" })).to.throw(
- "Dropzone already attached."
+ "Dropzone already attached.",
);
});
it("should set itself as element.dropzone", function () {
let element = document.createElement("div");
dropzone = new Dropzone(element, { url: "url" });
- return element.dropzone.should.equal(dropzone);
+ return expect(element.dropzone).to.equal(dropzone);
});
it("should add itself to Dropzone.instances", function () {
let element = document.createElement("div");
dropzone = new Dropzone(element, { url: "url" });
- return Dropzone.instances[Dropzone.instances.length - 1].should.equal(
- dropzone
+ return expect(Dropzone.instances[Dropzone.instances.length - 1]).to.equal(
+ dropzone,
);
});
it("should use the action attribute not the element with the name action", function () {
let element = Dropzone.createElement(
- '
'
+ '',
);
dropzone = new Dropzone(element);
- return dropzone.options.url.should.equal("real-action");
+ return expect(dropzone.options.url).to.equal("real-action");
});
return describe("options", function () {
@@ -79,28 +76,31 @@ describe("Dropzone", function () {
it("should take the options set in Dropzone.options", function () {
dropzone = new Dropzone(element);
- dropzone.options.url.should.equal("/some/url");
- return dropzone.options.parallelUploads.should.equal(10);
+ expect(dropzone.options.url).to.equal("/some/url");
+ return expect(dropzone.options.parallelUploads).to.equal(10);
});
it("should prefer passed options over Dropzone.options", function () {
dropzone = new Dropzone(element, { url: "/some/other/url" });
- return dropzone.options.url.should.equal("/some/other/url");
+ return expect(dropzone.options.url).to.equal("/some/other/url");
});
it("should take the default options if nothing set in Dropzone.options", function () {
dropzone = new Dropzone(element2, { url: "/some/url" });
- return dropzone.options.parallelUploads.should.equal(2);
+ return expect(dropzone.options.parallelUploads).to.equal(2);
});
- it("should call the fallback function if forceFallback == true", (done) =>
- (dropzone = new Dropzone(element, {
+ it("should call the fallback function if forceFallback == true", () => {
+ const fallback = Cypress.sinon.spy();
+
+ dropzone = new Dropzone(element, {
url: "/some/other/url",
forceFallback: true,
- fallback() {
- return done();
- },
- })));
+ fallback,
+ });
+
+ expect(fallback).to.have.been.calledOnce;
+ });
return describe("options.clickable", function () {
let clickableElement = null;
@@ -119,21 +119,21 @@ describe("Dropzone", function () {
it("should use the default element if clickable == true", function () {
dropzone = new Dropzone(element, { clickable: true });
- return dropzone.clickableElements.should.eql([dropzone.element]);
+ expect(dropzone.clickableElements).to.deep.equal([dropzone.element]);
});
it("should lookup the element if clickable is a CSS selector", function () {
dropzone = new Dropzone(element, { clickable: ".some-clickable" });
- return dropzone.clickableElements.should.eql([clickableElement]);
+ expect(dropzone.clickableElements).to.deep.equal([clickableElement]);
});
it("should simply use the provided element", function () {
dropzone = new Dropzone(element, { clickable: clickableElement });
- return dropzone.clickableElements.should.eql([clickableElement]);
+ expect(dropzone.clickableElements).to.deep.equal([clickableElement]);
});
it("should accept multiple clickable elements", function () {
dropzone = new Dropzone(element, {
clickable: [document.body, ".some-clickable"],
});
- return dropzone.clickableElements.should.eql([
+ expect(dropzone.clickableElements).to.deep.equal([
document.body,
clickableElement,
]);
@@ -143,9 +143,9 @@ describe("Dropzone", function () {
() =>
(dropzone = new Dropzone(element, {
clickable: ".some-invalid-clickable",
- }))
+ })),
).to.throw(
- "Invalid `clickable` option provided. Please provide a CSS selector, a plain HTML element or a list of those."
+ "Invalid `clickable` option provided. Please provide a CSS selector, a plain HTML element or a list of those.",
));
});
});
@@ -156,16 +156,17 @@ describe("Dropzone", function () {
let dropzones = {
"using acceptedFiles": new Dropzone(
Dropzone.createElement(''),
- { clickable: true, acceptedFiles: "audio/*,video/*" }
+ { clickable: true, acceptedFiles: "audio/*,video/*" },
),
};
it("should not add an accept attribute if no acceptParameter", function () {
let dropzone = new Dropzone(
Dropzone.createElement(''),
- { clickable: true, acceptParameter: null, acceptedFiles: null }
+ { clickable: true, acceptParameter: null, acceptedFiles: null },
);
- return dropzone.hiddenFileInput.hasAttribute("accept").should.be.false;
+ return expect(dropzone.hiddenFileInput.hasAttribute("accept")).to.be
+ .false;
});
return (() => {
@@ -176,18 +177,18 @@ describe("Dropzone", function () {
describe(name, () =>
(function (dropzone) {
it("should create a hidden file input if clickable", function () {
- dropzone.hiddenFileInput.should.be.ok;
- dropzone.hiddenFileInput.tagName.should.equal("INPUT");
+ expect(dropzone.hiddenFileInput).to.be.ok;
+ expect(dropzone.hiddenFileInput.tagName).to.equal("INPUT");
});
it("should have a tabindex of -1", function () {
- dropzone.hiddenFileInput.tabIndex.should.equal(-1);
+ expect(dropzone.hiddenFileInput.tabIndex).to.equal(-1);
});
it("should use the acceptParameter", () =>
- dropzone.hiddenFileInput
- .getAttribute("accept")
- .should.equal("audio/*,video/*"));
+ expect(
+ dropzone.hiddenFileInput.getAttribute("accept"),
+ ).to.equal("audio/*,video/*"));
it("should create a new input element when something is selected to reset the input field", () =>
(() => {
@@ -197,18 +198,19 @@ describe("Dropzone", function () {
let event = document.createEvent("HTMLEvents");
event.initEvent("change", true, true);
hiddenFileInput.dispatchEvent(event);
- dropzone.hiddenFileInput.should.not.equal(
- hiddenFileInput
+ expect(dropzone.hiddenFileInput).to.not.equal(
+ hiddenFileInput,
);
result1.push(
- Dropzone.elementInside(hiddenFileInput, document).should
- .not.be.ok
+ expect(
+ Dropzone.elementInside(hiddenFileInput, document),
+ ).to.not.be.ok,
);
}
return result1;
})());
- })(dropzone)
- )
+ })(dropzone),
+ ),
);
}
return result;
@@ -217,29 +219,31 @@ describe("Dropzone", function () {
it("should create a .dz-message element", function () {
let element = Dropzone.createElement(
- ''
+ '',
);
let dropzone = new Dropzone(element, {
clickable: true,
acceptParameter: null,
});
- return element.querySelector(".dz-message").should.be.instanceof(Element);
+ return expect(element.querySelector(".dz-message")).to.be.instanceof(
+ Element,
+ );
});
it("should not create a .dz-message element if there already is one", function () {
let element = Dropzone.createElement(
- ''
+ '',
);
let msg = Dropzone.createElement('TEST
');
element.appendChild(msg);
- let dropzone = new Dropzone(element, {
+ new Dropzone(element, {
clickable: true,
acceptParameter: null,
});
- element.querySelector(".dz-message").should.equal(msg);
+ expect(element.querySelector(".dz-message")).to.equal(msg);
- return element.querySelectorAll(".dz-message").length.should.equal(1);
+ return expect(element.querySelectorAll(".dz-message").length).to.equal(1);
});
});
@@ -274,23 +278,24 @@ describe("Dropzone", function () {
describe(".addedFile()", () =>
it("should properly create the previewElement", function () {
- file.previewElement.should.be.instanceof(Element);
-
- file.previewElement
- .querySelector("[data-dz-name]")
- .innerHTML.should.eql("test name");
- return file.previewElement
- .querySelector("[data-dz-size]")
- .innerHTML.should.eql("2.1 MB");
+ expect(file.previewElement).to.be.instanceof(Element);
+
+ expect(
+ file.previewElement.querySelector("[data-dz-name]").innerHTML,
+ ).to.equal("test name");
+ expect(
+ file.previewElement.querySelector("[data-dz-size]").innerHTML,
+ ).to.equal("2.1 MB");
}));
describe(".error()", function () {
it("should properly insert the error", function () {
dropzone.options.error.call(dropzone, file, "test message");
- return file.previewElement
- .querySelector("[data-dz-errormessage]")
- .innerHTML.should.eql("test message");
+ return expect(
+ file.previewElement.querySelector("[data-dz-errormessage]")
+ .innerHTML,
+ ).to.equal("test message");
});
it("should properly insert the error when provided with an object containing the error", function () {
@@ -298,9 +303,10 @@ describe("Dropzone", function () {
error: "test message",
});
- return file.previewElement
- .querySelector("[data-dz-errormessage]")
- .innerHTML.should.eql("test message");
+ return expect(
+ file.previewElement.querySelector("[data-dz-errormessage]")
+ .innerHTML,
+ ).to.equal("test message");
});
});
@@ -310,30 +316,34 @@ describe("Dropzone", function () {
"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==";
dropzone.options.thumbnail.call(dropzone, file, transparentGif);
let thumbnail = file.previewElement.querySelector(
- "[data-dz-thumbnail]"
+ "[data-dz-thumbnail]",
);
- thumbnail.src.should.eql(transparentGif);
- return thumbnail.alt.should.eql("test name");
+ expect(thumbnail.src).to.deep.equal(transparentGif);
+ return expect(thumbnail.alt).to.equal("test name");
}));
describe(".uploadprogress()", () =>
it("should properly set the width", function () {
dropzone.options.uploadprogress.call(dropzone, file, 0);
- file.previewElement
- .querySelector("[data-dz-uploadprogress]")
- .style.width.should.eql("0%");
+ expect(
+ file.previewElement.querySelector("[data-dz-uploadprogress]").style
+ .width,
+ ).to.equal("0%");
dropzone.options.uploadprogress.call(dropzone, file, 80);
- file.previewElement
- .querySelector("[data-dz-uploadprogress]")
- .style.width.should.eql("80%");
+ expect(
+ file.previewElement.querySelector("[data-dz-uploadprogress]").style
+ .width,
+ ).to.equal("80%");
dropzone.options.uploadprogress.call(dropzone, file, 90);
- file.previewElement
- .querySelector("[data-dz-uploadprogress]")
- .style.width.should.eql("90%");
+ expect(
+ file.previewElement.querySelector("[data-dz-uploadprogress]").style
+ .width,
+ ).to.equal("90%");
dropzone.options.uploadprogress.call(dropzone, file, 100);
- return file.previewElement
- .querySelector("[data-dz-uploadprogress]")
- .style.width.should.eql("100%");
+ return expect(
+ file.previewElement.querySelector("[data-dz-uploadprogress]").style
+ .width,
+ ).to.equal("100%");
}));
return describe(".resize()", function () {
@@ -344,19 +354,19 @@ describe("Dropzone", function () {
file,
120,
120,
- "crop"
+ "crop",
);
- info.trgWidth.should.eql(120);
- info.trgHeight.should.eql(100);
+ expect(info.trgWidth).to.equal(120);
+ expect(info.trgHeight).to.equal(100);
info = dropzone.options.resize.call(
dropzone,
file,
100,
100,
- "crop"
+ "crop",
);
- info.trgWidth.should.eql(100);
- return info.trgHeight.should.eql(100);
+ expect(info.trgWidth).to.equal(100);
+ return expect(info.trgHeight).to.equal(100);
});
it("should properly return target dimensions for 'contain'", function () {
@@ -365,19 +375,19 @@ describe("Dropzone", function () {
file,
120,
120,
- "contain"
+ "contain",
);
- info.trgWidth.should.eql(120);
- info.trgHeight.should.eql(60);
+ expect(info.trgWidth).to.equal(120);
+ expect(info.trgHeight).to.equal(60);
info = dropzone.options.resize.call(
dropzone,
file,
100,
100,
- "contain"
+ "contain",
);
- info.trgWidth.should.eql(100);
- return info.trgHeight.should.eql(50);
+ expect(info.trgWidth).to.equal(100);
+ return expect(info.trgHeight).to.equal(50);
});
});
@@ -389,37 +399,31 @@ describe("Dropzone", function () {
[150, null],
];
- return (() => {
- let result = [];
- for (let i = 0; i < testSettings.length; i++) {
- let setting = testSettings[i];
- let info = dropzone.options.resize.call(
- dropzone,
- file,
- setting[0],
- setting[1],
- "crop"
- );
-
- if (i === 0) {
- info.trgWidth.should.eql(200);
- info.trgHeight.should.eql(100);
- }
-
- if (i === 1) {
- info.trgWidth.should.eql(160);
- info.trgHeight.should.eql(80);
- }
-
- if (i === 2) {
- info.trgWidth.should.eql(150);
- result.push(info.trgHeight.should.eql(75));
- } else {
- result.push(undefined);
- }
+ for (let i = 0; i < testSettings.length; i++) {
+ let setting = testSettings[i];
+ let info = dropzone.options.resize.call(
+ dropzone,
+ file,
+ setting[0],
+ setting[1],
+ "crop",
+ );
+
+ if (i === 0) {
+ expect(info.trgWidth).to.equal(200);
+ expect(info.trgHeight).to.equal(100);
+ }
+
+ if (i === 1) {
+ expect(info.trgWidth).to.equal(160);
+ expect(info.trgHeight).to.equal(80);
}
- return result;
- })();
+
+ if (i === 2) {
+ expect(info.trgWidth).to.equal(150);
+ expect(info.trgHeight).to.equal(75);
+ }
+ }
});
it("should properly return target dimensions for contain", function () {
@@ -428,32 +432,26 @@ describe("Dropzone", function () {
[150, null],
];
- return (() => {
- let result = [];
- for (let i = 0; i < testSettings.length; i++) {
- let setting = testSettings[i];
- let info = dropzone.options.resize.call(
- dropzone,
- file,
- setting[0],
- setting[1],
- "contain"
- );
-
- if (i === 0) {
- info.trgWidth.should.eql(160);
- info.trgHeight.should.eql(80);
- }
-
- if (i === 1) {
- info.trgWidth.should.eql(150);
- result.push(info.trgHeight.should.eql(75));
- } else {
- result.push(undefined);
- }
+ for (let i = 0; i < testSettings.length; i++) {
+ let setting = testSettings[i];
+ let info = dropzone.options.resize.call(
+ dropzone,
+ file,
+ setting[0],
+ setting[1],
+ "contain",
+ );
+
+ if (i === 0) {
+ expect(info.trgWidth).to.equal(160);
+ expect(info.trgHeight).to.equal(80);
}
- return result;
- })();
+
+ if (i === 1) {
+ expect(info.trgWidth).to.equal(150);
+ expect(info.trgHeight).to.equal(75);
+ }
+ }
});
});
});
@@ -463,11 +461,7 @@ describe("Dropzone", function () {
describe("instance", function () {
let element = null;
let dropzone = null;
- let requests = null;
beforeEach(function () {
- requests = [];
- xhr.onCreate = (xhr) => requests.push(xhr);
-
element = Dropzone.createElement("");
document.body.appendChild(element);
return (dropzone = new Dropzone(element, {
@@ -481,43 +475,42 @@ describe("Dropzone", function () {
afterEach(function () {
document.body.removeChild(element);
dropzone.destroy();
- return xhr.restore();
});
describe(".accept()", function () {
it("should pass if the filesize is OK", () =>
dropzone.accept(
{ size: 2 * 1024 * 1024, type: "audio/mp3" },
- (err) => expect(err).to.be.undefined
+ (err) => expect(err).to.be.undefined,
));
it("shouldn't pass if the filesize is too big", () =>
dropzone.accept({ size: 10 * 1024 * 1024, type: "audio/mp3" }, (err) =>
- err.should.eql("File is too big (10MiB). Max filesize: 4MiB.")
+ expect(err).to.equal("File is too big (10MiB). Max filesize: 4MiB."),
));
it("should properly accept files which mime types are listed in acceptedFiles", function () {
dropzone.accept(
{ type: "audio/mp3" },
- (err) => expect(err).to.be.undefined
+ (err) => expect(err).to.be.undefined,
);
dropzone.accept(
{ type: "image/png" },
- (err) => expect(err).to.be.undefined
+ (err) => expect(err).to.be.undefined,
);
return dropzone.accept(
{ type: "audio/wav" },
- (err) => expect(err).to.be.undefined
+ (err) => expect(err).to.be.undefined,
);
});
it("should properly reject files when the mime type isn't listed in acceptedFiles", () =>
dropzone.accept({ type: "image/jpeg" }, (err) =>
- err.should.eql("You can't upload files of this type.")
+ expect(err).to.equal("You can't upload files of this type."),
));
it("should fail if maxFiles has been exceeded and call the event maxfilesexceeded", function () {
- sinon.stub(dropzone, "getAcceptedFiles");
+ Cypress.sinon.stub(dropzone, "getAcceptedFiles");
let file = { type: "audio/mp3" };
dropzone.getAcceptedFiles.returns({ length: 99 });
@@ -527,18 +520,18 @@ describe("Dropzone", function () {
let called = false;
dropzone.on("maxfilesexceeded", function (lfile) {
- lfile.should.equal(file);
+ expect(lfile).to.equal(file);
return (called = true);
});
dropzone.accept(file, (err) => expect(err).to.be.undefined);
- called.should.not.be.ok;
+ expect(called).to.not.be.ok;
dropzone.getAcceptedFiles.returns({ length: 100 });
dropzone.accept(file, (err) =>
- expect(err).to.equal("You can only upload 100 files.")
+ expect(err).to.equal("You can only upload 100 files."),
);
- called.should.be.ok;
+ expect(called).to.be.ok;
return dropzone.getAcceptedFiles.restore();
});
@@ -550,54 +543,69 @@ describe("Dropzone", function () {
let called = false;
dropzone.on("maxfilesexceeded", function (lfile) {
- lfile.should.equal(file);
+ expect(lfile).to.equal(file);
return (called = true);
});
dropzone.accept(file, (err) =>
- expect(err).to.equal("You cannot upload any more files.")
+ expect(err).to.equal("You cannot upload any more files."),
);
- return called.should.be.ok;
+ return expect(called).to.be.ok;
});
});
describe(".removeFile()", () =>
- it("should abort uploading if file is currently being uploaded", function (done) {
- let mockFile = getMockFile();
- dropzone.uploadFile = function (file) {};
+ it("should abort uploading if file is currently being uploaded", function () {
+ cy.clock();
+
+ const mockFile = getMockFile();
+
+ // Important: Dropzone uses uploadFiles(), not uploadFile()
+ Cypress.sinon.stub(dropzone, "uploadFiles").callsFake(() => {
+ // do nothing: keep it "uploading" forever
+ });
+
dropzone.accept = (file, done) => done();
- sinon.stub(dropzone, "cancelUpload");
+ Cypress.sinon.stub(dropzone, "cancelUpload");
dropzone.addFile(mockFile);
- return setTimeout(function () {
- mockFile.status.should.equal(Dropzone.UPLOADING);
- dropzone.getUploadingFiles()[0].should.equal(mockFile);
- dropzone.cancelUpload.callCount.should.equal(0);
+ // Force processing so status becomes UPLOADING
+ dropzone.processFile(mockFile);
+
+ cy.tick(0).then(() => {
+ expect(mockFile.status).to.equal(Dropzone.UPLOADING);
+ expect(dropzone.getUploadingFiles()[0]).to.equal(mockFile);
+
+ expect(dropzone.cancelUpload.callCount).to.equal(0);
dropzone.removeFile(mockFile);
- dropzone.cancelUpload.callCount.should.equal(1);
- return done();
- }, 100);
+ expect(dropzone.cancelUpload.callCount).to.equal(1);
+ });
}));
- describe(".cancelUpload()", function () {
- it("should properly cancel upload if file currently uploading", function (done) {
- let mockFile = getMockFile();
+ describe(".cancelUpload()", () => {
+ it("should properly cancel upload if file currently uploading", function () {
+ const mockFile = getMockFile();
dropzone.accept = (file, done) => done();
+ // Keep the upload from completing so status stays UPLOADING
+ Cypress.sinon.stub(dropzone, "uploadFiles").callsFake(() => {});
+
dropzone.addFile(mockFile);
- return setTimeout(function () {
- mockFile.status.should.equal(Dropzone.UPLOADING);
- dropzone.getUploadingFiles()[0].should.equal(mockFile);
- dropzone.cancelUpload(mockFile);
- mockFile.status.should.equal(Dropzone.CANCELED);
- dropzone.getUploadingFiles().length.should.equal(0);
- dropzone.getQueuedFiles().length.should.equal(0);
- return done();
- }, 10);
+ // Force it into UPLOADING deterministically
+ dropzone.processFile(mockFile);
+
+ expect(mockFile.status).to.equal(Dropzone.UPLOADING);
+ expect(dropzone.getUploadingFiles()[0]).to.equal(mockFile);
+
+ dropzone.cancelUpload(mockFile);
+
+ expect(mockFile.status).to.equal(Dropzone.CANCELED);
+ expect(dropzone.getUploadingFiles().length).to.equal(0);
+ expect(dropzone.getQueuedFiles().length).to.equal(0);
});
it("should properly cancel the upload if file is not yet uploading", function () {
@@ -609,13 +617,13 @@ describe("Dropzone", function () {
dropzone.options.parallelUploads = 0;
dropzone.addFile(mockFile);
- mockFile.status.should.equal(Dropzone.QUEUED);
- dropzone.getQueuedFiles()[0].should.equal(mockFile);
+ expect(mockFile.status).to.equal(Dropzone.QUEUED);
+ expect(dropzone.getQueuedFiles()[0]).to.equal(mockFile);
dropzone.cancelUpload(mockFile);
- mockFile.status.should.equal(Dropzone.CANCELED);
- dropzone.getQueuedFiles().length.should.equal(0);
- return dropzone.getUploadingFiles().length.should.equal(0);
+ expect(mockFile.status).to.equal(Dropzone.CANCELED);
+ expect(dropzone.getQueuedFiles().length).to.equal(0);
+ return expect(dropzone.getUploadingFiles().length).to.equal(0);
});
it("should call processQueue()", function (done) {
@@ -626,166 +634,182 @@ describe("Dropzone", function () {
// Making sure the file stays in the queue.
dropzone.options.parallelUploads = 0;
- sinon.spy(dropzone, "processQueue");
+ Cypress.sinon.spy(dropzone, "processQueue");
dropzone.addFile(mockFile);
return setTimeout(function () {
- dropzone.processQueue.callCount.should.equal(1);
+ expect(dropzone.processQueue.callCount).to.equal(1);
dropzone.cancelUpload(mockFile);
- dropzone.processQueue.callCount.should.equal(2);
+ expect(dropzone.processQueue.callCount).to.equal(2);
return done();
}, 10);
});
- it("should properly cancel all files with the same XHR if uploadMultiple is true", function (done) {
- let mock1 = getMockFile();
- let mock2 = getMockFile();
- let mock3 = getMockFile();
+ it("should properly cancel all files with the same XHR if uploadMultiple is true", function () {
+ const mock1 = getMockFile();
+ const mock2 = getMockFile();
+ const mock3 = getMockFile();
dropzone.accept = (file, done) => done();
- // Making sure the file stays in the queue.
dropzone.options.uploadMultiple = true;
dropzone.options.parallelUploads = 3;
- sinon.spy(dropzone, "processFiles");
+ // Keep the shared XHR from completing (prevents SUCCESS race)
+ const sendStub = Cypress.sinon
+ .stub(window.XMLHttpRequest.prototype, "send")
+ .callsFake(() => {});
- dropzone.addFile(mock1);
- dropzone.addFile(mock2);
- dropzone.addFile(mock3);
+ // Observe that processing happened once
+ Cypress.sinon.spy(dropzone, "processFiles");
- return setTimeout(function () {
- dropzone.processFiles.callCount.should.equal(1);
+ try {
+ dropzone.addFile(mock1);
+ dropzone.addFile(mock2);
+ dropzone.addFile(mock3);
- sinon.spy(mock1.xhr, "abort");
+ // Start the batch upload deterministically
+ dropzone.processQueue();
- dropzone.cancelUpload(mock1);
+ expect(dropzone.processFiles.callCount).to.equal(1);
+ // All files should share the same XHR in uploadMultiple mode
+ expect(mock1.xhr).to.exist;
expect(mock1.xhr === mock2.xhr && mock2.xhr === mock3.xhr).to.be.ok;
- mock1.status.should.equal(Dropzone.CANCELED);
- mock2.status.should.equal(Dropzone.CANCELED);
- mock3.status.should.equal(Dropzone.CANCELED);
+ Cypress.sinon.spy(mock1.xhr, "abort");
+
+ dropzone.cancelUpload(mock1);
- // The XHR should only be aborted once!
- mock1.xhr.abort.callCount.should.equal(1);
+ expect(mock1.status).to.equal(Dropzone.CANCELED);
+ expect(mock2.status).to.equal(Dropzone.CANCELED);
+ expect(mock3.status).to.equal(Dropzone.CANCELED);
- return done();
- }, 10);
+ // The shared XHR should only be aborted once
+ expect(mock1.xhr.abort.callCount).to.equal(1);
+ } finally {
+ sendStub.restore();
+ }
});
});
describe(".disable()", () =>
- it("should properly cancel all pending uploads", function (done) {
+ it("should properly cancel all pending uploads", function () {
dropzone.accept = (file, done) => done();
-
dropzone.options.parallelUploads = 1;
+ Cypress.sinon.spy(dropzone, "cancelUpload");
+
dropzone.addFile(getMockFile());
dropzone.addFile(getMockFile());
return setTimeout(function () {
- dropzone.getUploadingFiles().length.should.equal(1);
- dropzone.getQueuedFiles().length.should.equal(1);
- dropzone.files.length.should.equal(2);
+ expect(dropzone.getUploadingFiles().length).to.equal(1);
+ expect(dropzone.getQueuedFiles().length).to.equal(1);
+ expect(dropzone.files.length).to.equal(2);
- sinon.spy(requests[0], "abort");
-
- requests[0].abort.callCount.should.equal(0);
+ expect(dropzone.cancelUpload.callCount).to.equal(0);
dropzone.disable();
- requests[0].abort.callCount.should.equal(1);
+ // should cancel at least the uploading file (and may cancel queued too depending on impl)
+ expect(dropzone.cancelUpload.callCount).to.be.greaterThan(0);
- dropzone.getUploadingFiles().length.should.equal(0);
- dropzone.getQueuedFiles().length.should.equal(0);
- dropzone.files.length.should.equal(2);
+ expect(dropzone.getUploadingFiles().length).to.equal(0);
+ expect(dropzone.getQueuedFiles().length).to.equal(0);
+ expect(dropzone.files.length).to.equal(2);
- dropzone.files[0].status.should.equal(Dropzone.CANCELED);
- dropzone.files[1].status.should.equal(Dropzone.CANCELED);
- return done();
+ expect(dropzone.files[0].status).to.equal(Dropzone.CANCELED);
+ expect(dropzone.files[1].status).to.equal(Dropzone.CANCELED);
}, 10);
}));
describe(".destroy()", function () {
- it("should properly cancel all pending uploads and remove all file references", function (done) {
+ it("should properly cancel all pending uploads and remove all file references", function () {
dropzone.accept = (file, done) => done();
-
dropzone.options.parallelUploads = 1;
dropzone.addFile(getMockFile());
dropzone.addFile(getMockFile());
- return setTimeout(function () {
- dropzone.getUploadingFiles().length.should.equal(1);
- dropzone.getQueuedFiles().length.should.equal(1);
- dropzone.files.length.should.equal(2);
+ // Force queue processing so states are set before assertions
+ dropzone.processQueue();
- sinon.spy(dropzone, "disable");
+ expect(dropzone.getUploadingFiles().length).to.equal(1);
+ expect(dropzone.getQueuedFiles().length).to.equal(1);
+ expect(dropzone.files.length).to.equal(2);
- dropzone.destroy();
+ Cypress.sinon.spy(dropzone, "disable");
- dropzone.disable.callCount.should.equal(1);
- element.should.not.have.property("dropzone");
- return done();
- }, 10);
+ dropzone.destroy();
+
+ expect(dropzone.disable.callCount).to.equal(1);
+ expect(element).to.not.have.property("dropzone");
});
it("should be able to create instance of dropzone on the same element after destroy", function () {
dropzone.destroy();
- return (() =>
- new Dropzone(element, {
- maxFilesize: 4,
- url: "url",
- acceptedFiles: "audio/*,image/png",
- uploadprogress() {},
- })).should.not.throw(Error);
+ return expect(
+ () =>
+ new Dropzone(element, {
+ maxFilesize: 4,
+ url: "url",
+ acceptedFiles: "audio/*,image/png",
+ uploadprogress() {},
+ }),
+ ).to.not.throw(Error);
});
it("should remove itself from Dropzone.instances", function () {
- (Dropzone.instances.indexOf(dropzone) !== -1).should.be.ok;
+ expect(Dropzone.instances.indexOf(dropzone) !== -1).to.be.ok;
dropzone.destroy();
- return (Dropzone.instances.indexOf(dropzone) === -1).should.be.ok;
+ return expect(Dropzone.instances.indexOf(dropzone) === -1).to.be.ok;
});
});
describe(".filesize()", function () {
it("should handle files with 0 size properly", () =>
- dropzone.filesize(0).should.eql("0 b"));
+ expect(dropzone.filesize(0)).to.equal("0 b"));
it("should convert to KiloBytes, etc..", function () {
- dropzone.options.filesizeBase.should.eql(1000); // Just making sure the default config is correct
-
- dropzone.filesize(2 * 1000 * 1000).should.eql("2 MB");
- dropzone
- .filesize(2 * 1024 * 1024)
- .should.eql("2.1 MB");
-
- dropzone
- .filesize(2 * 1000 * 1000 * 1000)
- .should.eql("2 GB");
- dropzone
- .filesize(2 * 1024 * 1024 * 1024)
- .should.eql("2.1 GB");
-
- dropzone
- .filesize(2.5111 * 1000 * 1000 * 1000)
- .should.eql("2.5 GB");
- dropzone.filesize(1.1 * 1000).should.eql("1.1 KB");
- return dropzone
- .filesize(999 * 1000)
- .should.eql("1 MB");
+ expect(dropzone.options.filesizeBase).to.equal(1000); // Just making sure the default config is correct
+
+ expect(dropzone.filesize(2 * 1000 * 1000)).to.equal(
+ "2 MB",
+ );
+ expect(dropzone.filesize(2 * 1024 * 1024)).to.equal(
+ "2.1 MB",
+ );
+
+ expect(dropzone.filesize(2 * 1000 * 1000 * 1000)).to.equal(
+ "2 GB",
+ );
+ expect(dropzone.filesize(2 * 1024 * 1024 * 1024)).to.equal(
+ "2.1 GB",
+ );
+
+ expect(dropzone.filesize(2.5111 * 1000 * 1000 * 1000)).to.equal(
+ "2.5 GB",
+ );
+ expect(dropzone.filesize(1.1 * 1000)).to.equal(
+ "1.1 KB",
+ );
+ return expect(dropzone.filesize(999 * 1000)).to.equal(
+ "1 MB",
+ );
});
it("should convert to KibiBytes, etc.. when the filesizeBase is changed to 1024", function () {
dropzone.options.filesizeBase = 1024;
- dropzone.filesize(2 * 1024 * 1024).should.eql("2 MB");
- return dropzone
- .filesize(2 * 1000 * 1000)
- .should.eql("1.9 MB");
+ expect(dropzone.filesize(2 * 1024 * 1024)).to.equal(
+ "2 MB",
+ );
+ return expect(dropzone.filesize(2 * 1000 * 1000)).to.equal(
+ "1.9 MB",
+ );
});
});
@@ -793,39 +817,41 @@ describe("Dropzone", function () {
it("should properly add the dz-max-files-reached class", function () {
dropzone.getAcceptedFiles = () => ({ length: 10 });
dropzone.options.maxFiles = 10;
- dropzone.element.classList.contains("dz-max-files-reached").should.not
- .be.ok;
+ expect(dropzone.element.classList.contains("dz-max-files-reached")).to
+ .not.be.ok;
dropzone._updateMaxFilesReachedClass();
- return dropzone.element.classList.contains("dz-max-files-reached")
- .should.be.ok;
+ return expect(
+ dropzone.element.classList.contains("dz-max-files-reached"),
+ ).to.be.ok;
});
it("should fire the 'maxfilesreached' event when appropriate", function () {
- let spy = sinon.spy();
+ let spy = Cypress.sinon.spy();
dropzone.on("maxfilesreached", () => spy());
dropzone.getAcceptedFiles = () => ({ length: 9 });
dropzone.options.maxFiles = 10;
dropzone._updateMaxFilesReachedClass();
- spy.notCalled.should.be.true;
+ expect(spy.notCalled).to.be.true;
dropzone.getAcceptedFiles = () => ({ length: 10 });
dropzone._updateMaxFilesReachedClass();
- spy.called.should.be.true;
+ expect(spy.called).to.be.true;
dropzone.getAcceptedFiles = () => ({ length: 11 });
dropzone._updateMaxFilesReachedClass();
- spy.calledOnce.should.be.true;
+ expect(spy.calledOnce).to.be.true;
}); //ie, it has not been called again
it("should properly remove the dz-max-files-reached class", function () {
dropzone.getAcceptedFiles = () => ({ length: 10 });
dropzone.options.maxFiles = 10;
- dropzone.element.classList.contains("dz-max-files-reached").should.not
- .be.ok;
+ expect(dropzone.element.classList.contains("dz-max-files-reached")).to
+ .not.be.ok;
dropzone._updateMaxFilesReachedClass();
- dropzone.element.classList.contains("dz-max-files-reached").should.be
- .ok;
+ expect(dropzone.element.classList.contains("dz-max-files-reached")).to
+ .be.ok;
dropzone.getAcceptedFiles = () => ({ length: 9 });
dropzone._updateMaxFilesReachedClass();
- return dropzone.element.classList.contains("dz-max-files-reached")
- .should.not.be.ok;
+ return expect(
+ dropzone.element.classList.contains("dz-max-files-reached"),
+ ).to.not.be.ok;
});
});
@@ -858,7 +884,7 @@ describe("Dropzone", function () {
let _called = 0;
dropzone.on("totaluploadprogress", function (progress) {
- progress.should.equal(totalProgressExpectation);
+ expect(progress).to.equal(totalProgressExpectation);
if (++_called === 3) {
return done();
}
@@ -928,27 +954,27 @@ describe("Dropzone", function () {
it("should only return the fallback element if it contains exactly fallback", function () {
element.appendChild(
- Dropzone.createElement('')
+ Dropzone.createElement(''),
);
element.appendChild(
- Dropzone.createElement('')
+ Dropzone.createElement(''),
);
return expect(dropzone.getExistingFallback()).to.equal(undefined);
});
it("should return divs as fallback", function () {
let fallback = Dropzone.createElement(
- ''
+ '',
);
element.appendChild(fallback);
- return fallback.should.equal(dropzone.getExistingFallback());
+ return expect(fallback).to.equal(dropzone.getExistingFallback());
});
it("should return forms as fallback", function () {
let fallback = Dropzone.createElement(
- ''
+ '',
);
element.appendChild(fallback);
- return fallback.should.equal(dropzone.getExistingFallback());
+ return expect(fallback).to.equal(dropzone.getExistingFallback());
});
});
@@ -958,14 +984,14 @@ describe("Dropzone", function () {
dropzone.options.paramName = "myFile";
let fallback = dropzone.getFallbackForm();
let fileInput = fallback.querySelector("input[type=file]");
- return fileInput.name.should.equal("myFile");
+ return expect(fileInput.name).to.equal("myFile");
});
it("should properly add [0] to the file name if uploadMultiple is true", function () {
dropzone.options.uploadMultiple = true;
dropzone.options.paramName = "myFile";
let fallback = dropzone.getFallbackForm();
let fileInput = fallback.querySelector("input[type=file]");
- return fileInput.name.should.equal("myFile[0]");
+ return expect(fileInput.name).to.equal("myFile[0]");
});
});
@@ -991,9 +1017,9 @@ describe("Dropzone", function () {
});
it("getAcceptedFiles() should only return accepted files", () =>
- dropzone.getAcceptedFiles().should.eql([mock1, mock3]));
+ expect(dropzone.getAcceptedFiles()).to.deep.equal([mock1, mock3]));
it("getRejectedFiles() should only return rejected files", () =>
- dropzone.getRejectedFiles().should.eql([mock2, mock4]));
+ expect(dropzone.getRejectedFiles()).to.deep.equal([mock2, mock4]));
});
describe("getQueuedFiles()", () =>
@@ -1010,57 +1036,63 @@ describe("Dropzone", function () {
dropzone.addFile(mock3);
dropzone.addFile(mock4);
- dropzone.getQueuedFiles().should.eql([]);
+ expect(dropzone.getQueuedFiles()).to.deep.equal([]);
mock1.done();
mock3.done();
- dropzone.getQueuedFiles().should.eql([mock1, mock3]);
- mock1.status.should.equal(Dropzone.QUEUED);
- mock3.status.should.equal(Dropzone.QUEUED);
- mock2.status.should.equal(Dropzone.ADDED);
- return mock4.status.should.equal(Dropzone.ADDED);
+ expect(dropzone.getQueuedFiles()).to.deep.equal([mock1, mock3]);
+ expect(mock1.status).to.equal(Dropzone.QUEUED);
+ expect(mock3.status).to.equal(Dropzone.QUEUED);
+ expect(mock2.status).to.equal(Dropzone.ADDED);
+ return expect(mock4.status).to.equal(Dropzone.ADDED);
}));
describe("getUploadingFiles()", () =>
- it("should return all files with the status Dropzone.UPLOADING", function (done) {
- let mock1 = getMockFile();
- let mock2 = getMockFile();
- let mock3 = getMockFile();
- let mock4 = getMockFile();
+ it("should return all files with the status Dropzone.UPLOADING", function () {
+ const mock1 = getMockFile();
+ const mock2 = getMockFile();
+ const mock3 = getMockFile();
+ const mock4 = getMockFile();
dropzone.options.accept = (file, _done) => (file.done = _done);
- dropzone.uploadFile = function () {};
+
+ // Important: Dropzone uses uploadFiles(), keep uploads from completing
+ Cypress.sinon.stub(dropzone, "uploadFiles").callsFake(() => {});
dropzone.addFile(mock1);
dropzone.addFile(mock2);
dropzone.addFile(mock3);
dropzone.addFile(mock4);
- dropzone.getUploadingFiles().should.eql([]);
+ expect(dropzone.getUploadingFiles()).to.deep.equal([]);
+ // Accept two files
mock1.done();
mock3.done();
- return setTimeout(function () {
- dropzone.getUploadingFiles().should.eql([mock1, mock3]);
- mock1.status.should.equal(Dropzone.UPLOADING);
- mock3.status.should.equal(Dropzone.UPLOADING);
- mock2.status.should.equal(Dropzone.ADDED);
- mock4.status.should.equal(Dropzone.ADDED);
- return done();
- }, 10);
+ // Force processing now that files are accepted
+ dropzone.processQueue();
+
+ expect(dropzone.getUploadingFiles()).to.deep.equal([mock1, mock3]);
+ expect(mock1.status).to.equal(Dropzone.UPLOADING);
+ expect(mock3.status).to.equal(Dropzone.UPLOADING);
+ expect(mock2.status).to.equal(Dropzone.ADDED);
+ expect(mock4.status).to.equal(Dropzone.ADDED);
}));
describe("getActiveFiles()", () =>
- it("should return all files with the status Dropzone.UPLOADING or Dropzone.QUEUED", function (done) {
- let mock1 = getMockFile();
- let mock2 = getMockFile();
- let mock3 = getMockFile();
- let mock4 = getMockFile();
+ it("should return all files with the status Dropzone.UPLOADING or Dropzone.QUEUED", function () {
+ const mock1 = getMockFile();
+ const mock2 = getMockFile();
+ const mock3 = getMockFile();
+ const mock4 = getMockFile();
dropzone.options.accept = (file, _done) => (file.done = _done);
- dropzone.uploadFile = function () {};
+
+ // IMPORTANT: stub the method Dropzone actually uses
+ Cypress.sinon.stub(dropzone, "uploadFiles").callsFake(() => {});
+
dropzone.options.parallelUploads = 2;
dropzone.addFile(mock1);
@@ -1068,20 +1100,22 @@ describe("Dropzone", function () {
dropzone.addFile(mock3);
dropzone.addFile(mock4);
- dropzone.getActiveFiles().should.eql([]);
+ expect(dropzone.getActiveFiles()).to.deep.equal([]);
+ // Accept 1,3,4 (leave 2 unaccepted)
mock1.done();
mock3.done();
mock4.done();
- return setTimeout(function () {
- dropzone.getActiveFiles().should.eql([mock1, mock3, mock4]);
- mock1.status.should.equal(Dropzone.UPLOADING);
- mock3.status.should.equal(Dropzone.UPLOADING);
- mock2.status.should.equal(Dropzone.ADDED);
- mock4.status.should.equal(Dropzone.QUEUED);
- return done();
- }, 10);
+ // Force queue processing now that files are accepted
+ dropzone.processQueue();
+
+ expect(dropzone.getActiveFiles()).to.deep.equal([mock1, mock3, mock4]);
+
+ expect(mock1.status).to.equal(Dropzone.UPLOADING);
+ expect(mock3.status).to.equal(Dropzone.UPLOADING);
+ expect(mock2.status).to.equal(Dropzone.ADDED);
+ expect(mock4.status).to.equal(Dropzone.QUEUED);
}));
return describe("getFilesWithStatus()", () =>
@@ -1099,19 +1133,26 @@ describe("Dropzone", function () {
dropzone.addFile(mock3);
dropzone.addFile(mock4);
- dropzone
- .getFilesWithStatus(Dropzone.ADDED)
- .should.eql([mock1, mock2, mock3, mock4]);
+ expect(dropzone.getFilesWithStatus(Dropzone.ADDED)).to.deep.equal([
+ mock1,
+ mock2,
+ mock3,
+ mock4,
+ ]);
mock1.status = Dropzone.UPLOADING;
mock3.status = Dropzone.QUEUED;
mock4.status = Dropzone.QUEUED;
- dropzone.getFilesWithStatus(Dropzone.ADDED).should.eql([mock2]);
- dropzone.getFilesWithStatus(Dropzone.UPLOADING).should.eql([mock1]);
- return dropzone
- .getFilesWithStatus(Dropzone.QUEUED)
- .should.eql([mock3, mock4]);
+ expect(dropzone.getFilesWithStatus(Dropzone.ADDED)).to.deep.equal([
+ mock2,
+ ]);
+ expect(dropzone.getFilesWithStatus(Dropzone.UPLOADING)).to.deep.equal([
+ mock1,
+ ]);
+ return expect(
+ dropzone.getFilesWithStatus(Dropzone.QUEUED),
+ ).to.deep.equal([mock3, mock4]);
}));
});
@@ -1138,16 +1179,16 @@ describe("Dropzone", function () {
dropzone.addFile(mockFile);
- mockFile.status.should.eql(Dropzone.ADDED);
+ expect(mockFile.status).to.equal(Dropzone.ADDED);
doneFunction();
- mockFile.status.should.eql(Dropzone.QUEUED);
+ expect(mockFile.status).to.equal(Dropzone.QUEUED);
mockFile = getMockFile();
dropzone.addFile(mockFile);
- mockFile.status.should.eql(Dropzone.ADDED);
+ expect(mockFile.status).to.equal(Dropzone.ADDED);
doneFunction("error");
- return mockFile.status.should.eql(Dropzone.ERROR);
+ return expect(mockFile.status).to.equal(Dropzone.ERROR);
});
it("should properly set the status of the file if autoProcessQueue is false and not call processQueue", function (done) {
@@ -1158,14 +1199,14 @@ describe("Dropzone", function () {
dropzone.uploadFile = function () {};
dropzone.addFile(mockFile);
- sinon.stub(dropzone, "processQueue");
+ Cypress.sinon.stub(dropzone, "processQueue");
- mockFile.status.should.eql(Dropzone.ADDED);
+ expect(mockFile.status).to.equal(Dropzone.ADDED);
doneFunction();
- mockFile.status.should.eql(Dropzone.QUEUED);
- dropzone.processQueue.callCount.should.equal(0);
+ expect(mockFile.status).to.equal(Dropzone.QUEUED);
+ expect(dropzone.processQueue.callCount).to.equal(0);
return setTimeout(function () {
- dropzone.processQueue.callCount.should.equal(0);
+ expect(dropzone.processQueue.callCount).to.equal(0);
return done();
}, 10);
});
@@ -1179,9 +1220,9 @@ describe("Dropzone", function () {
dropzone.addFile(mockFile);
- mockFile.status.should.eql(Dropzone.ADDED);
+ expect(mockFile.status).to.equal(Dropzone.ADDED);
doneFunction();
- return mockFile.status.should.eql(Dropzone.ADDED);
+ return expect(mockFile.status).to.equal(Dropzone.ADDED);
});
it("should create a remove link if configured to do so", function () {
@@ -1189,12 +1230,14 @@ describe("Dropzone", function () {
dropzone.processFile = function () {};
dropzone.uploadFile = function () {};
- sinon.stub(dropzone, "processQueue");
+ Cypress.sinon.stub(dropzone, "processQueue");
dropzone.addFile(mockFile);
- return dropzone.files[0].previewElement.querySelector(
- "a[data-dz-remove].dz-remove"
- ).should.be.ok;
+ return expect(
+ dropzone.files[0].previewElement.querySelector(
+ "a[data-dz-remove].dz-remove",
+ ),
+ ).to.be.ok;
});
it("should create a remove link with HTML if configured to do so", function () {
@@ -1204,16 +1247,20 @@ describe("Dropzone", function () {
dropzone.processFile = function () {};
dropzone.uploadFile = function () {};
- sinon.stub(dropzone, "processQueue");
+ Cypress.sinon.stub(dropzone, "processQueue");
dropzone.addFile(mockFile);
return (
- dropzone.files[0].previewElement.querySelector(
- "a[data-dz-remove].dz-remove"
- ).should.be.ok &&
- dropzone.files[0].previewElement
- .querySelector("a[data-dz-remove].dz-remove")
- .innerHTML.should.equal(' Remove')
+ expect(
+ dropzone.files[0].previewElement.querySelector(
+ "a[data-dz-remove].dz-remove",
+ ),
+ ).to.be.ok &&
+ expect(
+ dropzone.files[0].previewElement.querySelector(
+ "a[data-dz-remove].dz-remove",
+ ).innerHTML,
+ ).to.equal(' Remove')
);
});
@@ -1234,31 +1281,31 @@ describe("Dropzone", function () {
\
`;
- sinon.stub(dropzone, "processQueue");
+ Cypress.sinon.stub(dropzone, "processQueue");
dropzone.addFile(mockFile);
let file = dropzone.files[0];
let removeLink1 = file.previewElement.querySelector(
- "a[data-dz-remove].link1"
+ "a[data-dz-remove].link1",
);
let removeLink2 = file.previewElement.querySelector(
- "a[data-dz-remove].link2"
+ "a[data-dz-remove].link2",
);
- sinon.stub(dropzone, "removeFile");
+ Cypress.sinon.stub(dropzone, "removeFile");
let event = document.createEvent("HTMLEvents");
event.initEvent("click", true, true);
removeLink1.dispatchEvent(event);
- dropzone.removeFile.callCount.should.eql(1);
+ expect(dropzone.removeFile.callCount).to.equal(1);
event = document.createEvent("HTMLEvents");
event.initEvent("click", true, true);
removeLink2.dispatchEvent(event);
- return dropzone.removeFile.callCount.should.eql(2);
+ return expect(dropzone.removeFile.callCount).to.equal(2);
});
return describe("thumbnails", function () {
@@ -1281,28 +1328,28 @@ describe("Dropzone", function () {
thumbnailHeight,
resizeMethod,
fixOrientation,
- callback
+ callback,
) {
ct_file = file;
ct_callback = callback;
};
- sinon.spy(dropzone, "createThumbnail");
+ Cypress.sinon.spy(dropzone, "createThumbnail");
dropzone.addFile(mock1);
dropzone.addFile(mock2);
dropzone.addFile(mock3);
- dropzone.files.length.should.eql(3);
+ expect(dropzone.files.length).to.equal(3);
return setTimeout(function () {
- dropzone.createThumbnail.callCount.should.eql(1);
- mock1.should.equal(ct_file);
+ expect(dropzone.createThumbnail.callCount).to.equal(1);
+ expect(mock1).to.equal(ct_file);
ct_callback();
- dropzone.createThumbnail.callCount.should.eql(2);
- mock2.should.equal(ct_file);
+ expect(dropzone.createThumbnail.callCount).to.equal(2);
+ expect(mock2).to.equal(ct_file);
ct_callback();
- dropzone.createThumbnail.callCount.should.eql(3);
- mock3.should.equal(ct_file);
+ expect(dropzone.createThumbnail.callCount).to.equal(3);
+ expect(mock3).to.equal(ct_file);
return done();
}, 10);
@@ -1336,11 +1383,11 @@ describe("Dropzone", function () {
function (dataURI, canvas) {
let fileReader = new FileReader();
fileReader.onload = function () {
- fileReader.result.should.equal(dataURI);
+ expect(fileReader.result).to.equal(dataURI);
return done();
};
return fileReader.readAsDataURL(blob);
- }
+ },
);
}));
});
@@ -1348,7 +1395,7 @@ describe("Dropzone", function () {
describe("enqueueFile()", function () {
it("should be wrapped by enqueueFiles()", function () {
- sinon.stub(dropzone, "enqueueFile");
+ Cypress.sinon.stub(dropzone, "enqueueFile");
let mock1 = getMockFile();
let mock2 = getMockFile();
@@ -1356,167 +1403,338 @@ describe("Dropzone", function () {
dropzone.enqueueFiles([mock1, mock2, mock3]);
- dropzone.enqueueFile.callCount.should.equal(3);
- dropzone.enqueueFile.args[0][0].should.equal(mock1);
- dropzone.enqueueFile.args[1][0].should.equal(mock2);
- return dropzone.enqueueFile.args[2][0].should.equal(mock3);
+ expect(dropzone.enqueueFile.callCount).to.equal(3);
+ expect(dropzone.enqueueFile.args[0][0]).to.equal(mock1);
+ expect(dropzone.enqueueFile.args[1][0]).to.equal(mock2);
+ return expect(dropzone.enqueueFile.args[2][0]).to.equal(mock3);
});
it("should fail if the file has already been processed", function () {
mockFile.status = Dropzone.ERROR;
expect(() => dropzone.enqueueFile(mockFile)).to.throw(
- "This file can't be queued because it has already been processed or was rejected."
+ "This file can't be queued because it has already been processed or was rejected.",
);
mockFile.status = Dropzone.COMPLETE;
expect(() => dropzone.enqueueFile(mockFile)).to.throw(
- "This file can't be queued because it has already been processed or was rejected."
+ "This file can't be queued because it has already been processed or was rejected.",
);
mockFile.status = Dropzone.UPLOADING;
return expect(() => dropzone.enqueueFile(mockFile)).to.throw(
- "This file can't be queued because it has already been processed or was rejected."
+ "This file can't be queued because it has already been processed or was rejected.",
);
});
it("should set the status to QUEUED and call processQueue asynchronously if everything's ok", function (done) {
mockFile.status = Dropzone.ADDED;
- sinon.stub(dropzone, "processQueue");
- dropzone.processQueue.callCount.should.equal(0);
+ Cypress.sinon.stub(dropzone, "processQueue");
+ expect(dropzone.processQueue.callCount).to.equal(0);
dropzone.enqueueFile(mockFile);
- mockFile.status.should.equal(Dropzone.QUEUED);
- dropzone.processQueue.callCount.should.equal(0);
+ expect(mockFile.status).to.equal(Dropzone.QUEUED);
+ expect(dropzone.processQueue.callCount).to.equal(0);
return setTimeout(function () {
- dropzone.processQueue.callCount.should.equal(1);
+ expect(dropzone.processQueue.callCount).to.equal(1);
return done();
}, 10);
});
});
describe("uploadFiles()", function () {
+ let xhr;
let requests;
-
beforeEach(function () {
requests = [];
+ xhr = Cypress.sinon.useFakeXMLHttpRequest();
return (xhr.onCreate = (xhr) => requests.push(xhr));
});
- afterEach(() => xhr.restore());
+ afterEach(() => {
+ if (xhr && typeof xhr.restore === "function") xhr.restore();
+ });
// Removed this test because multiple filenames can be transmitted now
// it "should properly urlencode the filename for the headers"
it("should be wrapped by uploadFile()", function () {
- sinon.stub(dropzone, "uploadFiles");
+ Cypress.sinon.stub(dropzone, "uploadFiles");
dropzone.uploadFile(mockFile);
- dropzone.uploadFiles.callCount.should.equal(1);
- return dropzone.uploadFiles.calledWith([mockFile]).should.be.ok;
+ expect(dropzone.uploadFiles.callCount).to.equal(1);
+ expect(dropzone.uploadFiles.calledWith([mockFile])).to.be.ok;
});
+ describe("with real XHR (cy.intercept)", function () {
+ beforeEach(function () {
+ // turn fake XHR off so Cypress can observe real requests
+ xhr.restore();
+ });
+ it("should use url options if strings", function () {
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
- it("should use url options if strings", function (done) {
- dropzone.addFile(mockFile);
+ const method = String(
+ dropzone.options.method || "post",
+ ).toUpperCase();
+ const urlPath = String(dropzone.options.url);
- return setTimeout(function () {
- expect(requests.length).to.equal(1);
- expect(requests[0].url).to.equal(dropzone.options.url);
- expect(requests[0].method).to.equal(dropzone.options.method);
- return done();
- }, 10);
- });
+ const OriginalXHR = window.XMLHttpRequest;
- it("should call url options if functions", function (done) {
- let method = "PUT";
- let url = "/custom/upload/url";
+ const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open");
+ const sendStub = Cypress.sinon
+ .stub(OriginalXHR.prototype, "send")
+ .callsFake(() => {});
- dropzone.options.method = sinon.stub().returns(method);
- dropzone.options.url = sinon.stub().returns(url);
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
- dropzone.addFile(mockFile);
+ expect(openSpy.callCount).to.be.greaterThan(0);
- return setTimeout(function () {
- dropzone.options.method.callCount.should.equal(1);
- dropzone.options.url.callCount.should.equal(1);
- sinon.assert.calledWith(dropzone.options.method, [mockFile]);
- sinon.assert.calledWith(dropzone.options.url, [mockFile]);
- expect(requests.length).to.equal(1);
- expect(requests[0].url).to.equal(url);
- expect(requests[0].method).to.equal(method);
- return done();
- }, 10);
- });
+ // XHR.open(method, url, ...)
+ const [calledMethod, calledUrl] = openSpy.args[0];
- it("should use the timeout option", function (done) {
- dropzone.options.timeout = 10000;
- dropzone.addFile(mockFile);
+ expect(String(calledMethod).toUpperCase()).to.equal(method);
+ expect(String(calledUrl)).to.match(
+ new RegExp(`${urlPath.replace(/^\/+/, "")}$`),
+ );
+ } finally {
+ sendStub.restore();
+ openSpy.restore();
+ }
+ });
+ it("should call url options if functions", function () {
+ const method = "PUT";
+ const url = "/custom/upload/url";
- return setTimeout(function () {
- expect(requests[0].timeout).to.equal(10000);
- return done();
- }, 10);
- });
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
- it("should properly handle if timeout is null", function (done) {
- dropzone.options.timeout = null;
- dropzone.addFile(mockFile);
+ dropzone.options.method = Cypress.sinon.stub().callsFake((files) => {
+ expect(files).to.deep.equal([mockFile]);
+ return method;
+ });
- return setTimeout(function () {
- expect(requests[0].timeout).to.equal(0);
- return done();
- }, 10);
- });
+ dropzone.options.url = Cypress.sinon.stub().callsFake((files) => {
+ expect(files).to.deep.equal([mockFile]);
+ return url;
+ });
- it("should ignore the onreadystate callback if readyState != 4", function (done) {
- dropzone.addFile(mockFile);
- return setTimeout(function () {
- mockFile.status.should.eql(Dropzone.UPLOADING);
+ const openSpy = Cypress.sinon.spy(
+ window.XMLHttpRequest.prototype,
+ "open",
+ );
+ const sendStub = Cypress.sinon
+ .stub(window.XMLHttpRequest.prototype, "send")
+ .callsFake(() => {});
- requests[0].status = 200;
- requests[0].readyState = 3;
- requests[0].responseHeaders = { "content-type": "text/plain" };
- requests[0].onload();
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
+
+ // verify option functions were called
+ expect(dropzone.options.method.callCount).to.equal(1);
+ expect(dropzone.options.url.callCount).to.equal(1);
+ Cypress.sinon.assert.calledWith(dropzone.options.method, [
+ mockFile,
+ ]);
+ Cypress.sinon.assert.calledWith(dropzone.options.url, [mockFile]);
+
+ // verify request used returned method/url
+ expect(openSpy.callCount).to.be.greaterThan(0);
+ const [calledMethod, calledUrl] = openSpy.args[0];
+ expect(String(calledMethod).toUpperCase()).to.equal(method);
+ expect(String(calledUrl)).to.match(
+ new RegExp(`${url.replace(/^\/+/, "")}$`),
+ );
+ } finally {
+ sendStub.restore();
+ openSpy.restore();
+ }
+ });
- mockFile.status.should.eql(Dropzone.UPLOADING);
+ it("should use the timeout option", function () {
+ dropzone.accept = (file, done) => done();
+ dropzone.options.timeout = 10000;
- requests[0].readyState = 4;
- requests[0].onload();
+ const OriginalXHR = window.XMLHttpRequest;
+ const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open");
- mockFile.status.should.eql(Dropzone.SUCCESS);
- return done();
- }, 10);
- });
+ const xhrInstances = [];
+ function WrappedXHR() {
+ const xhr = new OriginalXHR();
+ xhrInstances.push(xhr);
+ return xhr;
+ }
+ WrappedXHR.prototype = OriginalXHR.prototype;
- it("should emit error and errormultiple when response was not OK", function (done) {
- dropzone.options.uploadMultiple = true;
+ window.XMLHttpRequest = WrappedXHR;
- let error = false;
- let errormultiple = false;
- let complete = false;
- let completemultiple = false;
- dropzone.on("error", () => (error = true));
- dropzone.on("errormultiple", () => (errormultiple = true));
- dropzone.on("complete", () => (complete = true));
- dropzone.on("completemultiple", () => (completemultiple = true));
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processFile(mockFile);
+
+ expect(openSpy.callCount).to.be.greaterThan(0);
+ expect(xhrInstances.length).to.be.greaterThan(0);
+ expect(xhrInstances[0].timeout).to.equal(10000);
+ } finally {
+ window.XMLHttpRequest = OriginalXHR;
+ openSpy.restore();
+ }
+ });
- dropzone.addFile(mockFile);
+ it("should properly handle if timeout is null", function () {
+ dropzone.accept = (file, done) => done();
+ dropzone.options.timeout = null;
- return setTimeout(function () {
- mockFile.status.should.eql(Dropzone.UPLOADING);
+ // Prevent racing ahead before we start the upload
+ dropzone.options.autoProcessQueue = false;
- requests[0].status = 400;
- requests[0].readyState = 4;
- requests[0].responseHeaders = { "content-type": "text/plain" };
- requests[0].onload();
+ const OriginalXHR = window.XMLHttpRequest;
+ const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open");
- expect(
- true === error &&
- error === errormultiple &&
- errormultiple === complete &&
- complete === completemultiple
- ).to.be.ok;
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
- return done();
- }, 10);
+ expect(openSpy.callCount).to.be.greaterThan(0);
+
+ const xhr0 = openSpy.thisValues[0];
+ expect(xhr0).to.exist;
+ expect(xhr0.timeout).to.equal(0);
+ } finally {
+ openSpy.restore();
+ }
+ });
+
+ it("should ignore the onreadystate callback if readyState != 4", function () {
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
+
+ const OriginalXHR = window.XMLHttpRequest;
+
+ let xhr;
+ function WrappedXHR() {
+ xhr = new OriginalXHR();
+ return xhr;
+ }
+ WrappedXHR.prototype = OriginalXHR.prototype;
+
+ window.XMLHttpRequest = WrappedXHR;
+
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
+
+ expect(mockFile.status).to.equal(Dropzone.UPLOADING);
+
+ // Prepare response-ish fields Dropzone might read (read-only on real XHR => define getters)
+ Object.defineProperty(xhr, "status", {
+ configurable: true,
+ get() {
+ return 200;
+ },
+ });
+
+ Object.defineProperty(xhr, "responseText", {
+ configurable: true,
+ get() {
+ return "ok";
+ },
+ });
+
+ xhr.getResponseHeader = () => "text/plain";
+
+ const trigger = () => {
+ if (typeof xhr.onreadystatechange === "function")
+ xhr.onreadystatechange();
+ else if (typeof xhr.onload === "function") xhr.onload();
+ if (typeof xhr.onloadend === "function") xhr.onloadend();
+ };
+
+ // Force readyState = 3 (non-final) and trigger callback
+ Object.defineProperty(xhr, "readyState", {
+ value: 3,
+ configurable: true,
+ });
+ trigger();
+
+ expect(mockFile.status).to.equal(Dropzone.UPLOADING);
+
+ // Force readyState = 4 (final) and trigger callback
+ Object.defineProperty(xhr, "readyState", {
+ value: 4,
+ configurable: true,
+ });
+ trigger();
+
+ expect(mockFile.status).to.equal(Dropzone.SUCCESS);
+ } finally {
+ window.XMLHttpRequest = OriginalXHR;
+ }
+ });
+ it("should emit error and errormultiple when response was not OK", function () {
+ dropzone.options.uploadMultiple = true;
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
+
+ let error = false;
+ let errormultiple = false;
+ let complete = false;
+ let completemultiple = false;
+
+ dropzone.on("error", () => (error = true));
+ dropzone.on("errormultiple", () => (errormultiple = true));
+ dropzone.on("complete", () => (complete = true));
+ dropzone.on("completemultiple", () => (completemultiple = true));
+
+ const sendStub = Cypress.sinon
+ .stub(window.XMLHttpRequest.prototype, "send")
+ .callsFake(function () {
+ Object.defineProperty(this, "status", {
+ configurable: true,
+ get() {
+ return 400;
+ },
+ });
+
+ Object.defineProperty(this, "readyState", {
+ configurable: true,
+ get() {
+ return 4;
+ },
+ });
+
+ Object.defineProperty(this, "responseText", {
+ configurable: true,
+ get() {
+ return "nope";
+ },
+ });
+
+ this.getResponseHeader = () => "text/plain";
+
+ if (typeof this.onreadystatechange === "function")
+ this.onreadystatechange();
+ if (typeof this.onload === "function") this.onload();
+ if (typeof this.onloadend === "function") this.onloadend();
+ });
+
+ try {
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
+
+ expect(mockFile.status).to.equal(Dropzone.ERROR);
+
+ expect(
+ true === error &&
+ error === errormultiple &&
+ errormultiple === complete &&
+ complete === completemultiple,
+ ).to.be.ok;
+ } finally {
+ sendStub.restore();
+ }
+ });
});
it("should include hidden files in the form and unchecked checkboxes and radiobuttons should be excluded", function (done) {
@@ -1533,7 +1751,7 @@ describe("Dropzone", function () {
let formData = null;
dropzone.on("sending", function (file, xhr, tformData) {
formData = tformData;
- return sinon.spy(tformData, "append");
+ return Cypress.sinon.spy(tformData, "append");
});
let mock1 = getMockFile();
@@ -1541,24 +1759,24 @@ describe("Dropzone", function () {
dropzone.addFile(mock1);
return setTimeout(function () {
- formData.append.callCount.should.equal(5);
+ expect(formData.append.callCount).to.equal(5);
- formData.append.args[0][0].should.eql("test");
- formData.append.args[0][1].should.eql("hidden");
+ expect(formData.append.args[0][0]).to.equal("test");
+ expect(formData.append.args[0][1]).to.equal("hidden");
- formData.append.args[1][0].should.eql("checked");
- formData.append.args[1][1].should.eql("value1");
+ expect(formData.append.args[1][0]).to.equal("checked");
+ expect(formData.append.args[1][1]).to.equal("value1");
- formData.append.args[2][0].should.eql("radio1");
- formData.append.args[2][1].should.eql("radiovalue2");
+ expect(formData.append.args[2][0]).to.equal("radio1");
+ expect(formData.append.args[2][1]).to.equal("radiovalue2");
- formData.append.args[3][0].should.eql("select");
- formData.append.args[3][1].should.eql("2");
+ expect(formData.append.args[3][0]).to.equal("select");
+ expect(formData.append.args[3][1]).to.equal("2");
- formData.append.args[4][0].should.eql("file");
- formData.append.args[4][1].should.equal(mock1);
+ expect(formData.append.args[4][0]).to.equal("file");
+ expect(formData.append.args[4][1]).to.equal(mock1);
- // formData.append.args[1][0].should.eql "myName[]"
+ // formData.append.args[1][0]).to.eql "myName[]"
return done();
}, 10);
});
@@ -1577,7 +1795,7 @@ describe("Dropzone", function () {
let formData = null;
dropzone.on("sending", function (file, xhr, tformData) {
formData = tformData;
- return sinon.spy(tformData, "append");
+ return Cypress.sinon.spy(tformData, "append");
});
let mock1 = getMockFile();
@@ -1585,45 +1803,99 @@ describe("Dropzone", function () {
dropzone.addFile(mock1);
return setTimeout(function () {
- formData.append.callCount.should.equal(3);
+ expect(formData.append.callCount).to.equal(3);
- formData.append.args[0][0].should.eql("select");
- formData.append.args[0][1].should.eql("value2");
+ expect(formData.append.args[0][0]).to.equal("select");
+ expect(formData.append.args[0][1]).to.equal("value2");
- formData.append.args[1][0].should.eql("select");
- formData.append.args[1][1].should.eql("value4");
+ expect(formData.append.args[1][0]).to.equal("select");
+ expect(formData.append.args[1][1]).to.equal("value4");
- formData.append.args[2][0].should.eql("file");
- formData.append.args[2][1].should.equal(mock1);
+ expect(formData.append.args[2][0]).to.equal("file");
+ expect(formData.append.args[2][1]).to.equal(mock1);
- // formData.append.args[1][0].should.eql "myName[]"
+ // formData.append.args[1][0]).to.eql "myName[]"
return done();
}, 10);
});
describe("settings()", function () {
it("should correctly set `withCredentials` on the xhr object", function () {
- dropzone.uploadFile(mockFile);
- requests.length.should.eql(1);
- requests[0].withCredentials.should.eql(false);
- dropzone.options.withCredentials = true;
- dropzone.uploadFile(mockFile);
- requests.length.should.eql(2);
- return requests[1].withCredentials.should.eql(true);
+ const OriginalXHR = window.XMLHttpRequest;
+
+ const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open");
+ const sendStub = Cypress.sinon
+ .stub(OriginalXHR.prototype, "send")
+ .callsFake(() => {});
+
+ try {
+ // first upload: default is false
+ dropzone.options.withCredentials = false;
+ dropzone.uploadFile(mockFile);
+
+ expect(openSpy.callCount).to.be.greaterThan(0);
+ const xhr1 = openSpy.thisValues[0];
+ expect(xhr1).to.exist;
+ expect(xhr1.withCredentials).to.equal(false);
+
+ // second upload: set true
+ dropzone.options.withCredentials = true;
+ dropzone.uploadFile(mockFile);
+
+ expect(openSpy.callCount).to.be.greaterThan(1);
+ const xhr2 = openSpy.thisValues[1];
+ expect(xhr2).to.exist;
+ expect(xhr2.withCredentials).to.equal(true);
+ } finally {
+ sendStub.restore();
+ openSpy.restore();
+ }
});
it("should correctly override headers on the xhr object", function () {
dropzone.options.headers = { "Foo-Header": "foobar" };
- dropzone.uploadFile(mockFile);
- return requests[0].requestHeaders["Foo-Header"].should.eql("foobar");
- });
+ const setHeaderSpy = Cypress.sinon.spy(
+ window.XMLHttpRequest.prototype,
+ "setRequestHeader",
+ );
+
+ // Prevent any real network / completion side effects
+ const sendStub = Cypress.sinon
+ .stub(window.XMLHttpRequest.prototype, "send")
+ .callsFake(() => {});
+
+ try {
+ dropzone.uploadFile(mockFile);
+
+ expect(setHeaderSpy.calledWith("Foo-Header", "foobar")).to.be.ok;
+ } finally {
+ sendStub.restore();
+ setHeaderSpy.restore();
+ }
+ });
it("should not set headers on the xhr object that are empty", function () {
dropzone.options.headers = { "X-Requested-With": null };
- dropzone.uploadFile(mockFile);
- return Object.keys(requests[0].requestHeaders).should.not.contain(
- "X-Requested-With"
+
+ const setHeaderSpy = Cypress.sinon.spy(
+ window.XMLHttpRequest.prototype,
+ "setRequestHeader",
);
+
+ // Prevent any real network / completion side effects
+ const sendStub = Cypress.sinon
+ .stub(window.XMLHttpRequest.prototype, "send")
+ .callsFake(() => {});
+
+ try {
+ dropzone.uploadFile(mockFile);
+
+ const headerNames = setHeaderSpy.args.map((a) => a[0]);
+ expect(headerNames).to.not.contain("X-Requested-With");
+ } finally {
+ sendStub.restore();
+ setHeaderSpy.restore();
+ }
});
it("should properly use the paramName without [n] as file upload if uploadMultiple is false", function (done) {
@@ -1636,7 +1908,7 @@ describe("Dropzone", function () {
sendingCount++;
formData.push(tformData);
- return sinon.spy(tformData, "append");
+ return Cypress.sinon.spy(tformData, "append");
});
let mock1 = getMockFile();
@@ -1646,52 +1918,60 @@ describe("Dropzone", function () {
dropzone.addFile(mock2);
return setTimeout(function () {
- sendingCount.should.equal(2);
+ expect(sendingCount).to.equal(2);
- formData.length.should.equal(2);
- formData[0].append.callCount.should.equal(1);
- formData[1].append.callCount.should.equal(1);
- formData[0].append.args[0][0].should.eql("myName");
- formData[0].append.args[0][0].should.eql("myName");
+ expect(formData.length).to.equal(2);
+ expect(formData[0].append.callCount).to.equal(1);
+ expect(formData[1].append.callCount).to.equal(1);
+ expect(formData[0].append.args[0][0]).to.equal("myName");
+ expect(formData[0].append.args[0][0]).to.equal("myName");
return done();
}, 10);
});
- it("should properly use the paramName with [n] as file upload if uploadMultiple is true", function (done) {
+ it("should properly use the paramName with [n] as file upload if uploadMultiple is true", function () {
dropzone.options.uploadMultiple = true;
dropzone.options.paramName = "myName";
+ // Ensure the sending events actually fire
+ dropzone.accept = (file, done) => done();
+
let formData = null;
let sendingMultipleCount = 0;
let sendingCount = 0;
- dropzone.on("sending", (file, xhr, tformData) => sendingCount++);
+
+ dropzone.on("sending", () => {
+ sendingCount++;
+ });
+
dropzone.on("sendingmultiple", function (files, xhr, tformData) {
sendingMultipleCount++;
formData = tformData;
- return sinon.spy(tformData, "append");
+ Cypress.sinon.spy(tformData, "append");
});
- let mock1 = getMockFile();
- let mock2 = getMockFile();
+ const mock1 = getMockFile();
+ const mock2 = getMockFile();
+ // Add files so Dropzone knows about them (and will emit per-file events)
dropzone.addFile(mock1);
dropzone.addFile(mock2);
- return setTimeout(function () {
- sendingCount.should.equal(2);
- sendingMultipleCount.should.equal(1);
- dropzone.uploadFiles([mock1, mock2]);
- formData.append.callCount.should.equal(2);
- formData.append.args[0][0].should.eql("myName[0]");
- formData.append.args[1][0].should.eql("myName[1]");
- return done();
- }, 10);
- });
+ // Trigger the multi-upload directly (no timers)
+ dropzone.uploadFiles([mock1, mock2]);
+ expect(sendingCount).to.equal(2);
+ expect(sendingMultipleCount).to.equal(1);
+
+ expect(formData).to.exist;
+ expect(formData.append.callCount).to.equal(2);
+ expect(formData.append.args[0][0]).to.equal("myName[0]");
+ expect(formData.append.args[1][0]).to.equal("myName[1]");
+ });
it("should use resizeImage if dimensions are provided", function (done) {
- sinon.stub(dropzone, "resizeImage");
- sinon.stub(dropzone, "createThumbnail");
+ Cypress.sinon.stub(dropzone, "resizeImage");
+ Cypress.sinon.stub(dropzone, "createThumbnail");
dropzone.options.resizeWidth = 400;
@@ -1700,13 +1980,13 @@ describe("Dropzone", function () {
dropzone.addFile(mock1);
return setTimeout(function () {
- dropzone.resizeImage.callCount.should.eql(1);
+ expect(dropzone.resizeImage.callCount).to.equal(1);
return done();
}, 10);
});
it("should not use resizeImage for SVG if dimensions are provided", function (done) {
- sinon.stub(dropzone, "uploadFiles");
+ Cypress.sinon.stub(dropzone, "uploadFiles");
dropzone.createThumbnail = function (
file,
@@ -1714,7 +1994,7 @@ describe("Dropzone", function () {
height,
resizeMethod,
fixOrientation,
- callback
+ callback,
) {
callback(null, null);
};
@@ -1726,30 +2006,30 @@ describe("Dropzone", function () {
dropzone.addFile(mock1);
setTimeout(function () {
- dropzone.uploadFiles.callCount.should.eql(1);
+ expect(dropzone.uploadFiles.callCount).to.equal(1);
let uploadedFiles = dropzone.uploadFiles.getCall(0).args[0];
- uploadedFiles.should.eql([mock1]);
+ expect(uploadedFiles).to.deep.equal([mock1]);
done();
}, 10);
});
it("should not use resizeImage if dimensions are not provided", function (done) {
- sinon.stub(dropzone, "resizeImage");
- sinon.stub(dropzone, "createThumbnail");
+ Cypress.sinon.stub(dropzone, "resizeImage");
+ Cypress.sinon.stub(dropzone, "createThumbnail");
let mock1 = getMockFile("image/jpeg");
dropzone.addFile(mock1);
return setTimeout(function () {
- dropzone.resizeImage.callCount.should.eql(0);
+ expect(dropzone.resizeImage.callCount).to.equal(0);
return done();
}, 10);
});
it("should not use resizeImage if file is not an image", function (done) {
- sinon.stub(dropzone, "resizeImage");
- sinon.stub(dropzone, "createThumbnail");
+ Cypress.sinon.stub(dropzone, "resizeImage");
+ Cypress.sinon.stub(dropzone, "createThumbnail");
dropzone.options.resizeWidth = 400;
@@ -1758,7 +2038,7 @@ describe("Dropzone", function () {
dropzone.addFile(mock1);
return setTimeout(function () {
- dropzone.resizeImage.callCount.should.eql(0);
+ expect(dropzone.resizeImage.callCount).to.equal(0);
return done();
}, 10);
});
@@ -1770,7 +2050,7 @@ describe("Dropzone", function () {
let renamedFilename = dropzone._renameFile(mockFile);
- renamedFilename.should.equal(mockFilename);
+ expect(renamedFilename).to.equal(mockFilename);
return done();
});
@@ -1782,71 +2062,110 @@ describe("Dropzone", function () {
let renamedFilename = dropzone._renameFile(mockFile);
- renamedFilename.should.equal("t3st_");
+ expect(renamedFilename).to.equal("t3st_");
return done();
});
- return describe("should properly set status of file", () =>
- it("should correctly set `withCredentials` on the xhr object", function (done) {
- dropzone.addFile(mockFile);
+ describe("should properly set status of file", function () {
+ let xhr;
+ let requests;
- setTimeout(function () {
- mockFile.status.should.eql(Dropzone.UPLOADING);
-
- requests.length.should.equal(1);
- requests[0].status = 400;
- requests[0].readyState = 4;
- requests[0].responseHeaders = { "content-type": "text/plain" };
+ beforeEach(function () {
+ requests = [];
+ xhr = Cypress.sinon.useFakeXMLHttpRequest();
- requests[0].onload();
+ return (xhr.onCreate = (xhr) => requests.push(xhr));
+ });
- mockFile.status.should.eql(Dropzone.ERROR);
+ afterEach(() => {
+ if (xhr && typeof xhr.restore === "function") xhr.restore();
+ });
+ it("should correctly set `withCredentials` on the xhr object", function () {
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
+
+ const OriginalXHR = window.XMLHttpRequest;
+
+ const sendStub = Cypress.sinon
+ .stub(OriginalXHR.prototype, "send")
+ .callsFake(function () {
+ // 1st send => 400, 2nd send => 200
+ const statusCode = sendStub.callCount === 1 ? 400 : 200;
+
+ // status is read-only on real XHR: define a getter instead
+ Object.defineProperty(this, "status", {
+ configurable: true,
+ get() {
+ return statusCode;
+ },
+ });
+
+ Object.defineProperty(this, "readyState", {
+ configurable: true,
+ get() {
+ return 4;
+ },
+ });
+
+ // responseText can be read-only too
+ Object.defineProperty(this, "responseText", {
+ configurable: true,
+ get() {
+ return "";
+ },
+ });
+
+ this.getResponseHeader = () => "text/plain";
+
+ if (typeof this.onreadystatechange === "function")
+ this.onreadystatechange();
+ if (typeof this.onload === "function") this.onload();
+ if (typeof this.onloadend === "function") this.onloadend();
+ });
+
+ try {
+ // first file => ERROR
+ dropzone.addFile(mockFile);
+ dropzone.processQueue();
+ expect(mockFile.status).to.equal(Dropzone.ERROR);
+ // second file => SUCCESS
mockFile = getMockFile();
dropzone.addFile(mockFile);
-
- setTimeout(function () {
- mockFile.status.should.eql(Dropzone.UPLOADING);
-
- requests.length.should.equal(2);
- requests[1].status = 200;
- requests[1].readyState = 4;
- requests[1].responseHeaders = { "content-type": "text/plain" };
-
- requests[1].onload();
-
- mockFile.status.should.eql(Dropzone.SUCCESS);
- return done();
- }, 10);
- }, 10);
- }));
+ dropzone.processQueue();
+ expect(mockFile.status).to.equal(Dropzone.SUCCESS);
+ } finally {
+ sendStub.restore();
+ }
+ });
+ });
});
describe("transformFile()", function () {
it("should be invoked and the result should be uploaded if configured", (done) => {
- sinon.stub(dropzone, "_uploadData");
+ Cypress.sinon.stub(dropzone, "_uploadData");
let mock1 = getMockFile("text/html", "original-file");
let mock2 = getMockFile("text/html", "transformed-file");
dropzone.options.transformFile = (file, done) => {
- file.should.eql(mock1);
+ expect(file).to.equal(mock1);
done(mock2);
};
dropzone.addFile(mock1);
setTimeout(function () {
- dropzone._uploadData.callCount.should.equal(1);
+ expect(dropzone._uploadData.callCount).to.equal(1);
let uploadedFiles = dropzone._uploadData.args[0][0];
let uploadedDataBlocks = dropzone._uploadData.args[0][1];
- uploadedFiles[0].should.equal(mock1);
- uploadedDataBlocks[0].data.should.equal(mock2);
+ expect(uploadedFiles[0]).to.equal(mock1);
+ expect(uploadedDataBlocks[0].data).to.equal(mock2);
done();
}, 10);
});
it("should be used as a basis for chunked uploads", (done) => {
- sinon.stub(dropzone, "_uploadData");
+ Cypress.sinon.stub(dropzone, "_uploadData");
dropzone.options.chunking = true;
dropzone.options.chunkSize = 1;
@@ -1858,32 +2177,32 @@ describe("Dropzone", function () {
let mock2 = getMockFile("text/html", "transformed-file", ["2b"]); // only 2 bytes
dropzone.options.transformFile = (file, done) => {
- file.should.eql(mock1);
+ expect(file).to.equal(mock1);
done(mock2);
};
dropzone.addFile(mock1);
setTimeout(async function () {
- dropzone._uploadData.callCount.should.equal(2);
+ expect(dropzone._uploadData.callCount).to.equal(2);
// the same file should be passed on each call.
- dropzone._uploadData.args[0][0][0].should.eql(mock1);
- dropzone._uploadData.args[1][0][0].should.eql(mock1);
+ expect(dropzone._uploadData.args[0][0][0]).to.equal(mock1);
+ expect(dropzone._uploadData.args[1][0][0]).to.equal(mock1);
// Since we only allow chunks of 1 byte, there should be 2 chunks,
// because the transformed file only has 2 bytes.
// If this would equal to 18 bytes, then the wrong file would have
// been chunked.
- mock1.upload.totalChunkCount.should.eql(2);
+ expect(mock1.upload.totalChunkCount).to.equal(2);
let uploadedDataBlocks1 = dropzone._uploadData.args[0][1][0];
let uploadedDataBlocks2 = dropzone._uploadData.args[1][1][0];
let block1Text = await uploadedDataBlocks1.data.text();
let block2Text = await uploadedDataBlocks2.data.text();
- block1Text.should.equal("2");
- block2Text.should.equal("b");
+ expect(block1Text).to.equal("2");
+ expect(block2Text).to.equal("b");
done();
}, 10);
});
@@ -1908,7 +2227,7 @@ describe("Dropzone", function () {
dropzone.on("complete", (file) => completedFiles++);
dropzone.on("queuecomplete", function () {
- completedFiles.should.equal(3);
+ expect(completedFiles).to.equal(3);
return done();
});
diff --git a/cypress/unit/amazon-s3.cy.js b/cypress/unit/amazon-s3.cy.js
new file mode 100644
index 000000000..2a4d86912
--- /dev/null
+++ b/cypress/unit/amazon-s3.cy.js
@@ -0,0 +1,92 @@
+import { Dropzone } from "../../src/dropzone.js";
+
+describe("Amazon S3 Support", function () {
+ const getMockFile = (
+ type = "text/html",
+ filename = "test file name",
+ contents = ["file contents"],
+ ) => {
+ const file = new File(contents, filename, { type });
+ file.status = Dropzone.ADDED;
+ file.accepted = true;
+ file.upload = { filename };
+ return file;
+ };
+
+ let dropzone = null;
+ let element = null;
+
+ afterEach(function () {
+ if (dropzone != null) {
+ dropzone.destroy();
+ dropzone = null;
+ }
+ if (element != null) {
+ document.body.removeChild(element);
+ element = null;
+ }
+ });
+
+ describe("constructor()", function () {
+ it("should throw an exception if binaryBody and uploadMultiple", function () {
+ const el = document.createElement("div");
+ expect(() => {
+ dropzone = new Dropzone(el, {
+ url: "/",
+ binaryBody: true,
+ uploadMultiple: true,
+ });
+ }).to.throw("You cannot set both: binaryBody and uploadMultiple.");
+ });
+ });
+
+ describe("upload", function () {
+ beforeEach(function () {
+ element = Dropzone.createElement("");
+ document.body.appendChild(element);
+
+ dropzone = new Dropzone(element, {
+ url: "url",
+ binaryBody: true,
+ uploadprogress() {},
+ });
+
+ // Ensure test determinism (we will start processing explicitly)
+ dropzone.accept = (file, done) => done();
+ dropzone.options.autoProcessQueue = false;
+ });
+
+ it("should add proper Content-Type", function () {
+ const seen = [];
+
+ cy.intercept("**/url", (req) => {
+ // Cypress normalizes header keys to lowercase
+ seen.push(req.headers["content-type"] || req.headers["Content-Type"]);
+ req.reply({ statusCode: 200, body: "" });
+ }).as("upload");
+
+ // IMPORTANT: run Dropzone actions only after intercept is registered
+ cy.then(() => {
+ dropzone.addFile(getMockFile());
+ dropzone.addFile(
+ getMockFile("image/jpeg", "some-file.jpg", [[1, 2, 3]]),
+ );
+ dropzone.processQueue();
+ });
+
+ // wait for two requests
+ cy.wait("@upload");
+ cy.wait("@upload");
+
+ // assert after both requests happened
+ cy.wrap(seen)
+ .should("have.length", 2)
+ .then(() => {
+ const contentTypes = seen.filter(Boolean).sort();
+ expect(contentTypes).to.deep.equal(
+ ["image/jpeg", "text/html"].sort(),
+ );
+ });
+ });
+ });
+});
diff --git a/cypress/unit/emitter.cy.js b/cypress/unit/emitter.cy.js
new file mode 100644
index 000000000..59d3dc5f2
--- /dev/null
+++ b/cypress/unit/emitter.cy.js
@@ -0,0 +1,137 @@
+import { Dropzone } from "../../src/dropzone.js";
+
+describe("Emitter", function () {
+ let emitter = null;
+
+ beforeEach(function () {
+ emitter = new Dropzone.prototype.Emitter();
+ });
+
+ it(".on() should return the object itself", function () {
+ expect(emitter.on("test", function () {})).to.equal(emitter);
+ });
+
+ it(".on() should properly register listeners", function () {
+ expect(emitter._callbacks === undefined).to.be.true;
+
+ const callback = function () {};
+ const callback2 = function () {};
+
+ emitter.on("test", callback);
+ emitter.on("test", callback2);
+ emitter.on("test2", callback);
+
+ expect(emitter._callbacks.test.length).to.equal(2);
+ expect(emitter._callbacks.test[0]).to.equal(callback);
+ expect(emitter._callbacks.test[1]).to.equal(callback2);
+ expect(emitter._callbacks.test2.length).to.equal(1);
+ expect(emitter._callbacks.test2[0]).to.equal(callback);
+ });
+
+ it(".emit() should return the object itself", function () {
+ expect(emitter.emit("test")).to.equal(emitter);
+ });
+
+ it(".emit() should properly invoke all registered callbacks with arguments", function () {
+ let callCount1 = 0;
+ let callCount12 = 0;
+ let callCount2 = 0;
+
+ const callback1 = function (var1, var2) {
+ callCount1++;
+ expect(var1).to.equal("callback1 var1");
+ expect(var2).to.equal("callback1 var2");
+ };
+
+ const callback12 = function (var1, var2) {
+ callCount12++;
+ expect(var1).to.equal("callback1 var1");
+ expect(var2).to.equal("callback1 var2");
+ };
+
+ const callback2 = function (var1, var2) {
+ callCount2++;
+ expect(var1).to.equal("callback2 var1");
+ expect(var2).to.equal("callback2 var2");
+ };
+
+ emitter.on("test1", callback1);
+ emitter.on("test1", callback12);
+ emitter.on("test2", callback2);
+
+ expect(callCount1).to.equal(0);
+ expect(callCount12).to.equal(0);
+ expect(callCount2).to.equal(0);
+
+ emitter.emit("test1", "callback1 var1", "callback1 var2");
+
+ expect(callCount1).to.equal(1);
+ expect(callCount12).to.equal(1);
+ expect(callCount2).to.equal(0);
+
+ emitter.emit("test2", "callback2 var1", "callback2 var2");
+
+ expect(callCount1).to.equal(1);
+ expect(callCount12).to.equal(1);
+ expect(callCount2).to.equal(1);
+
+ emitter.emit("test1", "callback1 var1", "callback1 var2");
+
+ expect(callCount1).to.equal(2);
+ expect(callCount12).to.equal(2);
+ expect(callCount2).to.equal(1);
+ });
+
+ describe(".off()", function () {
+ const callback1 = function () {};
+ const callback2 = function () {};
+ const callback3 = function () {};
+ const callback4 = function () {};
+
+ beforeEach(function () {
+ emitter._callbacks = {
+ test1: [callback1, callback2],
+ test2: [callback3],
+ test3: [callback1, callback4],
+ test4: [],
+ };
+ });
+
+ it("should work without any listeners", function () {
+ emitter._callbacks = undefined;
+ const emt = emitter.off();
+ expect(emitter._callbacks).to.deep.equal({});
+ expect(emt).to.equal(emitter);
+ });
+
+ it("should properly remove all event listeners", function () {
+ const emt = emitter.off();
+ expect(emitter._callbacks).to.deep.equal({});
+ expect(emt).to.equal(emitter);
+ });
+
+ it("should properly remove all event listeners for specific event", function () {
+ emitter.off("test1");
+ expect(emitter._callbacks["test1"] === undefined).to.be.true;
+ expect(emitter._callbacks["test2"].length).to.equal(1);
+ expect(emitter._callbacks["test3"].length).to.equal(2);
+
+ const emt = emitter.off("test2");
+ expect(emitter._callbacks["test2"] === undefined).to.be.true;
+ expect(emt).to.equal(emitter);
+ });
+
+ it("should properly remove specific event listener", function () {
+ emitter.off("test1", callback1);
+ expect(emitter._callbacks["test1"].length).to.equal(1);
+ expect(emitter._callbacks["test1"][0]).to.equal(callback2);
+
+ expect(emitter._callbacks["test3"].length).to.equal(2);
+
+ const emt = emitter.off("test3", callback4);
+ expect(emitter._callbacks["test3"].length).to.equal(1);
+ expect(emitter._callbacks["test3"][0]).to.equal(callback1);
+ expect(emt).to.equal(emitter);
+ });
+ });
+});
diff --git a/test/unit-tests/static-functions.js b/cypress/unit/static-functions.cy.js
similarity index 57%
rename from test/unit-tests/static-functions.js
rename to cypress/unit/static-functions.cy.js
index 8bea5d75c..1dd7c7293 100644
--- a/test/unit-tests/static-functions.js
+++ b/cypress/unit/static-functions.cy.js
@@ -3,30 +3,30 @@ import { Dropzone } from "../../src/dropzone.js";
describe("Static functions", function () {
describe("Dropzone.isBrowserSupported()", function () {
it("should be supported browser", () => {
- Dropzone.isBrowserSupported().should.be.true;
+ expect(Dropzone.isBrowserSupported()).to.be.true;
});
});
describe("Dropzone.createElement()", function () {
let element = Dropzone.createElement(
- 'Hallo
'
+ 'Hallo
',
);
it("should properly create an element from a string", () =>
- element.tagName.should.equal("DIV"));
+ expect(element.tagName).to.equal("DIV"));
it("should properly add the correct class", () =>
- element.classList.contains("test").should.be.ok);
+ expect(element.classList.contains("test")).to.be.ok);
it("should properly create child elements", () =>
- element.querySelector("span").tagName.should.equal("SPAN"));
+ expect(element.querySelector("span").tagName).to.equal("SPAN"));
it("should always return only one element", function () {
element = Dropzone.createElement("");
- return element.tagName.should.equal("DIV");
+ expect(element.tagName).to.equal("DIV");
});
});
describe("Dropzone.elementInside()", function () {
let element = Dropzone.createElement(
- ''
+ '',
);
document.body.appendChild(element);
@@ -36,16 +36,16 @@ describe("Static functions", function () {
after(() => document.body.removeChild(element));
it("should return yes if elements are the same", () =>
- Dropzone.elementInside(element, element).should.be.ok);
+ expect(Dropzone.elementInside(element, element)).to.be.ok);
it("should return yes if element is direct child", () =>
- Dropzone.elementInside(child1, element).should.be.ok);
+ expect(Dropzone.elementInside(child1, element)).to.be.ok);
it("should return yes if element is some child", function () {
- Dropzone.elementInside(child2, element).should.be.ok;
- return Dropzone.elementInside(child2, document.body).should.be.ok;
+ expect(Dropzone.elementInside(child2, element)).to.be.ok;
+ expect(Dropzone.elementInside(child2, document.body)).to.be.ok;
});
it("should return no unless element is some child", function () {
- Dropzone.elementInside(element, child1).should.not.be.ok;
- return Dropzone.elementInside(document.body, child1).should.not.be.ok;
+ expect(Dropzone.elementInside(element, child1)).to.not.be.ok;
+ expect(Dropzone.elementInside(document.body, child1)).to.not.be.ok;
});
});
@@ -62,7 +62,7 @@ describe("Static functions", function () {
it("should take options set in Dropzone.options from camelized id", function () {
element.id = "test-element";
- return Dropzone.optionsForElement(element).should.equal(testOptions);
+ expect(Dropzone.optionsForElement(element)).to.equal(testOptions);
});
it("should return undefined if no options set", function () {
@@ -77,9 +77,9 @@ describe("Static functions", function () {
it("should ignore input fields with the name='id'", function () {
element = Dropzone.createElement(
- ''
+ '',
);
- return Dropzone.optionsForElement(element).should.equal(testOptions);
+ expect(Dropzone.optionsForElement(element)).to.equal(testOptions);
});
});
@@ -98,7 +98,7 @@ describe("Static functions", function () {
it("should throw an exception if no dropzone attached", () =>
expect(() => Dropzone.forElement(document.createElement("div"))).to.throw(
- "No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."
+ "No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.",
));
it("should accept css selectors", () =>
@@ -132,7 +132,7 @@ describe("Static functions", function () {
});
it("should find elements with a .dropzone class", () =>
- element1.dropzone.should.be.ok);
+ expect(element1.dropzone).to.be.ok);
it("should not create dropzones with disabled options", () =>
expect(element2.dropzone).to.not.be.ok);
@@ -141,131 +141,180 @@ describe("Static functions", function () {
describe("Dropzone.isValidFile()", function () {
it("should return true if called without acceptedFiles", () =>
- Dropzone.isValidFile({ type: "some/type" }, null).should.be.ok);
+ expect(Dropzone.isValidFile({ type: "some/type" }, null)).to.be.ok);
it("should properly validate if called with concrete mime types", function () {
let acceptedMimeTypes = "text/html,image/jpeg,application/json";
- Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes)
- .should.be.ok;
- return Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes)
- .should.not.be.ok;
+ expect(Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(
+ Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes),
+ ).to.be.ok;
+ expect(Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes)).to
+ .not.be.ok;
});
it("should properly validate if called with base mime types", function () {
let acceptedMimeTypes = "text/*,image/*,application/*";
- Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes)
- .should.be.ok;
- Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes).should.be
- .ok;
- return Dropzone.isValidFile({ type: "some/type" }, acceptedMimeTypes)
- .should.not.be.ok;
+ expect(Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(
+ Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes),
+ ).to.be.ok;
+ expect(Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(Dropzone.isValidFile({ type: "some/type" }, acceptedMimeTypes)).to
+ .not.be.ok;
});
it("should properly validate if called with mixed mime types", function () {
let acceptedMimeTypes = "text/*,image/jpeg,application/*";
- Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes).should.be
- .ok;
- Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes).should.not
+ expect(Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes)).to
.be.ok;
- Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes)
- .should.be.ok;
- return Dropzone.isValidFile({ type: "some/type" }, acceptedMimeTypes)
- .should.not.be.ok;
+ expect(Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(Dropzone.isValidFile({ type: "image/bmp" }, acceptedMimeTypes)).to
+ .not.be.ok;
+ expect(
+ Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes),
+ ).to.be.ok;
+ expect(Dropzone.isValidFile({ type: "some/type" }, acceptedMimeTypes)).to
+ .not.be.ok;
});
it("should properly validate even with spaces in between", function () {
let acceptedMimeTypes = "text/html , image/jpeg, application/json";
- Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes).should.be
- .ok;
- return Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes)
- .should.be.ok;
+ expect(Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes)).to
+ .be.ok;
+ expect(Dropzone.isValidFile({ type: "image/jpeg" }, acceptedMimeTypes)).to
+ .be.ok;
});
it("should properly validate extensions", function () {
let acceptedMimeTypes = "text/html , image/jpeg, .pdf ,.png";
- Dropzone.isValidFile(
- { name: "somxsfsd", type: "text/html" },
- acceptedMimeTypes
- ).should.be.ok;
- Dropzone.isValidFile(
- { name: "somesdfsdf", type: "image/jpeg" },
- acceptedMimeTypes
- ).should.be.ok;
- Dropzone.isValidFile(
- { name: "somesdfadfadf", type: "application/json" },
- acceptedMimeTypes
- ).should.not.be.ok;
- Dropzone.isValidFile(
- { name: "some-file file.pdf", type: "random/type" },
- acceptedMimeTypes
- ).should.be.ok;
+ expect(
+ Dropzone.isValidFile(
+ { name: "somxsfsd", type: "text/html" },
+ acceptedMimeTypes,
+ ),
+ ).to.be.ok;
+
+ expect(
+ Dropzone.isValidFile(
+ { name: "somesdfsdf", type: "image/jpeg" },
+ acceptedMimeTypes,
+ ),
+ ).to.be.ok;
+
+ expect(
+ Dropzone.isValidFile(
+ { name: "somesdfadfadf", type: "application/json" },
+ acceptedMimeTypes,
+ ),
+ ).to.not.be.ok;
+
+ expect(
+ Dropzone.isValidFile(
+ { name: "some-file file.pdf", type: "random/type" },
+ acceptedMimeTypes,
+ ),
+ ).to.be.ok;
+
// .pdf has to be in the end
- Dropzone.isValidFile(
- { name: "some-file.pdf file.gif", type: "random/type" },
- acceptedMimeTypes
- ).should.not.be.ok;
- return Dropzone.isValidFile(
- { name: "some-file file.png", type: "random/type" },
- acceptedMimeTypes
- ).should.be.ok;
+ expect(
+ Dropzone.isValidFile(
+ { name: "some-file.pdf file.gif", type: "random/type" },
+ acceptedMimeTypes,
+ ),
+ ).to.not.be.ok;
+
+ expect(
+ Dropzone.isValidFile(
+ { name: "some-file file.png", type: "random/type" },
+ acceptedMimeTypes,
+ ),
+ ).to.be.ok;
});
});
describe("Dropzone.confirm", function () {
- beforeEach(() => sinon.stub(window, "confirm"));
- afterEach(() => window.confirm.restore());
- it("should forward to window.confirm and call the callbacks accordingly", function () {
- let rejected;
- let accepted = (rejected = false);
- window.confirm.returns(true);
- Dropzone.confirm(
- "test question",
- () => (accepted = true),
- () => (rejected = true)
- );
- window.confirm.args[0][0].should.equal("test question");
- accepted.should.equal(true);
- rejected.should.equal(false);
-
- accepted = rejected = false;
- window.confirm.returns(false);
- Dropzone.confirm(
- "test question 2",
- () => (accepted = true),
- () => (rejected = true)
- );
- window.confirm.args[1][0].should.equal("test question 2");
- accepted.should.equal(false);
- return rejected.should.equal(true);
+ let originalConfirm;
+ let confirmStub;
+
+ beforeEach(function () {
+ originalConfirm = window.confirm;
+
+ confirmStub = Cypress.sinon.stub();
+
+ Object.defineProperty(window, "confirm", {
+ configurable: true,
+ value: confirmStub,
});
+ });
- it("should not error if rejected is not provided", function () {
- let rejected;
- let accepted = (rejected = false);
- window.confirm.returns(false);
- Dropzone.confirm("test question", () => (accepted = true));
- window.confirm.args[0][0].should.equal("test question");
- // Nothing should have changed since there is no rejected function.
- accepted.should.equal(false);
- return rejected.should.equal(false);
+ afterEach(function () {
+ Object.defineProperty(window, "confirm", {
+ configurable: true,
+ value: originalConfirm,
});
});
+ it("should forward to window.confirm and call the callbacks accordingly", function () {
+ let accepted = false;
+ let rejected = false;
+
+ confirmStub.returns(true);
+
+ Dropzone.confirm(
+ "test question",
+ () => (accepted = true),
+ () => (rejected = true)
+ );
+
+ expect(confirmStub.args[0][0]).to.equal("test question");
+ expect(accepted).to.equal(true);
+ expect(rejected).to.equal(false);
+
+ accepted = false;
+ rejected = false;
+
+ confirmStub.returns(false);
+
+ Dropzone.confirm(
+ "test question 2",
+ () => (accepted = true),
+ () => (rejected = true)
+ );
+
+ expect(confirmStub.args[1][0]).to.equal("test question 2");
+ expect(accepted).to.equal(false);
+ expect(rejected).to.equal(true);
+ });
+
+ it("should not error if rejected is not provided", function () {
+ let accepted = false;
+ let rejected = false;
+
+ confirmStub.returns(false);
+
+ Dropzone.confirm("test question", () => (accepted = true));
+
+ expect(confirmStub.args[0][0]).to.equal("test question");
+ expect(accepted).to.equal(false);
+ expect(rejected).to.equal(false);
+ });
+});
+
+
describe("Dropzone.getElement() / getElements()", function () {
let tmpElements = [];
@@ -273,10 +322,10 @@ describe("Static functions", function () {
tmpElements = [];
tmpElements.push(Dropzone.createElement(''));
tmpElements.push(
- Dropzone.createElement('')
+ Dropzone.createElement(''),
);
tmpElements.push(
- Dropzone.createElement('')
+ Dropzone.createElement(''),
);
return tmpElements.forEach((el) => document.body.appendChild(el));
});
@@ -286,25 +335,25 @@ describe("Static functions", function () {
describe(".getElement()", function () {
it("should accept a string", function () {
let el = Dropzone.getElement(".tmptest");
- el.should.equal(tmpElements[0]);
+ expect(el).to.equal(tmpElements[0]);
el = Dropzone.getElement("#tmptest1");
- return el.should.equal(tmpElements[1]);
+ expect(el).to.equal(tmpElements[1]);
});
it("should accept a node", function () {
let el = Dropzone.getElement(tmpElements[2]);
- return el.should.equal(tmpElements[2]);
+ expect(el).to.equal(tmpElements[2]);
});
it("should fail if invalid selector", function () {
let errorMessage =
"Invalid `clickable` option provided. Please provide a CSS selector or a plain HTML element.";
expect(() => Dropzone.getElement("lblasdlfsfl", "clickable")).to.throw(
- errorMessage
+ errorMessage,
);
expect(() =>
- Dropzone.getElement({ lblasdlfsfl: "lblasdlfsfl" }, "clickable")
+ Dropzone.getElement({ lblasdlfsfl: "lblasdlfsfl" }, "clickable"),
).to.throw(errorMessage);
return expect(() =>
- Dropzone.getElement(["lblasdlfsfl"], "clickable")
+ Dropzone.getElement(["lblasdlfsfl"], "clickable"),
).to.throw(errorMessage);
});
});
@@ -312,32 +361,32 @@ describe("Static functions", function () {
describe(".getElements()", function () {
it("should accept a list of strings", function () {
let els = Dropzone.getElements([".tmptest", "#tmptest1"]);
- return els.should.eql([tmpElements[0], tmpElements[1]]);
+ expect(els).to.deep.equal([tmpElements[0], tmpElements[1]]);
});
it("should accept a list of nodes", function () {
let els = Dropzone.getElements([tmpElements[0], tmpElements[2]]);
- return els.should.eql([tmpElements[0], tmpElements[2]]);
+ expect(els).to.deep.equal([tmpElements[0], tmpElements[2]]);
});
it("should accept a mixed list", function () {
let els = Dropzone.getElements(["#tmptest1", tmpElements[2]]);
- return els.should.eql([tmpElements[1], tmpElements[2]]);
+ expect(els).to.deep.equal([tmpElements[1], tmpElements[2]]);
});
it("should accept a string selector", function () {
let els = Dropzone.getElements(".random");
- return els.should.eql([tmpElements[1], tmpElements[2]]);
+ expect(els).to.deep.equal([tmpElements[1], tmpElements[2]]);
});
it("should accept a single node", function () {
let els = Dropzone.getElements(tmpElements[1]);
- return els.should.eql([tmpElements[1]]);
+ expect(els).to.deep.equal([tmpElements[1]]);
});
it("should fail if invalid selector", function () {
let errorMessage =
"Invalid `clickable` option provided. Please provide a CSS selector, a plain HTML element or a list of those.";
expect(() => Dropzone.getElements("lblasdlfsfl", "clickable")).to.throw(
- errorMessage
+ errorMessage,
);
return expect(() =>
- Dropzone.getElements(["lblasdlfsfl"], "clickable")
+ Dropzone.getElements(["lblasdlfsfl"], "clickable"),
).to.throw(errorMessage);
});
});
diff --git a/package.json b/package.json
index 9099d3dbf..7373fbe7a 100644
--- a/package.json
+++ b/package.json
@@ -25,10 +25,6 @@
"standalone": {
"source": "tool/dropzone-global.js",
"outputFormat": "global"
- },
- "built-test": {
- "source": "test/unit-tests.js",
- "distDir": "test/built/"
}
},
"maintainers": [
@@ -42,8 +38,7 @@
"build": "parcel build && yarn run css && cp types/dropzone.d.ts dist",
"css": "yarn sass src/:dist/ --style compressed",
"watch-css": "yarn sass src/:dist/ --watch --style compressed",
- "test": "karma start test/karma.conf.js",
- "test:e2e": "cypress run",
+ "test": "cypress run",
"start-test-server": "yarn node test/test-server.js"
},
"bugs": {
@@ -64,20 +59,10 @@
"@parcel/core": "^2.16.3",
"@parcel/transformer-inline-string": "^2.16.3",
"@parcel/transformer-sass": "^2.16.3",
- "chai": "^4.5.0",
"cypress": "^15.9.0",
"express": "^4.21.2",
- "karma": "^6.4.4",
- "karma-chrome-launcher": "^3.2.0",
- "karma-mocha": "^2.0.1",
- "karma-sinon-chai": "^2.0.2",
- "karma-spec-reporter": "^0.0.36",
- "mocha": "^11.7.5",
- "mocha-headless-chrome": "^5.1.0",
"parcel": "^2.16.3",
- "sass": "^1.79.3",
- "sinon": "^18.0.1",
- "sinon-chai": "^3.7.0"
+ "sass": "^1.79.3"
},
"packageManager": "yarn@4.5.3"
}
diff --git a/src/options.js b/src/options.js
index 874961a0b..488c10f31 100644
--- a/src/options.js
+++ b/src/options.js
@@ -1,5 +1,5 @@
import Dropzone from "./dropzone";
-import defaultPreviewTemplate from "bundle-text:./preview-template.html";
+import defaultPreviewTemplate from "./preview-template.js";
let defaultOptions = {
/**
diff --git a/src/preview-template.html b/src/preview-template.js
similarity index 98%
rename from src/preview-template.html
rename to src/preview-template.js
index 021bd0b4e..50d794e68 100644
--- a/src/preview-template.html
+++ b/src/preview-template.js
@@ -1,3 +1,4 @@
+export default `
+`;
diff --git a/test/built/.gitignore b/test/built/.gitignore
deleted file mode 100644
index c96a04f00..000000000
--- a/test/built/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
\ No newline at end of file
diff --git a/test/karma.conf.js b/test/karma.conf.js
deleted file mode 100644
index 350e8c5be..000000000
--- a/test/karma.conf.js
+++ /dev/null
@@ -1,22 +0,0 @@
-module.exports = function (config) {
- config.set({
- frameworks: ["mocha", "sinon-chai"],
- files: ["built/unit-tests.js"],
- reporters: ["spec"],
- specReporter: {
- maxLogLines: 5, // limit number of lines logged per test
- suppressErrorSummary: false, // do not print error summary
- suppressFailed: false, // do not print information about failed tests
- suppressPassed: false, // do not print information about passed tests
- suppressSkipped: false, // do not print information about skipped tests
- showSpecTiming: true, // print the time elapsed for each spec
- failFast: false, // test would finish with error when a first fail occurs.
- },
- logLevel: config.LOG_INFO,
- browsers: ["ChromeHeadless"],
- autoWatch: false,
- singleRun: true, // Karma captures browsers, runs the tests and exits
- concurrency: Infinity,
- plugins: ["karma-mocha", "karma-spec-reporter", "karma-chrome-launcher", "karma-sinon-chai"],
- });
-};
diff --git a/test/unit-tests.js b/test/unit-tests.js
deleted file mode 100644
index 07719cb19..000000000
--- a/test/unit-tests.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import "./unit-tests/all";
-import "./unit-tests/amazon-s3";
-import "./unit-tests/emitter";
-import "./unit-tests/static-functions";
diff --git a/test/unit-tests/amazon-s3.js b/test/unit-tests/amazon-s3.js
deleted file mode 100644
index 90cb648ff..000000000
--- a/test/unit-tests/amazon-s3.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import { Dropzone } from "../../src/dropzone.js";
-import { sleep } from "./utils";
-
-describe("Amazon S3 Support", function () {
- let getMockFile = (
- type = "text/html",
- filename = "test file name",
- contents = ["file contents"]
- ) => {
- let file = new File(contents, filename, { type: type });
- file.status = Dropzone.ADDED;
- file.accepted = true;
- file.upload = {
- filename: filename,
- };
- return file;
- };
-
- let xhr = null;
- let dropzone = null;
- beforeEach(() => (xhr = sinon.useFakeXMLHttpRequest()));
-
- afterEach(function () {
- if (dropzone != null) {
- dropzone.destroy();
- }
- });
- describe("constructor()", () => {
- it("should throw an exception if binaryBody and uploadMultiple", () => {
- let element = document.createElement("div");
- expect(
- () =>
- (dropzone = new Dropzone(element, {
- url: "/",
- binaryBody: true,
- uploadMultiple: true,
- }))
- ).to.throw("You cannot set both: binaryBody and uploadMultiple.");
- });
- });
-
- describe("upload", () => {
- let element = null;
- let dropzone = null;
- let requests = null;
- beforeEach(function () {
- requests = [];
- xhr.onCreate = (xhr) => requests.push(xhr);
-
- element = Dropzone.createElement("");
- document.body.appendChild(element);
- return (dropzone = new Dropzone(element, {
- url: "url",
- binaryBody: true,
- uploadprogress() {},
- }));
- });
- afterEach(function () {
- document.body.removeChild(element);
- dropzone.destroy();
- return xhr.restore();
- });
- it("should add proper Content-Type", async () => {
- dropzone.addFile(getMockFile());
- dropzone.addFile(getMockFile("image/jpeg", "some-file.jpg", [[1, 2, 3]]));
- await sleep(10);
-
- console.log(requests[0].requestHeaders);
- console.log(requests[1].requestHeaders);
-
- expect(requests[0].requestHeaders["Content-Type"]).eq(
- "text/html;charset=utf-8"
- );
-
- expect(requests[1].requestHeaders["Content-Type"]).eq(
- "image/jpeg;charset=utf-8"
- );
- });
- });
-});
diff --git a/test/unit-tests/emitter.js b/test/unit-tests/emitter.js
deleted file mode 100644
index ed91d2121..000000000
--- a/test/unit-tests/emitter.js
+++ /dev/null
@@ -1,124 +0,0 @@
-import { Dropzone } from "../../src/dropzone.js";
-
-describe("Emitter", function () {
- let emitter = null;
- beforeEach(() => (emitter = new Dropzone.prototype.Emitter()));
-
- it(".on() should return the object itself", () =>
- emitter.on("test", function () {}).should.equal(emitter));
-
- it(".on() should properly register listeners", function () {
- (emitter._callbacks === undefined).should.be.true;
- let callback = function () {};
- let callback2 = function () {};
- emitter.on("test", callback);
- emitter.on("test", callback2);
- emitter.on("test2", callback);
- emitter._callbacks.test.length.should.equal(2);
- emitter._callbacks.test[0].should.equal(callback);
- emitter._callbacks.test[1].should.equal(callback2);
- emitter._callbacks.test2.length.should.equal(1);
- return emitter._callbacks.test2[0].should.equal(callback);
- });
-
- it(".emit() should return the object itself", () =>
- emitter.emit("test").should.equal(emitter));
-
- it(".emit() should properly invoke all registered callbacks with arguments", function () {
- let callCount1 = 0;
- let callCount12 = 0;
- let callCount2 = 0;
- let callback1 = function (var1, var2) {
- callCount1++;
- var1.should.equal("callback1 var1");
- return var2.should.equal("callback1 var2");
- };
- let callback12 = function (var1, var2) {
- callCount12++;
- var1.should.equal("callback1 var1");
- return var2.should.equal("callback1 var2");
- };
- let callback2 = function (var1, var2) {
- callCount2++;
- var1.should.equal("callback2 var1");
- return var2.should.equal("callback2 var2");
- };
-
- emitter.on("test1", callback1);
- emitter.on("test1", callback12);
- emitter.on("test2", callback2);
-
- callCount1.should.equal(0);
- callCount12.should.equal(0);
- callCount2.should.equal(0);
-
- emitter.emit("test1", "callback1 var1", "callback1 var2");
-
- callCount1.should.equal(1);
- callCount12.should.equal(1);
- callCount2.should.equal(0);
-
- emitter.emit("test2", "callback2 var1", "callback2 var2");
-
- callCount1.should.equal(1);
- callCount12.should.equal(1);
- callCount2.should.equal(1);
-
- emitter.emit("test1", "callback1 var1", "callback1 var2");
-
- callCount1.should.equal(2);
- callCount12.should.equal(2);
- return callCount2.should.equal(1);
- });
-
- return describe(".off()", function () {
- let callback1 = function () {};
- let callback2 = function () {};
- let callback3 = function () {};
- let callback4 = function () {};
-
- beforeEach(
- () =>
- (emitter._callbacks = {
- test1: [callback1, callback2],
- test2: [callback3],
- test3: [callback1, callback4],
- test4: [],
- })
- );
-
- it("should work without any listeners", function () {
- emitter._callbacks = undefined;
- let emt = emitter.off();
- emitter._callbacks.should.eql({});
- return emt.should.equal(emitter);
- });
-
- it("should properly remove all event listeners", function () {
- let emt = emitter.off();
- emitter._callbacks.should.eql({});
- return emt.should.equal(emitter);
- });
-
- it("should properly remove all event listeners for specific event", function () {
- emitter.off("test1");
- (emitter._callbacks["test1"] === undefined).should.be.true;
- emitter._callbacks["test2"].length.should.equal(1);
- emitter._callbacks["test3"].length.should.equal(2);
- let emt = emitter.off("test2");
- (emitter._callbacks["test2"] === undefined).should.be.true;
- return emt.should.equal(emitter);
- });
-
- it("should properly remove specific event listener", function () {
- emitter.off("test1", callback1);
- emitter._callbacks["test1"].length.should.equal(1);
- emitter._callbacks["test1"][0].should.equal(callback2);
- emitter._callbacks["test3"].length.should.equal(2);
- let emt = emitter.off("test3", callback4);
- emitter._callbacks["test3"].length.should.equal(1);
- emitter._callbacks["test3"][0].should.equal(callback1);
- return emt.should.equal(emitter);
- });
- });
-});
diff --git a/test/unit-tests/utils.js b/test/unit-tests/utils.js
deleted file mode 100644
index 5c4461fe5..000000000
--- a/test/unit-tests/utils.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export async function sleep(delay) {
- return new Promise((resolve) => {
- setTimeout(() => {
- resolve();
- }, delay);
- });
-}
diff --git a/yarn.lock b/yarn.lock
index 01779d7ba..b3f6260a1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5,31 +5,6 @@ __metadata:
version: 8
cacheKey: 10c0
-"@babel/code-frame@npm:^7.0.0":
- version: 7.28.6
- resolution: "@babel/code-frame@npm:7.28.6"
- dependencies:
- "@babel/helper-validator-identifier": "npm:^7.28.5"
- js-tokens: "npm:^4.0.0"
- picocolors: "npm:^1.1.1"
- checksum: 10c0/ed5d57f99455e3b1c23e75ebb8430c6b9800b4ecd0121b4348b97cecb65406a47778d6db61f0d538a4958bb01b4b277e90348a68d39bd3beff1d7c940ed6dd66
- languageName: node
- linkType: hard
-
-"@babel/helper-validator-identifier@npm:^7.28.5":
- version: 7.28.5
- resolution: "@babel/helper-validator-identifier@npm:7.28.5"
- checksum: 10c0/42aaebed91f739a41f3d80b72752d1f95fd7c72394e8e4bd7cdd88817e0774d80a432451bcba17c2c642c257c483bf1d409dd4548883429ea9493a3bc4ab0847
- languageName: node
- linkType: hard
-
-"@colors/colors@npm:1.5.0":
- version: 1.5.0
- resolution: "@colors/colors@npm:1.5.0"
- checksum: 10c0/eb42729851adca56d19a08e48d5a1e95efd2a32c55ae0323de8119052be0510d4b7a1611f2abcbf28c044a6c11e6b7d38f99fccdad7429300c37a8ea5fb95b44
- languageName: node
- linkType: hard
-
"@cypress/request@npm:^3.0.10":
version: 3.0.10
resolution: "@cypress/request@npm:3.0.10"
@@ -74,20 +49,10 @@ __metadata:
"@parcel/transformer-inline-string": "npm:^2.16.3"
"@parcel/transformer-sass": "npm:^2.16.3"
"@swc/helpers": "npm:^0.5.18"
- chai: "npm:^4.5.0"
cypress: "npm:^15.9.0"
express: "npm:^4.21.2"
- karma: "npm:^6.4.4"
- karma-chrome-launcher: "npm:^3.2.0"
- karma-mocha: "npm:^2.0.1"
- karma-sinon-chai: "npm:^2.0.2"
- karma-spec-reporter: "npm:^0.0.36"
- mocha: "npm:^11.7.5"
- mocha-headless-chrome: "npm:^5.1.0"
parcel: "npm:^2.16.3"
sass: "npm:^1.79.3"
- sinon: "npm:^18.0.1"
- sinon-chai: "npm:^3.7.0"
languageName: unknown
linkType: soft
@@ -1222,75 +1187,6 @@ __metadata:
languageName: node
linkType: hard
-"@puppeteer/browsers@npm:2.11.1":
- version: 2.11.1
- resolution: "@puppeteer/browsers@npm:2.11.1"
- dependencies:
- debug: "npm:^4.4.3"
- extract-zip: "npm:^2.0.1"
- progress: "npm:^2.0.3"
- proxy-agent: "npm:^6.5.0"
- semver: "npm:^7.7.3"
- tar-fs: "npm:^3.1.1"
- yargs: "npm:^17.7.2"
- bin:
- browsers: lib/cjs/main-cli.js
- checksum: 10c0/e8a92c5a600deda0aa1e3d437f1e35cb1cc0c24a218e01f33af6d5d106a3807e660fd09f67e31dd5c48a1efe9d207c405fc7f52d4172084dc99bb37adfb9341f
- languageName: node
- linkType: hard
-
-"@sinonjs/commons@npm:^3.0.0, @sinonjs/commons@npm:^3.0.1":
- version: 3.0.1
- resolution: "@sinonjs/commons@npm:3.0.1"
- dependencies:
- type-detect: "npm:4.0.8"
- checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403
- languageName: node
- linkType: hard
-
-"@sinonjs/fake-timers@npm:11.2.2":
- version: 11.2.2
- resolution: "@sinonjs/fake-timers@npm:11.2.2"
- dependencies:
- "@sinonjs/commons": "npm:^3.0.0"
- checksum: 10c0/a4218efa6fdafda622d02d4c0a6ab7df3641cb038bb0b14f0a3ee56f50c95aab4f1ab2d7798ce928b40c6fc1839465a558c9393a77e4dca879e1b2f8d60d8136
- languageName: node
- linkType: hard
-
-"@sinonjs/fake-timers@npm:^13.0.1":
- version: 13.0.5
- resolution: "@sinonjs/fake-timers@npm:13.0.5"
- dependencies:
- "@sinonjs/commons": "npm:^3.0.1"
- checksum: 10c0/a707476efd523d2138ef6bba916c83c4a377a8372ef04fad87499458af9f01afc58f4f245c5fd062793d6d70587309330c6f96947b5bd5697961c18004dc3e26
- languageName: node
- linkType: hard
-
-"@sinonjs/samsam@npm:^8.0.0":
- version: 8.0.2
- resolution: "@sinonjs/samsam@npm:8.0.2"
- dependencies:
- "@sinonjs/commons": "npm:^3.0.1"
- lodash.get: "npm:^4.4.2"
- type-detect: "npm:^4.1.0"
- checksum: 10c0/31d74c415040161f2963a202d7f866bedbb5a9b522a74b08a17086c15a75c3ef2893eecebb0c65a7b1603ef4ebdf83fa73cbe384b4cd679944918ed833200443
- languageName: node
- linkType: hard
-
-"@sinonjs/text-encoding@npm:^0.7.3":
- version: 0.7.3
- resolution: "@sinonjs/text-encoding@npm:0.7.3"
- checksum: 10c0/b112d1e97af7f99fbdc63c7dbcd35d6a60764dfec85cfcfff532e55cce8ecd8453f9fa2139e70aea47142c940fd90cd201d19f370b9a0141700d8a6de3116815
- languageName: node
- linkType: hard
-
-"@socket.io/component-emitter@npm:~3.1.0":
- version: 3.1.2
- resolution: "@socket.io/component-emitter@npm:3.1.2"
- checksum: 10c0/c4242bad66f67e6f7b712733d25b43cbb9e19a595c8701c3ad99cbeb5901555f78b095e24852f862fffb43e96f1d8552e62def885ca82ae1bb05da3668fd87d7
- languageName: node
- linkType: hard
-
"@swc/core-darwin-arm64@npm:1.11.29":
version: 1.11.29
resolution: "@swc/core-darwin-arm64@npm:1.11.29"
@@ -1441,23 +1337,7 @@ __metadata:
languageName: node
linkType: hard
-"@tootallnate/quickjs-emscripten@npm:^0.23.0":
- version: 0.23.0
- resolution: "@tootallnate/quickjs-emscripten@npm:0.23.0"
- checksum: 10c0/2a939b781826fb5fd3edd0f2ec3b321d259d760464cf20611c9877205aaca3ccc0b7304dea68416baa0d568e82cd86b17d29548d1e5139fa3155a4a86a2b4b49
- languageName: node
- linkType: hard
-
-"@types/cors@npm:^2.8.12":
- version: 2.8.18
- resolution: "@types/cors@npm:2.8.18"
- dependencies:
- "@types/node": "npm:*"
- checksum: 10c0/9dd1075de0e3a40c304826668960c797e67e597a734fb8e8ab404561f31ef2bd553ef5500eb86da7e91a344bee038a59931d2fbf182fbce09f13816f51fdd80e
- languageName: node
- linkType: hard
-
-"@types/node@npm:*, @types/node@npm:>=10.0.0":
+"@types/node@npm:*":
version: 22.15.29
resolution: "@types/node@npm:22.15.29"
dependencies:
@@ -1503,7 +1383,7 @@ __metadata:
languageName: node
linkType: hard
-"accepts@npm:~1.3.4, accepts@npm:~1.3.8":
+"accepts@npm:~1.3.8":
version: 1.3.8
resolution: "accepts@npm:1.3.8"
dependencies:
@@ -1560,15 +1440,6 @@ __metadata:
languageName: node
linkType: hard
-"ansi-styles@npm:^3.2.1":
- version: 3.2.1
- resolution: "ansi-styles@npm:3.2.1"
- dependencies:
- color-convert: "npm:^1.9.0"
- checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b
- languageName: node
- linkType: hard
-
"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
version: 4.3.0
resolution: "ansi-styles@npm:4.3.0"
@@ -1585,16 +1456,6 @@ __metadata:
languageName: node
linkType: hard
-"anymatch@npm:~3.1.2":
- version: 3.1.3
- resolution: "anymatch@npm:3.1.3"
- dependencies:
- normalize-path: "npm:^3.0.0"
- picomatch: "npm:^2.0.4"
- checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac
- languageName: node
- linkType: hard
-
"arch@npm:^2.2.0":
version: 2.2.0
resolution: "arch@npm:2.2.0"
@@ -1602,25 +1463,6 @@ __metadata:
languageName: node
linkType: hard
-"argparse@npm:^2.0.1":
- version: 2.0.1
- resolution: "argparse@npm:2.0.1"
- checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e
- languageName: node
- linkType: hard
-
-"args@npm:^5.0.1":
- version: 5.0.3
- resolution: "args@npm:5.0.3"
- dependencies:
- camelcase: "npm:5.0.0"
- chalk: "npm:2.4.2"
- leven: "npm:2.1.0"
- mri: "npm:1.1.4"
- checksum: 10c0/213871ae97d6f5990dc4637f53e48feef8566b2fd6d5cc9cb46ef78dc1db835b2f90fd536c1414441eaa0b5cb8f2a5ab94b973400b5fea096ee20b9893d3b573
- languageName: node
- linkType: hard
-
"array-flatten@npm:1.1.1":
version: 1.1.1
resolution: "array-flatten@npm:1.1.1"
@@ -1644,22 +1486,6 @@ __metadata:
languageName: node
linkType: hard
-"assertion-error@npm:^1.1.0":
- version: 1.1.0
- resolution: "assertion-error@npm:1.1.0"
- checksum: 10c0/25456b2aa333250f01143968e02e4884a34588a8538fbbf65c91a637f1dbfb8069249133cd2f4e530f10f624d206a664e7df30207830b659e9f5298b00a4099b
- languageName: node
- linkType: hard
-
-"ast-types@npm:^0.13.4":
- version: 0.13.4
- resolution: "ast-types@npm:0.13.4"
- dependencies:
- tslib: "npm:^2.0.1"
- checksum: 10c0/3a1a409764faa1471601a0ad01b3aa699292991aa9c8a30c7717002cabdf5d98008e7b53ae61f6e058f757fc6ba965e147967a93c13e62692c907d79cfb245f8
- languageName: node
- linkType: hard
-
"astral-regex@npm:^2.0.0":
version: 2.0.0
resolution: "astral-regex@npm:2.0.0"
@@ -1695,18 +1521,6 @@ __metadata:
languageName: node
linkType: hard
-"b4a@npm:^1.6.4":
- version: 1.7.3
- resolution: "b4a@npm:1.7.3"
- peerDependencies:
- react-native-b4a: "*"
- peerDependenciesMeta:
- react-native-b4a:
- optional: true
- checksum: 10c0/ac16d186e00fa0d16de1f1a4af413953bc762d50d5a0e382aaa744a13886600313b7293403ad77fc83f6b1489c3fc2610494d1026754a51d1b7cdac2115a7598
- languageName: node
- linkType: hard
-
"balanced-match@npm:^1.0.0":
version: 1.0.2
resolution: "balanced-match@npm:1.0.2"
@@ -1714,78 +1528,6 @@ __metadata:
languageName: node
linkType: hard
-"bare-events@npm:^2.5.4, bare-events@npm:^2.7.0":
- version: 2.8.2
- resolution: "bare-events@npm:2.8.2"
- peerDependencies:
- bare-abort-controller: "*"
- peerDependenciesMeta:
- bare-abort-controller:
- optional: true
- checksum: 10c0/53fef240cf2cdcca62f78b6eead90ddb5a59b0929f414b13a63764c2b4f9de98ea8a578d033b04d64bb7b86dfbc402e937984e69950855cc3754c7b63da7db21
- languageName: node
- linkType: hard
-
-"bare-fs@npm:^4.0.1":
- version: 4.5.2
- resolution: "bare-fs@npm:4.5.2"
- dependencies:
- bare-events: "npm:^2.5.4"
- bare-path: "npm:^3.0.0"
- bare-stream: "npm:^2.6.4"
- bare-url: "npm:^2.2.2"
- fast-fifo: "npm:^1.3.2"
- peerDependencies:
- bare-buffer: "*"
- peerDependenciesMeta:
- bare-buffer:
- optional: true
- checksum: 10c0/b623c76d264017491667618055fdcebd5d3efe87768c06817bf29f912b77ce7f03f851eb7dc56810f5266f03927efafceded6b0911042d48dd3013b86c6bb79b
- languageName: node
- linkType: hard
-
-"bare-os@npm:^3.0.1":
- version: 3.6.2
- resolution: "bare-os@npm:3.6.2"
- checksum: 10c0/7d917bc202b7efbb6b78658403fac04ae4e91db98d38cbd24037f896a2b1b4f4571d8cd408d12bed6a4c406d6abaf8d03836eacbcc4c75a0b6974e268574fc5a
- languageName: node
- linkType: hard
-
-"bare-path@npm:^3.0.0":
- version: 3.0.0
- resolution: "bare-path@npm:3.0.0"
- dependencies:
- bare-os: "npm:^3.0.1"
- checksum: 10c0/56a3ca82a9f808f4976cb1188640ac206546ce0ddff582afafc7bd2a6a5b31c3bd16422653aec656eeada2830cfbaa433c6cbf6d6b4d9eba033d5e06d60d9a68
- languageName: node
- linkType: hard
-
-"bare-stream@npm:^2.6.4":
- version: 2.7.0
- resolution: "bare-stream@npm:2.7.0"
- dependencies:
- streamx: "npm:^2.21.0"
- peerDependencies:
- bare-buffer: "*"
- bare-events: "*"
- peerDependenciesMeta:
- bare-buffer:
- optional: true
- bare-events:
- optional: true
- checksum: 10c0/3acd840b7b288dc066226c36446ff605fba2ecce98f1a0ce6aa611b81aabbcd204046a3209bce172373d17eaeaa5b7d35a85649c18ffcb9f2c783242854e99bd
- languageName: node
- linkType: hard
-
-"bare-url@npm:^2.2.2":
- version: 2.3.2
- resolution: "bare-url@npm:2.3.2"
- dependencies:
- bare-path: "npm:^3.0.0"
- checksum: 10c0/4fd0046314390a54404519d9db20e130ab3a341ef638d040f9603ae3fa0a1d84f6970357d21c8fc64e6163d1f61fd212cb1cfa4cb537dfead99fb06e3c030b15
- languageName: node
- linkType: hard
-
"base-x@npm:^3.0.11":
version: 3.0.11
resolution: "base-x@npm:3.0.11"
@@ -1802,20 +1544,6 @@ __metadata:
languageName: node
linkType: hard
-"base64id@npm:2.0.0, base64id@npm:~2.0.0":
- version: 2.0.0
- resolution: "base64id@npm:2.0.0"
- checksum: 10c0/6919efd237ed44b9988cbfc33eca6f173a10e810ce50292b271a1a421aac7748ef232a64d1e6032b08f19aae48dce6ee8f66c5ae2c9e5066c82b884861d4d453
- languageName: node
- linkType: hard
-
-"basic-ftp@npm:^5.0.2":
- version: 5.1.0
- resolution: "basic-ftp@npm:5.1.0"
- checksum: 10c0/397d5ed490f4d3b8b2dcd7afdf8e9fcf714a7d1c394a6c66b31704baf49c9fc250f1742f6189136a76b983675edf3d986b7ed93d253dc6477e65a567cf1e04c0
- languageName: node
- linkType: hard
-
"bcrypt-pbkdf@npm:^1.0.0":
version: 1.0.2
resolution: "bcrypt-pbkdf@npm:1.0.2"
@@ -1825,13 +1553,6 @@ __metadata:
languageName: node
linkType: hard
-"binary-extensions@npm:^2.0.0":
- version: 2.3.0
- resolution: "binary-extensions@npm:2.3.0"
- checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5
- languageName: node
- linkType: hard
-
"blob-util@npm:^2.0.2":
version: 2.0.2
resolution: "blob-util@npm:2.0.2"
@@ -1866,36 +1587,6 @@ __metadata:
languageName: node
linkType: hard
-"body-parser@npm:^1.19.0":
- version: 1.20.4
- resolution: "body-parser@npm:1.20.4"
- dependencies:
- bytes: "npm:~3.1.2"
- content-type: "npm:~1.0.5"
- debug: "npm:2.6.9"
- depd: "npm:2.0.0"
- destroy: "npm:~1.2.0"
- http-errors: "npm:~2.0.1"
- iconv-lite: "npm:~0.4.24"
- on-finished: "npm:~2.4.1"
- qs: "npm:~6.14.0"
- raw-body: "npm:~2.5.3"
- type-is: "npm:~1.6.18"
- unpipe: "npm:~1.0.0"
- checksum: 10c0/569c1e896297d1fcd8f34026c8d0ab70b90d45343c15c5d8dff5de2bad08125fc1e2f8c2f3f4c1ac6c0caaad115218202594d37dcb8d89d9b5dcae1c2b736aa9
- languageName: node
- linkType: hard
-
-"brace-expansion@npm:^1.1.7":
- version: 1.1.11
- resolution: "brace-expansion@npm:1.1.11"
- dependencies:
- balanced-match: "npm:^1.0.0"
- concat-map: "npm:0.0.1"
- checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668
- languageName: node
- linkType: hard
-
"brace-expansion@npm:^2.0.1":
version: 2.0.1
resolution: "brace-expansion@npm:2.0.1"
@@ -1905,7 +1596,7 @@ __metadata:
languageName: node
linkType: hard
-"braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2":
+"braces@npm:^3.0.3":
version: 3.0.3
resolution: "braces@npm:3.0.3"
dependencies:
@@ -1914,13 +1605,6 @@ __metadata:
languageName: node
linkType: hard
-"browser-stdout@npm:^1.3.1":
- version: 1.3.1
- resolution: "browser-stdout@npm:1.3.1"
- checksum: 10c0/c40e482fd82be872b6ea7b9f7591beafbf6f5ba522fe3dade98ba1573a1c29a11101564993e4eb44e5488be8f44510af072df9a9637c739217eb155ceb639205
- languageName: node
- linkType: hard
-
"browserslist@npm:^4.24.5":
version: 4.25.0
resolution: "browserslist@npm:4.25.0"
@@ -1952,7 +1636,7 @@ __metadata:
languageName: node
linkType: hard
-"bytes@npm:3.1.2, bytes@npm:~3.1.2":
+"bytes@npm:3.1.2":
version: 3.1.2
resolution: "bytes@npm:3.1.2"
checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e
@@ -1996,7 +1680,7 @@ __metadata:
languageName: node
linkType: hard
-"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3":
+"call-bound@npm:^1.0.2":
version: 1.0.4
resolution: "call-bound@npm:1.0.4"
dependencies:
@@ -2006,27 +1690,6 @@ __metadata:
languageName: node
linkType: hard
-"callsites@npm:^3.0.0":
- version: 3.1.0
- resolution: "callsites@npm:3.1.0"
- checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301
- languageName: node
- linkType: hard
-
-"camelcase@npm:5.0.0":
- version: 5.0.0
- resolution: "camelcase@npm:5.0.0"
- checksum: 10c0/515f1ce911d65949708d9e179f1a40af71eb7de668230a0c85961a35590f7da39af79cfb48d834883dbcc7995bdb7dd6bae8027b101e37a10d95337ec8732800
- languageName: node
- linkType: hard
-
-"camelcase@npm:^6.0.0":
- version: 6.3.0
- resolution: "camelcase@npm:6.3.0"
- checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710
- languageName: node
- linkType: hard
-
"caniuse-lite@npm:^1.0.30001718":
version: 1.0.30001764
resolution: "caniuse-lite@npm:1.0.30001764"
@@ -2041,32 +1704,6 @@ __metadata:
languageName: node
linkType: hard
-"chai@npm:^4.5.0":
- version: 4.5.0
- resolution: "chai@npm:4.5.0"
- dependencies:
- assertion-error: "npm:^1.1.0"
- check-error: "npm:^1.0.3"
- deep-eql: "npm:^4.1.3"
- get-func-name: "npm:^2.0.2"
- loupe: "npm:^2.3.6"
- pathval: "npm:^1.1.1"
- type-detect: "npm:^4.1.0"
- checksum: 10c0/b8cb596bd1aece1aec659e41a6e479290c7d9bee5b3ad63d2898ad230064e5b47889a3bc367b20100a0853b62e026e2dc514acf25a3c9385f936aa3614d4ab4d
- languageName: node
- linkType: hard
-
-"chalk@npm:2.4.2":
- version: 2.4.2
- resolution: "chalk@npm:2.4.2"
- dependencies:
- ansi-styles: "npm:^3.2.1"
- escape-string-regexp: "npm:^1.0.5"
- supports-color: "npm:^5.3.0"
- checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073
- languageName: node
- linkType: hard
-
"chalk@npm:^4.1.0, chalk@npm:^4.1.2":
version: 4.1.2
resolution: "chalk@npm:4.1.2"
@@ -2077,35 +1714,7 @@ __metadata:
languageName: node
linkType: hard
-"check-error@npm:^1.0.3":
- version: 1.0.3
- resolution: "check-error@npm:1.0.3"
- dependencies:
- get-func-name: "npm:^2.0.2"
- checksum: 10c0/94aa37a7315c0e8a83d0112b5bfb5a8624f7f0f81057c73e4707729cdd8077166c6aefb3d8e2b92c63ee130d4a2ff94bad46d547e12f3238cc1d78342a973841
- languageName: node
- linkType: hard
-
-"chokidar@npm:^3.5.1":
- version: 3.6.0
- resolution: "chokidar@npm:3.6.0"
- dependencies:
- anymatch: "npm:~3.1.2"
- braces: "npm:~3.0.2"
- fsevents: "npm:~2.3.2"
- glob-parent: "npm:~5.1.2"
- is-binary-path: "npm:~2.1.0"
- is-glob: "npm:~4.0.1"
- normalize-path: "npm:~3.0.0"
- readdirp: "npm:~3.6.0"
- dependenciesMeta:
- fsevents:
- optional: true
- checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462
- languageName: node
- linkType: hard
-
-"chokidar@npm:^4.0.0, chokidar@npm:^4.0.1":
+"chokidar@npm:^4.0.0":
version: 4.0.3
resolution: "chokidar@npm:4.0.3"
dependencies:
@@ -2128,18 +1737,6 @@ __metadata:
languageName: node
linkType: hard
-"chromium-bidi@npm:12.0.1":
- version: 12.0.1
- resolution: "chromium-bidi@npm:12.0.1"
- dependencies:
- mitt: "npm:^3.0.1"
- zod: "npm:^3.24.1"
- peerDependencies:
- devtools-protocol: "*"
- checksum: 10c0/cc278125a6ad4d4010f4c093442c6da608d0b18be483efbfad67def029a73f0bd16a7deccd9bf848e26dbd47119e3415724abdd7da497a80f886127494fb40b9
- languageName: node
- linkType: hard
-
"ci-info@npm:^4.1.0":
version: 4.3.1
resolution: "ci-info@npm:4.3.1"
@@ -2186,28 +1783,6 @@ __metadata:
languageName: node
linkType: hard
-"cliui@npm:^7.0.2":
- version: 7.0.4
- resolution: "cliui@npm:7.0.4"
- dependencies:
- string-width: "npm:^4.2.0"
- strip-ansi: "npm:^6.0.0"
- wrap-ansi: "npm:^7.0.0"
- checksum: 10c0/6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00
- languageName: node
- linkType: hard
-
-"cliui@npm:^8.0.1":
- version: 8.0.1
- resolution: "cliui@npm:8.0.1"
- dependencies:
- string-width: "npm:^4.2.0"
- strip-ansi: "npm:^6.0.1"
- wrap-ansi: "npm:^7.0.0"
- checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5
- languageName: node
- linkType: hard
-
"clone@npm:^2.1.2":
version: 2.1.2
resolution: "clone@npm:2.1.2"
@@ -2215,15 +1790,6 @@ __metadata:
languageName: node
linkType: hard
-"color-convert@npm:^1.9.0":
- version: 1.9.3
- resolution: "color-convert@npm:1.9.3"
- dependencies:
- color-name: "npm:1.1.3"
- checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c
- languageName: node
- linkType: hard
-
"color-convert@npm:^2.0.1":
version: 2.0.1
resolution: "color-convert@npm:2.0.1"
@@ -2233,13 +1799,6 @@ __metadata:
languageName: node
linkType: hard
-"color-name@npm:1.1.3":
- version: 1.1.3
- resolution: "color-name@npm:1.1.3"
- checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6
- languageName: node
- linkType: hard
-
"color-name@npm:~1.1.4":
version: 1.1.4
resolution: "color-name@npm:1.1.4"
@@ -2291,25 +1850,6 @@ __metadata:
languageName: node
linkType: hard
-"concat-map@npm:0.0.1":
- version: 0.0.1
- resolution: "concat-map@npm:0.0.1"
- checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f
- languageName: node
- linkType: hard
-
-"connect@npm:^3.7.0":
- version: 3.7.0
- resolution: "connect@npm:3.7.0"
- dependencies:
- debug: "npm:2.6.9"
- finalhandler: "npm:1.1.2"
- parseurl: "npm:~1.3.3"
- utils-merge: "npm:1.0.1"
- checksum: 10c0/f120c6116bb16a0a7d2703c0b4a0cd7ed787dc5ec91978097bf62aa967289020a9f41a9cd3c3276a7b92aaa36f382d2cd35fed7138fd466a55c8e9fdbed11ca8
- languageName: node
- linkType: hard
-
"content-disposition@npm:0.5.4":
version: 0.5.4
resolution: "content-disposition@npm:0.5.4"
@@ -2340,13 +1880,6 @@ __metadata:
languageName: node
linkType: hard
-"cookie@npm:~0.7.2":
- version: 0.7.2
- resolution: "cookie@npm:0.7.2"
- checksum: 10c0/9596e8ccdbf1a3a88ae02cf5ee80c1c50959423e1022e4e60b91dd87c622af1da309253d8abdb258fb5e3eacb4f08e579dc58b4897b8087574eee0fd35dfa5d2
- languageName: node
- linkType: hard
-
"core-util-is@npm:1.0.2":
version: 1.0.2
resolution: "core-util-is@npm:1.0.2"
@@ -2354,33 +1887,6 @@ __metadata:
languageName: node
linkType: hard
-"cors@npm:~2.8.5":
- version: 2.8.5
- resolution: "cors@npm:2.8.5"
- dependencies:
- object-assign: "npm:^4"
- vary: "npm:^1"
- checksum: 10c0/373702b7999409922da80de4a61938aabba6929aea5b6fd9096fefb9e8342f626c0ebd7507b0e8b0b311380744cc985f27edebc0a26e0ddb784b54e1085de761
- languageName: node
- linkType: hard
-
-"cosmiconfig@npm:^9.0.0":
- version: 9.0.0
- resolution: "cosmiconfig@npm:9.0.0"
- dependencies:
- env-paths: "npm:^2.2.1"
- import-fresh: "npm:^3.3.0"
- js-yaml: "npm:^4.1.0"
- parse-json: "npm:^5.2.0"
- peerDependencies:
- typescript: ">=4.9.5"
- peerDependenciesMeta:
- typescript:
- optional: true
- checksum: 10c0/1c1703be4f02a250b1d6ca3267e408ce16abfe8364193891afc94c2d5c060b69611fdc8d97af74b7e6d5d1aac0ab2fb94d6b079573146bc2d756c2484ce5f0ee
- languageName: node
- linkType: hard
-
"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.6":
version: 7.0.6
resolution: "cross-spawn@npm:7.0.6"
@@ -2392,13 +1898,6 @@ __metadata:
languageName: node
linkType: hard
-"custom-event@npm:~1.0.0":
- version: 1.0.1
- resolution: "custom-event@npm:1.0.1"
- checksum: 10c0/86cd8497328b1e17dcda894c8df34a73b7a99f915123940d39b33c709482b2d3a2e689cd5e79e4775eb4167227689f57a2ae2f99a3f0bc9c54c0ac1b06853bd5
- languageName: node
- linkType: hard
-
"cypress@npm:^15.9.0":
version: 15.9.0
resolution: "cypress@npm:15.9.0"
@@ -2460,20 +1959,6 @@ __metadata:
languageName: node
linkType: hard
-"data-uri-to-buffer@npm:^6.0.2":
- version: 6.0.2
- resolution: "data-uri-to-buffer@npm:6.0.2"
- checksum: 10c0/f76922bf895b3d7d443059ff278c9cc5efc89d70b8b80cd9de0aa79b3adc6d7a17948eefb8692e30398c43635f70ece1673d6085cc9eba2878dbc6c6da5292ac
- languageName: node
- linkType: hard
-
-"date-format@npm:^4.0.14":
- version: 4.0.14
- resolution: "date-format@npm:4.0.14"
- checksum: 10c0/1c67a4d77c677bb880328c81d81f5b9ed7fbf672bdaff74e5a0f7314b21188f3a829b06acf120c70cc1df876a7724e3e5c23d511e86d64656a3035a76ac3930b
- languageName: node
- linkType: hard
-
"dayjs@npm:^1.10.4":
version: 1.11.13
resolution: "dayjs@npm:1.11.13"
@@ -2490,7 +1975,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4, debug@npm:^4.3.5":
+"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.4":
version: 4.4.1
resolution: "debug@npm:4.4.1"
dependencies:
@@ -2511,75 +1996,24 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:^4.4.3":
- version: 4.4.3
- resolution: "debug@npm:4.4.3"
- dependencies:
- ms: "npm:^2.1.3"
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6
+"delayed-stream@npm:~1.0.0":
+ version: 1.0.0
+ resolution: "delayed-stream@npm:1.0.0"
+ checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
languageName: node
linkType: hard
-"debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4":
- version: 4.3.7
- resolution: "debug@npm:4.3.7"
- dependencies:
- ms: "npm:^2.1.3"
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b
+"depd@npm:2.0.0":
+ version: 2.0.0
+ resolution: "depd@npm:2.0.0"
+ checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c
languageName: node
linkType: hard
-"decamelize@npm:^4.0.0":
- version: 4.0.0
- resolution: "decamelize@npm:4.0.0"
- checksum: 10c0/e06da03fc05333e8cd2778c1487da67ffbea5b84e03ca80449519b8fa61f888714bbc6f459ea963d5641b4aa98832130eb5cd193d90ae9f0a27eee14be8e278d
- languageName: node
- linkType: hard
-
-"deep-eql@npm:^4.1.3":
- version: 4.1.4
- resolution: "deep-eql@npm:4.1.4"
- dependencies:
- type-detect: "npm:^4.0.0"
- checksum: 10c0/264e0613493b43552fc908f4ff87b8b445c0e6e075656649600e1b8a17a57ee03e960156fce7177646e4d2ddaf8e5ee616d76bd79929ff593e5c79e4e5e6c517
- languageName: node
- linkType: hard
-
-"degenerator@npm:^5.0.0":
- version: 5.0.1
- resolution: "degenerator@npm:5.0.1"
- dependencies:
- ast-types: "npm:^0.13.4"
- escodegen: "npm:^2.1.0"
- esprima: "npm:^4.0.1"
- checksum: 10c0/e48d8a651edeb512a648711a09afec269aac6de97d442a4bb9cf121a66877e0eec11b9727100a10252335c0666ae1c84a8bc1e3a3f47788742c975064d2c7b1c
- languageName: node
- linkType: hard
-
-"delayed-stream@npm:~1.0.0":
- version: 1.0.0
- resolution: "delayed-stream@npm:1.0.0"
- checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
- languageName: node
- linkType: hard
-
-"depd@npm:2.0.0, depd@npm:~2.0.0":
- version: 2.0.0
- resolution: "depd@npm:2.0.0"
- checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c
- languageName: node
- linkType: hard
-
-"destroy@npm:1.2.0, destroy@npm:~1.2.0":
- version: 1.2.0
- resolution: "destroy@npm:1.2.0"
- checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643
+"destroy@npm:1.2.0":
+ version: 1.2.0
+ resolution: "destroy@npm:1.2.0"
+ checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643
languageName: node
linkType: hard
@@ -2599,46 +2033,6 @@ __metadata:
languageName: node
linkType: hard
-"devtools-protocol@npm:0.0.1534754":
- version: 0.0.1534754
- resolution: "devtools-protocol@npm:0.0.1534754"
- checksum: 10c0/2ee96f10c9833f7e6ad0f9f66e42242129547e96c8cfe816ce508c222f4ccf4431a4b787cd6ee8174c9b2c8cc9a3c7f3b3b0a1fff96dd3cc5a16eb314027c9f7
- languageName: node
- linkType: hard
-
-"di@npm:^0.0.1":
- version: 0.0.1
- resolution: "di@npm:0.0.1"
- checksum: 10c0/fbca4cc93e8c493d50f82df3a9ecaa5d8b2935674aabddeb8f68db3ab03c942c201f9c3d920de094407392ee6f488eac16b96f500c0ea6b408634864b7b939d1
- languageName: node
- linkType: hard
-
-"diff@npm:^5.2.0":
- version: 5.2.0
- resolution: "diff@npm:5.2.0"
- checksum: 10c0/aed0941f206fe261ecb258dc8d0ceea8abbde3ace5827518ff8d302f0fc9cc81ce116c4d8f379151171336caf0516b79e01abdc1ed1201b6440d895a66689eb4
- languageName: node
- linkType: hard
-
-"diff@npm:^7.0.0":
- version: 7.0.0
- resolution: "diff@npm:7.0.0"
- checksum: 10c0/251fd15f85ffdf814cfc35a728d526b8d2ad3de338dcbd011ac6e57c461417090766b28995f8ff733135b5fbc3699c392db1d5e27711ac4e00244768cd1d577b
- languageName: node
- linkType: hard
-
-"dom-serialize@npm:^2.2.1":
- version: 2.2.1
- resolution: "dom-serialize@npm:2.2.1"
- dependencies:
- custom-event: "npm:~1.0.0"
- ent: "npm:~2.2.0"
- extend: "npm:^3.0.0"
- void-elements: "npm:^2.0.0"
- checksum: 10c0/ceb6e62b73c658986ca4c9b8b2fae358d8ae914eb06712d137da595a327c3bbca45a762f412a6d181f892ce5e3cffb855c2db2b64c53ad0534b2a0ad8e65b05e
- languageName: node
- linkType: hard
-
"dotenv-expand@npm:^11.0.7":
version: 11.0.7
resolution: "dotenv-expand@npm:11.0.7"
@@ -2743,30 +2137,6 @@ __metadata:
languageName: node
linkType: hard
-"engine.io-parser@npm:~5.2.1":
- version: 5.2.3
- resolution: "engine.io-parser@npm:5.2.3"
- checksum: 10c0/ed4900d8dbef470ab3839ccf3bfa79ee518ea8277c7f1f2759e8c22a48f64e687ea5e474291394d0c94f84054749fd93f3ef0acb51fa2f5f234cc9d9d8e7c536
- languageName: node
- linkType: hard
-
-"engine.io@npm:~6.6.0":
- version: 6.6.4
- resolution: "engine.io@npm:6.6.4"
- dependencies:
- "@types/cors": "npm:^2.8.12"
- "@types/node": "npm:>=10.0.0"
- accepts: "npm:~1.3.4"
- base64id: "npm:2.0.0"
- cookie: "npm:~0.7.2"
- cors: "npm:~2.8.5"
- debug: "npm:~4.3.1"
- engine.io-parser: "npm:~5.2.1"
- ws: "npm:~8.17.1"
- checksum: 10c0/845761163f8ea7962c049df653b75dafb6b3693ad6f59809d4474751d7b0392cbf3dc2730b8a902ff93677a91fd28711d34ab29efd348a8a4b49c6b0724021ab
- languageName: node
- linkType: hard
-
"enquirer@npm:^2.3.6":
version: 2.4.1
resolution: "enquirer@npm:2.4.1"
@@ -2777,19 +2147,7 @@ __metadata:
languageName: node
linkType: hard
-"ent@npm:~2.2.0":
- version: 2.2.2
- resolution: "ent@npm:2.2.2"
- dependencies:
- call-bound: "npm:^1.0.3"
- es-errors: "npm:^1.3.0"
- punycode: "npm:^1.4.1"
- safe-regex-test: "npm:^1.1.0"
- checksum: 10c0/83673cc952bb1ca01473460eb4f1289448d887ef2bfcdd142bfe83cd20a794a4393b6bca543922bf1eb913d1ae0ab69ca2d2f1f6a5e9f3de6e68464b3a3b9096
- languageName: node
- linkType: hard
-
-"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1":
+"env-paths@npm:^2.2.0":
version: 2.2.1
resolution: "env-paths@npm:2.2.1"
checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4
@@ -2803,15 +2161,6 @@ __metadata:
languageName: node
linkType: hard
-"error-ex@npm:^1.3.1":
- version: 1.3.4
- resolution: "error-ex@npm:1.3.4"
- dependencies:
- is-arrayish: "npm:^0.2.1"
- checksum: 10c0/b9e34ff4778b8f3b31a8377e1c654456f4c41aeaa3d10a1138c3b7635d8b7b2e03eb2475d46d8ae055c1f180a1063e100bffabf64ea7e7388b37735df5328664
- languageName: node
- linkType: hard
-
"es-define-property@npm:^1.0.1":
version: 1.0.1
resolution: "es-define-property@npm:1.0.1"
@@ -2847,7 +2196,7 @@ __metadata:
languageName: node
linkType: hard
-"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
+"escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
@@ -2868,55 +2217,6 @@ __metadata:
languageName: node
linkType: hard
-"escape-string-regexp@npm:^4.0.0":
- version: 4.0.0
- resolution: "escape-string-regexp@npm:4.0.0"
- checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9
- languageName: node
- linkType: hard
-
-"escodegen@npm:^2.1.0":
- version: 2.1.0
- resolution: "escodegen@npm:2.1.0"
- dependencies:
- esprima: "npm:^4.0.1"
- estraverse: "npm:^5.2.0"
- esutils: "npm:^2.0.2"
- source-map: "npm:~0.6.1"
- dependenciesMeta:
- source-map:
- optional: true
- bin:
- escodegen: bin/escodegen.js
- esgenerate: bin/esgenerate.js
- checksum: 10c0/e1450a1f75f67d35c061bf0d60888b15f62ab63aef9df1901cffc81cffbbb9e8b3de237c5502cf8613a017c1df3a3003881307c78835a1ab54d8c8d2206e01d3
- languageName: node
- linkType: hard
-
-"esprima@npm:^4.0.1":
- version: 4.0.1
- resolution: "esprima@npm:4.0.1"
- bin:
- esparse: ./bin/esparse.js
- esvalidate: ./bin/esvalidate.js
- checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3
- languageName: node
- linkType: hard
-
-"estraverse@npm:^5.2.0":
- version: 5.3.0
- resolution: "estraverse@npm:5.3.0"
- checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107
- languageName: node
- linkType: hard
-
-"esutils@npm:^2.0.2":
- version: 2.0.3
- resolution: "esutils@npm:2.0.3"
- checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7
- languageName: node
- linkType: hard
-
"etag@npm:~1.8.1":
version: 1.8.1
resolution: "etag@npm:1.8.1"
@@ -2931,22 +2231,6 @@ __metadata:
languageName: node
linkType: hard
-"eventemitter3@npm:^4.0.0":
- version: 4.0.7
- resolution: "eventemitter3@npm:4.0.7"
- checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b
- languageName: node
- linkType: hard
-
-"events-universal@npm:^1.0.0":
- version: 1.0.1
- resolution: "events-universal@npm:1.0.1"
- dependencies:
- bare-events: "npm:^2.7.0"
- checksum: 10c0/a1d9a5e9f95843650f8ec240dd1221454c110189a9813f32cdf7185759b43f1f964367ac7dca4ebc69150b59043f2d77c7e122b0d03abf7c25477ea5494785a5
- languageName: node
- linkType: hard
-
"execa@npm:4.1.0":
version: 4.1.0
resolution: "execa@npm:4.1.0"
@@ -3019,14 +2303,14 @@ __metadata:
languageName: node
linkType: hard
-"extend@npm:^3.0.0, extend@npm:~3.0.2":
+"extend@npm:~3.0.2":
version: 3.0.2
resolution: "extend@npm:3.0.2"
checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9
languageName: node
linkType: hard
-"extract-zip@npm:2.0.1, extract-zip@npm:^2.0.1":
+"extract-zip@npm:2.0.1":
version: 2.0.1
resolution: "extract-zip@npm:2.0.1"
dependencies:
@@ -3057,13 +2341,6 @@ __metadata:
languageName: node
linkType: hard
-"fast-fifo@npm:^1.2.0, fast-fifo@npm:^1.3.2":
- version: 1.3.2
- resolution: "fast-fifo@npm:1.3.2"
- checksum: 10c0/d53f6f786875e8b0529f784b59b4b05d4b5c31c651710496440006a398389a579c8dbcd2081311478b5bf77f4b0b21de69109c5a4eabea9d8e8783d1eb864e4c
- languageName: node
- linkType: hard
-
"fd-slicer@npm:~1.1.0":
version: 1.1.0
resolution: "fd-slicer@npm:1.1.0"
@@ -3103,21 +2380,6 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:1.1.2":
- version: 1.1.2
- resolution: "finalhandler@npm:1.1.2"
- dependencies:
- debug: "npm:2.6.9"
- encodeurl: "npm:~1.0.2"
- escape-html: "npm:~1.0.3"
- on-finished: "npm:~2.3.0"
- parseurl: "npm:~1.3.3"
- statuses: "npm:~1.5.0"
- unpipe: "npm:~1.0.0"
- checksum: 10c0/6a96e1f5caab085628c11d9fdceb82ba608d5e426c6913d4d918409baa271037a47f28fbba73279e8ad614f0b8fa71ea791d265e408d760793829edd8c2f4584
- languageName: node
- linkType: hard
-
"finalhandler@npm:1.3.1":
version: 1.3.1
resolution: "finalhandler@npm:1.3.1"
@@ -3133,42 +2395,6 @@ __metadata:
languageName: node
linkType: hard
-"find-up@npm:^5.0.0":
- version: 5.0.0
- resolution: "find-up@npm:5.0.0"
- dependencies:
- locate-path: "npm:^6.0.0"
- path-exists: "npm:^4.0.0"
- checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a
- languageName: node
- linkType: hard
-
-"flat@npm:^5.0.2":
- version: 5.0.2
- resolution: "flat@npm:5.0.2"
- bin:
- flat: cli.js
- checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe
- languageName: node
- linkType: hard
-
-"flatted@npm:^3.2.7":
- version: 3.3.3
- resolution: "flatted@npm:3.3.3"
- checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538
- languageName: node
- linkType: hard
-
-"follow-redirects@npm:^1.0.0":
- version: 1.15.9
- resolution: "follow-redirects@npm:1.15.9"
- peerDependenciesMeta:
- debug:
- optional: true
- checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f
- languageName: node
- linkType: hard
-
"foreground-child@npm:^3.1.0":
version: 3.3.1
resolution: "foreground-child@npm:3.3.1"
@@ -3213,17 +2439,6 @@ __metadata:
languageName: node
linkType: hard
-"fs-extra@npm:^8.1.0":
- version: 8.1.0
- resolution: "fs-extra@npm:8.1.0"
- dependencies:
- graceful-fs: "npm:^4.2.0"
- jsonfile: "npm:^4.0.0"
- universalify: "npm:^0.1.0"
- checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423
- languageName: node
- linkType: hard
-
"fs-extra@npm:^9.1.0":
version: 9.1.0
resolution: "fs-extra@npm:9.1.0"
@@ -3245,32 +2460,6 @@ __metadata:
languageName: node
linkType: hard
-"fs.realpath@npm:^1.0.0":
- version: 1.0.0
- resolution: "fs.realpath@npm:1.0.0"
- checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948
- languageName: node
- linkType: hard
-
-"fsevents@npm:~2.3.2":
- version: 2.3.3
- resolution: "fsevents@npm:2.3.3"
- dependencies:
- node-gyp: "npm:latest"
- checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60
- conditions: os=darwin
- languageName: node
- linkType: hard
-
-"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin":
- version: 2.3.3
- resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1"
- dependencies:
- node-gyp: "npm:latest"
- conditions: os=darwin
- languageName: node
- linkType: hard
-
"function-bind@npm:^1.1.2":
version: 1.1.2
resolution: "function-bind@npm:1.1.2"
@@ -3278,20 +2467,6 @@ __metadata:
languageName: node
linkType: hard
-"get-caller-file@npm:^2.0.5":
- version: 2.0.5
- resolution: "get-caller-file@npm:2.0.5"
- checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde
- languageName: node
- linkType: hard
-
-"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2":
- version: 2.0.2
- resolution: "get-func-name@npm:2.0.2"
- checksum: 10c0/89830fd07623fa73429a711b9daecdb304386d237c71268007f788f113505ef1d4cc2d0b9680e072c5082490aec9df5d7758bf5ac6f1c37062855e8e3dc0b9df
- languageName: node
- linkType: hard
-
"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.3.0":
version: 1.3.0
resolution: "get-intrinsic@npm:1.3.0"
@@ -3336,17 +2511,6 @@ __metadata:
languageName: node
linkType: hard
-"get-uri@npm:^6.0.1":
- version: 6.0.5
- resolution: "get-uri@npm:6.0.5"
- dependencies:
- basic-ftp: "npm:^5.0.2"
- data-uri-to-buffer: "npm:^6.0.2"
- debug: "npm:^4.3.4"
- checksum: 10c0/c7ff5d5d55de53d23ecce7c5108cc3ed0db1174db43c9aa15506d640283d36ee0956fd8ba1fc50b06a718466cc85794ae9d8860193f91318afe846e3e7010f3a
- languageName: node
- linkType: hard
-
"getpass@npm:^0.1.1":
version: 0.1.7
resolution: "getpass@npm:0.1.7"
@@ -3356,15 +2520,6 @@ __metadata:
languageName: node
linkType: hard
-"glob-parent@npm:~5.1.2":
- version: 5.1.2
- resolution: "glob-parent@npm:5.1.2"
- dependencies:
- is-glob: "npm:^4.0.1"
- checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee
- languageName: node
- linkType: hard
-
"glob@npm:^10.2.2":
version: 10.4.5
resolution: "glob@npm:10.4.5"
@@ -3381,36 +2536,6 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^10.4.5":
- version: 10.5.0
- resolution: "glob@npm:10.5.0"
- dependencies:
- foreground-child: "npm:^3.1.0"
- jackspeak: "npm:^3.1.2"
- minimatch: "npm:^9.0.4"
- minipass: "npm:^7.1.2"
- package-json-from-dist: "npm:^1.0.0"
- path-scurry: "npm:^1.11.1"
- bin:
- glob: dist/esm/bin.mjs
- checksum: 10c0/100705eddbde6323e7b35e1d1ac28bcb58322095bd8e63a7d0bef1a2cdafe0d0f7922a981b2b48369a4f8c1b077be5c171804534c3509dfe950dde15fbe6d828
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.3, glob@npm:^7.1.7":
- version: 7.2.3
- resolution: "glob@npm:7.2.3"
- dependencies:
- fs.realpath: "npm:^1.0.0"
- inflight: "npm:^1.0.4"
- inherits: "npm:2"
- minimatch: "npm:^3.1.1"
- once: "npm:^1.3.0"
- path-is-absolute: "npm:^1.0.0"
- checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe
- languageName: node
- linkType: hard
-
"global-dirs@npm:^3.0.0":
version: 3.0.1
resolution: "global-dirs@npm:3.0.1"
@@ -3443,13 +2568,6 @@ __metadata:
languageName: node
linkType: hard
-"has-flag@npm:^3.0.0":
- version: 3.0.0
- resolution: "has-flag@npm:3.0.0"
- checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473
- languageName: node
- linkType: hard
-
"has-flag@npm:^4.0.0":
version: 4.0.0
resolution: "has-flag@npm:4.0.0"
@@ -3492,15 +2610,6 @@ __metadata:
languageName: node
linkType: hard
-"he@npm:^1.2.0":
- version: 1.2.0
- resolution: "he@npm:1.2.0"
- bin:
- he: bin/he
- checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17
- languageName: node
- linkType: hard
-
"http-cache-semantics@npm:^4.1.1":
version: 4.2.0
resolution: "http-cache-semantics@npm:4.2.0"
@@ -3521,20 +2630,7 @@ __metadata:
languageName: node
linkType: hard
-"http-errors@npm:~2.0.1":
- version: 2.0.1
- resolution: "http-errors@npm:2.0.1"
- dependencies:
- depd: "npm:~2.0.0"
- inherits: "npm:~2.0.4"
- setprototypeof: "npm:~1.2.0"
- statuses: "npm:~2.0.2"
- toidentifier: "npm:~1.0.1"
- checksum: 10c0/fb38906cef4f5c83952d97661fe14dc156cb59fe54812a42cd448fa57b5c5dfcb38a40a916957737bd6b87aab257c0648d63eb5b6a9ca9f548e105b6072712d4
- languageName: node
- linkType: hard
-
-"http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.1":
+"http-proxy-agent@npm:^7.0.0":
version: 7.0.2
resolution: "http-proxy-agent@npm:7.0.2"
dependencies:
@@ -3544,17 +2640,6 @@ __metadata:
languageName: node
linkType: hard
-"http-proxy@npm:^1.18.1":
- version: 1.18.1
- resolution: "http-proxy@npm:1.18.1"
- dependencies:
- eventemitter3: "npm:^4.0.0"
- follow-redirects: "npm:^1.0.0"
- requires-port: "npm:^1.0.0"
- checksum: 10c0/148dfa700a03fb421e383aaaf88ac1d94521dfc34072f6c59770528c65250983c2e4ec996f2f03aa9f3fe46cd1270a593126068319311e3e8d9e610a37533e94
- languageName: node
- linkType: hard
-
"http-signature@npm:~1.4.0":
version: 1.4.0
resolution: "http-signature@npm:1.4.0"
@@ -3566,7 +2651,7 @@ __metadata:
languageName: node
linkType: hard
-"https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.6":
+"https-proxy-agent@npm:^7.0.1":
version: 7.0.6
resolution: "https-proxy-agent@npm:7.0.6"
dependencies:
@@ -3583,7 +2668,7 @@ __metadata:
languageName: node
linkType: hard
-"iconv-lite@npm:0.4.24, iconv-lite@npm:~0.4.24":
+"iconv-lite@npm:0.4.24":
version: 0.4.24
resolution: "iconv-lite@npm:0.4.24"
dependencies:
@@ -3615,16 +2700,6 @@ __metadata:
languageName: node
linkType: hard
-"import-fresh@npm:^3.3.0":
- version: 3.3.1
- resolution: "import-fresh@npm:3.3.1"
- dependencies:
- parent-module: "npm:^1.0.0"
- resolve-from: "npm:^4.0.0"
- checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec
- languageName: node
- linkType: hard
-
"imurmurhash@npm:^0.1.4":
version: 0.1.4
resolution: "imurmurhash@npm:0.1.4"
@@ -3639,17 +2714,7 @@ __metadata:
languageName: node
linkType: hard
-"inflight@npm:^1.0.4":
- version: 1.0.6
- resolution: "inflight@npm:1.0.6"
- dependencies:
- once: "npm:^1.3.0"
- wrappy: "npm:1"
- checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2
- languageName: node
- linkType: hard
-
-"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:~2.0.4":
+"inherits@npm:2.0.4":
version: 2.0.4
resolution: "inherits@npm:2.0.4"
checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2
@@ -3680,22 +2745,6 @@ __metadata:
languageName: node
linkType: hard
-"is-arrayish@npm:^0.2.1":
- version: 0.2.1
- resolution: "is-arrayish@npm:0.2.1"
- checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729
- languageName: node
- linkType: hard
-
-"is-binary-path@npm:~2.1.0":
- version: 2.1.0
- resolution: "is-binary-path@npm:2.1.0"
- dependencies:
- binary-extensions: "npm:^2.0.0"
- checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38
- languageName: node
- linkType: hard
-
"is-extglob@npm:^2.1.1":
version: 2.1.1
resolution: "is-extglob@npm:2.1.1"
@@ -3710,7 +2759,7 @@ __metadata:
languageName: node
linkType: hard
-"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1":
+"is-glob@npm:^4.0.3":
version: 4.0.3
resolution: "is-glob@npm:4.0.3"
dependencies:
@@ -3736,32 +2785,13 @@ __metadata:
languageName: node
linkType: hard
-"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3":
+"is-path-inside@npm:^3.0.2":
version: 3.0.3
resolution: "is-path-inside@npm:3.0.3"
checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05
languageName: node
linkType: hard
-"is-plain-obj@npm:^2.1.0":
- version: 2.1.0
- resolution: "is-plain-obj@npm:2.1.0"
- checksum: 10c0/e5c9814cdaa627a9ad0a0964ded0e0491bfd9ace405c49a5d63c88b30a162f1512c069d5b80997893c4d0181eadc3fed02b4ab4b81059aba5620bfcdfdeb9c53
- languageName: node
- linkType: hard
-
-"is-regex@npm:^1.2.1":
- version: 1.2.1
- resolution: "is-regex@npm:1.2.1"
- dependencies:
- call-bound: "npm:^1.0.2"
- gopd: "npm:^1.2.0"
- has-tostringtag: "npm:^1.0.2"
- hasown: "npm:^2.0.2"
- checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04
- languageName: node
- linkType: hard
-
"is-stream@npm:^2.0.0":
version: 2.0.1
resolution: "is-stream@npm:2.0.1"
@@ -3783,13 +2813,6 @@ __metadata:
languageName: node
linkType: hard
-"isbinaryfile@npm:^4.0.8":
- version: 4.0.10
- resolution: "isbinaryfile@npm:4.0.10"
- checksum: 10c0/0703d8cfeb69ed79e6d173120f327450011a066755150a6bbf97ffecec1069a5f2092777868315b21359098c84b54984871cad1abce877ad9141fb2caf3dcabf
- languageName: node
- linkType: hard
-
"isexe@npm:^2.0.0":
version: 2.0.0
resolution: "isexe@npm:2.0.0"
@@ -3824,24 +2847,6 @@ __metadata:
languageName: node
linkType: hard
-"js-tokens@npm:^4.0.0":
- version: 4.0.0
- resolution: "js-tokens@npm:4.0.0"
- checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed
- languageName: node
- linkType: hard
-
-"js-yaml@npm:^4.1.0":
- version: 4.1.1
- resolution: "js-yaml@npm:4.1.1"
- dependencies:
- argparse: "npm:^2.0.1"
- bin:
- js-yaml: bin/js-yaml.js
- checksum: 10c0/561c7d7088c40a9bb53cc75becbfb1df6ae49b34b5e6e5a81744b14ae8667ec564ad2527709d1a6e7d5e5fa6d483aa0f373a50ad98d42fde368ec4a190d4fae7
- languageName: node
- linkType: hard
-
"jsbn@npm:1.1.0":
version: 1.1.0
resolution: "jsbn@npm:1.1.0"
@@ -3856,13 +2861,6 @@ __metadata:
languageName: node
linkType: hard
-"json-parse-even-better-errors@npm:^2.3.0":
- version: 2.3.1
- resolution: "json-parse-even-better-errors@npm:2.3.1"
- checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3
- languageName: node
- linkType: hard
-
"json-schema@npm:0.4.0":
version: 0.4.0
resolution: "json-schema@npm:0.4.0"
@@ -3886,18 +2884,6 @@ __metadata:
languageName: node
linkType: hard
-"jsonfile@npm:^4.0.0":
- version: 4.0.0
- resolution: "jsonfile@npm:4.0.0"
- dependencies:
- graceful-fs: "npm:^4.1.6"
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480
- languageName: node
- linkType: hard
-
"jsonfile@npm:^6.0.1":
version: 6.1.0
resolution: "jsonfile@npm:6.1.0"
@@ -3923,94 +2909,6 @@ __metadata:
languageName: node
linkType: hard
-"just-extend@npm:^6.2.0":
- version: 6.2.0
- resolution: "just-extend@npm:6.2.0"
- checksum: 10c0/d41cbdb6d85b986d4deaf2144d81d4f7266cd408fc95189d046d63f610c2dc486b141aeb6ef319c2d76fe904d45a6bb31f19b098ff0427c35688e0c383fc0511
- languageName: node
- linkType: hard
-
-"karma-chrome-launcher@npm:^3.2.0":
- version: 3.2.0
- resolution: "karma-chrome-launcher@npm:3.2.0"
- dependencies:
- which: "npm:^1.2.1"
- checksum: 10c0/0cec1ae7d922110dc29cee36389d597157c82f019c8917259f9fa93d1f5ee8e19141c2eb74bfe30797cdb3adbc51a6b65fd18a9ebc1527c725c4acf62cd46d04
- languageName: node
- linkType: hard
-
-"karma-mocha@npm:^2.0.1":
- version: 2.0.1
- resolution: "karma-mocha@npm:2.0.1"
- dependencies:
- minimist: "npm:^1.2.3"
- checksum: 10c0/99ef62d863f6bf8cb11df0f4a9d47615369a0ce8a937d9a0cd7fb83fdbb0ef7420c7ea396de514be48500fac1563a00ab964b7d1adc4ee3f5a875ebf07eb012d
- languageName: node
- linkType: hard
-
-"karma-sinon-chai@npm:^2.0.2":
- version: 2.0.2
- resolution: "karma-sinon-chai@npm:2.0.2"
- peerDependencies:
- chai: ">=3.5.0"
- sinon: ">=2.1.0"
- sinon-chai: ">=2.9.0"
- checksum: 10c0/ae65c25a2ab7ed6ac7ddb414754617137d8c80386ef8f1fe56cf0f4a98d73ad261382a2bb99f0fdccb10892df6c52bf51667a875872d68c58510756e7f265327
- languageName: node
- linkType: hard
-
-"karma-spec-reporter@npm:^0.0.36":
- version: 0.0.36
- resolution: "karma-spec-reporter@npm:0.0.36"
- dependencies:
- colors: "npm:1.4.0"
- peerDependencies:
- karma: ">=0.9"
- checksum: 10c0/ae2e9cb5e2af74f0d4d8faa752c7c7204c296566906ea0d1a0eb98e76a02224b3aa60fe58c2b7cb40df4161ecd8a89feb0bd3ced5fffcae4fd5a40b72d48db9d
- languageName: node
- linkType: hard
-
-"karma@npm:^6.4.4":
- version: 6.4.4
- resolution: "karma@npm:6.4.4"
- dependencies:
- "@colors/colors": "npm:1.5.0"
- body-parser: "npm:^1.19.0"
- braces: "npm:^3.0.2"
- chokidar: "npm:^3.5.1"
- connect: "npm:^3.7.0"
- di: "npm:^0.0.1"
- dom-serialize: "npm:^2.2.1"
- glob: "npm:^7.1.7"
- graceful-fs: "npm:^4.2.6"
- http-proxy: "npm:^1.18.1"
- isbinaryfile: "npm:^4.0.8"
- lodash: "npm:^4.17.21"
- log4js: "npm:^6.4.1"
- mime: "npm:^2.5.2"
- minimatch: "npm:^3.0.4"
- mkdirp: "npm:^0.5.5"
- qjobs: "npm:^1.2.0"
- range-parser: "npm:^1.2.1"
- rimraf: "npm:^3.0.2"
- socket.io: "npm:^4.7.2"
- source-map: "npm:^0.6.1"
- tmp: "npm:^0.2.1"
- ua-parser-js: "npm:^0.7.30"
- yargs: "npm:^16.1.1"
- bin:
- karma: bin/karma
- checksum: 10c0/1658c4b7396c0edf6f048289182e075b561902e02992e1a3eb72f56f67090ff0c7ad7c91ab099e88a790c60f9500c5a6f974d75f1769e3ea2dfccda52876ec0b
- languageName: node
- linkType: hard
-
-"leven@npm:2.1.0":
- version: 2.1.0
- resolution: "leven@npm:2.1.0"
- checksum: 10c0/e685243900aad7e854212001c9b7fe6d0806081e184d5077a561a91d07425852e8b7d1edf76b948f4be520b64e0015960be3a5f3e9acb0bec75a0e4134b422df
- languageName: node
- linkType: hard
-
"lightningcss-darwin-arm64@npm:1.30.1":
version: 1.30.1
resolution: "lightningcss-darwin-arm64@npm:1.30.1"
@@ -4121,13 +3019,6 @@ __metadata:
languageName: node
linkType: hard
-"lines-and-columns@npm:^1.1.6":
- version: 1.2.4
- resolution: "lines-and-columns@npm:1.2.4"
- checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d
- languageName: node
- linkType: hard
-
"listr2@npm:^3.8.3":
version: 3.14.0
resolution: "listr2@npm:3.14.0"
@@ -4184,22 +3075,6 @@ __metadata:
languageName: node
linkType: hard
-"locate-path@npm:^6.0.0":
- version: 6.0.0
- resolution: "locate-path@npm:6.0.0"
- dependencies:
- p-locate: "npm:^5.0.0"
- checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3
- languageName: node
- linkType: hard
-
-"lodash.get@npm:^4.4.2":
- version: 4.4.2
- resolution: "lodash.get@npm:4.4.2"
- checksum: 10c0/48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e
- languageName: node
- linkType: hard
-
"lodash.once@npm:^4.1.1":
version: 4.1.1
resolution: "lodash.once@npm:4.1.1"
@@ -4214,7 +3089,7 @@ __metadata:
languageName: node
linkType: hard
-"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0":
+"log-symbols@npm:^4.0.0":
version: 4.1.0
resolution: "log-symbols@npm:4.1.0"
dependencies:
@@ -4236,28 +3111,6 @@ __metadata:
languageName: node
linkType: hard
-"log4js@npm:^6.4.1":
- version: 6.9.1
- resolution: "log4js@npm:6.9.1"
- dependencies:
- date-format: "npm:^4.0.14"
- debug: "npm:^4.3.4"
- flatted: "npm:^3.2.7"
- rfdc: "npm:^1.3.0"
- streamroller: "npm:^3.1.5"
- checksum: 10c0/05846e48f72d662800c8189bd178c42b4aa2f0c574cfc90a1942cf90b76f621c44019e26796c8fd88da1b6f0fe8272cba607cbaad6ae6ede50a7a096b58197ea
- languageName: node
- linkType: hard
-
-"loupe@npm:^2.3.6":
- version: 2.3.7
- resolution: "loupe@npm:2.3.7"
- dependencies:
- get-func-name: "npm:^2.0.1"
- checksum: 10c0/71a781c8fc21527b99ed1062043f1f2bb30bdaf54fa4cf92463427e1718bc6567af2988300bc243c1f276e4f0876f29e3cbf7b58106fdc186915687456ce5bf4
- languageName: node
- linkType: hard
-
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
version: 10.4.3
resolution: "lru-cache@npm:10.4.3"
@@ -4265,13 +3118,6 @@ __metadata:
languageName: node
linkType: hard
-"lru-cache@npm:^7.14.1":
- version: 7.18.3
- resolution: "lru-cache@npm:7.18.3"
- checksum: 10c0/b3a452b491433db885beed95041eb104c157ef7794b9c9b4d647be503be91769d11206bb573849a16b4cc0d03cbd15ffd22df7960997788b74c1d399ac7a4fed
- languageName: node
- linkType: hard
-
"make-fetch-happen@npm:^14.0.3":
version: 14.0.3
resolution: "make-fetch-happen@npm:14.0.3"
@@ -4361,15 +3207,6 @@ __metadata:
languageName: node
linkType: hard
-"mime@npm:^2.5.2":
- version: 2.6.0
- resolution: "mime@npm:2.6.0"
- bin:
- mime: cli.js
- checksum: 10c0/a7f2589900d9c16e3bdf7672d16a6274df903da958c1643c9c45771f0478f3846dcb1097f31eb9178452570271361e2149310931ec705c037210fc69639c8e6c
- languageName: node
- linkType: hard
-
"mimic-fn@npm:^2.1.0":
version: 2.1.0
resolution: "mimic-fn@npm:2.1.0"
@@ -4377,16 +3214,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1":
- version: 3.1.2
- resolution: "minimatch@npm:3.1.2"
- dependencies:
- brace-expansion: "npm:^1.1.7"
- checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311
- languageName: node
- linkType: hard
-
-"minimatch@npm:^9.0.4, minimatch@npm:^9.0.5":
+"minimatch@npm:^9.0.4":
version: 9.0.5
resolution: "minimatch@npm:9.0.5"
dependencies:
@@ -4395,7 +3223,7 @@ __metadata:
languageName: node
linkType: hard
-"minimist@npm:^1.2.3, minimist@npm:^1.2.6, minimist@npm:^1.2.8":
+"minimist@npm:^1.2.8":
version: 1.2.8
resolution: "minimist@npm:1.2.8"
checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6
@@ -4487,75 +3315,6 @@ __metadata:
languageName: node
linkType: hard
-"mitt@npm:^3.0.1":
- version: 3.0.1
- resolution: "mitt@npm:3.0.1"
- checksum: 10c0/3ab4fdecf3be8c5255536faa07064d05caa3dd332bd318ff02e04621f7b3069ca1de9106cfe8e7ced675abfc2bec2ce4c4ef321c4a1bb1fb29df8ae090741913
- languageName: node
- linkType: hard
-
-"mkdirp@npm:^0.5.5":
- version: 0.5.6
- resolution: "mkdirp@npm:0.5.6"
- dependencies:
- minimist: "npm:^1.2.6"
- bin:
- mkdirp: bin/cmd.js
- checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01
- languageName: node
- linkType: hard
-
-"mocha-headless-chrome@npm:^5.1.0":
- version: 5.1.0
- resolution: "mocha-headless-chrome@npm:5.1.0"
- dependencies:
- args: "npm:^5.0.1"
- puppeteer: "npm:^24.3.0"
- bin:
- mocha-headless-chrome: bin/start
- checksum: 10c0/4f882f6b026364c27a06a361328cf6f2aace11e9d759099d613a0fe9e83c5ee70610cc154aa6848c9191bb5cfcb1cb80ca21ff0aa06ff3189bff4632de7aa1d0
- languageName: node
- linkType: hard
-
-"mocha@npm:^11.7.5":
- version: 11.7.5
- resolution: "mocha@npm:11.7.5"
- dependencies:
- browser-stdout: "npm:^1.3.1"
- chokidar: "npm:^4.0.1"
- debug: "npm:^4.3.5"
- diff: "npm:^7.0.0"
- escape-string-regexp: "npm:^4.0.0"
- find-up: "npm:^5.0.0"
- glob: "npm:^10.4.5"
- he: "npm:^1.2.0"
- is-path-inside: "npm:^3.0.3"
- js-yaml: "npm:^4.1.0"
- log-symbols: "npm:^4.1.0"
- minimatch: "npm:^9.0.5"
- ms: "npm:^2.1.3"
- picocolors: "npm:^1.1.1"
- serialize-javascript: "npm:^6.0.2"
- strip-json-comments: "npm:^3.1.1"
- supports-color: "npm:^8.1.1"
- workerpool: "npm:^9.2.0"
- yargs: "npm:^17.7.2"
- yargs-parser: "npm:^21.1.1"
- yargs-unparser: "npm:^2.0.0"
- bin:
- _mocha: bin/_mocha
- mocha: bin/mocha.js
- checksum: 10c0/e6150cba85345aaabbc5b2e7341b1e6706b878f5a9782960cad57fd4cc458730a76d08c5f1a3e05d3ebb49cad93b455764bb00727bd148dcaf0c6dd4fa665b3d
- languageName: node
- linkType: hard
-
-"mri@npm:1.1.4":
- version: 1.1.4
- resolution: "mri@npm:1.1.4"
- checksum: 10c0/eb577c2ef60385aa287afdac777e536996f4fd3144250c201097e7ec121568139d482c92cb9a512f90e428d6dc3e9ba8e9de89bc204424cb96f187a4bdc465c1
- languageName: node
- linkType: hard
-
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -4627,26 +3386,6 @@ __metadata:
languageName: node
linkType: hard
-"netmask@npm:^2.0.2":
- version: 2.0.2
- resolution: "netmask@npm:2.0.2"
- checksum: 10c0/cafd28388e698e1138ace947929f842944d0f1c0b87d3fa2601a61b38dc89397d33c0ce2c8e7b99e968584b91d15f6810b91bef3f3826adf71b1833b61d4bf4f
- languageName: node
- linkType: hard
-
-"nise@npm:^6.0.0":
- version: 6.1.1
- resolution: "nise@npm:6.1.1"
- dependencies:
- "@sinonjs/commons": "npm:^3.0.1"
- "@sinonjs/fake-timers": "npm:^13.0.1"
- "@sinonjs/text-encoding": "npm:^0.7.3"
- just-extend: "npm:^6.2.0"
- path-to-regexp: "npm:^8.1.0"
- checksum: 10c0/09471adb738dc3be2981cc7815c90879ed6a5a3e162202ca66e12f9a5a0956bea718d0ec2f0c07acc26e3f958481b8fb30c30da76c13620e922f3b9dcd249c50
- languageName: node
- linkType: hard
-
"node-addon-api@npm:^6.1.0":
version: 6.1.0
resolution: "node-addon-api@npm:6.1.0"
@@ -4729,13 +3468,6 @@ __metadata:
languageName: node
linkType: hard
-"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
- version: 3.0.0
- resolution: "normalize-path@npm:3.0.0"
- checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046
- languageName: node
- linkType: hard
-
"npm-run-path@npm:^4.0.0":
version: 4.0.1
resolution: "npm-run-path@npm:4.0.1"
@@ -4752,13 +3484,6 @@ __metadata:
languageName: node
linkType: hard
-"object-assign@npm:^4":
- version: 4.1.1
- resolution: "object-assign@npm:4.1.1"
- checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414
- languageName: node
- linkType: hard
-
"object-inspect@npm:^1.13.3":
version: 1.13.4
resolution: "object-inspect@npm:1.13.4"
@@ -4766,7 +3491,7 @@ __metadata:
languageName: node
linkType: hard
-"on-finished@npm:2.4.1, on-finished@npm:~2.4.1":
+"on-finished@npm:2.4.1":
version: 2.4.1
resolution: "on-finished@npm:2.4.1"
dependencies:
@@ -4775,16 +3500,7 @@ __metadata:
languageName: node
linkType: hard
-"on-finished@npm:~2.3.0":
- version: 2.3.0
- resolution: "on-finished@npm:2.3.0"
- dependencies:
- ee-first: "npm:1.1.1"
- checksum: 10c0/c904f9e518b11941eb60279a3cbfaf1289bd0001f600a950255b1dede9fe3df8cd74f38483550b3bb9485165166acb5db500c3b4c4337aec2815c88c96fcc2ea
- languageName: node
- linkType: hard
-
-"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
+"once@npm:^1.3.1, once@npm:^1.4.0":
version: 1.4.0
resolution: "once@npm:1.4.0"
dependencies:
@@ -4816,24 +3532,6 @@ __metadata:
languageName: node
linkType: hard
-"p-limit@npm:^3.0.2":
- version: 3.1.0
- resolution: "p-limit@npm:3.1.0"
- dependencies:
- yocto-queue: "npm:^0.1.0"
- checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a
- languageName: node
- linkType: hard
-
-"p-locate@npm:^5.0.0":
- version: 5.0.0
- resolution: "p-locate@npm:5.0.0"
- dependencies:
- p-limit: "npm:^3.0.2"
- checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a
- languageName: node
- linkType: hard
-
"p-map@npm:^4.0.0":
version: 4.0.0
resolution: "p-map@npm:4.0.0"
@@ -4844,35 +3542,9 @@ __metadata:
linkType: hard
"p-map@npm:^7.0.2":
- version: 7.0.3
- resolution: "p-map@npm:7.0.3"
- checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c
- languageName: node
- linkType: hard
-
-"pac-proxy-agent@npm:^7.1.0":
- version: 7.2.0
- resolution: "pac-proxy-agent@npm:7.2.0"
- dependencies:
- "@tootallnate/quickjs-emscripten": "npm:^0.23.0"
- agent-base: "npm:^7.1.2"
- debug: "npm:^4.3.4"
- get-uri: "npm:^6.0.1"
- http-proxy-agent: "npm:^7.0.0"
- https-proxy-agent: "npm:^7.0.6"
- pac-resolver: "npm:^7.0.1"
- socks-proxy-agent: "npm:^8.0.5"
- checksum: 10c0/0265c17c9401c2ea735697931a6553a0c6d8b20c4d7d4e3b3a0506080ba69a8d5ad656e2a6be875411212e2b6ed7a4d9526dd3997e08581fdfb1cbcad454c296
- languageName: node
- linkType: hard
-
-"pac-resolver@npm:^7.0.1":
- version: 7.0.1
- resolution: "pac-resolver@npm:7.0.1"
- dependencies:
- degenerator: "npm:^5.0.0"
- netmask: "npm:^2.0.2"
- checksum: 10c0/5f3edd1dd10fded31e7d1f95776442c3ee51aa098c28b74ede4927d9677ebe7cebb2636750c24e945f5b84445e41ae39093d3a1014a994e5ceb9f0b1b88ebff5
+ version: 7.0.3
+ resolution: "p-map@npm:7.0.3"
+ checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c
languageName: node
linkType: hard
@@ -4908,27 +3580,6 @@ __metadata:
languageName: node
linkType: hard
-"parent-module@npm:^1.0.0":
- version: 1.0.1
- resolution: "parent-module@npm:1.0.1"
- dependencies:
- callsites: "npm:^3.0.0"
- checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556
- languageName: node
- linkType: hard
-
-"parse-json@npm:^5.2.0":
- version: 5.2.0
- resolution: "parse-json@npm:5.2.0"
- dependencies:
- "@babel/code-frame": "npm:^7.0.0"
- error-ex: "npm:^1.3.1"
- json-parse-even-better-errors: "npm:^2.3.0"
- lines-and-columns: "npm:^1.1.6"
- checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585
- languageName: node
- linkType: hard
-
"parseurl@npm:~1.3.3":
version: 1.3.3
resolution: "parseurl@npm:1.3.3"
@@ -4936,20 +3587,6 @@ __metadata:
languageName: node
linkType: hard
-"path-exists@npm:^4.0.0":
- version: 4.0.0
- resolution: "path-exists@npm:4.0.0"
- checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b
- languageName: node
- linkType: hard
-
-"path-is-absolute@npm:^1.0.0":
- version: 1.0.1
- resolution: "path-is-absolute@npm:1.0.1"
- checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078
- languageName: node
- linkType: hard
-
"path-key@npm:^3.0.0, path-key@npm:^3.1.0":
version: 3.1.1
resolution: "path-key@npm:3.1.1"
@@ -4974,20 +3611,6 @@ __metadata:
languageName: node
linkType: hard
-"path-to-regexp@npm:^8.1.0":
- version: 8.2.0
- resolution: "path-to-regexp@npm:8.2.0"
- checksum: 10c0/ef7d0a887b603c0a142fad16ccebdcdc42910f0b14830517c724466ad676107476bba2fe9fffd28fd4c141391ccd42ea426f32bb44c2c82ecaefe10c37b90f5a
- languageName: node
- linkType: hard
-
-"pathval@npm:^1.1.1":
- version: 1.1.1
- resolution: "pathval@npm:1.1.1"
- checksum: 10c0/f63e1bc1b33593cdf094ed6ff5c49c1c0dc5dc20a646ca9725cc7fe7cd9995002d51d5685b9b2ec6814342935748b711bafa840f84c0bb04e38ff40a335c94dc
- languageName: node
- linkType: hard
-
"pend@npm:~1.2.0":
version: 1.2.0
resolution: "pend@npm:1.2.0"
@@ -5009,7 +3632,7 @@ __metadata:
languageName: node
linkType: hard
-"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1":
+"picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be
@@ -5058,13 +3681,6 @@ __metadata:
languageName: node
linkType: hard
-"progress@npm:^2.0.3":
- version: 2.0.3
- resolution: "progress@npm:2.0.3"
- checksum: 10c0/1697e07cb1068055dbe9fe858d242368ff5d2073639e652b75a7eb1f2a1a8d4afd404d719de23c7b48481a6aa0040686310e2dac2f53d776daa2176d3f96369c
- languageName: node
- linkType: hard
-
"promise-retry@npm:^2.0.1":
version: 2.0.1
resolution: "promise-retry@npm:2.0.1"
@@ -5085,22 +3701,6 @@ __metadata:
languageName: node
linkType: hard
-"proxy-agent@npm:^6.5.0":
- version: 6.5.0
- resolution: "proxy-agent@npm:6.5.0"
- dependencies:
- agent-base: "npm:^7.1.2"
- debug: "npm:^4.3.4"
- http-proxy-agent: "npm:^7.0.1"
- https-proxy-agent: "npm:^7.0.6"
- lru-cache: "npm:^7.14.1"
- pac-proxy-agent: "npm:^7.1.0"
- proxy-from-env: "npm:^1.1.0"
- socks-proxy-agent: "npm:^8.0.5"
- checksum: 10c0/7fd4e6f36bf17098a686d4aee3b8394abfc0b0537c2174ce96b0a4223198b9fafb16576c90108a3fcfc2af0168bd7747152bfa1f58e8fee91d3780e79aab7fd8
- languageName: node
- linkType: hard
-
"proxy-from-env@npm:1.0.0":
version: 1.0.0
resolution: "proxy-from-env@npm:1.0.0"
@@ -5108,13 +3708,6 @@ __metadata:
languageName: node
linkType: hard
-"proxy-from-env@npm:^1.1.0":
- version: 1.1.0
- resolution: "proxy-from-env@npm:1.1.0"
- checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b
- languageName: node
- linkType: hard
-
"pump@npm:^3.0.0":
version: 3.0.2
resolution: "pump@npm:3.0.2"
@@ -5125,51 +3718,6 @@ __metadata:
languageName: node
linkType: hard
-"punycode@npm:^1.4.1":
- version: 1.4.1
- resolution: "punycode@npm:1.4.1"
- checksum: 10c0/354b743320518aef36f77013be6e15da4db24c2b4f62c5f1eb0529a6ed02fbaf1cb52925785f6ab85a962f2b590d9cd5ad730b70da72b5f180e2556b8bd3ca08
- languageName: node
- linkType: hard
-
-"puppeteer-core@npm:24.35.0":
- version: 24.35.0
- resolution: "puppeteer-core@npm:24.35.0"
- dependencies:
- "@puppeteer/browsers": "npm:2.11.1"
- chromium-bidi: "npm:12.0.1"
- debug: "npm:^4.4.3"
- devtools-protocol: "npm:0.0.1534754"
- typed-query-selector: "npm:^2.12.0"
- webdriver-bidi-protocol: "npm:0.3.10"
- ws: "npm:^8.19.0"
- checksum: 10c0/38a45a1e8bc1f688e0d6a98dd630d5e60485657510fc572077889e48dd82d22f354786dabfb8d7afde107602a7a7e35d046ac95dbfe93b880574d2e523b8a8d6
- languageName: node
- linkType: hard
-
-"puppeteer@npm:^24.3.0":
- version: 24.35.0
- resolution: "puppeteer@npm:24.35.0"
- dependencies:
- "@puppeteer/browsers": "npm:2.11.1"
- chromium-bidi: "npm:12.0.1"
- cosmiconfig: "npm:^9.0.0"
- devtools-protocol: "npm:0.0.1534754"
- puppeteer-core: "npm:24.35.0"
- typed-query-selector: "npm:^2.12.0"
- bin:
- puppeteer: lib/cjs/puppeteer/node/cli.js
- checksum: 10c0/2a7f3a5175bae9b52b4a071c99436bd3b8697faa6eb3fab8589950ab6b7a0d6b176c7573d256e2781a5f824cd03dd9561043f4371f1dfc8a7e6e8c9d280b5730
- languageName: node
- linkType: hard
-
-"qjobs@npm:^1.2.0":
- version: 1.2.0
- resolution: "qjobs@npm:1.2.0"
- checksum: 10c0/772207772b856a3b1ec673b11a6cda074f1b82821644f2d042504b438ea3ea1fe918555547491e717e8694ec105379fe5139fc5ddd7937b21f7712bb648ed01d
- languageName: node
- linkType: hard
-
"qs@npm:6.13.0":
version: 6.13.0
resolution: "qs@npm:6.13.0"
@@ -5179,7 +3727,7 @@ __metadata:
languageName: node
linkType: hard
-"qs@npm:~6.14.0, qs@npm:~6.14.1":
+"qs@npm:~6.14.1":
version: 6.14.1
resolution: "qs@npm:6.14.1"
dependencies:
@@ -5188,16 +3736,7 @@ __metadata:
languageName: node
linkType: hard
-"randombytes@npm:^2.1.0":
- version: 2.1.0
- resolution: "randombytes@npm:2.1.0"
- dependencies:
- safe-buffer: "npm:^5.1.0"
- checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3
- languageName: node
- linkType: hard
-
-"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1":
+"range-parser@npm:~1.2.1":
version: 1.2.1
resolution: "range-parser@npm:1.2.1"
checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0
@@ -5216,18 +3755,6 @@ __metadata:
languageName: node
linkType: hard
-"raw-body@npm:~2.5.3":
- version: 2.5.3
- resolution: "raw-body@npm:2.5.3"
- dependencies:
- bytes: "npm:~3.1.2"
- http-errors: "npm:~2.0.1"
- iconv-lite: "npm:~0.4.24"
- unpipe: "npm:~1.0.0"
- checksum: 10c0/449844344fc90547fb994383a494b83300e4f22199f146a79f68d78a199a8f2a923ea9fd29c3be979bfd50291a3884733619ffc15ba02a32e703b612f8d3f74a
- languageName: node
- linkType: hard
-
"react-refresh@npm:^0.16.0":
version: 0.16.0
resolution: "react-refresh@npm:0.16.0"
@@ -5242,15 +3769,6 @@ __metadata:
languageName: node
linkType: hard
-"readdirp@npm:~3.6.0":
- version: 3.6.0
- resolution: "readdirp@npm:3.6.0"
- dependencies:
- picomatch: "npm:^2.2.1"
- checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b
- languageName: node
- linkType: hard
-
"regenerator-runtime@npm:^0.14.1":
version: 0.14.1
resolution: "regenerator-runtime@npm:0.14.1"
@@ -5267,27 +3785,6 @@ __metadata:
languageName: node
linkType: hard
-"require-directory@npm:^2.1.1":
- version: 2.1.1
- resolution: "require-directory@npm:2.1.1"
- checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99
- languageName: node
- linkType: hard
-
-"requires-port@npm:^1.0.0":
- version: 1.0.0
- resolution: "requires-port@npm:1.0.0"
- checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267
- languageName: node
- linkType: hard
-
-"resolve-from@npm:^4.0.0":
- version: 4.0.0
- resolution: "resolve-from@npm:4.0.0"
- checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190
- languageName: node
- linkType: hard
-
"restore-cursor@npm:^3.1.0":
version: 3.1.0
resolution: "restore-cursor@npm:3.1.0"
@@ -5312,17 +3809,6 @@ __metadata:
languageName: node
linkType: hard
-"rimraf@npm:^3.0.2":
- version: 3.0.2
- resolution: "rimraf@npm:3.0.2"
- dependencies:
- glob: "npm:^7.1.3"
- bin:
- rimraf: bin.js
- checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8
- languageName: node
- linkType: hard
-
"rxjs@npm:^7.5.1":
version: 7.8.2
resolution: "rxjs@npm:7.8.2"
@@ -5332,24 +3818,13 @@ __metadata:
languageName: node
linkType: hard
-"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2":
+"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.2":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3
languageName: node
linkType: hard
-"safe-regex-test@npm:^1.1.0":
- version: 1.1.0
- resolution: "safe-regex-test@npm:1.1.0"
- dependencies:
- call-bound: "npm:^1.0.2"
- es-errors: "npm:^1.3.0"
- is-regex: "npm:^1.2.1"
- checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665
- languageName: node
- linkType: hard
-
"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
@@ -5383,15 +3858,6 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.7.3":
- version: 7.7.3
- resolution: "semver@npm:7.7.3"
- bin:
- semver: bin/semver.js
- checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e
- languageName: node
- linkType: hard
-
"send@npm:0.19.0":
version: 0.19.0
resolution: "send@npm:0.19.0"
@@ -5413,15 +3879,6 @@ __metadata:
languageName: node
linkType: hard
-"serialize-javascript@npm:^6.0.2":
- version: 6.0.2
- resolution: "serialize-javascript@npm:6.0.2"
- dependencies:
- randombytes: "npm:^2.1.0"
- checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2
- languageName: node
- linkType: hard
-
"serve-static@npm:1.16.2":
version: 1.16.2
resolution: "serve-static@npm:1.16.2"
@@ -5434,7 +3891,7 @@ __metadata:
languageName: node
linkType: hard
-"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0":
+"setprototypeof@npm:1.2.0":
version: 1.2.0
resolution: "setprototypeof@npm:1.2.0"
checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc
@@ -5519,30 +3976,6 @@ __metadata:
languageName: node
linkType: hard
-"sinon-chai@npm:^3.7.0":
- version: 3.7.0
- resolution: "sinon-chai@npm:3.7.0"
- peerDependencies:
- chai: ^4.0.0
- sinon: ">=4.0.0"
- checksum: 10c0/9bbb0494be89c313f5287c2a0c9890104e3070ad6bf06c359b0c3cd776ea6273f7846ee1ab01fa2e0328e741f8717348669ee232e83b94b193676a56f48d2c63
- languageName: node
- linkType: hard
-
-"sinon@npm:^18.0.1":
- version: 18.0.1
- resolution: "sinon@npm:18.0.1"
- dependencies:
- "@sinonjs/commons": "npm:^3.0.1"
- "@sinonjs/fake-timers": "npm:11.2.2"
- "@sinonjs/samsam": "npm:^8.0.0"
- diff: "npm:^5.2.0"
- nise: "npm:^6.0.0"
- supports-color: "npm:^7"
- checksum: 10c0/c4554b8d9654d42fc4baefecd3b5ac42bcce73ad926d58521233d9c355dc2c1a0d73c55e5b2c929b6814e528cd9b54bc61096b9288579f9b284edd6e3d2da3df
- languageName: node
- linkType: hard
-
"slice-ansi@npm:^3.0.0":
version: 3.0.0
resolution: "slice-ansi@npm:3.0.0"
@@ -5572,42 +4005,7 @@ __metadata:
languageName: node
linkType: hard
-"socket.io-adapter@npm:~2.5.2":
- version: 2.5.5
- resolution: "socket.io-adapter@npm:2.5.5"
- dependencies:
- debug: "npm:~4.3.4"
- ws: "npm:~8.17.1"
- checksum: 10c0/04a5a2a9c4399d1b6597c2afc4492ab1e73430cc124ab02b09e948eabf341180b3866e2b61b5084cb899beb68a4db7c328c29bda5efb9207671b5cb0bc6de44e
- languageName: node
- linkType: hard
-
-"socket.io-parser@npm:~4.2.4":
- version: 4.2.4
- resolution: "socket.io-parser@npm:4.2.4"
- dependencies:
- "@socket.io/component-emitter": "npm:~3.1.0"
- debug: "npm:~4.3.1"
- checksum: 10c0/9383b30358fde4a801ea4ec5e6860915c0389a091321f1c1f41506618b5cf7cd685d0a31c587467a0c4ee99ef98c2b99fb87911f9dfb329716c43b587f29ca48
- languageName: node
- linkType: hard
-
-"socket.io@npm:^4.7.2":
- version: 4.8.1
- resolution: "socket.io@npm:4.8.1"
- dependencies:
- accepts: "npm:~1.3.4"
- base64id: "npm:~2.0.0"
- cors: "npm:~2.8.5"
- debug: "npm:~4.3.2"
- engine.io: "npm:~6.6.0"
- socket.io-adapter: "npm:~2.5.2"
- socket.io-parser: "npm:~4.2.4"
- checksum: 10c0/acf931a2bb235be96433b71da3d8addc63eeeaa8acabd33dc8d64e12287390a45f1e9f389a73cf7dc336961cd491679741b7a016048325c596835abbcc017ca9
- languageName: node
- linkType: hard
-
-"socks-proxy-agent@npm:^8.0.3, socks-proxy-agent@npm:^8.0.5":
+"socks-proxy-agent@npm:^8.0.3":
version: 8.0.5
resolution: "socks-proxy-agent@npm:8.0.5"
dependencies:
@@ -5635,13 +4033,6 @@ __metadata:
languageName: node
linkType: hard
-"source-map@npm:^0.6.1, source-map@npm:~0.6.1":
- version: 0.6.1
- resolution: "source-map@npm:0.6.1"
- checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011
- languageName: node
- linkType: hard
-
"sprintf-js@npm:^1.1.3":
version: 1.1.3
resolution: "sprintf-js@npm:1.1.3"
@@ -5686,43 +4077,7 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:~1.5.0":
- version: 1.5.0
- resolution: "statuses@npm:1.5.0"
- checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940
- languageName: node
- linkType: hard
-
-"statuses@npm:~2.0.2":
- version: 2.0.2
- resolution: "statuses@npm:2.0.2"
- checksum: 10c0/a9947d98ad60d01f6b26727570f3bcceb6c8fa789da64fe6889908fe2e294d57503b14bf2b5af7605c2d36647259e856635cd4c49eab41667658ec9d0080ec3f
- languageName: node
- linkType: hard
-
-"streamroller@npm:^3.1.5":
- version: 3.1.5
- resolution: "streamroller@npm:3.1.5"
- dependencies:
- date-format: "npm:^4.0.14"
- debug: "npm:^4.3.4"
- fs-extra: "npm:^8.1.0"
- checksum: 10c0/0bdeec34ad37487d959ba908f17067c938f544db88b5bb1669497a67a6b676413229ce5a6145c2812d06959ebeb8842e751076647d4b323ca06be612963b9099
- languageName: node
- linkType: hard
-
-"streamx@npm:^2.15.0, streamx@npm:^2.21.0":
- version: 2.23.0
- resolution: "streamx@npm:2.23.0"
- dependencies:
- events-universal: "npm:^1.0.0"
- fast-fifo: "npm:^1.3.2"
- text-decoder: "npm:^1.1.0"
- checksum: 10c0/15708ce37818d588632fe1104e8febde573e33e8c0868bf583fce0703f3faf8d2a063c278e30df2270206811b69997f64eb78792099933a1fe757e786fbcbd44
- languageName: node
- linkType: hard
-
-"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
+"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0":
version: 4.2.3
resolution: "string-width@npm:4.2.3"
dependencies:
@@ -5769,23 +4124,7 @@ __metadata:
languageName: node
linkType: hard
-"strip-json-comments@npm:^3.1.1":
- version: 3.1.1
- resolution: "strip-json-comments@npm:3.1.1"
- checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd
- languageName: node
- linkType: hard
-
-"supports-color@npm:^5.3.0":
- version: 5.5.0
- resolution: "supports-color@npm:5.5.0"
- dependencies:
- has-flag: "npm:^3.0.0"
- checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05
- languageName: node
- linkType: hard
-
-"supports-color@npm:^7, supports-color@npm:^7.1.0":
+"supports-color@npm:^7.1.0":
version: 7.2.0
resolution: "supports-color@npm:7.2.0"
dependencies:
@@ -5813,34 +4152,6 @@ __metadata:
languageName: node
linkType: hard
-"tar-fs@npm:^3.1.1":
- version: 3.1.1
- resolution: "tar-fs@npm:3.1.1"
- dependencies:
- bare-fs: "npm:^4.0.1"
- bare-path: "npm:^3.0.0"
- pump: "npm:^3.0.0"
- tar-stream: "npm:^3.1.5"
- dependenciesMeta:
- bare-fs:
- optional: true
- bare-path:
- optional: true
- checksum: 10c0/0c677d711c4aa41f94e1a712aa647022ba1910ff84430739e5d9e95a615e3ea1b7112dc93164fc8ce30dc715befcf9cfdc64da27d4e7958d73c59bda06aa0d8e
- languageName: node
- linkType: hard
-
-"tar-stream@npm:^3.1.5":
- version: 3.1.7
- resolution: "tar-stream@npm:3.1.7"
- dependencies:
- b4a: "npm:^1.6.4"
- fast-fifo: "npm:^1.2.0"
- streamx: "npm:^2.15.0"
- checksum: 10c0/a09199d21f8714bd729993ac49b6c8efcb808b544b89f23378ad6ffff6d1cb540878614ba9d4cfec11a64ef39e1a6f009a5398371491eb1fda606ffc7f70f718
- languageName: node
- linkType: hard
-
"tar@npm:7.5.3":
version: 7.5.3
resolution: "tar@npm:7.5.3"
@@ -5861,15 +4172,6 @@ __metadata:
languageName: node
linkType: hard
-"text-decoder@npm:^1.1.0":
- version: 1.2.3
- resolution: "text-decoder@npm:1.2.3"
- dependencies:
- b4a: "npm:^1.6.4"
- checksum: 10c0/569d776b9250158681c83656ef2c3e0a5d5c660c27ca69f87eedef921749a4fbf02095e5f9a0f862a25cf35258379b06e31dee9c125c9f72e273b7ca1a6d1977
- languageName: node
- linkType: hard
-
"throttleit@npm:^1.0.0":
version: 1.0.1
resolution: "throttleit@npm:1.0.1"
@@ -5912,13 +4214,6 @@ __metadata:
languageName: node
linkType: hard
-"tmp@npm:^0.2.1":
- version: 0.2.3
- resolution: "tmp@npm:0.2.3"
- checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125
- languageName: node
- linkType: hard
-
"tmp@npm:~0.2.4":
version: 0.2.5
resolution: "tmp@npm:0.2.5"
@@ -5935,7 +4230,7 @@ __metadata:
languageName: node
linkType: hard
-"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1":
+"toidentifier@npm:1.0.1":
version: 1.0.1
resolution: "toidentifier@npm:1.0.1"
checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1
@@ -5960,7 +4255,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.0.1, tslib@npm:^2.1.0, tslib@npm:^2.8.0":
+"tslib@npm:^2.1.0, tslib@npm:^2.8.0":
version: 2.8.1
resolution: "tslib@npm:2.8.1"
checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62
@@ -5983,20 +4278,6 @@ __metadata:
languageName: node
linkType: hard
-"type-detect@npm:4.0.8":
- version: 4.0.8
- resolution: "type-detect@npm:4.0.8"
- checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd
- languageName: node
- linkType: hard
-
-"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0":
- version: 4.1.0
- resolution: "type-detect@npm:4.1.0"
- checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a
- languageName: node
- linkType: hard
-
"type-fest@npm:^0.20.2":
version: 0.20.2
resolution: "type-fest@npm:0.20.2"
@@ -6028,22 +4309,6 @@ __metadata:
languageName: node
linkType: hard
-"typed-query-selector@npm:^2.12.0":
- version: 2.12.0
- resolution: "typed-query-selector@npm:2.12.0"
- checksum: 10c0/069509887ecfff824a470f5f93d300cc9223cb059a36c47ac685f2812c4c9470340e07615893765e4264cef1678507532fa78f642fd52f276b589f7f5d791f79
- languageName: node
- linkType: hard
-
-"ua-parser-js@npm:^0.7.30":
- version: 0.7.40
- resolution: "ua-parser-js@npm:0.7.40"
- bin:
- ua-parser-js: script/cli.js
- checksum: 10c0/d114f0b71b5b0106dcc0cb7cc26a44690073e886fa1444f8c03131d4f57b3f6645f9fb7b308b0aaaa5a2774461f9e8fe1a2a1c3ff69aa531316fcf14cd44dbe3
- languageName: node
- linkType: hard
-
"undici-types@npm:~6.21.0":
version: 6.21.0
resolution: "undici-types@npm:6.21.0"
@@ -6069,13 +4334,6 @@ __metadata:
languageName: node
linkType: hard
-"universalify@npm:^0.1.0":
- version: 0.1.2
- resolution: "universalify@npm:0.1.2"
- checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045
- languageName: node
- linkType: hard
-
"universalify@npm:^2.0.0":
version: 2.0.1
resolution: "universalify@npm:2.0.1"
@@ -6134,7 +4392,7 @@ __metadata:
languageName: node
linkType: hard
-"vary@npm:^1, vary@npm:~1.1.2":
+"vary@npm:~1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f
@@ -6152,13 +4410,6 @@ __metadata:
languageName: node
linkType: hard
-"void-elements@npm:^2.0.0":
- version: 2.0.1
- resolution: "void-elements@npm:2.0.1"
- checksum: 10c0/23b4f35bbeabcaa5c87a9f638ae80862a9313dccbaa8973b0eada81dbe97488ae11baf4d8aa2846bc397d31456afdfd8d791bb44c542f83735e6d04af6996f4d
- languageName: node
- linkType: hard
-
"weak-lru-cache@npm:^1.2.2":
version: 1.2.2
resolution: "weak-lru-cache@npm:1.2.2"
@@ -6166,24 +4417,6 @@ __metadata:
languageName: node
linkType: hard
-"webdriver-bidi-protocol@npm:0.3.10":
- version: 0.3.10
- resolution: "webdriver-bidi-protocol@npm:0.3.10"
- checksum: 10c0/fc66ba53b31c78a73ff7841303948894b77263051c146fed4331596b95f67a2e96dfaeb895483002bb152317d9cfbd215d9a66ef114f66dc17de2c32ac5ef33c
- languageName: node
- linkType: hard
-
-"which@npm:^1.2.1":
- version: 1.3.1
- resolution: "which@npm:1.3.1"
- dependencies:
- isexe: "npm:^2.0.0"
- bin:
- which: ./bin/which
- checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59
- languageName: node
- linkType: hard
-
"which@npm:^2.0.1":
version: 2.0.2
resolution: "which@npm:2.0.2"
@@ -6206,13 +4439,6 @@ __metadata:
languageName: node
linkType: hard
-"workerpool@npm:^9.2.0":
- version: 9.3.4
- resolution: "workerpool@npm:9.3.4"
- checksum: 10c0/b09d80c81c6e50dab1bc6cc3a4180d4222068f17ada9b04fb7053bf98fdbe3dbd6bdd04ad1420363f5391cbf57d622ecd2680469ad0137aef990f510ab807a09
- languageName: node
- linkType: hard
-
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
version: 7.0.0
resolution: "wrap-ansi@npm:7.0.0"
@@ -6253,43 +4479,6 @@ __metadata:
languageName: node
linkType: hard
-"ws@npm:^8.19.0":
- version: 8.19.0
- resolution: "ws@npm:8.19.0"
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ">=5.0.2"
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- checksum: 10c0/4741d9b9bc3f9c791880882414f96e36b8b254e34d4b503279d6400d9a4b87a033834856dbdd94ee4b637944df17ea8afc4bce0ff4a1560d2166be8855da5b04
- languageName: node
- linkType: hard
-
-"ws@npm:~8.17.1":
- version: 8.17.1
- resolution: "ws@npm:8.17.1"
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ">=5.0.2"
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- checksum: 10c0/f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe
- languageName: node
- linkType: hard
-
-"y18n@npm:^5.0.5":
- version: 5.0.8
- resolution: "y18n@npm:5.0.8"
- checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249
- languageName: node
- linkType: hard
-
"yallist@npm:^4.0.0":
version: 4.0.0
resolution: "yallist@npm:4.0.0"
@@ -6304,62 +4493,6 @@ __metadata:
languageName: node
linkType: hard
-"yargs-parser@npm:^20.2.2":
- version: 20.2.9
- resolution: "yargs-parser@npm:20.2.9"
- checksum: 10c0/0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72
- languageName: node
- linkType: hard
-
-"yargs-parser@npm:^21.1.1":
- version: 21.1.1
- resolution: "yargs-parser@npm:21.1.1"
- checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2
- languageName: node
- linkType: hard
-
-"yargs-unparser@npm:^2.0.0":
- version: 2.0.0
- resolution: "yargs-unparser@npm:2.0.0"
- dependencies:
- camelcase: "npm:^6.0.0"
- decamelize: "npm:^4.0.0"
- flat: "npm:^5.0.2"
- is-plain-obj: "npm:^2.1.0"
- checksum: 10c0/a5a7d6dc157efa95122e16780c019f40ed91d4af6d2bac066db8194ed0ec5c330abb115daa5a79ff07a9b80b8ea80c925baacf354c4c12edd878c0529927ff03
- languageName: node
- linkType: hard
-
-"yargs@npm:^16.1.1":
- version: 16.2.0
- resolution: "yargs@npm:16.2.0"
- dependencies:
- cliui: "npm:^7.0.2"
- escalade: "npm:^3.1.1"
- get-caller-file: "npm:^2.0.5"
- require-directory: "npm:^2.1.1"
- string-width: "npm:^4.2.0"
- y18n: "npm:^5.0.5"
- yargs-parser: "npm:^20.2.2"
- checksum: 10c0/b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651
- languageName: node
- linkType: hard
-
-"yargs@npm:^17.7.2":
- version: 17.7.2
- resolution: "yargs@npm:17.7.2"
- dependencies:
- cliui: "npm:^8.0.1"
- escalade: "npm:^3.1.1"
- get-caller-file: "npm:^2.0.5"
- require-directory: "npm:^2.1.1"
- string-width: "npm:^4.2.3"
- y18n: "npm:^5.0.5"
- yargs-parser: "npm:^21.1.1"
- checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05
- languageName: node
- linkType: hard
-
"yauzl@npm:^2.10.0":
version: 2.10.0
resolution: "yauzl@npm:2.10.0"
@@ -6369,17 +4502,3 @@ __metadata:
checksum: 10c0/f265002af7541b9ec3589a27f5fb8f11cf348b53cc15e2751272e3c062cd73f3e715bc72d43257de71bbaecae446c3f1b14af7559e8ab0261625375541816422
languageName: node
linkType: hard
-
-"yocto-queue@npm:^0.1.0":
- version: 0.1.0
- resolution: "yocto-queue@npm:0.1.0"
- checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f
- languageName: node
- linkType: hard
-
-"zod@npm:^3.24.1":
- version: 3.25.76
- resolution: "zod@npm:3.25.76"
- checksum: 10c0/5718ec35e3c40b600316c5b4c5e4976f7fee68151bc8f8d90ec18a469be9571f072e1bbaace10f1e85cf8892ea12d90821b200e980ab46916a6166a4260a983c
- languageName: node
- linkType: hard