From fcab56524ca8bd7b7137202431e7578ec325d6da Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 17:46:18 +0100 Subject: [PATCH 01/16] WIP --- .gitignore | 2 + cypress.config.js | 14 + cypress/e2e/README.md | 6 + cypress/e2e/all.cy.js | 2145 ++++++++++++++++++++++++++++ cypress/e2e/amazon-s3.cy.js | 96 ++ cypress/e2e/emitter.cy.js | 137 ++ cypress/e2e/static-functions.cy.js | 387 +++++ cypress/support/e2e.js | 2 + package.json | 10 +- src/dropzone.js | 4 +- src/options.js | 5 +- yarn.lock | 2005 +++++++++++++++++++++++++- 12 files changed, 4781 insertions(+), 32 deletions(-) create mode 100644 cypress/e2e/README.md create mode 100644 cypress/e2e/all.cy.js create mode 100644 cypress/e2e/amazon-s3.cy.js create mode 100644 cypress/e2e/emitter.cy.js create mode 100644 cypress/e2e/static-functions.cy.js 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..61ba7b842 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -1,4 +1,5 @@ const { defineConfig } = require('cypress') +const webpackPreprocessor = require("@cypress/webpack-preprocessor"); module.exports = defineConfig({ e2e: { @@ -8,5 +9,18 @@ module.exports = defineConfig({ return require('./cypress/plugins/index.js')(on, config) }, baseUrl: 'http://localhost:8888', + setupNodeEvents(on, config) { + const options = webpackPreprocessor.defaultOptions || {}; + + options.webpackOptions = options.webpackOptions || {}; + options.webpackOptions.module = options.webpackOptions.module || {}; + options.webpackOptions.module.rules = [ + ...(options.webpackOptions.module.rules || []), + { test: /\.html$/i, type: "asset/source" }, + ]; + + on("file:preprocessor", webpackPreprocessor(options)); + return config; + }, }, }) diff --git a/cypress/e2e/README.md b/cypress/e2e/README.md new file mode 100644 index 000000000..664d9e550 --- /dev/null +++ b/cypress/e2e/README.md @@ -0,0 +1,6 @@ +Initially all tests were just written in `all.js` but this file has become +quite difficult to maintain. + +The idea is to have one file per feature now, which makes it a lot easier to +manage. Not all groups have been extracted from `all.js` yet though, but please +don't add any more to that file. diff --git a/cypress/e2e/all.cy.js b/cypress/e2e/all.cy.js new file mode 100644 index 000000000..099465ecf --- /dev/null +++ b/cypress/e2e/all.cy.js @@ -0,0 +1,2145 @@ +import { Dropzone } from "../../src/dropzone.js"; + +describe("Dropzone", 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; + beforeEach(() => (xhr = Cypress.sinon.useFakeXMLHttpRequest())); + + describe("constructor()", function () { + let dropzone = null; + + afterEach(function () { + if (dropzone != null) { + return dropzone.destroy(); + } + }); + + 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.", + )); + + 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.", + ); + }); + + it("should set itself as element.dropzone", function () { + let element = document.createElement("div"); + dropzone = new Dropzone(element, { url: "url" }); + 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 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 expect(dropzone.options.url).to.equal("real-action"); + }); + + return describe("options", function () { + let element = null; + let element2 = null; + beforeEach(function () { + element = document.createElement("div"); + element.id = "test-element"; + element2 = document.createElement("div"); + element2.id = "test-element2"; + return (Dropzone.options.testElement = { + url: "/some/url", + parallelUploads: 10, + }); + }); + afterEach(() => delete Dropzone.options.testElement); + + it("should take the options set in Dropzone.options", function () { + dropzone = new Dropzone(element); + 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 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 expect(dropzone.options.parallelUploads).to.equal(2); + }); + + 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, + }); + + expect(fallback).to.have.been.calledOnce; + }); + + return describe("options.clickable", function () { + let clickableElement = null; + dropzone = null; + beforeEach(function () { + clickableElement = document.createElement("div"); + clickableElement.className = "some-clickable"; + return document.body.appendChild(clickableElement); + }); + afterEach(function () { + document.body.removeChild(clickableElement); + if (dropzone != null) { + return dropzone.destroy; + } + }); + + it("should use the default element if clickable == true", function () { + dropzone = new Dropzone(element, { clickable: true }); + 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" }); + expect(dropzone.clickableElements).to.deep.equal([clickableElement]); + }); + it("should simply use the provided element", function () { + dropzone = new Dropzone(element, { clickable: clickableElement }); + expect(dropzone.clickableElements).to.deep.equal([clickableElement]); + }); + it("should accept multiple clickable elements", function () { + dropzone = new Dropzone(element, { + clickable: [document.body, ".some-clickable"], + }); + expect(dropzone.clickableElements).to.deep.equal([ + document.body, + clickableElement, + ]); + }); + it("should throw an exception if the element is invalid", () => + expect( + () => + (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.", + )); + }); + }); + }); + + describe("init()", function () { + describe("clickable", function () { + let dropzones = { + "using acceptedFiles": new Dropzone( + Dropzone.createElement('
'), + { 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 }, + ); + return expect(dropzone.hiddenFileInput.hasAttribute("accept")).to.be + .false; + }); + + return (() => { + let result = []; + for (let name in dropzones) { + var dropzone = dropzones[name]; + result.push( + describe(name, () => + (function (dropzone) { + it("should create a hidden file input if clickable", function () { + expect(dropzone.hiddenFileInput).to.be.ok; + expect(dropzone.hiddenFileInput.tagName).to.equal("INPUT"); + }); + + it("should have a tabindex of -1", function () { + expect(dropzone.hiddenFileInput.tabIndex).to.equal(-1); + }); + + it("should use the acceptParameter", () => + 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", () => + (() => { + let result1 = []; + for (let i = 0; i <= 3; i++) { + let { hiddenFileInput } = dropzone; + let event = document.createEvent("HTMLEvents"); + event.initEvent("change", true, true); + hiddenFileInput.dispatchEvent(event); + expect(dropzone.hiddenFileInput).to.not.equal( + hiddenFileInput, + ); + result1.push( + expect( + Dropzone.elementInside(hiddenFileInput, document), + ).to.not.be.ok, + ); + } + return result1; + })()); + })(dropzone), + ), + ); + } + return result; + })(); + }); + + it("should create a .dz-message element", function () { + let element = Dropzone.createElement( + '
', + ); + let dropzone = new Dropzone(element, { + clickable: true, + acceptParameter: null, + }); + 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, { + clickable: true, + acceptParameter: null, + }); + expect(element.querySelector(".dz-message")).to.equal(msg); + + return expect(element.querySelectorAll(".dz-message").length).to.equal(1); + }); + }); + + describe("options", function () { + let element = null; + let dropzone = null; + + beforeEach(function () { + element = Dropzone.createElement("
"); + return (dropzone = new Dropzone(element, { + maxFilesize: 4, + url: "url", + acceptedFiles: "audio/*,image/png", + maxFiles: 3, + })); + }); + + return describe("file specific", function () { + let file = null; + beforeEach(function () { + file = { + name: "test name", + size: 2 * 1024 * 1024, + width: 200, + height: 100, + upload: { + filename: "test name", + }, + }; + return dropzone.options.addedfile.call(dropzone, file); + }); + + describe(".addedFile()", () => + it("should properly create the previewElement", function () { + 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 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 () { + dropzone.options.error.call(dropzone, file, { + error: "test message", + }); + + return expect( + file.previewElement.querySelector("[data-dz-errormessage]") + .innerHTML, + ).to.equal("test message"); + }); + }); + + describe(".thumbnail()", () => + it("should properly insert the error", function () { + let transparentGif = + "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; + dropzone.options.thumbnail.call(dropzone, file, transparentGif); + let thumbnail = file.previewElement.querySelector( + "[data-dz-thumbnail]", + ); + 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); + expect( + file.previewElement.querySelector("[data-dz-uploadprogress]").style + .width, + ).to.equal("0%"); + dropzone.options.uploadprogress.call(dropzone, file, 80); + expect( + file.previewElement.querySelector("[data-dz-uploadprogress]").style + .width, + ).to.equal("80%"); + dropzone.options.uploadprogress.call(dropzone, file, 90); + expect( + file.previewElement.querySelector("[data-dz-uploadprogress]").style + .width, + ).to.equal("90%"); + dropzone.options.uploadprogress.call(dropzone, file, 100); + return expect( + file.previewElement.querySelector("[data-dz-uploadprogress]").style + .width, + ).to.equal("100%"); + })); + + return describe(".resize()", function () { + describe("with default thumbnail settings", function () { + it("should properly return target dimensions for 'contain'", function () { + let info = dropzone.options.resize.call( + dropzone, + file, + 120, + 120, + "crop", + ); + expect(info.trgWidth).to.equal(120); + expect(info.trgHeight).to.equal(100); + info = dropzone.options.resize.call( + dropzone, + file, + 100, + 100, + "crop", + ); + expect(info.trgWidth).to.equal(100); + return expect(info.trgHeight).to.equal(100); + }); + + it("should properly return target dimensions for 'contain'", function () { + let info = dropzone.options.resize.call( + dropzone, + file, + 120, + 120, + "contain", + ); + expect(info.trgWidth).to.equal(120); + expect(info.trgHeight).to.equal(60); + info = dropzone.options.resize.call( + dropzone, + file, + 100, + 100, + "contain", + ); + expect(info.trgWidth).to.equal(100); + return expect(info.trgHeight).to.equal(50); + }); + }); + + return describe("with null thumbnail settings", function () { + it("should properly return target dimensions for crop", function () { + let testSettings = [ + [null, null], + [null, 80], + [150, null], + ]; + + 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); + } + + if (i === 2) { + expect(info.trgWidth).to.equal(150); + expect(info.trgHeight).to.equal(75); + } + } + }); + + it("should properly return target dimensions for contain", function () { + let testSettings = [ + [null, 80], + [150, null], + ]; + + 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); + } + + if (i === 1) { + expect(info.trgWidth).to.equal(150); + expect(info.trgHeight).to.equal(75); + } + } + }); + }); + }); + }); + }); + + 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, { + maxFilesize: 4, + maxFiles: 100, + url: "url", + acceptedFiles: "audio/*,image/png", + uploadprogress() {}, + })); + }); + 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, + )); + + it("shouldn't pass if the filesize is too big", () => + dropzone.accept({ size: 10 * 1024 * 1024, type: "audio/mp3" }, (err) => + 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, + ); + dropzone.accept( + { type: "image/png" }, + (err) => expect(err).to.be.undefined, + ); + return dropzone.accept( + { type: "audio/wav" }, + (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) => + 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 () { + Cypress.sinon.stub(dropzone, "getAcceptedFiles"); + let file = { type: "audio/mp3" }; + + dropzone.getAcceptedFiles.returns({ length: 99 }); + + dropzone.options.dictMaxFilesExceeded = + "You can only upload {{maxFiles}} files."; + + let called = false; + dropzone.on("maxfilesexceeded", function (lfile) { + expect(lfile).to.equal(file); + return (called = true); + }); + + dropzone.accept(file, (err) => expect(err).to.be.undefined); + 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(called).to.be.ok; + + return dropzone.getAcceptedFiles.restore(); + }); + + it("should properly handle if maxFiles is 0", function () { + let file = { type: "audio/mp3" }; + + dropzone.options.maxFiles = 0; + + let called = false; + dropzone.on("maxfilesexceeded", function (lfile) { + expect(lfile).to.equal(file); + return (called = true); + }); + + dropzone.accept(file, (err) => + expect(err).to.equal("You cannot upload any more files."), + ); + return expect(called).to.be.ok; + }); + }); + + describe(".removeFile()", () => + 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(); + + Cypress.sinon.stub(dropzone, "cancelUpload"); + + dropzone.addFile(mockFile); + + // 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); + expect(dropzone.cancelUpload.callCount).to.equal(1); + }); + })); + + describe(".cancelUpload()", function () { + it("should properly cancel upload if file currently uploading", function (done) { + let mockFile = getMockFile(); + + dropzone.accept = (file, done) => done(); + + dropzone.addFile(mockFile); + + return setTimeout(function () { + 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); + return done(); + }, 10); + }); + + it("should properly cancel the upload if file is not yet uploading", function () { + let mockFile = getMockFile(); + + dropzone.accept = (file, done) => done(); + + // Making sure the file stays in the queue. + dropzone.options.parallelUploads = 0; + + dropzone.addFile(mockFile); + expect(mockFile.status).to.equal(Dropzone.QUEUED); + expect(dropzone.getQueuedFiles()[0]).to.equal(mockFile); + + dropzone.cancelUpload(mockFile); + 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) { + let mockFile = getMockFile(); + + dropzone.accept = (file, done) => done(); + + // Making sure the file stays in the queue. + dropzone.options.parallelUploads = 0; + + Cypress.sinon.spy(dropzone, "processQueue"); + + dropzone.addFile(mockFile); + return setTimeout(function () { + expect(dropzone.processQueue.callCount).to.equal(1); + + dropzone.cancelUpload(mockFile); + + 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(); + + dropzone.accept = (file, done) => done(); + + // Making sure the file stays in the queue. + dropzone.options.uploadMultiple = true; + dropzone.options.parallelUploads = 3; + + Cypress.sinon.spy(dropzone, "processFiles"); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + + return setTimeout(function () { + expect(dropzone.processFiles.callCount).to.equal(1); + + Cypress.sinon.spy(mock1.xhr, "abort"); + + dropzone.cancelUpload(mock1); + + expect(mock1.xhr === mock2.xhr && mock2.xhr === mock3.xhr).to.be.ok; + + expect(mock1.status).to.equal(Dropzone.CANCELED); + expect(mock2.status).to.equal(Dropzone.CANCELED); + expect(mock3.status).to.equal(Dropzone.CANCELED); + + // The XHR should only be aborted once! + expect(mock1.xhr.abort.callCount).to.equal(1); + + return done(); + }, 10); + }); + }); + + describe(".disable()", () => + 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 () { + expect(dropzone.getUploadingFiles().length).to.equal(1); + expect(dropzone.getQueuedFiles().length).to.equal(1); + expect(dropzone.files.length).to.equal(2); + + expect(dropzone.cancelUpload.callCount).to.equal(0); + + dropzone.disable(); + + // should cancel at least the uploading file (and may cancel queued too depending on impl) + expect(dropzone.cancelUpload.callCount).to.be.greaterThan(0); + + expect(dropzone.getUploadingFiles().length).to.equal(0); + expect(dropzone.getQueuedFiles().length).to.equal(0); + expect(dropzone.files.length).to.equal(2); + + 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 () { + dropzone.accept = (file, done) => done(); + dropzone.options.parallelUploads = 1; + + dropzone.addFile(getMockFile()); + dropzone.addFile(getMockFile()); + + // Force queue processing so states are set before assertions + dropzone.processQueue(); + + expect(dropzone.getUploadingFiles().length).to.equal(1); + expect(dropzone.getQueuedFiles().length).to.equal(1); + expect(dropzone.files.length).to.equal(2); + + Cypress.sinon.spy(dropzone, "disable"); + + dropzone.destroy(); + + expect(dropzone.disable.callCount).to.equal(1); + expect(element).to.not.have.property("dropzone"); + }); + /* + it("should properly cancel all pending uploads and remove all file references", function (done) { + dropzone.accept = (file, done) => done(); + + dropzone.options.parallelUploads = 1; + + dropzone.addFile(getMockFile()); + dropzone.addFile(getMockFile()); + + return setTimeout(function () { + expect(dropzone.getUploadingFiles().length).to.equal(1); + expect(dropzone.getQueuedFiles().length).to.equal(1); + expect(dropzone.files.length).to.equal(2); + + Cypress.sinon.spy(dropzone, "disable"); + + dropzone.destroy(); + + expect(dropzone.disable.callCount).to.equal(1); + expect(element).to.not.have.property("dropzone"); + return done(); + }, 10); + }); + */ + + it("should be able to create instance of dropzone on the same element after destroy", function () { + dropzone.destroy(); + 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 () { + expect(Dropzone.instances.indexOf(dropzone) !== -1).to.be.ok; + dropzone.destroy(); + return expect(Dropzone.instances.indexOf(dropzone) === -1).to.be.ok; + }); + }); + + describe(".filesize()", function () { + it("should handle files with 0 size properly", () => + expect(dropzone.filesize(0)).to.equal("0 b")); + + it("should convert to KiloBytes, etc..", function () { + 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; + + expect(dropzone.filesize(2 * 1024 * 1024)).to.equal( + "2 MB", + ); + return expect(dropzone.filesize(2 * 1000 * 1000)).to.equal( + "1.9 MB", + ); + }); + }); + + describe("._updateMaxFilesReachedClass()", function () { + it("should properly add the dz-max-files-reached class", function () { + dropzone.getAcceptedFiles = () => ({ length: 10 }); + dropzone.options.maxFiles = 10; + expect(dropzone.element.classList.contains("dz-max-files-reached")).to + .not.be.ok; + dropzone._updateMaxFilesReachedClass(); + return expect( + dropzone.element.classList.contains("dz-max-files-reached"), + ).to.be.ok; + }); + it("should fire the 'maxfilesreached' event when appropriate", function () { + let spy = Cypress.sinon.spy(); + dropzone.on("maxfilesreached", () => spy()); + dropzone.getAcceptedFiles = () => ({ length: 9 }); + dropzone.options.maxFiles = 10; + dropzone._updateMaxFilesReachedClass(); + expect(spy.notCalled).to.be.true; + dropzone.getAcceptedFiles = () => ({ length: 10 }); + dropzone._updateMaxFilesReachedClass(); + expect(spy.called).to.be.true; + dropzone.getAcceptedFiles = () => ({ length: 11 }); + dropzone._updateMaxFilesReachedClass(); + 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; + expect(dropzone.element.classList.contains("dz-max-files-reached")).to + .not.be.ok; + dropzone._updateMaxFilesReachedClass(); + expect(dropzone.element.classList.contains("dz-max-files-reached")).to + .be.ok; + dropzone.getAcceptedFiles = () => ({ length: 9 }); + dropzone._updateMaxFilesReachedClass(); + return expect( + dropzone.element.classList.contains("dz-max-files-reached"), + ).to.not.be.ok; + }); + }); + + return describe("events", () => { + describe("progress updates", () => + it("should properly emit a totaluploadprogress event", function (done) { + dropzone.files = [ + { + size: 1990, + accepted: true, + status: Dropzone.UPLOADING, + upload: { + progress: 20, + total: 2000, // The bytes to upload are higher than the file size + bytesSent: 400, + }, + }, + { + size: 1990, + accepted: true, + status: Dropzone.UPLOADING, + upload: { + progress: 10, + total: 2000, // The bytes to upload are higher than the file size + bytesSent: 200, + }, + }, + ]; + + let _called = 0; + + dropzone.on("totaluploadprogress", function (progress) { + expect(progress).to.equal(totalProgressExpectation); + if (++_called === 3) { + return done(); + } + }); + + var totalProgressExpectation = 15; + dropzone.emit("uploadprogress", {}); + + totalProgressExpectation = 97.5; + dropzone.files[0].upload.bytesSent = 2000; + dropzone.files[1].upload.bytesSent = 1900; + // It shouldn't matter that progress is not properly updated since the total size + // should be calculated from the bytes + dropzone.emit("uploadprogress", {}); + + totalProgressExpectation = 100; + dropzone.files[0].upload.bytesSent = 2000; + dropzone.files[1].upload.bytesSent = 2000; + // It shouldn't matter that progress is not properly updated since the total size + // should be calculated from the bytes + dropzone.emit("uploadprogress", {}); + + // Just so the afterEach hook doesn't try to cancel them. + dropzone.files[0].status = Dropzone.CANCELED; + return (dropzone.files[1].status = Dropzone.CANCELED); + })); + + it("should emit DOM events", function (done) { + let element = Dropzone.createElement(`
+ + + + + + +
`); + dropzone = new Dropzone(element, { url: "/the/url" }); + + var domEventTriggered = false; + element.addEventListener("dropzone:sending", function (evt) { + domEventTriggered = true; + }); + + let mock1 = getMockFile(); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(domEventTriggered).to.equal(true); + done(); + }, 10); + }); + }); + }); + + describe("helper function", function () { + let element = null; + let dropzone = null; + beforeEach(function () { + element = Dropzone.createElement("
"); + return (dropzone = new Dropzone(element, { url: "url" })); + }); + + describe("getExistingFallback()", function () { + it("should return undefined if no fallback", () => + expect(dropzone.getExistingFallback()).to.equal(undefined)); + + it("should only return the fallback element if it contains exactly fallback", function () { + element.appendChild( + Dropzone.createElement('
'), + ); + element.appendChild( + Dropzone.createElement('
'), + ); + return expect(dropzone.getExistingFallback()).to.equal(undefined); + }); + + it("should return divs as fallback", function () { + let fallback = Dropzone.createElement( + '
', + ); + element.appendChild(fallback); + return expect(fallback).to.equal(dropzone.getExistingFallback()); + }); + it("should return forms as fallback", function () { + let fallback = Dropzone.createElement( + '
', + ); + element.appendChild(fallback); + return expect(fallback).to.equal(dropzone.getExistingFallback()); + }); + }); + + describe("getFallbackForm()", function () { + it("should use the paramName without [0] if uploadMultiple is false", function () { + dropzone.options.uploadMultiple = false; + dropzone.options.paramName = "myFile"; + let fallback = dropzone.getFallbackForm(); + let fileInput = fallback.querySelector("input[type=file]"); + 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 expect(fileInput.name).to.equal("myFile[0]"); + }); + }); + + describe("getAcceptedFiles() / getRejectedFiles()", function () { + let mock2, mock3, mock4; + let mock1 = (mock2 = mock3 = mock4 = null); + beforeEach(function () { + mock1 = getMockFile(); + mock2 = getMockFile(); + mock3 = getMockFile(); + mock4 = getMockFile(); + dropzone.options.accept = function (file, done) { + if (file === mock1 || file === mock3) { + return done(); + } else { + return done("error"); + } + }; + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + return dropzone.addFile(mock4); + }); + + it("getAcceptedFiles() should only return accepted files", () => + expect(dropzone.getAcceptedFiles()).to.deep.equal([mock1, mock3])); + it("getRejectedFiles() should only return rejected files", () => + expect(dropzone.getRejectedFiles()).to.deep.equal([mock2, mock4])); + }); + + describe("getQueuedFiles()", () => + it("should return all files with the status Dropzone.QUEUED", function () { + let mock1 = getMockFile(); + let mock2 = getMockFile(); + let mock3 = getMockFile(); + let mock4 = getMockFile(); + + dropzone.options.accept = (file, done) => (file.done = done); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + dropzone.addFile(mock4); + + expect(dropzone.getQueuedFiles()).to.deep.equal([]); + + mock1.done(); + mock3.done(); + + 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(); + + dropzone.options.accept = (file, _done) => (file.done = _done); + dropzone.uploadFile = function () {}; + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + dropzone.addFile(mock4); + + expect(dropzone.getUploadingFiles()).to.deep.equal([]); + + mock1.done(); + mock3.done(); + + return setTimeout(function () { + 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); + return done(); + }, 10); + })); + + describe("getActiveFiles()", () => + 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); + + // IMPORTANT: stub the method Dropzone actually uses + Cypress.sinon.stub(dropzone, "uploadFiles").callsFake(() => {}); + + dropzone.options.parallelUploads = 2; + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + dropzone.addFile(mock4); + + expect(dropzone.getActiveFiles()).to.deep.equal([]); + + // Accept 1,3,4 (leave 2 unaccepted) + mock1.done(); + mock3.done(); + mock4.done(); + + // 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); + })); + /* + 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(); + + dropzone.options.accept = (file, _done) => (file.done = _done); + dropzone.uploadFile = function () {}; + dropzone.options.parallelUploads = 2; + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + dropzone.addFile(mock4); + + expect(dropzone.getActiveFiles()).to.deep.equal([]); + + mock1.done(); + mock3.done(); + mock4.done(); + + return setTimeout(function () { + 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 done(); + }, 10); + })); + */ + + return describe("getFilesWithStatus()", () => + it("should return all files with provided status", function () { + let mock1 = getMockFile(); + let mock2 = getMockFile(); + let mock3 = getMockFile(); + let mock4 = getMockFile(); + + dropzone.options.accept = (file, _done) => (file.done = _done); + dropzone.uploadFile = function () {}; + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + dropzone.addFile(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; + + 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]); + })); + }); + + describe("file handling", function () { + let mockFile = null; + let dropzone = null; + + beforeEach(function () { + mockFile = getMockFile(); + + let element = Dropzone.createElement("
"); + dropzone = new Dropzone(element, { url: "/the/url" }); + }); + + afterEach(() => dropzone.destroy()); + + describe("addFile()", function () { + it("should properly set the status of the file", function () { + let doneFunction = null; + + dropzone.accept = (file, done) => (doneFunction = done); + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + dropzone.addFile(mockFile); + + expect(mockFile.status).to.equal(Dropzone.ADDED); + doneFunction(); + expect(mockFile.status).to.equal(Dropzone.QUEUED); + + mockFile = getMockFile(); + dropzone.addFile(mockFile); + + expect(mockFile.status).to.equal(Dropzone.ADDED); + doneFunction("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) { + let doneFunction = null; + dropzone.options.autoProcessQueue = false; + dropzone.accept = (file, done) => (doneFunction = done); + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + dropzone.addFile(mockFile); + Cypress.sinon.stub(dropzone, "processQueue"); + + expect(mockFile.status).to.equal(Dropzone.ADDED); + doneFunction(); + expect(mockFile.status).to.equal(Dropzone.QUEUED); + expect(dropzone.processQueue.callCount).to.equal(0); + return setTimeout(function () { + expect(dropzone.processQueue.callCount).to.equal(0); + return done(); + }, 10); + }); + + it("should not add the file to the queue if autoQueue is false", function () { + let doneFunction = null; + dropzone.options.autoQueue = false; + dropzone.accept = (file, done) => (doneFunction = done); + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + dropzone.addFile(mockFile); + + expect(mockFile.status).to.equal(Dropzone.ADDED); + doneFunction(); + return expect(mockFile.status).to.equal(Dropzone.ADDED); + }); + + it("should create a remove link if configured to do so", function () { + dropzone.options.addRemoveLinks = true; + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + Cypress.sinon.stub(dropzone, "processQueue"); + dropzone.addFile(mockFile); + + 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 () { + dropzone.options.addRemoveLinks = true; + dropzone.options.dictRemoveFile = + ' Remove'; + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + Cypress.sinon.stub(dropzone, "processQueue"); + dropzone.addFile(mockFile); + + return ( + 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') + ); + }); + + it("should attach an event handler to data-dz-remove links", function () { + dropzone.options.previewTemplate = `\ +
+
+
+
+ +
+
+
+
+
+ + +
\ +`; + + Cypress.sinon.stub(dropzone, "processQueue"); + + dropzone.addFile(mockFile); + + let file = dropzone.files[0]; + let removeLink1 = file.previewElement.querySelector( + "a[data-dz-remove].link1", + ); + let removeLink2 = file.previewElement.querySelector( + "a[data-dz-remove].link2", + ); + + Cypress.sinon.stub(dropzone, "removeFile"); + + let event = document.createEvent("HTMLEvents"); + event.initEvent("click", true, true); + removeLink1.dispatchEvent(event); + + expect(dropzone.removeFile.callCount).to.equal(1); + + event = document.createEvent("HTMLEvents"); + event.initEvent("click", true, true); + removeLink2.dispatchEvent(event); + + return expect(dropzone.removeFile.callCount).to.equal(2); + }); + + return describe("thumbnails", function () { + it("should properly queue the thumbnail creation", function (done) { + let ct_callback; + let doneFunction; + + dropzone.accept = (file, done) => (doneFunction = done); + dropzone.processFile = function () {}; + dropzone.uploadFile = function () {}; + + let mock1 = getMockFile("image/jpg"); + let mock2 = getMockFile("image/jpg"); + let mock3 = getMockFile("image/jpg"); + + let ct_file; + dropzone.createThumbnail = function ( + file, + thumbnailWidth, + thumbnailHeight, + resizeMethod, + fixOrientation, + callback, + ) { + ct_file = file; + ct_callback = callback; + }; + + Cypress.sinon.spy(dropzone, "createThumbnail"); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + + expect(dropzone.files.length).to.equal(3); + return setTimeout(function () { + expect(dropzone.createThumbnail.callCount).to.equal(1); + expect(mock1).to.equal(ct_file); + ct_callback(); + expect(dropzone.createThumbnail.callCount).to.equal(2); + expect(mock2).to.equal(ct_file); + ct_callback(); + expect(dropzone.createThumbnail.callCount).to.equal(3); + expect(mock3).to.equal(ct_file); + + return done(); + }, 10); + }); + + return describe("when file is SVG", () => + it("should use the SVG image itself", function (done) { + let createBlob = function (data, type) { + try { + return new Blob([data], { type }); + } catch (e) { + let BlobBuilder = + window.BlobBuilder || + window.WebKitBlobBuilder || + window.MozBlobBuilder || + window.MSBlobBuilder; + let builder = new BlobBuilder(); + builder.append(data.buffer || data); + return builder.getBlob(type); + } + }; + + let blob = createBlob("foo", "image/svg+xml"); + + return dropzone.createThumbnail( + blob, + dropzone.options.thumbnailWidth, + dropzone.options.thumbnailHeight, + "crop", + false, + function (dataURI, canvas) { + let fileReader = new FileReader(); + fileReader.onload = function () { + expect(fileReader.result).to.equal(dataURI); + return done(); + }; + return fileReader.readAsDataURL(blob); + }, + ); + })); + }); + }); + + describe("enqueueFile()", function () { + it("should be wrapped by enqueueFiles()", function () { + Cypress.sinon.stub(dropzone, "enqueueFile"); + + let mock1 = getMockFile(); + let mock2 = getMockFile(); + let mock3 = getMockFile(); + + dropzone.enqueueFiles([mock1, mock2, 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.", + ); + 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.", + ); + 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.", + ); + }); + + it("should set the status to QUEUED and call processQueue asynchronously if everything's ok", function (done) { + mockFile.status = Dropzone.ADDED; + Cypress.sinon.stub(dropzone, "processQueue"); + expect(dropzone.processQueue.callCount).to.equal(0); + dropzone.enqueueFile(mockFile); + expect(mockFile.status).to.equal(Dropzone.QUEUED); + expect(dropzone.processQueue.callCount).to.equal(0); + return setTimeout(function () { + expect(dropzone.processQueue.callCount).to.equal(1); + return done(); + }, 10); + }); + }); + + describe("uploadFiles()", function () { + let requests; + + beforeEach(function () { + requests = []; + + return (xhr.onCreate = (xhr) => requests.push(xhr)); + }); + + 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 () { + Cypress.sinon.stub(dropzone, "uploadFiles"); + + dropzone.uploadFile(mockFile); + + expect(dropzone.uploadFiles.callCount).to.equal(1); + return 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 () { + // Ensure the file is accepted + dropzone.accept = (file, done) => done(); + + // Prevent Dropzone from starting the upload before we attach intercept + start the queue + dropzone.options.autoProcessQueue = false; + + const method = String( + dropzone.options.method || "post", + ).toUpperCase(); + + const urlPath = String(dropzone.options.url); + const urlGlob = urlPath.includes("://") + ? urlPath + : `**/${urlPath.replace(/^\/+/, "")}`; + + cy.intercept({ method, url: urlGlob }, (req) => { + req.reply({ statusCode: 200, body: "" }); + }).as("upload"); + + dropzone.addFile(mockFile); + + // addFile() already queues the file (autoQueue default true); just start processing + dropzone.processQueue(); + + cy.wait("@upload").then((interception) => { + expect(interception.request.method).to.equal(method); + expect(interception.request.url).to.match( + new RegExp(`${urlPath.replace(/^\/+/, "")}$`), + ); + }); + }); + + it("should call url options if functions", function () { + const method = "PUT"; + const url = "/custom/upload/url"; + + dropzone.accept = (file, done) => done(); + + dropzone.options.method = Cypress.sinon.stub().callsFake((files) => { + // Dropzone passes an array of files here in this codebase + expect(files).to.deep.equal([mockFile]); + return method; + }); + + dropzone.options.url = Cypress.sinon.stub().callsFake((files) => { + expect(files).to.deep.equal([mockFile]); + return url; + }); + + cy.intercept({ method, url: `**${url}` }, (req) => { + req.reply({ statusCode: 200, body: "" }); + }).as("upload"); + + dropzone.addFile(mockFile); + dropzone.processFile(mockFile); + + cy.wait("@upload").then(() => { + expect(dropzone.options.method.callCount).to.equal(1); + expect(dropzone.options.url.callCount).to.equal(1); + + // If you prefer explicit Sinon asserts, these are fine too: + Cypress.sinon.assert.calledWith(dropzone.options.method, [ + mockFile, + ]); + Cypress.sinon.assert.calledWith(dropzone.options.url, [mockFile]); + }); + }); + + it("should use the timeout option", function () { + dropzone.accept = (file, done) => done(); + dropzone.options.timeout = 10000; + + cy.window().then((win) => { + const OriginalXHR = win.XMLHttpRequest; + + const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open"); + + // Wrap XHR constructor so we can inspect instances + const xhrInstances = []; + function WrappedXHR() { + const xhr = new OriginalXHR(); + xhrInstances.push(xhr); + return xhr; + } + WrappedXHR.prototype = OriginalXHR.prototype; + win.XMLHttpRequest = WrappedXHR; + + 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); + + // cleanup + win.XMLHttpRequest = OriginalXHR; + openSpy.restore(); + }); + }); + + it("should properly handle if timeout is null", function () { + dropzone.accept = (file, done) => done(); + dropzone.options.timeout = null; + + // Prevent racing ahead before we wrap XHR + dropzone.options.autoProcessQueue = false; + + cy.window().then((win) => { + const OriginalXHR = win.XMLHttpRequest; + + const xhrInstances = []; + function WrappedXHR() { + const xhr = new OriginalXHR(); + xhrInstances.push(xhr); + return xhr; + } + WrappedXHR.prototype = OriginalXHR.prototype; + + win.XMLHttpRequest = WrappedXHR; + + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); // start upload deterministically + + expect(xhrInstances.length).to.be.greaterThan(0); + expect(xhrInstances[0].timeout).to.equal(0); + } finally { + // cleanup (even if the test throws) + win.XMLHttpRequest = OriginalXHR; + } + }); + }); + + + it("should ignore the onreadystate callback if readyState != 4", function () { + dropzone.accept = (file, done) => done(); + dropzone.options.autoProcessQueue = false; + + cy.window().then((win) => { + const OriginalXHR = win.XMLHttpRequest; + + let xhr; + function WrappedXHR() { + xhr = new OriginalXHR(); + return xhr; + } + WrappedXHR.prototype = OriginalXHR.prototype; + win.XMLHttpRequest = WrappedXHR; + + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); + + expect(mockFile.status).to.equal(Dropzone.UPLOADING); + + // Prepare response-ish fields Dropzone might read + xhr.status = 200; + xhr.getResponseHeader = () => "text/plain"; + xhr.responseText = "ok"; + + const trigger = () => { + if (typeof xhr.onreadystatechange === "function") xhr.onreadystatechange(); + else if (typeof xhr.onload === "function") xhr.onload(); + }; + + // 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 { + win.XMLHttpRequest = OriginalXHR; + } + }); + }); + + it("should emit error and errormultiple when response was not OK", function () { + dropzone.options.uploadMultiple = true; + + // Make sure the file is accepted and upload doesn't start before intercept is set + 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)); + + // Force the upload request to fail + const method = String(dropzone.options.method || "post").toUpperCase(); + const urlPath = String(dropzone.options.url); + const urlGlob = urlPath.includes("://") ? urlPath : `**/${urlPath.replace(/^\/+/, "")}`; + + cy.intercept({ method, url: urlGlob }, (req) => { + req.reply({ + statusCode: 400, + headers: { "content-type": "text/plain" }, + body: "nope", + }); + }).as("upload"); + + dropzone.addFile(mockFile); + dropzone.processQueue(); + + cy.wait("@upload").then(() => { + expect(mockFile.status).to.equal(Dropzone.ERROR); + + expect( + true === error && + error === errormultiple && + errormultiple === complete && + complete === completemultiple + ).to.be.ok; + }); + }); + }); + + it("should include hidden files in the form and unchecked checkboxes and radiobuttons should be excluded", function (done) { + let element = Dropzone.createElement(`
+ + + + + + +
`); + dropzone = new Dropzone(element, { url: "/the/url" }); + + let formData = null; + dropzone.on("sending", function (file, xhr, tformData) { + formData = tformData; + return Cypress.sinon.spy(tformData, "append"); + }); + + let mock1 = getMockFile(); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(formData.append.callCount).to.equal(5); + + expect(formData.append.args[0][0]).to.equal("test"); + expect(formData.append.args[0][1]).to.equal("hidden"); + + expect(formData.append.args[1][0]).to.equal("checked"); + expect(formData.append.args[1][1]).to.equal("value1"); + + expect(formData.append.args[2][0]).to.equal("radio1"); + expect(formData.append.args[2][1]).to.equal("radiovalue2"); + + expect(formData.append.args[3][0]).to.equal("select"); + expect(formData.append.args[3][1]).to.equal("2"); + + expect(formData.append.args[4][0]).to.equal("file"); + expect(formData.append.args[4][1]).to.equal(mock1); + + // formData.append.args[1][0]).to.eql "myName[]" + return done(); + }, 10); + }); + + it("should all values of a select that has the multiple attribute", function (done) { + let element = Dropzone.createElement(`
+ +
`); + dropzone = new Dropzone(element, { url: "/the/url" }); + + let formData = null; + dropzone.on("sending", function (file, xhr, tformData) { + formData = tformData; + return Cypress.sinon.spy(tformData, "append"); + }); + + let mock1 = getMockFile(); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(formData.append.callCount).to.equal(3); + + expect(formData.append.args[0][0]).to.equal("select"); + expect(formData.append.args[0][1]).to.equal("value2"); + + expect(formData.append.args[1][0]).to.equal("select"); + expect(formData.append.args[1][1]).to.equal("value4"); + + expect(formData.append.args[2][0]).to.equal("file"); + expect(formData.append.args[2][1]).to.equal(mock1); + + // 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); + expect(requests.length).to.equal(1); + expect(requests[0].withCredentials).to.equal(false); + dropzone.options.withCredentials = true; + dropzone.uploadFile(mockFile); + expect(requests.length).to.equal(2); + return expect(requests[1].withCredentials).to.equal(true); + }); + + it("should correctly override headers on the xhr object", function () { + dropzone.options.headers = { "Foo-Header": "foobar" }; + dropzone.uploadFile(mockFile); + return expect(requests[0].requestHeaders["Foo-Header"]).to.equal( + "foobar", + ); + }); + + it("should not set headers on the xhr object that are empty", function () { + dropzone.options.headers = { "X-Requested-With": null }; + dropzone.uploadFile(mockFile); + return expect(Object.keys(requests[0].requestHeaders)).to.not.contain( + "X-Requested-With", + ); + }); + + it("should properly use the paramName without [n] as file upload if uploadMultiple is false", function (done) { + dropzone.options.uploadMultiple = false; + dropzone.options.paramName = "myName"; + + let formData = []; + let sendingCount = 0; + dropzone.on("sending", function (files, xhr, tformData) { + sendingCount++; + + formData.push(tformData); + return Cypress.sinon.spy(tformData, "append"); + }); + + let mock1 = getMockFile(); + let mock2 = getMockFile(); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + + return setTimeout(function () { + expect(sendingCount).to.equal(2); + + 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) { + dropzone.options.uploadMultiple = true; + dropzone.options.paramName = "myName"; + + let formData = null; + let sendingMultipleCount = 0; + let sendingCount = 0; + dropzone.on("sending", (file, xhr, tformData) => sendingCount++); + dropzone.on("sendingmultiple", function (files, xhr, tformData) { + sendingMultipleCount++; + formData = tformData; + return Cypress.sinon.spy(tformData, "append"); + }); + + let mock1 = getMockFile(); + let mock2 = getMockFile(); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + + return setTimeout(function () { + expect(sendingCount).to.equal(2); + expect(sendingMultipleCount).to.equal(1); + dropzone.uploadFiles([mock1, mock2]); + 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]"); + return done(); + }, 10); + }); + + it("should use resizeImage if dimensions are provided", function (done) { + Cypress.sinon.stub(dropzone, "resizeImage"); + Cypress.sinon.stub(dropzone, "createThumbnail"); + + dropzone.options.resizeWidth = 400; + + let mock1 = getMockFile("image/jpeg"); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(dropzone.resizeImage.callCount).to.equal(1); + return done(); + }, 10); + }); + + it("should not use resizeImage for SVG if dimensions are provided", function (done) { + Cypress.sinon.stub(dropzone, "uploadFiles"); + + dropzone.createThumbnail = function ( + file, + width, + height, + resizeMethod, + fixOrientation, + callback, + ) { + callback(null, null); + }; + + dropzone.options.resizeWidth = 400; + + let mock1 = getMockFile("image/svg+xml"); + + dropzone.addFile(mock1); + + setTimeout(function () { + expect(dropzone.uploadFiles.callCount).to.equal(1); + let uploadedFiles = dropzone.uploadFiles.getCall(0).args[0]; + expect(uploadedFiles).to.equal([mock1]); + done(); + }, 10); + }); + + it("should not use resizeImage if dimensions are not provided", function (done) { + Cypress.sinon.stub(dropzone, "resizeImage"); + Cypress.sinon.stub(dropzone, "createThumbnail"); + + let mock1 = getMockFile("image/jpeg"); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(dropzone.resizeImage.callCount).to.equal(0); + return done(); + }, 10); + }); + + it("should not use resizeImage if file is not an image", function (done) { + Cypress.sinon.stub(dropzone, "resizeImage"); + Cypress.sinon.stub(dropzone, "createThumbnail"); + + dropzone.options.resizeWidth = 400; + + let mock1 = getMockFile("text/plain"); + + dropzone.addFile(mock1); + + return setTimeout(function () { + expect(dropzone.resizeImage.callCount).to.equal(0); + return done(); + }, 10); + }); + }); + + it("should not change the file name if the options.renameFile is not set", function (done) { + let mockFilename = "T3sT ;:_-.,!¨@&%&"; + mockFile = getMockFile("text/html", mockFilename); + + let renamedFilename = dropzone._renameFile(mockFile); + + expect(renamedFilename).to.equal(mockFilename); + return done(); + }); + + it("should rename the file name if options.renamedFilename is set", function (done) { + dropzone.options.renameFile = (file) => + file.name.toLowerCase().replace(/[^\w]/gi, ""); + + mockFile = getMockFile("text/html", "T3sT ;:_-.,!¨@&%&"); + + let renamedFilename = dropzone._renameFile(mockFile); + + 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); + + setTimeout(function () { + expect(mockFile.status).to.equal(Dropzone.UPLOADING); + + expect(requests.length).to.equal(1); + requests[0].status = 400; + requests[0].readyState = 4; + requests[0].responseHeaders = { "content-type": "text/plain" }; + + requests[0].onload(); + + expect(mockFile.status).to.equal(Dropzone.ERROR); + + mockFile = getMockFile(); + dropzone.addFile(mockFile); + + setTimeout(function () { + expect(mockFile.status).to.equal(Dropzone.UPLOADING); + + expect(requests.length).to.equal(2); + requests[1].status = 200; + requests[1].readyState = 4; + requests[1].responseHeaders = { "content-type": "text/plain" }; + + requests[1].onload(); + + expect(mockFile.status).to.equal(Dropzone.SUCCESS); + return done(); + }, 10); + }, 10); + })); + }); + + describe("transformFile()", function () { + it("should be invoked and the result should be uploaded if configured", (done) => { + Cypress.sinon.stub(dropzone, "_uploadData"); + + let mock1 = getMockFile("text/html", "original-file"); + let mock2 = getMockFile("text/html", "transformed-file"); + + dropzone.options.transformFile = (file, done) => { + expect(file).to.equal(mock1); + done(mock2); + }; + + dropzone.addFile(mock1); + + setTimeout(function () { + expect(dropzone._uploadData.callCount).to.equal(1); + let uploadedFiles = dropzone._uploadData.args[0][0]; + let uploadedDataBlocks = dropzone._uploadData.args[0][1]; + 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) => { + Cypress.sinon.stub(dropzone, "_uploadData"); + + dropzone.options.chunking = true; + dropzone.options.chunkSize = 1; + dropzone.options.parallelChunkUploads = true; + + let mock1 = getMockFile("text/html", "original-file", [ + "Veeeeery long file", + ]); // 18 bytes + let mock2 = getMockFile("text/html", "transformed-file", ["2b"]); // only 2 bytes + + dropzone.options.transformFile = (file, done) => { + expect(file).to.equal(mock1); + done(mock2); + }; + + dropzone.addFile(mock1); + + setTimeout(async function () { + expect(dropzone._uploadData.callCount).to.equal(2); + + // the same file should be passed on each call. + 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. + 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(); + expect(block1Text).to.equal("2"); + expect(block2Text).to.equal("b"); + done(); + }, 10); + }); + }); + + return describe("complete file", () => + it("should properly emit the queuecomplete event when the complete queue is finished", function (done) { + let mock1 = getMockFile("text/html", "mock1"); + let mock2 = getMockFile("text/html", "mock2"); + let mock3 = getMockFile("text/html", "mock3"); + mock1.status = Dropzone.ADDED; + mock2.status = Dropzone.ADDED; + mock3.status = Dropzone.ADDED; + + dropzone.uploadFiles = function (files) { + return setTimeout(() => { + return this._finished(files, null, null); + }, 1); + }; + + let completedFiles = 0; + dropzone.on("complete", (file) => completedFiles++); + + dropzone.on("queuecomplete", function () { + expect(completedFiles).to.equal(3); + return done(); + }); + + dropzone.addFile(mock1); + dropzone.addFile(mock2); + return dropzone.addFile(mock3); + })); + }); +}); diff --git a/cypress/e2e/amazon-s3.cy.js b/cypress/e2e/amazon-s3.cy.js new file mode 100644 index 000000000..488cd572e --- /dev/null +++ b/cypress/e2e/amazon-s3.cy.js @@ -0,0 +1,96 @@ +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: "**/url" }, (req) => { + req.reply({ statusCode: 200, body: "" }); + }).as("upload"); + + dropzone.addFile(getMockFile()); + dropzone.addFile(getMockFile("image/jpeg", "some-file.jpg", [[1, 2, 3]])); + + // Start uploads after intercept is in place + dropzone.processQueue(); + + cy.wait("@upload").then((i1) => { + seen.push(i1); + }); + + cy.wait("@upload").then((i2) => { + seen.push(i2); + }); + + cy.then(() => { + const contentTypes = seen + .map((i) => { + const headers = i.request && i.request.headers ? i.request.headers : {}; + // Cypress normalizes header keys to lowercase + return headers["content-type"] || headers["Content-Type"]; + }) + .filter(Boolean) + .sort(); + + expect(contentTypes).to.deep.equal( + ["text/html", "image/jpeg"].sort() + ); + }); + }); + }); +}); diff --git a/cypress/e2e/emitter.cy.js b/cypress/e2e/emitter.cy.js new file mode 100644 index 000000000..59d3dc5f2 --- /dev/null +++ b/cypress/e2e/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/cypress/e2e/static-functions.cy.js b/cypress/e2e/static-functions.cy.js new file mode 100644 index 000000000..43d3efa9d --- /dev/null +++ b/cypress/e2e/static-functions.cy.js @@ -0,0 +1,387 @@ +import { Dropzone } from "../../src/dropzone.js"; + +describe("Static functions", function () { + describe("Dropzone.isBrowserSupported()", function () { + it("should be supported browser", () => { + expect(Dropzone.isBrowserSupported()).to.be.true; + }); + }); + + describe("Dropzone.createElement()", function () { + let element = Dropzone.createElement( + '
Hallo
', + ); + + it("should properly create an element from a string", () => + expect(element.tagName).to.equal("DIV")); + it("should properly add the correct class", () => + expect(element.classList.contains("test")).to.be.ok); + it("should properly create child elements", () => + expect(element.querySelector("span").tagName).to.equal("SPAN")); + it("should always return only one element", function () { + element = Dropzone.createElement("
"); + expect(element.tagName).to.equal("DIV"); + }); + }); + + describe("Dropzone.elementInside()", function () { + let element = Dropzone.createElement( + '
', + ); + document.body.appendChild(element); + + let child1 = element.querySelector(".child1"); + let child2 = element.querySelector(".child2"); + + after(() => document.body.removeChild(element)); + + it("should return yes if elements are the same", () => + expect(Dropzone.elementInside(element, element)).to.be.ok); + it("should return yes if element is direct child", () => + expect(Dropzone.elementInside(child1, element)).to.be.ok); + it("should return yes if element is some child", function () { + 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 () { + expect(Dropzone.elementInside(element, child1)).to.not.be.ok; + expect(Dropzone.elementInside(document.body, child1)).to.not.be.ok; + }); + }); + + describe("Dropzone.optionsForElement()", function () { + let testOptions = { + url: "/some/url", + method: "put", + }; + + before(() => (Dropzone.options.testElement = testOptions)); + after(() => delete Dropzone.options.testElement); + + let element = document.createElement("div"); + + it("should take options set in Dropzone.options from camelized id", function () { + element.id = "test-element"; + expect(Dropzone.optionsForElement(element)).to.equal(testOptions); + }); + + it("should return undefined if no options set", function () { + element.id = "test-element2"; + return expect(Dropzone.optionsForElement(element)).to.equal(undefined); + }); + + it("should return undefined and not throw if it's a form with an input element of the name 'id'", function () { + element = Dropzone.createElement('
'); + return expect(Dropzone.optionsForElement(element)).to.equal(undefined); + }); + + it("should ignore input fields with the name='id'", function () { + element = Dropzone.createElement( + '
', + ); + expect(Dropzone.optionsForElement(element)).to.equal(testOptions); + }); + }); + + describe("Dropzone.forElement()", function () { + let element = document.createElement("div"); + element.id = "some-test-element"; + let dropzone = null; + before(function () { + document.body.appendChild(element); + return (dropzone = new Dropzone(element, { url: "/test" })); + }); + after(function () { + dropzone.disable(); + return document.body.removeChild(element); + }); + + 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.", + )); + + it("should accept css selectors", () => + expect(Dropzone.forElement("#some-test-element")).to.equal(dropzone)); + + it("should accept native elements", () => + expect(Dropzone.forElement(element)).to.equal(dropzone)); + }); + + describe("Dropzone.discover()", function () { + let element1 = document.createElement("div"); + element1.className = "dropzone"; + let element2 = element1.cloneNode(); + let element3 = element1.cloneNode(); + + element1.id = "test-element-1"; + element2.id = "test-element-2"; + element3.id = "test-element-3"; + + describe("specific options", function () { + before(function () { + Dropzone.options.testElement1 = { url: "test-url" }; + Dropzone.options.testElement2 = false; // Disabled + document.body.appendChild(element1); + document.body.appendChild(element2); + return Dropzone.discover(); + }); + after(function () { + document.body.removeChild(element1); + return document.body.removeChild(element2); + }); + + it("should find elements with a .dropzone class", () => + expect(element1.dropzone).to.be.ok); + + it("should not create dropzones with disabled options", () => + expect(element2.dropzone).to.not.be.ok); + }); + }); + + describe("Dropzone.isValidFile()", function () { + it("should return true if called without acceptedFiles", () => + 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"; + + 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/*"; + + 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/*"; + + expect(Dropzone.isValidFile({ type: "text/html" }, acceptedMimeTypes)).to + .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"; + + 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"; + + 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 + 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 () { + let confirmStub; + + beforeEach(function () { + cy.window().then((win) => { + confirmStub = cy.stub(win, "confirm"); + }); + }); + + afterEach(function () { + // cy.stub() will restore automatically between tests in many setups, + // but make it explicit and safe: + if (confirmStub && typeof confirmStub.restore === "function") { + confirmStub.restore(); + } + confirmStub = null; + }); + + 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 = []; + + beforeEach(function () { + tmpElements = []; + tmpElements.push(Dropzone.createElement('
')); + tmpElements.push( + Dropzone.createElement('
'), + ); + tmpElements.push( + Dropzone.createElement('
'), + ); + return tmpElements.forEach((el) => document.body.appendChild(el)); + }); + + afterEach(() => tmpElements.forEach((el) => document.body.removeChild(el))); + + describe(".getElement()", function () { + it("should accept a string", function () { + let el = Dropzone.getElement(".tmptest"); + expect(el).to.equal(tmpElements[0]); + el = Dropzone.getElement("#tmptest1"); + expect(el).to.equal(tmpElements[1]); + }); + it("should accept a node", function () { + let el = Dropzone.getElement(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, + ); + expect(() => + Dropzone.getElement({ lblasdlfsfl: "lblasdlfsfl" }, "clickable"), + ).to.throw(errorMessage); + return expect(() => + Dropzone.getElement(["lblasdlfsfl"], "clickable"), + ).to.throw(errorMessage); + }); + }); + + describe(".getElements()", function () { + it("should accept a list of strings", function () { + let els = Dropzone.getElements([".tmptest", "#tmptest1"]); + 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]]); + expect(els).to.deep.equal([tmpElements[0], tmpElements[2]]); + }); + it("should accept a mixed list", function () { + let els = Dropzone.getElements(["#tmptest1", tmpElements[2]]); + expect(els).to.deep.equal([tmpElements[1], tmpElements[2]]); + }); + it("should accept a string selector", function () { + let els = Dropzone.getElements(".random"); + expect(els).to.deep.equal([tmpElements[1], tmpElements[2]]); + }); + it("should accept a single node", function () { + let els = Dropzone.getElements(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, + ); + return expect(() => + Dropzone.getElements(["lblasdlfsfl"], "clickable"), + ).to.throw(errorMessage); + }); + }); + }); +}); diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index 71550f181..c40970173 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -12,3 +12,5 @@ // You can read more here: // https://on.cypress.io/configuration // *********************************************************** +globalThis.sleep = (delay) => + new Promise((resolve) => setTimeout(resolve, delay)); diff --git a/package.json b/package.json index 9099d3dbf..e743e8ecb 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,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": { @@ -61,9 +60,13 @@ "tar": "7.5.3" }, "devDependencies": { + "@babel/core": "^7.28.6", + "@babel/preset-env": "^7.28.6", + "@cypress/webpack-preprocessor": "^7.0.2", "@parcel/core": "^2.16.3", "@parcel/transformer-inline-string": "^2.16.3", "@parcel/transformer-sass": "^2.16.3", + "babel-loader": "^10.0.0", "chai": "^4.5.0", "cypress": "^15.9.0", "express": "^4.21.2", @@ -77,7 +80,8 @@ "parcel": "^2.16.3", "sass": "^1.79.3", "sinon": "^18.0.1", - "sinon-chai": "^3.7.0" + "sinon-chai": "^3.7.0", + "webpack": "^5.104.1" }, "packageManager": "yarn@4.5.3" } diff --git a/src/dropzone.js b/src/dropzone.js index 8647c40c9..06ea10097 100644 --- a/src/dropzone.js +++ b/src/dropzone.js @@ -88,10 +88,12 @@ export default class Dropzone extends Emitter { options != null ? options : {} ); + /* this.options.previewTemplate = this.options.previewTemplate.replace( - /\n*/g, + /\n* /g, "" ); +*/ // If the browser failed, just call the fallback and leave if (this.options.forceFallback || !Dropzone.isBrowserSupported()) { diff --git a/src/options.js b/src/options.js index 874961a0b..c20a2c31a 100644 --- a/src/options.js +++ b/src/options.js @@ -1,5 +1,6 @@ import Dropzone from "./dropzone"; -import defaultPreviewTemplate from "bundle-text:./preview-template.html"; +//import defaultPreviewTemplate from "bundle-text:./preview-template.html"; +import defaultPreviewTemplate from "./preview-template.html"; let defaultOptions = { /** @@ -610,7 +611,7 @@ let defaultOptions = { if (this.previewsContainer && !this.options.disablePreviews) { file.previewElement = Dropzone.createElement( - this.options.previewTemplate.trim() + this.options.previewTemplate ); file.previewTemplate = file.previewElement; // Backwards compatibility diff --git a/yarn.lock b/yarn.lock index 01779d7ba..db9754abf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 8 cacheKey: 10c0 -"@babel/code-frame@npm:^7.0.0": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.28.6": version: 7.28.6 resolution: "@babel/code-frame@npm:7.28.6" dependencies: @@ -16,6 +16,215 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/compat-data@npm:7.28.6" + checksum: 10c0/2d047431041281eaf33e9943d1a269d3374dbc9b498cafe6a18f5ee9aee7bb96f7f6cac0304eab4d13c41fc4db00fe4ca16c7aa44469ca6a211b8b6343b78fc4 + languageName: node + linkType: hard + +"@babel/core@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/core@npm:7.28.6" + dependencies: + "@babel/code-frame": "npm:^7.28.6" + "@babel/generator": "npm:^7.28.6" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helpers": "npm:^7.28.6" + "@babel/parser": "npm:^7.28.6" + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + "@jridgewell/remapping": "npm:^2.3.5" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/716b88b1ab057aa53ffa40f2b2fb7e4ab7a35cd6a065fa60e55ca13d2a666672592329f7ea9269aec17e90cc7ce29f42eda566d07859bfd998329a9f283faadb + languageName: node + linkType: hard + +"@babel/generator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/generator@npm:7.28.6" + dependencies: + "@babel/parser": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + "@jridgewell/gen-mapping": "npm:^0.3.12" + "@jridgewell/trace-mapping": "npm:^0.3.28" + jsesc: "npm:^3.0.2" + checksum: 10c0/162fa358484a9a18e8da1235d998f10ea77c63bab408c8d3e327d5833f120631a77ff022c5ed1d838ee00523f8bb75df1f08196d3657d0bca9f2cfeb8503cc12 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": "npm:^7.27.3" + checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2, @babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" + dependencies: + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/3fcdf3b1b857a1578e99d20508859dbd3f22f3c87b8a0f3dc540627b4be539bae7f6e61e49d931542fe5b557545347272bbdacd7f58a5c77025a18b745593a50 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/0b62b46717891f4366006b88c9b7f277980d4f578c4c3789b7a4f5a2e09e121de4cda9a414ab403986745cd3ad1af3fe2d948c9f78ab80d4dc085afc9602af50 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1, @babel/helper-create-regexp-features-plugin@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + regexpu-core: "npm:^6.3.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7af3d604cadecdb2b0d2cedd696507f02a53a58be0523281c2d6766211443b55161dde1e6c0d96ab16ddfd82a2607a2f792390caa24797e9733631f8aa86859f + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.5": + version: 0.6.5 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + debug: "npm:^4.4.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.22.10" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e + languageName: node + linkType: hard + +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" + dependencies: + "@babel/traverse": "npm:^7.28.5" + "@babel/types": "npm:^7.28.5" + checksum: 10c0/4e6e05fbf4dffd0bc3e55e28fcaab008850be6de5a7013994ce874ec2beb90619cda4744b11607a60f8aae0227694502908add6188ceb1b5223596e765b44814 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3, @babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/6f03e14fc30b287ce0b839474b5f271e72837d0cafe6b172d759184d998fbee3903a035e81e07c2c596449e504f453463d58baa65b6f40a37ded5bec74620b2b + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.27.1, @babel/helper-replace-supers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-replace-supers@npm:7.28.6" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.28.5" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/04663c6389551b99b8c3e7ba4e2638b8ca2a156418c26771516124c53083aa8e74b6a45abe5dd46360af79709a0e9c6b72c076d0eab9efecdd5aaf836e79d8d5 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + 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" @@ -23,6 +232,877 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/helper-wrap-function@npm:7.28.6" + dependencies: + "@babel/template": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/110674c7aa705dd8cc34f278628f540b37a4cb35e81fcaf557772e026a6fd95f571feb51a8efb146e4e91bbf567dc9dd7f534f78da80f55f4be2ec842f36b678 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" + dependencies: + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/c4a779c66396bb0cf619402d92f1610601ff3832db2d3b86b9c9dd10983bf79502270e97ac6d5280cea1b1a37de2f06ecbac561bd2271545270407fbe64027cb + languageName: node + linkType: hard + +"@babel/parser@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/parser@npm:7.28.6" + dependencies: + "@babel/types": "npm:^7.28.6" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/d6bfe8aa8e067ef58909e9905496157312372ca65d8d2a4f2b40afbea48d59250163755bba8ae626a615da53d192b084bcfc8c9dad8b01e315b96967600de581 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/844b7c7e9eec6d858262b2f3d5af75d3a6bbd9d3ecc740d95271fbdd84985731674536f5d8ac98f2dc0e8872698b516e406636e4d0cb04b50afe471172095a53 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/f1a9194e8d1742081def7af748e9249eb5082c25d0ced292720a1f054895f99041c764a05f45af669a2c8898aeb79266058aedb0d3e1038963ad49be8288918a + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f3b8bdccb9b4d3e3b9226684ca518e055399d05579da97dfe0160a38d65198cfe7dce809e73179d6463a863a040f980de32425a876d88efe4eda933d0d95982c + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1be160e2c426faa74e5be2e30e39e8d0d8c543063bd5d06cd804f8751b8fbcb82ce824ca7f9ce4b09c003693f6c06a11ce503b7e34d85e1a259631e4c3f72ad2 + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eddb94b0b990d8057c9c3587db3453eb586d1835626a9d683e6e8bef0ac5f708a76002951fb9cca80c902b3074b21b3a81b8af9090492561d9179862ce5716d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2eb0826248587df6e50038f36194a138771a7df22581020451c7779edeaf9ef39bf47c5b7a20ae2645af6416e8c896feeca273317329652e84abd79a4ab920ad + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2e3e09e1f9770b56cef4dcbffddf262508fd03416072f815ac66b2b224a3a12cd285cfec12fc067f1add414e7db5ce6dafb5164a6e0fb1a728e6a97d0c6f6e9d + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-properties@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c4327fcd730c239d9f173f9b695b57b801729e273b4848aef1f75818069dfd31d985d75175db188d947b9b1bbe5353dae298849042026a5e4fcf07582ff3f9f1 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/dbe9b1fd302ae41b73186e17ac8d8ecf625ebc2416a91f2dc8013977a1bdf21e6ea288a83f084752b412242f3866e789d4fddeb428af323fe35b60e0fae4f98c + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-classes@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-replace-supers": "npm:^7.28.6" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dc22f1f6eadab17305128fbf9cc5f30e87a51a77dd0a6d5498097994e8a9b9a90ab298c11edf2342acbeaac9edc9c601cad72eedcf4b592cd465a787d7f41490 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/template": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1e9893503ae6d651125701cc29450e87c0b873c8febebff19da75da9c40cfb7968c52c28bf948244e461110aeb7b3591f2cc199b7406ff74a24c50c7a5729f39 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/288207f488412b23bb206c7c01ba143714e2506b72a9ec09e993f28366cc8188d121bde714659b3437984a86d2881d9b1b06de3089d5582823ccf2f3b3eaa2c4 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e2fb76b7ae99087cf4212013a3ca9dee07048f90f98fd6264855080fb6c3f169be11c9b8c9d8b26cf9a407e4d0a5fa6e103f7cef433a542b75cf7127c99d4f97 + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/a1b4161ed6a4a5e78f802035b38efd71db6691fc1b2b2a1aea49fcb449077105b4925f0c4670f117231462f5cb0a35df4ad297f7b1fac38ec76e89635f8dc51d + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-explicit-resource-management@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e6ea28c26e058fe61ada3e70b0def1992dd5a44f5fc14d8e2c6a3a512fb4d4c6dc96a3e1d0b466d83db32a9101e0b02df94051e48d3140da115b8ea9f8a31f37 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4572d955a50dbc9a652a19431b4bb822cb479ee6045f4e6df72659c499c13036da0a2adf650b07ca995f2781e80aa868943bea1e7bff1de3169ec3f0a73a902e + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-json-strings@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ab1091798c58e6c0bb8a864ee2b727c400924592c6ed69797a26b4c205f850a935de77ad516570be0419c279a3d9f7740c2aa448762eb8364ea77a6a357a9653 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4632a35453d2131f0be466681d0a33e3db44d868ff51ec46cd87e0ebd1e47c6a39b894f7d1c9b06f931addf6efa9d30e60c4cdedeb4f69d426f683e11f8490cf + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7c45992797c6150644c8552feff4a016ba7bd6d59ff2b039ed969a9c5b20a6804cd9d21db5045fc8cca8ca7f08262497e354e93f8f2be6a1cdf3fbfa8c31a9b6 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.28.5" + dependencies: + "@babel/helper-module-transforms": "npm:^7.28.3" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + "@babel/traverse": "npm:^7.28.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7e8c0bcff79689702b974f6a0fedb5d0c6eeb5a5e3384deb7028e7cfe92a5242cc80e981e9c1817aad29f2ecc01841753365dd38d877aa0b91737ceec2acfd07 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6607f2201d66ccb688f0b1db09475ef995837df19f14705da41f693b669f834c206147a854864ab107913d7b4f4748878b0cd9fe9ca8bfd1bee0c206fc027b49 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/191097d8d2753cdd16d1acca65a945d1645ab20b65655c2f5b030a9e38967a52e093dcb21ebf391e342222705c6ffe5dea15dafd6257f7b51b77fb64a830b637 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/traverse": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f55334352d4fcde385f2e8a58836687e71ff668c9b6e4c34d52575bf2789cdde92d9d3116edba13647ac0bc3e51fb2a6d1e8fb822dce7e8123334b82600bc4c3 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/36e8face000ee65e478a55febf687ce9be7513ad498c60dfe585851555565e0c28e7cb891b3c59709318539ce46f7697d5f42130eb18f385cd47e47cfa297446 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c159cc74115c2266be21791f192dd079e2aeb65c8731157e53b80fcefa41e8e28ad370021d4dfbdb31f25e5afa0322669a8eb2d032cd96e65ac37e020324c763 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.27.7": + version: 7.27.7 + resolution: "@babel/plugin-transform-parameters@npm:7.27.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-methods@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fb504e2bfdcf3f734d2a90ab20d61427c58385f57f950d3de6ff4e6d12dd4aa7d552147312d218367e129b7920dccfc3230ba554de861986cda38921bad84067 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.3" + "@babel/helper-create-class-features-plugin": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0f6bbc6ec3f93b556d3de7d56bf49335255fc4c43488e51a5025d6ee0286183fd3cf950ffcac1bbeed8a45777f860a49996455c8d3b4a04c3b1a5f28e697fe31 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-regenerator@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/dbb65b7444548807aee558cdaf23996e7a0f6c3bced09c6b5d177734b3addcaf417532186e330341758979651e2af8cb98ae572f794f05c0e2e201e5593a5ffe + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/97e36b086800f71694fa406abc00192e3833662f2bdd5f51c018bd0c95eef247c4ae187417c207d03a9c5374342eac0bb65a39112c431a9b23b09b1eda1562e5 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-spread@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bcac50e558d6f0c501cbce19ec197af558cef51fe3b3a6eba27276e323e57a5be28109b4264a5425ac12a67bf95d6af9c2a42b05e79c522ce913fb9529259d76 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b25f8cde643f4f47e0fa4f7b5c552e2dfbb6ad0ce07cf40f7e8ae40daa9855ad855d76d4d6d010153b74e48c8794685955c92ca637c0da152ce5f0fa9e7c90fa + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" + "@babel/helper-plugin-utils": "npm:^7.28.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/c03c8818736b138db73d1f7a96fbfa22d1994639164d743f0f00e6383d3b7b3144d333de960ff4afad0bddd0baaac257295e3316969eba995b1b6a1b4dec933e + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/preset-env@npm:7.28.6" + dependencies: + "@babel/compat-data": "npm:^7.28.6" + "@babel/helper-compilation-targets": "npm:^7.28.6" + "@babel/helper-plugin-utils": "npm:^7.28.6" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.6" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.28.6" + "@babel/plugin-syntax-import-attributes": "npm:^7.28.6" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.28.6" + "@babel/plugin-transform-async-to-generator": "npm:^7.28.6" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.28.6" + "@babel/plugin-transform-class-properties": "npm:^7.28.6" + "@babel/plugin-transform-class-static-block": "npm:^7.28.6" + "@babel/plugin-transform-classes": "npm:^7.28.6" + "@babel/plugin-transform-computed-properties": "npm:^7.28.6" + "@babel/plugin-transform-destructuring": "npm:^7.28.5" + "@babel/plugin-transform-dotall-regex": "npm:^7.28.6" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.28.6" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.6" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.6" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.28.6" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.6" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6" + "@babel/plugin-transform-modules-systemjs": "npm:^7.28.5" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.28.6" + "@babel/plugin-transform-numeric-separator": "npm:^7.28.6" + "@babel/plugin-transform-object-rest-spread": "npm:^7.28.6" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.28.6" + "@babel/plugin-transform-optional-chaining": "npm:^7.28.6" + "@babel/plugin-transform-parameters": "npm:^7.27.7" + "@babel/plugin-transform-private-methods": "npm:^7.28.6" + "@babel/plugin-transform-private-property-in-object": "npm:^7.28.6" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.28.6" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.28.6" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.28.6" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.28.6" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.28.6" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.14" + babel-plugin-polyfill-corejs3: "npm:^0.13.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a08f007c5e8c95beb10a4ab8ad8fdbd823c8ace5f24f491f69a10b6cad079825d39cd1bc9dd312680bbd5aa5f95095cce7d01f51e31bae6720039b11e8105ace + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + languageName: node + linkType: hard + +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": "npm:^7.28.6" + "@babel/parser": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + checksum: 10c0/66d87225ed0bc77f888181ae2d97845021838c619944877f7c4398c6748bcf611f216dfd6be74d39016af502bca876e6ce6873db3c49e4ac354c56d34d57e9f5 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/traverse@npm:7.28.6" + dependencies: + "@babel/code-frame": "npm:^7.28.6" + "@babel/generator": "npm:^7.28.6" + "@babel/helper-globals": "npm:^7.28.0" + "@babel/parser": "npm:^7.28.6" + "@babel/template": "npm:^7.28.6" + "@babel/types": "npm:^7.28.6" + debug: "npm:^4.3.1" + checksum: 10c0/ed5deb9c3f03e2d1ad2d44b9c92c84cce24593245c3f7871ce27ee1b36d98034e6cd895fa98a94eb44ebabe1d22f51b10b09432939d1c51a0fcaab98f17a97bc + languageName: node + linkType: hard + +"@babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.4.4": + version: 7.28.6 + resolution: "@babel/types@npm:7.28.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.28.5" + checksum: 10c0/54a6a9813e48ef6f35aa73c03b3c1572cad7fa32b61b35dd07e4230bc77b559194519c8a4d8106a041a27cc7a94052579e238a30a32d5509aa4da4d6fd83d990 + languageName: node + linkType: hard + "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" @@ -56,6 +1136,23 @@ __metadata: languageName: node linkType: hard +"@cypress/webpack-preprocessor@npm:^7.0.2": + version: 7.0.2 + resolution: "@cypress/webpack-preprocessor@npm:7.0.2" + dependencies: + bluebird: "npm:3.7.1" + debug: "npm:^4.3.4" + lodash: "npm:^4.17.20" + semver: "npm:^7.3.2" + peerDependencies: + "@babel/core": ^7.28.0 + "@babel/preset-env": ^7.26.0 + babel-loader: ^9 || ^10 + webpack: ^5 + checksum: 10c0/824bc5e6651673f5d431d2410325ea67df6145a172fe88fbe32548560fa38123c8fd963816f07c3e8378fe6d317f1b3ed07a5068d9f72e06c3eddce5abc3c25c + languageName: node + linkType: hard + "@cypress/xvfb@npm:^1.2.4": version: 1.2.4 resolution: "@cypress/xvfb@npm:1.2.4" @@ -70,10 +1167,14 @@ __metadata: version: 0.0.0-use.local resolution: "@deltablot/dropzone@workspace:." dependencies: + "@babel/core": "npm:^7.28.6" + "@babel/preset-env": "npm:^7.28.6" + "@cypress/webpack-preprocessor": "npm:^7.0.2" "@parcel/core": "npm:^2.16.3" "@parcel/transformer-inline-string": "npm:^2.16.3" "@parcel/transformer-sass": "npm:^2.16.3" "@swc/helpers": "npm:^0.5.18" + babel-loader: "npm:^10.0.0" chai: "npm:^4.5.0" cypress: "npm:^15.9.0" express: "npm:^4.21.2" @@ -88,6 +1189,7 @@ __metadata: sass: "npm:^1.79.3" sinon: "npm:^18.0.1" sinon-chai: "npm:^3.7.0" + webpack: "npm:^5.104.1" languageName: unknown linkType: soft @@ -114,6 +1216,60 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.5.0" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b + languageName: node + linkType: hard + +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 + languageName: node + linkType: hard + "@lezer/common@npm:^1.0.0": version: 1.2.3 resolution: "@lezer/common@npm:1.2.3" @@ -1457,6 +2613,40 @@ __metadata: languageName: node linkType: hard +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + "@types/node@npm:*, @types/node@npm:>=10.0.0": version: 22.15.29 resolution: "@types/node@npm:22.15.29" @@ -1496,6 +2686,171 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -1513,6 +2868,24 @@ __metadata: languageName: node linkType: hard +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: 10c0/338eb46fc1aed5544f628344cb9af189450b401d152ceadbf1f5746901a5d923016cd0e7740d5606062d374fdf6941c29bb515d2bd133c4f4242d5d4cd73a3c7 + languageName: node + linkType: hard + +"acorn@npm:^8.15.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec + languageName: node + linkType: hard + "agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": version: 7.1.3 resolution: "agent-base@npm:7.1.3" @@ -1530,6 +2903,43 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -1688,22 +3098,70 @@ __metadata: languageName: node linkType: hard -"aws4@npm:^1.8.0": - version: 1.13.2 - resolution: "aws4@npm:1.13.2" - checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 +"aws4@npm:^1.8.0": + version: 1.13.2 + resolution: "aws4@npm:1.13.2" + checksum: 10c0/c993d0d186d699f685d73113733695d648ec7d4b301aba2e2a559d0cd9c1c902308cc52f4095e1396b23fddbc35113644e7f0a6a32753636306e41e3ed6f1e79 + 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 + +"babel-loader@npm:^10.0.0": + version: 10.0.0 + resolution: "babel-loader@npm:10.0.0" + dependencies: + find-up: "npm:^5.0.0" + peerDependencies: + "@babel/core": ^7.12.0 + webpack: ">=5.61.0" + checksum: 10c0/882dfacde3ee24b432ad57e468832cd0821e2a410f6c5b75ff945f069a8956592b28c6c357df5bb03db73d2741ec3db5febb106ac0bb3591c3d4288f2cf4df0e + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.14": + version: 0.4.14 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" + dependencies: + "@babel/compat-data": "npm:^7.27.7" + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.13.0": + version: 0.13.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" + core-js-compat: "npm:^3.43.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d languageName: node linkType: hard -"b4a@npm:^1.6.4": - version: 1.7.3 - resolution: "b4a@npm:1.7.3" +"babel-plugin-polyfill-regenerator@npm:^0.6.5": + version: 0.6.5 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.5" peerDependencies: - react-native-b4a: "*" - peerDependenciesMeta: - react-native-b4a: - optional: true - checksum: 10c0/ac16d186e00fa0d16de1f1a4af413953bc762d50d5a0e382aaa744a13886600313b7293403ad77fc83f6b1489c3fc2610494d1026754a51d1b7cdac2115a7598 + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d languageName: node linkType: hard @@ -1809,6 +3267,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.9.15 + resolution: "baseline-browser-mapping@npm:2.9.15" + bin: + baseline-browser-mapping: dist/cli.js + checksum: 10c0/e5c8cb8600fcbed8132f122b737b00b5b3fcf25a119ea5e42476e6d6b2263274ddc5df16d4cffebbcd46974b691008558973b06100508903ea8a382a5edd34ab + languageName: node + linkType: hard + "basic-ftp@npm:^5.0.2": version: 5.1.0 resolution: "basic-ftp@npm:5.1.0" @@ -1839,6 +3306,13 @@ __metadata: languageName: node linkType: hard +"bluebird@npm:3.7.1": + version: 3.7.1 + resolution: "bluebird@npm:3.7.1" + checksum: 10c0/ed3aa4e0de2b794afa95deb78d868b832e51df5a3e4564da09a6a6a0956d46b6e3bfdc62f075230eed96347329bc5c70729d52b5d3d5c4fc118cf6db63574eb7 + languageName: node + linkType: hard + "bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -1921,6 +3395,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.24.0, browserslist@npm:^4.28.0, browserslist@npm:^4.28.1": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" + dependencies: + baseline-browser-mapping: "npm:^2.9.0" + caniuse-lite: "npm:^1.0.30001759" + electron-to-chromium: "npm:^1.5.263" + node-releases: "npm:^2.0.27" + update-browserslist-db: "npm:^1.2.0" + bin: + browserslist: cli.js + checksum: 10c0/545a5fa9d7234e3777a7177ec1e9134bb2ba60a69e6b95683f6982b1473aad347c77c1264ccf2ac5dea609a9731fbfbda6b85782bdca70f80f86e28a402504bd + languageName: node + linkType: hard + "browserslist@npm:^4.24.5": version: 4.25.0 resolution: "browserslist@npm:4.25.0" @@ -1942,6 +3431,13 @@ __metadata: languageName: node linkType: hard +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + "buffer@npm:^5.7.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -2027,7 +3523,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001718": +"caniuse-lite@npm:^1.0.30001718, caniuse-lite@npm:^1.0.30001759": version: 1.0.30001764 resolution: "caniuse-lite@npm:1.0.30001764" checksum: 10c0/3fbc2bcb35792bd860e20210283e7c700aab10c5af435dbb8bfbf952edccaa3e7de8b479af0f600c4d23f269dbc166e16b7b72df5cd1981653b252174c9cbfa8 @@ -2277,6 +3773,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + "commander@npm:^6.2.1": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -2326,6 +3829,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -2347,6 +3857,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.43.0": + version: 3.47.0 + resolution: "core-js-compat@npm:3.47.0" + dependencies: + browserslist: "npm:^4.28.0" + checksum: 10c0/71da415899633120db7638dd7b250eee56031f63c4560dcba8eeeafd1168fae171d59b223e3fd2e0aa543a490d64bac7d946764721e2c05897056fdfb22cce33 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -2511,7 +4030,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.4.3": +"debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -2697,6 +4216,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.263": + version: 1.5.267 + resolution: "electron-to-chromium@npm:1.5.267" + checksum: 10c0/0732bdb891b657f2e43266a3db8cf86fff6cecdcc8d693a92beff214e136cb5c2ee7dc5945ed75fa1db16e16bad0c38695527a020d15f39e79084e0b2e447621 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -2767,6 +4293,16 @@ __metadata: languageName: node linkType: hard +"enhanced-resolve@npm:^5.17.4": + version: 5.18.4 + resolution: "enhanced-resolve@npm:5.18.4" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/8f6d42c8a0787a746c493e724c9de5d091cfe8e3f871f2464e2f78a6c55fa1a3aaba495334f923c8ea3ac23e1472491f79feef6fc0fb46a75169cb447ffbe2dc + languageName: node + linkType: hard + "enquirer@npm:^2.3.6": version: 2.4.1 resolution: "enquirer@npm:2.4.1" @@ -2826,6 +4362,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 10c0/ae78dbbd43035a4b972c46cfb6877e374ea290adfc62bc2f5a083fea242c0b2baaab25c5886af86be55f092f4a326741cb94334cd3c478c383fdc8a9ec5ff817 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -2893,6 +4436,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + "esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -2903,6 +4456,22 @@ __metadata: languageName: node linkType: hard +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + "estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" @@ -2947,6 +4516,13 @@ __metadata: languageName: node linkType: hard +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + "execa@npm:4.1.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -3057,6 +4633,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + 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" @@ -3064,6 +4647,13 @@ __metadata: languageName: node linkType: hard +"fast-uri@npm:^3.0.1": + version: 3.1.0 + resolution: "fast-uri@npm:3.1.0" + checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 + languageName: node + linkType: hard + "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -3278,6 +4868,13 @@ __metadata: languageName: node linkType: hard +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -3365,6 +4962,13 @@ __metadata: languageName: node linkType: hard +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + "glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -3436,7 +5040,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -3696,6 +5300,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -3824,6 +5437,17 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -3856,13 +5480,29 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0": +"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" @@ -4184,6 +5824,13 @@ __metadata: languageName: node linkType: hard +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 10c0/a523b6329f114e0a98317158e30a7dfce044b731521be5399464010472a93a15ece44757d1eaed1d8845019869c5390218bc1c7c3110f4eeaef5157394486eac + languageName: node + linkType: hard + "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" @@ -4193,6 +5840,13 @@ __metadata: languageName: node linkType: hard +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + "lodash.get@npm:^4.4.2": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" @@ -4207,7 +5861,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.21": +"lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -4265,6 +5919,15 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + "lru-cache@npm:^7.14.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" @@ -4343,7 +6006,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -4627,6 +6290,13 @@ __metadata: languageName: node linkType: hard +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + "netmask@npm:^2.0.2": version: 2.0.2 resolution: "netmask@npm:2.0.2" @@ -4718,6 +6388,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.27": + version: 2.0.27 + resolution: "node-releases@npm:2.0.27" + checksum: 10c0/f1e6583b7833ea81880627748d28a3a7ff5703d5409328c216ae57befbced10ce2c991bea86434e8ec39003bd017f70481e2e5f8c1f7e0a7663241f81d6e00e2 + languageName: node + linkType: hard + "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -4957,6 +6634,13 @@ __metadata: languageName: node linkType: hard +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + "path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -5251,6 +6935,22 @@ __metadata: languageName: node linkType: hard +"regenerate-unicode-properties@npm:^10.2.2": + version: 10.2.2 + resolution: "regenerate-unicode-properties@npm:10.2.2" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/66a1d6a1dbacdfc49afd88f20b2319a4c33cee56d245163e4d8f5f283e0f45d1085a78f7f7406dd19ea3a5dd7a7799cd020cd817c97464a7507f9d10fbdce87c + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.14.1": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -5258,6 +6958,38 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^6.3.1": + version: 6.4.0 + resolution: "regexpu-core@npm:6.4.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.2" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.13.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.2.1" + checksum: 10c0/1eed9783c023dd06fb1f3ce4b6e3fdf0bc1e30cb036f30aeb2019b351e5e0b74355b40462282ea5db092c79a79331c374c7e9897e44a5ca4509e9f0b570263de + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.13.0": + version: 0.13.0 + resolution: "regjsparser@npm:0.13.0" + dependencies: + jsesc: "npm:~3.1.0" + bin: + regjsparser: bin/parser + checksum: 10c0/4702f85cda09f67747c1b2fb673a0f0e5d1ba39d55f177632265a0be471ba59e3f320623f411649141f752b126b8126eac3ff4c62d317921e430b0472bfc6071 + languageName: node + linkType: hard + "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -5274,6 +7006,13 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -5288,6 +7027,32 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.10": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.22.10#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -5374,16 +7139,28 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.7.1": - version: 7.7.2 - resolution: "semver@npm:7.7.2" +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/1c8d2c480a026d7c02ab2ecbe5919133a096d6a721a3f201fa50663e4f30f6d6ba020dfddd93cb828b66b922e76b342e103edd19a62c95c8f60e9079cc403202 + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js - checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d languageName: node linkType: hard -"semver@npm:^7.7.3": +"semver@npm:^7.3.2, semver@npm:^7.7.3": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -5392,6 +7169,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.3.5, semver@npm:^7.7.1": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + "send@npm:0.19.0": version: 0.19.0 resolution: "send@npm:0.19.0" @@ -5635,7 +7421,17 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, 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 @@ -5794,7 +7590,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -5803,6 +7599,13 @@ __metadata: languageName: node linkType: hard +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + "systeminformation@npm:^5.27.14": version: 5.30.5 resolution: "systeminformation@npm:5.30.5" @@ -5813,6 +7616,13 @@ __metadata: languageName: node linkType: hard +"tapable@npm:^2.2.0, tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: 10c0/cb9d67cc2c6a74dedc812ef3085d9d681edd2c1fa18e4aef57a3c0605fdbe44e6b8ea00bd9ef21bc74dd45314e39d31227aa031ebf2f5e38164df514136f2681 + languageName: node + linkType: hard + "tar-fs@npm:^3.1.1": version: 3.1.1 resolution: "tar-fs@npm:3.1.1" @@ -5861,6 +7671,42 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.3.16": + version: 5.3.16 + resolution: "terser-webpack-plugin@npm:5.3.16" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/39e37c5b3015c1a5354a3633f77235677bfa06eac2608ce26d258b1d1a74070a99910319a6f2f2c437eb61dc321f66434febe01d78e73fa96b4d4393b813f4cf + languageName: node + linkType: hard + +"terser@npm:^5.31.1": + version: 5.46.0 + resolution: "terser@npm:5.46.0" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.15.0" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/93ad468f13187c4f66b609bbfc00a6aee752007779ca3157f2c1ee063697815748d6010fd449a16c30be33213748431d5f54cc0224ba6a3fbbf5acd3582a4356 + languageName: node + linkType: hard + "text-decoder@npm:^1.1.0": version: 1.2.3 resolution: "text-decoder@npm:1.2.3" @@ -6051,6 +7897,37 @@ __metadata: languageName: node linkType: hard +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.2.1": + version: 2.2.1 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" + checksum: 10c0/93acd1ad9496b600e5379d1aaca154cf551c5d6d4a0aefaf0984fc2e6288e99220adbeb82c935cde461457fb6af0264a1774b8dfd4d9a9e31548df3352a4194d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.2.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.2.0" + checksum: 10c0/b338529831c988ac696f2bdbcd4579d1c5cc844b24eda7269973c457fa81989bdb49a366af37a448eb1a60f1dae89559ea2a5854db2797e972a0162eee0778c6 + languageName: node + linkType: hard + "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -6111,6 +7988,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec + languageName: node + linkType: hard + "utility-types@npm:^3.11.0": version: 3.11.0 resolution: "utility-types@npm:3.11.0" @@ -6159,6 +8050,16 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:^2.4.4": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 + languageName: node + linkType: hard + "weak-lru-cache@npm:^1.2.2": version: 1.2.2 resolution: "weak-lru-cache@npm:1.2.2" @@ -6173,6 +8074,51 @@ __metadata: languageName: node linkType: hard +"webpack-sources@npm:^3.3.3": + version: 3.3.3 + resolution: "webpack-sources@npm:3.3.3" + checksum: 10c0/ab732f6933b513ba4d505130418995ddef6df988421fccf3289e53583c6a39e205c4a0739cee98950964552d3006604912679c736031337fb4a9d78d8576ed40 + languageName: node + linkType: hard + +"webpack@npm:^5.104.1": + version: 5.104.1 + resolution: "webpack@npm:5.104.1" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.8" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.15.0" + acorn-import-phases: "npm:^1.0.3" + browserslist: "npm:^4.28.1" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.4" + es-module-lexer: "npm:^2.0.0" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.3.1" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.3" + tapable: "npm:^2.3.0" + terser-webpack-plugin: "npm:^5.3.16" + watchpack: "npm:^2.4.4" + webpack-sources: "npm:^3.3.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/ea78c57f80bbd7684f4f1bb38a18408ab0ef4c5b962e25ad382c595d10b9e9701e077f5248a8cef5f127a55902698664c18837e64243bb972fbecf4e5d9aaab0 + languageName: node + linkType: hard + "which@npm:^1.2.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -6290,6 +8236,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" From 6738c7109ead7a851d9a9cbad178592e3966fad3 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 17:48:58 +0100 Subject: [PATCH 02/16] static ok --- cypress/e2e/static-functions.cy.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/cypress/e2e/static-functions.cy.js b/cypress/e2e/static-functions.cy.js index 43d3efa9d..1dd7c7293 100644 --- a/cypress/e2e/static-functions.cy.js +++ b/cypress/e2e/static-functions.cy.js @@ -246,23 +246,26 @@ describe("Static functions", function () { }); }); - describe("Dropzone.confirm", function () { + let originalConfirm; let confirmStub; beforeEach(function () { - cy.window().then((win) => { - confirmStub = cy.stub(win, "confirm"); + originalConfirm = window.confirm; + + confirmStub = Cypress.sinon.stub(); + + Object.defineProperty(window, "confirm", { + configurable: true, + value: confirmStub, }); }); afterEach(function () { - // cy.stub() will restore automatically between tests in many setups, - // but make it explicit and safe: - if (confirmStub && typeof confirmStub.restore === "function") { - confirmStub.restore(); - } - confirmStub = null; + Object.defineProperty(window, "confirm", { + configurable: true, + value: originalConfirm, + }); }); it("should forward to window.confirm and call the callbacks accordingly", function () { @@ -270,6 +273,7 @@ describe("Static functions", function () { let rejected = false; confirmStub.returns(true); + Dropzone.confirm( "test question", () => (accepted = true), @@ -284,6 +288,7 @@ describe("Static functions", function () { rejected = false; confirmStub.returns(false); + Dropzone.confirm( "test question 2", () => (accepted = true), @@ -300,6 +305,7 @@ describe("Static functions", function () { let rejected = false; confirmStub.returns(false); + Dropzone.confirm("test question", () => (accepted = true)); expect(confirmStub.args[0][0]).to.equal("test question"); @@ -308,6 +314,7 @@ describe("Static functions", function () { }); }); + describe("Dropzone.getElement() / getElements()", function () { let tmpElements = []; From ef0fb989b0a87cbbede64a349183307a95d6bcac Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 17:50:35 +0100 Subject: [PATCH 03/16] fix amazon --- cypress/e2e/amazon-s3.cy.js | 50 +++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/cypress/e2e/amazon-s3.cy.js b/cypress/e2e/amazon-s3.cy.js index 488cd572e..2a4d86912 100644 --- a/cypress/e2e/amazon-s3.cy.js +++ b/cypress/e2e/amazon-s3.cy.js @@ -4,7 +4,7 @@ describe("Amazon S3 Support", function () { const getMockFile = ( type = "text/html", filename = "test file name", - contents = ["file contents"] + contents = ["file contents"], ) => { const file = new File(contents, filename, { type }); file.status = Dropzone.ADDED; @@ -59,38 +59,34 @@ describe("Amazon S3 Support", function () { it("should add proper Content-Type", function () { const seen = []; - cy.intercept({ url: "**/url" }, (req) => { + 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"); - dropzone.addFile(getMockFile()); - dropzone.addFile(getMockFile("image/jpeg", "some-file.jpg", [[1, 2, 3]])); - - // Start uploads after intercept is in place - dropzone.processQueue(); - - cy.wait("@upload").then((i1) => { - seen.push(i1); - }); - - cy.wait("@upload").then((i2) => { - seen.push(i2); - }); - + // IMPORTANT: run Dropzone actions only after intercept is registered cy.then(() => { - const contentTypes = seen - .map((i) => { - const headers = i.request && i.request.headers ? i.request.headers : {}; - // Cypress normalizes header keys to lowercase - return headers["content-type"] || headers["Content-Type"]; - }) - .filter(Boolean) - .sort(); - - expect(contentTypes).to.deep.equal( - ["text/html", "image/jpeg"].sort() + 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(), + ); + }); }); }); }); From ed07250173f92fb05da45eb837c4a0679b0d3b78 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 18:21:00 +0100 Subject: [PATCH 04/16] WIP --- cypress/e2e/1-basic/zero_configuration.cy.js | 26 +- cypress/e2e/all.cy.js | 242 ++++++++++--------- src/dropzone.js | 4 +- src/options.js | 3 +- src/preview-template.js | 38 +++ 5 files changed, 183 insertions(+), 130 deletions(-) create mode 100644 src/preview-template.js diff --git a/cypress/e2e/1-basic/zero_configuration.cy.js b/cypress/e2e/1-basic/zero_configuration.cy.js index 915f73c7b..f4b7abf81 100644 --- a/cypress/e2e/1-basic/zero_configuration.cy.js +++ b/cypress/e2e/1-basic/zero_configuration.cy.js @@ -3,6 +3,16 @@ describe("Dropzone with zero configuration", () => { beforeEach(() => { cy.visit("/1-basic/zero_configuration.html"); + + // Patch the already auto-created Dropzone instance + cy.window().then((win) => { + const dz = win.Dropzone?.instances?.[0]; + expect(dz, "Dropzone instance").to.exist; + + if (typeof dz.options.previewTemplate === "string") { + dz.options.previewTemplate = dz.options.previewTemplate.trim(); + } + }); }); it("uploads single file", () => { @@ -14,9 +24,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 +33,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 }); + }); 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 }); }); }); }); diff --git a/cypress/e2e/all.cy.js b/cypress/e2e/all.cy.js index 099465ecf..e5c889d50 100644 --- a/cypress/e2e/all.cy.js +++ b/cypress/e2e/all.cy.js @@ -592,23 +592,28 @@ describe("Dropzone", function () { }); })); - 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 () { - 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); - 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 () { @@ -1586,161 +1591,160 @@ describe("Dropzone", function () { dropzone.accept = (file, done) => done(); dropzone.options.timeout = 10000; - cy.window().then((win) => { - const OriginalXHR = win.XMLHttpRequest; + const OriginalXHR = window.XMLHttpRequest; + const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open"); - const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open"); + const xhrInstances = []; + function WrappedXHR() { + const xhr = new OriginalXHR(); + xhrInstances.push(xhr); + return xhr; + } + WrappedXHR.prototype = OriginalXHR.prototype; - // Wrap XHR constructor so we can inspect instances - const xhrInstances = []; - function WrappedXHR() { - const xhr = new OriginalXHR(); - xhrInstances.push(xhr); - return xhr; - } - WrappedXHR.prototype = OriginalXHR.prototype; - win.XMLHttpRequest = WrappedXHR; + window.XMLHttpRequest = WrappedXHR; + 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); - - // cleanup - win.XMLHttpRequest = OriginalXHR; + } finally { + window.XMLHttpRequest = OriginalXHR; openSpy.restore(); - }); + } }); it("should properly handle if timeout is null", function () { dropzone.accept = (file, done) => done(); dropzone.options.timeout = null; - // Prevent racing ahead before we wrap XHR + // Prevent racing ahead before we start the upload + dropzone.options.autoProcessQueue = false; + + const OriginalXHR = window.XMLHttpRequest; + const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open"); + + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); + + 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; cy.window().then((win) => { const OriginalXHR = win.XMLHttpRequest; - const xhrInstances = []; + let xhr; function WrappedXHR() { - const xhr = new OriginalXHR(); - xhrInstances.push(xhr); + xhr = new OriginalXHR(); return xhr; } WrappedXHR.prototype = OriginalXHR.prototype; - win.XMLHttpRequest = WrappedXHR; try { dropzone.addFile(mockFile); - dropzone.processQueue(); // start upload deterministically + dropzone.processQueue(); - expect(xhrInstances.length).to.be.greaterThan(0); - expect(xhrInstances[0].timeout).to.equal(0); - } finally { - // cleanup (even if the test throws) - win.XMLHttpRequest = OriginalXHR; - } - }); - }); + expect(mockFile.status).to.equal(Dropzone.UPLOADING); + // Prepare response-ish fields Dropzone might read + xhr.status = 200; + xhr.getResponseHeader = () => "text/plain"; + xhr.responseText = "ok"; - it("should ignore the onreadystate callback if readyState != 4", function () { - dropzone.accept = (file, done) => done(); - dropzone.options.autoProcessQueue = false; + const trigger = () => { + if (typeof xhr.onreadystatechange === "function") + xhr.onreadystatechange(); + else if (typeof xhr.onload === "function") xhr.onload(); + }; - cy.window().then((win) => { - const OriginalXHR = win.XMLHttpRequest; + // Force readyState = 3 (non-final) and trigger callback + Object.defineProperty(xhr, "readyState", { + value: 3, + configurable: true, + }); + trigger(); - let xhr; - function WrappedXHR() { - xhr = new OriginalXHR(); - return xhr; - } - WrappedXHR.prototype = OriginalXHR.prototype; - win.XMLHttpRequest = WrappedXHR; + expect(mockFile.status).to.equal(Dropzone.UPLOADING); - try { - dropzone.addFile(mockFile); - dropzone.processQueue(); + // Force readyState = 4 (final) and trigger callback + Object.defineProperty(xhr, "readyState", { + value: 4, + configurable: true, + }); + trigger(); - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + expect(mockFile.status).to.equal(Dropzone.SUCCESS); + } finally { + win.XMLHttpRequest = OriginalXHR; + } + }); + }); - // Prepare response-ish fields Dropzone might read - xhr.status = 200; - xhr.getResponseHeader = () => "text/plain"; - xhr.responseText = "ok"; + it("should emit error and errormultiple when response was not OK", function () { + dropzone.options.uploadMultiple = true; - const trigger = () => { - if (typeof xhr.onreadystatechange === "function") xhr.onreadystatechange(); - else if (typeof xhr.onload === "function") xhr.onload(); - }; + // Make sure the file is accepted and upload doesn't start before intercept is set + dropzone.accept = (file, done) => done(); + dropzone.options.autoProcessQueue = false; - // Force readyState = 3 (non-final) and trigger callback - Object.defineProperty(xhr, "readyState", { value: 3, configurable: true }); - trigger(); + let error = false; + let errormultiple = false; + let complete = false; + let completemultiple = false; - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + dropzone.on("error", () => (error = true)); + dropzone.on("errormultiple", () => (errormultiple = true)); + dropzone.on("complete", () => (complete = true)); + dropzone.on("completemultiple", () => (completemultiple = true)); - // Force readyState = 4 (final) and trigger callback - Object.defineProperty(xhr, "readyState", { value: 4, configurable: true }); - trigger(); + // Force the upload request to fail + const method = String( + dropzone.options.method || "post", + ).toUpperCase(); + const urlPath = String(dropzone.options.url); + const urlGlob = urlPath.includes("://") + ? urlPath + : `**/${urlPath.replace(/^\/+/, "")}`; - expect(mockFile.status).to.equal(Dropzone.SUCCESS); - } finally { - win.XMLHttpRequest = OriginalXHR; - } - }); - }); + cy.intercept({ method, url: urlGlob }, (req) => { + req.reply({ + statusCode: 400, + headers: { "content-type": "text/plain" }, + body: "nope", + }); + }).as("upload"); - it("should emit error and errormultiple when response was not OK", function () { - dropzone.options.uploadMultiple = true; + dropzone.addFile(mockFile); + dropzone.processQueue(); - // Make sure the file is accepted and upload doesn't start before intercept is set - dropzone.accept = (file, done) => done(); - dropzone.options.autoProcessQueue = false; + cy.wait("@upload").then(() => { + expect(mockFile.status).to.equal(Dropzone.ERROR); - 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)); - - // Force the upload request to fail - const method = String(dropzone.options.method || "post").toUpperCase(); - const urlPath = String(dropzone.options.url); - const urlGlob = urlPath.includes("://") ? urlPath : `**/${urlPath.replace(/^\/+/, "")}`; - - cy.intercept({ method, url: urlGlob }, (req) => { - req.reply({ - statusCode: 400, - headers: { "content-type": "text/plain" }, - body: "nope", + expect( + true === error && + error === errormultiple && + errormultiple === complete && + complete === completemultiple, + ).to.be.ok; }); - }).as("upload"); - - dropzone.addFile(mockFile); - dropzone.processQueue(); - - cy.wait("@upload").then(() => { - expect(mockFile.status).to.equal(Dropzone.ERROR); - - expect( - true === error && - error === errormultiple && - errormultiple === complete && - complete === completemultiple - ).to.be.ok; }); }); - }); it("should include hidden files in the form and unchecked checkboxes and radiobuttons should be excluded", function (done) { let element = Dropzone.createElement(`
diff --git a/src/dropzone.js b/src/dropzone.js index 06ea10097..8647c40c9 100644 --- a/src/dropzone.js +++ b/src/dropzone.js @@ -88,12 +88,10 @@ export default class Dropzone extends Emitter { options != null ? options : {} ); - /* this.options.previewTemplate = this.options.previewTemplate.replace( - /\n* /g, + /\n*/g, "" ); -*/ // If the browser failed, just call the fallback and leave if (this.options.forceFallback || !Dropzone.isBrowserSupported()) { diff --git a/src/options.js b/src/options.js index c20a2c31a..6ed9a9dc1 100644 --- a/src/options.js +++ b/src/options.js @@ -1,6 +1,7 @@ import Dropzone from "./dropzone"; //import defaultPreviewTemplate from "bundle-text:./preview-template.html"; -import defaultPreviewTemplate from "./preview-template.html"; +//import defaultPreviewTemplate from "./preview-template.html?raw"; +import defaultPreviewTemplate from "./preview-template.js"; let defaultOptions = { /** diff --git a/src/preview-template.js b/src/preview-template.js new file mode 100644 index 000000000..50d794e68 --- /dev/null +++ b/src/preview-template.js @@ -0,0 +1,38 @@ +export default ` +
+
+
+
+
+
+
+ +
+
+
+ + + +
+
+ + + +
+
`; From 1100875c934300ae2563079c0ade5bce4b31da69 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 18:39:11 +0100 Subject: [PATCH 05/16] wip --- cypress/e2e/all.cy.js | 303 ++++++++++++++++++++++-------------------- 1 file changed, 160 insertions(+), 143 deletions(-) diff --git a/cypress/e2e/all.cy.js b/cypress/e2e/all.cy.js index e5c889d50..d9b959e58 100644 --- a/cypress/e2e/all.cy.js +++ b/cypress/e2e/all.cy.js @@ -15,8 +15,10 @@ describe("Dropzone", function () { return file; }; + /* let xhr = null; beforeEach(() => (xhr = Cypress.sinon.useFakeXMLHttpRequest())); + */ describe("constructor()", function () { let dropzone = null; @@ -462,11 +464,13 @@ describe("Dropzone", function () { }); describe("instance", function () { + let xhr; let element = null; let dropzone = null; let requests = null; beforeEach(function () { requests = []; + xhr = Cypress.sinon.useFakeXMLHttpRequest(); xhr.onCreate = (xhr) => requests.push(xhr); element = Dropzone.createElement("
"); @@ -482,7 +486,7 @@ describe("Dropzone", function () { afterEach(function () { document.body.removeChild(element); dropzone.destroy(); - return xhr.restore(); + xhr.restore(); }); describe(".accept()", function () { @@ -655,41 +659,51 @@ describe("Dropzone", function () { }, 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; + // Keep the shared XHR from completing (prevents SUCCESS race) + const sendStub = Cypress.sinon + .stub(window.XMLHttpRequest.prototype, "send") + .callsFake(() => {}); + + // Observe that processing happened once Cypress.sinon.spy(dropzone, "processFiles"); - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); + try { + dropzone.addFile(mock1); + dropzone.addFile(mock2); + dropzone.addFile(mock3); + + // Start the batch upload deterministically + dropzone.processQueue(); - return setTimeout(function () { 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; + Cypress.sinon.spy(mock1.xhr, "abort"); dropzone.cancelUpload(mock1); - expect(mock1.xhr === mock2.xhr && mock2.xhr === mock3.xhr).to.be.ok; - expect(mock1.status).to.equal(Dropzone.CANCELED); expect(mock2.status).to.equal(Dropzone.CANCELED); expect(mock3.status).to.equal(Dropzone.CANCELED); - // The XHR should only be aborted once! + // The shared XHR should only be aborted once expect(mock1.xhr.abort.callCount).to.equal(1); - - return done(); - }, 10); + } finally { + sendStub.restore(); + } }); }); @@ -1071,14 +1085,16 @@ describe("Dropzone", function () { })); 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); @@ -1087,17 +1103,18 @@ describe("Dropzone", function () { expect(dropzone.getUploadingFiles()).to.deep.equal([]); + // Accept two files mock1.done(); mock3.done(); - return setTimeout(function () { - 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); - 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()", () => @@ -1136,38 +1153,6 @@ describe("Dropzone", function () { expect(mock2.status).to.equal(Dropzone.ADDED); expect(mock4.status).to.equal(Dropzone.QUEUED); })); - /* - 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(); - - dropzone.options.accept = (file, _done) => (file.done = _done); - dropzone.uploadFile = function () {}; - dropzone.options.parallelUploads = 2; - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - dropzone.addFile(mock4); - - expect(dropzone.getActiveFiles()).to.deep.equal([]); - - mock1.done(); - mock3.done(); - mock4.done(); - - return setTimeout(function () { - 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 done(); - }, 10); - })); - */ return describe("getFilesWithStatus()", () => it("should return all files with provided status", function () { @@ -1490,10 +1475,12 @@ describe("Dropzone", function () { }); describe("uploadFiles()", function () { + let xhr; let requests; beforeEach(function () { requests = []; + xhr = Cypress.sinon.useFakeXMLHttpRequest(); return (xhr.onCreate = (xhr) => requests.push(xhr)); }); @@ -1511,7 +1498,7 @@ describe("Dropzone", function () { dropzone.uploadFile(mockFile); expect(dropzone.uploadFiles.callCount).to.equal(1); - return expect(dropzone.uploadFiles.calledWith([mockFile])).to.be.ok; + expect(dropzone.uploadFiles.calledWith([mockFile])).to.be.ok; }); describe("with real XHR (cy.intercept)", function () { beforeEach(function () { @@ -1519,38 +1506,39 @@ describe("Dropzone", function () { xhr.restore(); }); it("should use url options if strings", function () { - // Ensure the file is accepted dropzone.accept = (file, done) => done(); - - // Prevent Dropzone from starting the upload before we attach intercept + start the queue dropzone.options.autoProcessQueue = false; const method = String( dropzone.options.method || "post", ).toUpperCase(); - const urlPath = String(dropzone.options.url); - const urlGlob = urlPath.includes("://") - ? urlPath - : `**/${urlPath.replace(/^\/+/, "")}`; - cy.intercept({ method, url: urlGlob }, (req) => { - req.reply({ statusCode: 200, body: "" }); - }).as("upload"); + const OriginalXHR = window.XMLHttpRequest; - dropzone.addFile(mockFile); + const openSpy = Cypress.sinon.spy(OriginalXHR.prototype, "open"); + const sendStub = Cypress.sinon + .stub(OriginalXHR.prototype, "send") + .callsFake(() => {}); - // addFile() already queues the file (autoQueue default true); just start processing - dropzone.processQueue(); + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); + + expect(openSpy.callCount).to.be.greaterThan(0); - cy.wait("@upload").then((interception) => { - expect(interception.request.method).to.equal(method); - expect(interception.request.url).to.match( + // XHR.open(method, url, ...) + const [calledMethod, calledUrl] = openSpy.args[0]; + + 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"; @@ -1645,55 +1633,54 @@ describe("Dropzone", function () { dropzone.accept = (file, done) => done(); dropzone.options.autoProcessQueue = false; - cy.window().then((win) => { - const OriginalXHR = win.XMLHttpRequest; + const OriginalXHR = window.XMLHttpRequest; - let xhr; - function WrappedXHR() { - xhr = new OriginalXHR(); - return xhr; - } - WrappedXHR.prototype = OriginalXHR.prototype; - win.XMLHttpRequest = WrappedXHR; + let xhr; + function WrappedXHR() { + xhr = new OriginalXHR(); + return xhr; + } + WrappedXHR.prototype = OriginalXHR.prototype; + + window.XMLHttpRequest = WrappedXHR; - try { - dropzone.addFile(mockFile); - dropzone.processQueue(); + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + expect(mockFile.status).to.equal(Dropzone.UPLOADING); - // Prepare response-ish fields Dropzone might read - xhr.status = 200; - xhr.getResponseHeader = () => "text/plain"; - xhr.responseText = "ok"; + // Prepare response-ish fields Dropzone might read + xhr.status = 200; + xhr.getResponseHeader = () => "text/plain"; + xhr.responseText = "ok"; - const trigger = () => { - if (typeof xhr.onreadystatechange === "function") - xhr.onreadystatechange(); - else if (typeof xhr.onload === "function") xhr.onload(); - }; + const trigger = () => { + if (typeof xhr.onreadystatechange === "function") + xhr.onreadystatechange(); + else if (typeof xhr.onload === "function") xhr.onload(); + }; - // Force readyState = 3 (non-final) and trigger callback - Object.defineProperty(xhr, "readyState", { - value: 3, - configurable: true, - }); - trigger(); + // Force readyState = 3 (non-final) and trigger callback + Object.defineProperty(xhr, "readyState", { + value: 3, + configurable: true, + }); + trigger(); - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + expect(mockFile.status).to.equal(Dropzone.UPLOADING); - // Force readyState = 4 (final) and trigger callback - Object.defineProperty(xhr, "readyState", { - value: 4, - configurable: true, - }); - trigger(); + // Force readyState = 4 (final) and trigger callback + Object.defineProperty(xhr, "readyState", { + value: 4, + configurable: true, + }); + trigger(); - expect(mockFile.status).to.equal(Dropzone.SUCCESS); - } finally { - win.XMLHttpRequest = OriginalXHR; - } - }); + expect(mockFile.status).to.equal(Dropzone.SUCCESS); + } finally { + window.XMLHttpRequest = OriginalXHR; + } }); it("should emit error and errormultiple when response was not OK", function () { @@ -1830,13 +1817,35 @@ describe("Dropzone", function () { describe("settings()", function () { it("should correctly set `withCredentials` on the xhr object", function () { - dropzone.uploadFile(mockFile); - expect(requests.length).to.equal(1); - expect(requests[0].withCredentials).to.equal(false); - dropzone.options.withCredentials = true; - dropzone.uploadFile(mockFile); - expect(requests.length).to.equal(2); - return expect(requests[1].withCredentials).to.equal(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 () { @@ -1887,37 +1896,45 @@ describe("Dropzone", function () { }, 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 Cypress.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 () { - expect(sendingCount).to.equal(2); - expect(sendingMultipleCount).to.equal(1); - dropzone.uploadFiles([mock1, mock2]); - 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]"); - 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) { Cypress.sinon.stub(dropzone, "resizeImage"); Cypress.sinon.stub(dropzone, "createThumbnail"); From 0c1c220a425b7c4542ce4d90d388a51617f884ae Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 18:55:58 +0100 Subject: [PATCH 06/16] WIP --- cypress.config.js | 23 ++++---------------- cypress/support/e2e.js | 2 -- cypress/support/index.js | 16 ++++++++++++++ cypress/support/unit.js | 14 ++++++++++++ cypress/{e2e => unit}/all.cy.js | 14 +----------- cypress/{e2e => unit}/amazon-s3.cy.js | 0 cypress/{e2e => unit}/emitter.cy.js | 0 cypress/{e2e => unit}/static-functions.cy.js | 0 8 files changed, 35 insertions(+), 34 deletions(-) create mode 100644 cypress/support/index.js create mode 100644 cypress/support/unit.js rename cypress/{e2e => unit}/all.cy.js (99%) rename cypress/{e2e => unit}/amazon-s3.cy.js (100%) rename cypress/{e2e => unit}/emitter.cy.js (100%) rename cypress/{e2e => unit}/static-functions.cy.js (100%) diff --git a/cypress.config.js b/cypress.config.js index 61ba7b842..47d8beab2 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -1,26 +1,11 @@ const { defineConfig } = require('cypress') -const webpackPreprocessor = require("@cypress/webpack-preprocessor"); 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', - setupNodeEvents(on, config) { - const options = webpackPreprocessor.defaultOptions || {}; - - options.webpackOptions = options.webpackOptions || {}; - options.webpackOptions.module = options.webpackOptions.module || {}; - options.webpackOptions.module.rules = [ - ...(options.webpackOptions.module.rules || []), - { test: /\.html$/i, type: "asset/source" }, - ]; - - on("file:preprocessor", webpackPreprocessor(options)); - return config; - }, + specPattern: [ + "cypress/e2e/**/*.cy.{js,jsx,ts,tsx}", + "cypress/unit/**/*.cy.{js,jsx,ts,tsx}", + ], }, }) diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index c40970173..71550f181 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -12,5 +12,3 @@ // You can read more here: // https://on.cypress.io/configuration // *********************************************************** -globalThis.sleep = (delay) => - new Promise((resolve) => setTimeout(resolve, delay)); 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/cypress/e2e/all.cy.js b/cypress/unit/all.cy.js similarity index 99% rename from cypress/e2e/all.cy.js rename to cypress/unit/all.cy.js index d9b959e58..27048c75a 100644 --- a/cypress/e2e/all.cy.js +++ b/cypress/unit/all.cy.js @@ -15,11 +15,6 @@ describe("Dropzone", function () { return file; }; - /* - let xhr = null; - beforeEach(() => (xhr = Cypress.sinon.useFakeXMLHttpRequest())); - */ - describe("constructor()", function () { let dropzone = null; @@ -464,15 +459,9 @@ describe("Dropzone", function () { }); describe("instance", function () { - let xhr; let element = null; let dropzone = null; - let requests = null; beforeEach(function () { - requests = []; - xhr = Cypress.sinon.useFakeXMLHttpRequest(); - xhr.onCreate = (xhr) => requests.push(xhr); - element = Dropzone.createElement("
"); document.body.appendChild(element); return (dropzone = new Dropzone(element, { @@ -486,7 +475,6 @@ describe("Dropzone", function () { afterEach(function () { document.body.removeChild(element); dropzone.destroy(); - xhr.restore(); }); describe(".accept()", function () { @@ -2032,7 +2020,7 @@ describe("Dropzone", function () { return done(); }); - return describe("should properly set status of file", () => + describe("should properly set status of file", () => it("should correctly set `withCredentials` on the xhr object", function (done) { dropzone.addFile(mockFile); diff --git a/cypress/e2e/amazon-s3.cy.js b/cypress/unit/amazon-s3.cy.js similarity index 100% rename from cypress/e2e/amazon-s3.cy.js rename to cypress/unit/amazon-s3.cy.js diff --git a/cypress/e2e/emitter.cy.js b/cypress/unit/emitter.cy.js similarity index 100% rename from cypress/e2e/emitter.cy.js rename to cypress/unit/emitter.cy.js diff --git a/cypress/e2e/static-functions.cy.js b/cypress/unit/static-functions.cy.js similarity index 100% rename from cypress/e2e/static-functions.cy.js rename to cypress/unit/static-functions.cy.js From efc479ddaebb5eaa059fef4298d7ce86596542ba Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:08:43 +0100 Subject: [PATCH 07/16] WIP --- cypress/unit/all.cy.js | 137 +++++++++++++++++++++++++++++++++-------- 1 file changed, 113 insertions(+), 24 deletions(-) diff --git a/cypress/unit/all.cy.js b/cypress/unit/all.cy.js index 27048c75a..53948cfda 100644 --- a/cypress/unit/all.cy.js +++ b/cypress/unit/all.cy.js @@ -1465,7 +1465,6 @@ describe("Dropzone", function () { describe("uploadFiles()", function () { let xhr; let requests; - beforeEach(function () { requests = []; xhr = Cypress.sinon.useFakeXMLHttpRequest(); @@ -1962,7 +1961,7 @@ describe("Dropzone", function () { setTimeout(function () { expect(dropzone.uploadFiles.callCount).to.equal(1); let uploadedFiles = dropzone.uploadFiles.getCall(0).args[0]; - expect(uploadedFiles).to.equal([mock1]); + expect(uploadedFiles).to.deep.equal([mock1]); done(); }, 10); }); @@ -2020,41 +2019,131 @@ describe("Dropzone", function () { return done(); }); - 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 () { - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + beforeEach(function () { + requests = []; + xhr = Cypress.sinon.useFakeXMLHttpRequest(); - expect(requests.length).to.equal(1); - requests[0].status = 400; - requests[0].readyState = 4; - requests[0].responseHeaders = { "content-type": "text/plain" }; + return (xhr.onCreate = (xhr) => requests.push(xhr)); + }); - requests[0].onload(); + 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); + dropzone.processQueue(); + expect(mockFile.status).to.equal(Dropzone.SUCCESS); + } finally { + sendStub.restore(); + } + }); + }); + }); + /* + it("should correctly set `withCredentials` on the xhr object", function () { + dropzone.accept = (file, done) => done(); + dropzone.options.autoProcessQueue = false; - setTimeout(function () { - expect(mockFile.status).to.equal(Dropzone.UPLOADING); + const OriginalXHR = window.XMLHttpRequest; - expect(requests.length).to.equal(2); - requests[1].status = 200; - requests[1].readyState = 4; - requests[1].responseHeaders = { "content-type": "text/plain" }; + const sendStub = Cypress.sinon + .stub(OriginalXHR.prototype, "send") + .callsFake(function () { + // 1st send => 400, 2nd send => 200 + const statusCode = sendStub.callCount === 1 ? 400 : 200; - requests[1].onload(); + this.status = statusCode; - expect(mockFile.status).to.equal(Dropzone.SUCCESS); - return done(); - }, 10); - }, 10); - })); + // Some implementations have read-only readyState, but this works in most cases + try { + Object.defineProperty(this, "readyState", { + value: 4, + configurable: true, + }); + } catch (e) { + // ignore + } + + this.getResponseHeader = () => "text/plain"; + this.responseText = ""; + + if (typeof this.onreadystatechange === "function") + this.onreadystatechange(); + if (typeof this.onload === "function") this.onload(); + }); + + try { + // first file => ERROR + dropzone.addFile(mockFile); + dropzone.processQueue(); + expect(mockFile.status).to.equal(Dropzone.ERROR); + + // second file => SUCCESS + mockFile = getMockFile(); + dropzone.addFile(mockFile); + 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) => { From 8fa060a34368c2ba075ef06715e83478394fe823 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:10:46 +0100 Subject: [PATCH 08/16] almost there! --- cypress/unit/all.cy.js | 44 +++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/cypress/unit/all.cy.js b/cypress/unit/all.cy.js index 53948cfda..7819757dc 100644 --- a/cypress/unit/all.cy.js +++ b/cypress/unit/all.cy.js @@ -1837,18 +1837,48 @@ describe("Dropzone", function () { it("should correctly override headers on the xhr object", function () { dropzone.options.headers = { "Foo-Header": "foobar" }; - dropzone.uploadFile(mockFile); - return expect(requests[0].requestHeaders["Foo-Header"]).to.equal( - "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 expect(Object.keys(requests[0].requestHeaders)).to.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) { From 6bc1f8e7805c366f49b6b65b8b16c326033a5a2f Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:14:30 +0100 Subject: [PATCH 09/16] cleanup --- cypress/unit/all.cy.js | 97 ++++++++---------------------------------- 1 file changed, 17 insertions(+), 80 deletions(-) diff --git a/cypress/unit/all.cy.js b/cypress/unit/all.cy.js index 7819757dc..a62154dfa 100644 --- a/cypress/unit/all.cy.js +++ b/cypress/unit/all.cy.js @@ -237,7 +237,7 @@ describe("Dropzone", function () { let msg = Dropzone.createElement('
TEST
'); element.appendChild(msg); - let dropzone = new Dropzone(element, { + new Dropzone(element, { clickable: true, acceptParameter: null, }); @@ -748,30 +748,6 @@ describe("Dropzone", function () { expect(dropzone.disable.callCount).to.equal(1); expect(element).to.not.have.property("dropzone"); }); - /* - it("should properly cancel all pending uploads and remove all file references", function (done) { - dropzone.accept = (file, done) => done(); - - dropzone.options.parallelUploads = 1; - - dropzone.addFile(getMockFile()); - dropzone.addFile(getMockFile()); - - return setTimeout(function () { - expect(dropzone.getUploadingFiles().length).to.equal(1); - expect(dropzone.getQueuedFiles().length).to.equal(1); - expect(dropzone.files.length).to.equal(2); - - Cypress.sinon.spy(dropzone, "disable"); - - dropzone.destroy(); - - expect(dropzone.disable.callCount).to.equal(1); - expect(element).to.not.have.property("dropzone"); - return done(); - }, 10); - }); - */ it("should be able to create instance of dropzone on the same element after destroy", function () { dropzone.destroy(); @@ -1637,15 +1613,28 @@ describe("Dropzone", function () { expect(mockFile.status).to.equal(Dropzone.UPLOADING); - // Prepare response-ish fields Dropzone might read - xhr.status = 200; + // 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"; - xhr.responseText = "ok"; 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 @@ -1669,7 +1658,6 @@ describe("Dropzone", function () { window.XMLHttpRequest = OriginalXHR; } }); - it("should emit error and errormultiple when response was not OK", function () { dropzone.options.uploadMultiple = true; @@ -2123,57 +2111,6 @@ describe("Dropzone", function () { }); }); }); - /* - 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; - - this.status = statusCode; - - // Some implementations have read-only readyState, but this works in most cases - try { - Object.defineProperty(this, "readyState", { - value: 4, - configurable: true, - }); - } catch (e) { - // ignore - } - - this.getResponseHeader = () => "text/plain"; - this.responseText = ""; - - if (typeof this.onreadystatechange === "function") - this.onreadystatechange(); - if (typeof this.onload === "function") this.onload(); - }); - - try { - // first file => ERROR - dropzone.addFile(mockFile); - dropzone.processQueue(); - expect(mockFile.status).to.equal(Dropzone.ERROR); - - // second file => SUCCESS - mockFile = getMockFile(); - dropzone.addFile(mockFile); - 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) => { From 835257d47b0b6dfcaadeb401a42514e850c0138b Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:18:35 +0100 Subject: [PATCH 10/16] fix flaky tests --- cypress/unit/all.cy.js | 91 ++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 31 deletions(-) diff --git a/cypress/unit/all.cy.js b/cypress/unit/all.cy.js index a62154dfa..c7c39b806 100644 --- a/cypress/unit/all.cy.js +++ b/cypress/unit/all.cy.js @@ -1507,9 +1507,9 @@ describe("Dropzone", function () { const url = "/custom/upload/url"; dropzone.accept = (file, done) => done(); + dropzone.options.autoProcessQueue = false; dropzone.options.method = Cypress.sinon.stub().callsFake((files) => { - // Dropzone passes an array of files here in this codebase expect(files).to.deep.equal([mockFile]); return method; }); @@ -1519,23 +1519,37 @@ describe("Dropzone", function () { return url; }); - cy.intercept({ method, url: `**${url}` }, (req) => { - req.reply({ statusCode: 200, body: "" }); - }).as("upload"); + const openSpy = Cypress.sinon.spy( + window.XMLHttpRequest.prototype, + "open", + ); + const sendStub = Cypress.sinon + .stub(window.XMLHttpRequest.prototype, "send") + .callsFake(() => {}); - dropzone.addFile(mockFile); - dropzone.processFile(mockFile); + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); - cy.wait("@upload").then(() => { + // verify option functions were called expect(dropzone.options.method.callCount).to.equal(1); expect(dropzone.options.url.callCount).to.equal(1); - - // If you prefer explicit Sinon asserts, these are fine too: 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(); + } }); it("should use the timeout option", function () { @@ -1660,8 +1674,6 @@ describe("Dropzone", function () { }); it("should emit error and errormultiple when response was not OK", function () { dropzone.options.uploadMultiple = true; - - // Make sure the file is accepted and upload doesn't start before intercept is set dropzone.accept = (file, done) => done(); dropzone.options.autoProcessQueue = false; @@ -1675,27 +1687,42 @@ describe("Dropzone", function () { dropzone.on("complete", () => (complete = true)); dropzone.on("completemultiple", () => (completemultiple = true)); - // Force the upload request to fail - const method = String( - dropzone.options.method || "post", - ).toUpperCase(); - const urlPath = String(dropzone.options.url); - const urlGlob = urlPath.includes("://") - ? urlPath - : `**/${urlPath.replace(/^\/+/, "")}`; - - cy.intercept({ method, url: urlGlob }, (req) => { - req.reply({ - statusCode: 400, - headers: { "content-type": "text/plain" }, - body: "nope", + 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(); }); - }).as("upload"); - dropzone.addFile(mockFile); - dropzone.processQueue(); + try { + dropzone.addFile(mockFile); + dropzone.processQueue(); - cy.wait("@upload").then(() => { expect(mockFile.status).to.equal(Dropzone.ERROR); expect( @@ -1704,7 +1731,9 @@ describe("Dropzone", function () { errormultiple === complete && complete === completemultiple, ).to.be.ok; - }); + } finally { + sendStub.restore(); + } }); }); From dbd75194d2e93087e018e032d7e112c6ffdaf85d Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:23:35 +0100 Subject: [PATCH 11/16] run everything with cypress --- package.json | 9 - test/built/.gitignore | 2 - test/karma.conf.js | 22 - test/unit-tests.js | 4 - test/unit-tests/README.md | 6 - test/unit-tests/all.js | 1920 --------------------------- test/unit-tests/amazon-s3.js | 80 -- test/unit-tests/emitter.js | 124 -- test/unit-tests/static-functions.js | 345 ----- test/unit-tests/utils.js | 7 - yarn.lock | 1701 +----------------------- 11 files changed, 39 insertions(+), 4181 deletions(-) delete mode 100644 test/built/.gitignore delete mode 100644 test/karma.conf.js delete mode 100644 test/unit-tests.js delete mode 100644 test/unit-tests/README.md delete mode 100644 test/unit-tests/all.js delete mode 100644 test/unit-tests/amazon-s3.js delete mode 100644 test/unit-tests/emitter.js delete mode 100644 test/unit-tests/static-functions.js delete mode 100644 test/unit-tests/utils.js diff --git a/package.json b/package.json index e743e8ecb..9e954c35e 100644 --- a/package.json +++ b/package.json @@ -67,20 +67,11 @@ "@parcel/transformer-inline-string": "^2.16.3", "@parcel/transformer-sass": "^2.16.3", "babel-loader": "^10.0.0", - "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", "webpack": "^5.104.1" }, "packageManager": "yarn@4.5.3" 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/README.md b/test/unit-tests/README.md deleted file mode 100644 index 664d9e550..000000000 --- a/test/unit-tests/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Initially all tests were just written in `all.js` but this file has become -quite difficult to maintain. - -The idea is to have one file per feature now, which makes it a lot easier to -manage. Not all groups have been extracted from `all.js` yet though, but please -don't add any more to that file. diff --git a/test/unit-tests/all.js b/test/unit-tests/all.js deleted file mode 100644 index bbe93867e..000000000 --- a/test/unit-tests/all.js +++ /dev/null @@ -1,1920 +0,0 @@ -import { Dropzone } from "../../src/dropzone.js"; - -describe("Dropzone", 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; - beforeEach(() => (xhr = sinon.useFakeXMLHttpRequest())); - - describe("constructor()", function () { - let dropzone = null; - - afterEach(function () { - if (dropzone != null) { - return dropzone.destroy(); - } - }); - - 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." - )); - - 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." - ); - }); - - 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); - }); - - 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 - ); - }); - - 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 describe("options", function () { - let element = null; - let element2 = null; - beforeEach(function () { - element = document.createElement("div"); - element.id = "test-element"; - element2 = document.createElement("div"); - element2.id = "test-element2"; - return (Dropzone.options.testElement = { - url: "/some/url", - parallelUploads: 10, - }); - }); - afterEach(() => delete Dropzone.options.testElement); - - 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); - }); - - 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"); - }); - - 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); - }); - - it("should call the fallback function if forceFallback == true", (done) => - (dropzone = new Dropzone(element, { - url: "/some/other/url", - forceFallback: true, - fallback() { - return done(); - }, - }))); - - return describe("options.clickable", function () { - let clickableElement = null; - dropzone = null; - beforeEach(function () { - clickableElement = document.createElement("div"); - clickableElement.className = "some-clickable"; - return document.body.appendChild(clickableElement); - }); - afterEach(function () { - document.body.removeChild(clickableElement); - if (dropzone != null) { - return dropzone.destroy; - } - }); - - it("should use the default element if clickable == true", function () { - dropzone = new Dropzone(element, { clickable: true }); - return dropzone.clickableElements.should.eql([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]); - }); - it("should simply use the provided element", function () { - dropzone = new Dropzone(element, { clickable: clickableElement }); - return dropzone.clickableElements.should.eql([clickableElement]); - }); - it("should accept multiple clickable elements", function () { - dropzone = new Dropzone(element, { - clickable: [document.body, ".some-clickable"], - }); - return dropzone.clickableElements.should.eql([ - document.body, - clickableElement, - ]); - }); - it("should throw an exception if the element is invalid", () => - expect( - () => - (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." - )); - }); - }); - }); - - describe("init()", function () { - describe("clickable", function () { - let dropzones = { - "using acceptedFiles": new Dropzone( - Dropzone.createElement('
'), - { 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 } - ); - return dropzone.hiddenFileInput.hasAttribute("accept").should.be.false; - }); - - return (() => { - let result = []; - for (let name in dropzones) { - var dropzone = dropzones[name]; - result.push( - 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"); - }); - - it("should have a tabindex of -1", function () { - dropzone.hiddenFileInput.tabIndex.should.equal(-1); - }); - - it("should use the acceptParameter", () => - dropzone.hiddenFileInput - .getAttribute("accept") - .should.equal("audio/*,video/*")); - - it("should create a new input element when something is selected to reset the input field", () => - (() => { - let result1 = []; - for (let i = 0; i <= 3; i++) { - let { hiddenFileInput } = dropzone; - let event = document.createEvent("HTMLEvents"); - event.initEvent("change", true, true); - hiddenFileInput.dispatchEvent(event); - dropzone.hiddenFileInput.should.not.equal( - hiddenFileInput - ); - result1.push( - Dropzone.elementInside(hiddenFileInput, document).should - .not.be.ok - ); - } - return result1; - })()); - })(dropzone) - ) - ); - } - return result; - })(); - }); - - 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); - }); - - 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, { - clickable: true, - acceptParameter: null, - }); - element.querySelector(".dz-message").should.equal(msg); - - return element.querySelectorAll(".dz-message").length.should.equal(1); - }); - }); - - describe("options", function () { - let element = null; - let dropzone = null; - - beforeEach(function () { - element = Dropzone.createElement("
"); - return (dropzone = new Dropzone(element, { - maxFilesize: 4, - url: "url", - acceptedFiles: "audio/*,image/png", - maxFiles: 3, - })); - }); - - return describe("file specific", function () { - let file = null; - beforeEach(function () { - file = { - name: "test name", - size: 2 * 1024 * 1024, - width: 200, - height: 100, - upload: { - filename: "test name", - }, - }; - return dropzone.options.addedfile.call(dropzone, file); - }); - - 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"); - })); - - 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"); - }); - - it("should properly insert the error when provided with an object containing the error", function () { - dropzone.options.error.call(dropzone, file, { - error: "test message", - }); - - return file.previewElement - .querySelector("[data-dz-errormessage]") - .innerHTML.should.eql("test message"); - }); - }); - - describe(".thumbnail()", () => - it("should properly insert the error", function () { - let transparentGif = - "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="; - dropzone.options.thumbnail.call(dropzone, file, transparentGif); - let thumbnail = file.previewElement.querySelector( - "[data-dz-thumbnail]" - ); - thumbnail.src.should.eql(transparentGif); - return thumbnail.alt.should.eql("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%"); - dropzone.options.uploadprogress.call(dropzone, file, 80); - file.previewElement - .querySelector("[data-dz-uploadprogress]") - .style.width.should.eql("80%"); - dropzone.options.uploadprogress.call(dropzone, file, 90); - file.previewElement - .querySelector("[data-dz-uploadprogress]") - .style.width.should.eql("90%"); - dropzone.options.uploadprogress.call(dropzone, file, 100); - return file.previewElement - .querySelector("[data-dz-uploadprogress]") - .style.width.should.eql("100%"); - })); - - return describe(".resize()", function () { - describe("with default thumbnail settings", function () { - it("should properly return target dimensions for 'contain'", function () { - let info = dropzone.options.resize.call( - dropzone, - file, - 120, - 120, - "crop" - ); - info.trgWidth.should.eql(120); - info.trgHeight.should.eql(100); - info = dropzone.options.resize.call( - dropzone, - file, - 100, - 100, - "crop" - ); - info.trgWidth.should.eql(100); - return info.trgHeight.should.eql(100); - }); - - it("should properly return target dimensions for 'contain'", function () { - let info = dropzone.options.resize.call( - dropzone, - file, - 120, - 120, - "contain" - ); - info.trgWidth.should.eql(120); - info.trgHeight.should.eql(60); - info = dropzone.options.resize.call( - dropzone, - file, - 100, - 100, - "contain" - ); - info.trgWidth.should.eql(100); - return info.trgHeight.should.eql(50); - }); - }); - - return describe("with null thumbnail settings", function () { - it("should properly return target dimensions for crop", function () { - let testSettings = [ - [null, null], - [null, 80], - [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); - } - } - return result; - })(); - }); - - it("should properly return target dimensions for contain", function () { - let testSettings = [ - [null, 80], - [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); - } - } - return result; - })(); - }); - }); - }); - }); - }); - - 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, { - maxFilesize: 4, - maxFiles: 100, - url: "url", - acceptedFiles: "audio/*,image/png", - uploadprogress() {}, - })); - }); - 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 - )); - - 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.") - )); - - it("should properly accept files which mime types are listed in acceptedFiles", function () { - dropzone.accept( - { type: "audio/mp3" }, - (err) => expect(err).to.be.undefined - ); - dropzone.accept( - { type: "image/png" }, - (err) => expect(err).to.be.undefined - ); - return dropzone.accept( - { type: "audio/wav" }, - (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.") - )); - - it("should fail if maxFiles has been exceeded and call the event maxfilesexceeded", function () { - sinon.stub(dropzone, "getAcceptedFiles"); - let file = { type: "audio/mp3" }; - - dropzone.getAcceptedFiles.returns({ length: 99 }); - - dropzone.options.dictMaxFilesExceeded = - "You can only upload {{maxFiles}} files."; - - let called = false; - dropzone.on("maxfilesexceeded", function (lfile) { - lfile.should.equal(file); - return (called = true); - }); - - dropzone.accept(file, (err) => expect(err).to.be.undefined); - called.should.not.be.ok; - - dropzone.getAcceptedFiles.returns({ length: 100 }); - dropzone.accept(file, (err) => - expect(err).to.equal("You can only upload 100 files.") - ); - called.should.be.ok; - - return dropzone.getAcceptedFiles.restore(); - }); - - it("should properly handle if maxFiles is 0", function () { - let file = { type: "audio/mp3" }; - - dropzone.options.maxFiles = 0; - - let called = false; - dropzone.on("maxfilesexceeded", function (lfile) { - lfile.should.equal(file); - return (called = true); - }); - - dropzone.accept(file, (err) => - expect(err).to.equal("You cannot upload any more files.") - ); - return called.should.be.ok; - }); - }); - - describe(".removeFile()", () => - it("should abort uploading if file is currently being uploaded", function (done) { - let mockFile = getMockFile(); - dropzone.uploadFile = function (file) {}; - dropzone.accept = (file, done) => done(); - - 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); - dropzone.removeFile(mockFile); - dropzone.cancelUpload.callCount.should.equal(1); - return done(); - }, 100); - })); - - describe(".cancelUpload()", function () { - it("should properly cancel upload if file currently uploading", function (done) { - let mockFile = getMockFile(); - - dropzone.accept = (file, done) => done(); - - 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); - }); - - it("should properly cancel the upload if file is not yet uploading", function () { - let mockFile = getMockFile(); - - dropzone.accept = (file, done) => done(); - - // Making sure the file stays in the queue. - dropzone.options.parallelUploads = 0; - - dropzone.addFile(mockFile); - mockFile.status.should.equal(Dropzone.QUEUED); - dropzone.getQueuedFiles()[0].should.equal(mockFile); - - dropzone.cancelUpload(mockFile); - mockFile.status.should.equal(Dropzone.CANCELED); - dropzone.getQueuedFiles().length.should.equal(0); - return dropzone.getUploadingFiles().length.should.equal(0); - }); - - it("should call processQueue()", function (done) { - let mockFile = getMockFile(); - - dropzone.accept = (file, done) => done(); - - // Making sure the file stays in the queue. - dropzone.options.parallelUploads = 0; - - sinon.spy(dropzone, "processQueue"); - - dropzone.addFile(mockFile); - return setTimeout(function () { - dropzone.processQueue.callCount.should.equal(1); - - dropzone.cancelUpload(mockFile); - - dropzone.processQueue.callCount.should.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(); - - 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"); - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - - return setTimeout(function () { - dropzone.processFiles.callCount.should.equal(1); - - sinon.spy(mock1.xhr, "abort"); - - dropzone.cancelUpload(mock1); - - 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); - - // The XHR should only be aborted once! - mock1.xhr.abort.callCount.should.equal(1); - - return done(); - }, 10); - }); - }); - - describe(".disable()", () => - it("should properly cancel all pending uploads", function (done) { - 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); - - sinon.spy(requests[0], "abort"); - - requests[0].abort.callCount.should.equal(0); - - dropzone.disable(); - - requests[0].abort.callCount.should.equal(1); - - dropzone.getUploadingFiles().length.should.equal(0); - dropzone.getQueuedFiles().length.should.equal(0); - dropzone.files.length.should.equal(2); - - dropzone.files[0].status.should.equal(Dropzone.CANCELED); - dropzone.files[1].status.should.equal(Dropzone.CANCELED); - return done(); - }, 10); - })); - - describe(".destroy()", function () { - it("should properly cancel all pending uploads and remove all file references", function (done) { - 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); - - sinon.spy(dropzone, "disable"); - - dropzone.destroy(); - - dropzone.disable.callCount.should.equal(1); - element.should.not.have.property("dropzone"); - return done(); - }, 10); - }); - - 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); - }); - - it("should remove itself from Dropzone.instances", function () { - (Dropzone.instances.indexOf(dropzone) !== -1).should.be.ok; - dropzone.destroy(); - return (Dropzone.instances.indexOf(dropzone) === -1).should.be.ok; - }); - }); - - describe(".filesize()", function () { - it("should handle files with 0 size properly", () => - dropzone.filesize(0).should.eql("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"); - }); - - 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"); - }); - }); - - describe("._updateMaxFilesReachedClass()", 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; - dropzone._updateMaxFilesReachedClass(); - return dropzone.element.classList.contains("dz-max-files-reached") - .should.be.ok; - }); - it("should fire the 'maxfilesreached' event when appropriate", function () { - let spy = sinon.spy(); - dropzone.on("maxfilesreached", () => spy()); - dropzone.getAcceptedFiles = () => ({ length: 9 }); - dropzone.options.maxFiles = 10; - dropzone._updateMaxFilesReachedClass(); - spy.notCalled.should.be.true; - dropzone.getAcceptedFiles = () => ({ length: 10 }); - dropzone._updateMaxFilesReachedClass(); - spy.called.should.be.true; - dropzone.getAcceptedFiles = () => ({ length: 11 }); - dropzone._updateMaxFilesReachedClass(); - spy.calledOnce.should.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; - dropzone._updateMaxFilesReachedClass(); - dropzone.element.classList.contains("dz-max-files-reached").should.be - .ok; - dropzone.getAcceptedFiles = () => ({ length: 9 }); - dropzone._updateMaxFilesReachedClass(); - return dropzone.element.classList.contains("dz-max-files-reached") - .should.not.be.ok; - }); - }); - - return describe("events", () => { - describe("progress updates", () => - it("should properly emit a totaluploadprogress event", function (done) { - dropzone.files = [ - { - size: 1990, - accepted: true, - status: Dropzone.UPLOADING, - upload: { - progress: 20, - total: 2000, // The bytes to upload are higher than the file size - bytesSent: 400, - }, - }, - { - size: 1990, - accepted: true, - status: Dropzone.UPLOADING, - upload: { - progress: 10, - total: 2000, // The bytes to upload are higher than the file size - bytesSent: 200, - }, - }, - ]; - - let _called = 0; - - dropzone.on("totaluploadprogress", function (progress) { - progress.should.equal(totalProgressExpectation); - if (++_called === 3) { - return done(); - } - }); - - var totalProgressExpectation = 15; - dropzone.emit("uploadprogress", {}); - - totalProgressExpectation = 97.5; - dropzone.files[0].upload.bytesSent = 2000; - dropzone.files[1].upload.bytesSent = 1900; - // It shouldn't matter that progress is not properly updated since the total size - // should be calculated from the bytes - dropzone.emit("uploadprogress", {}); - - totalProgressExpectation = 100; - dropzone.files[0].upload.bytesSent = 2000; - dropzone.files[1].upload.bytesSent = 2000; - // It shouldn't matter that progress is not properly updated since the total size - // should be calculated from the bytes - dropzone.emit("uploadprogress", {}); - - // Just so the afterEach hook doesn't try to cancel them. - dropzone.files[0].status = Dropzone.CANCELED; - return (dropzone.files[1].status = Dropzone.CANCELED); - })); - - it("should emit DOM events", function (done) { - let element = Dropzone.createElement(`
- - - - - - -
`); - dropzone = new Dropzone(element, { url: "/the/url" }); - - var domEventTriggered = false; - element.addEventListener("dropzone:sending", function (evt) { - domEventTriggered = true; - }); - - let mock1 = getMockFile(); - - dropzone.addFile(mock1); - - return setTimeout(function () { - expect(domEventTriggered).to.equal(true); - done(); - }, 10); - }); - }); - }); - - describe("helper function", function () { - let element = null; - let dropzone = null; - beforeEach(function () { - element = Dropzone.createElement("
"); - return (dropzone = new Dropzone(element, { url: "url" })); - }); - - describe("getExistingFallback()", function () { - it("should return undefined if no fallback", () => - expect(dropzone.getExistingFallback()).to.equal(undefined)); - - it("should only return the fallback element if it contains exactly fallback", function () { - element.appendChild( - Dropzone.createElement('
') - ); - element.appendChild( - 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()); - }); - it("should return forms as fallback", function () { - let fallback = Dropzone.createElement( - '
' - ); - element.appendChild(fallback); - return fallback.should.equal(dropzone.getExistingFallback()); - }); - }); - - describe("getFallbackForm()", function () { - it("should use the paramName without [0] if uploadMultiple is false", function () { - dropzone.options.uploadMultiple = false; - dropzone.options.paramName = "myFile"; - let fallback = dropzone.getFallbackForm(); - let fileInput = fallback.querySelector("input[type=file]"); - return fileInput.name.should.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]"); - }); - }); - - describe("getAcceptedFiles() / getRejectedFiles()", function () { - let mock2, mock3, mock4; - let mock1 = (mock2 = mock3 = mock4 = null); - beforeEach(function () { - mock1 = getMockFile(); - mock2 = getMockFile(); - mock3 = getMockFile(); - mock4 = getMockFile(); - dropzone.options.accept = function (file, done) { - if (file === mock1 || file === mock3) { - return done(); - } else { - return done("error"); - } - }; - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - return dropzone.addFile(mock4); - }); - - it("getAcceptedFiles() should only return accepted files", () => - dropzone.getAcceptedFiles().should.eql([mock1, mock3])); - it("getRejectedFiles() should only return rejected files", () => - dropzone.getRejectedFiles().should.eql([mock2, mock4])); - }); - - describe("getQueuedFiles()", () => - it("should return all files with the status Dropzone.QUEUED", function () { - let mock1 = getMockFile(); - let mock2 = getMockFile(); - let mock3 = getMockFile(); - let mock4 = getMockFile(); - - dropzone.options.accept = (file, done) => (file.done = done); - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - dropzone.addFile(mock4); - - dropzone.getQueuedFiles().should.eql([]); - - 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); - })); - - 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(); - - dropzone.options.accept = (file, _done) => (file.done = _done); - dropzone.uploadFile = function () {}; - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - dropzone.addFile(mock4); - - dropzone.getUploadingFiles().should.eql([]); - - 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); - })); - - 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(); - - dropzone.options.accept = (file, _done) => (file.done = _done); - dropzone.uploadFile = function () {}; - dropzone.options.parallelUploads = 2; - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - dropzone.addFile(mock4); - - dropzone.getActiveFiles().should.eql([]); - - 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); - })); - - return describe("getFilesWithStatus()", () => - it("should return all files with provided status", function () { - let mock1 = getMockFile(); - let mock2 = getMockFile(); - let mock3 = getMockFile(); - let mock4 = getMockFile(); - - dropzone.options.accept = (file, _done) => (file.done = _done); - dropzone.uploadFile = function () {}; - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - dropzone.addFile(mock4); - - dropzone - .getFilesWithStatus(Dropzone.ADDED) - .should.eql([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]); - })); - }); - - describe("file handling", function () { - let mockFile = null; - let dropzone = null; - - beforeEach(function () { - mockFile = getMockFile(); - - let element = Dropzone.createElement("
"); - dropzone = new Dropzone(element, { url: "/the/url" }); - }); - - afterEach(() => dropzone.destroy()); - - describe("addFile()", function () { - it("should properly set the status of the file", function () { - let doneFunction = null; - - dropzone.accept = (file, done) => (doneFunction = done); - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - dropzone.addFile(mockFile); - - mockFile.status.should.eql(Dropzone.ADDED); - doneFunction(); - mockFile.status.should.eql(Dropzone.QUEUED); - - mockFile = getMockFile(); - dropzone.addFile(mockFile); - - mockFile.status.should.eql(Dropzone.ADDED); - doneFunction("error"); - return mockFile.status.should.eql(Dropzone.ERROR); - }); - - it("should properly set the status of the file if autoProcessQueue is false and not call processQueue", function (done) { - let doneFunction = null; - dropzone.options.autoProcessQueue = false; - dropzone.accept = (file, done) => (doneFunction = done); - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - dropzone.addFile(mockFile); - sinon.stub(dropzone, "processQueue"); - - mockFile.status.should.eql(Dropzone.ADDED); - doneFunction(); - mockFile.status.should.eql(Dropzone.QUEUED); - dropzone.processQueue.callCount.should.equal(0); - return setTimeout(function () { - dropzone.processQueue.callCount.should.equal(0); - return done(); - }, 10); - }); - - it("should not add the file to the queue if autoQueue is false", function () { - let doneFunction = null; - dropzone.options.autoQueue = false; - dropzone.accept = (file, done) => (doneFunction = done); - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - dropzone.addFile(mockFile); - - mockFile.status.should.eql(Dropzone.ADDED); - doneFunction(); - return mockFile.status.should.eql(Dropzone.ADDED); - }); - - it("should create a remove link if configured to do so", function () { - dropzone.options.addRemoveLinks = true; - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - sinon.stub(dropzone, "processQueue"); - dropzone.addFile(mockFile); - - return dropzone.files[0].previewElement.querySelector( - "a[data-dz-remove].dz-remove" - ).should.be.ok; - }); - - it("should create a remove link with HTML if configured to do so", function () { - dropzone.options.addRemoveLinks = true; - dropzone.options.dictRemoveFile = - ' Remove'; - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - 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') - ); - }); - - it("should attach an event handler to data-dz-remove links", function () { - dropzone.options.previewTemplate = `\ -
-
-
-
- -
-
-
-
-
- - -
\ -`; - - sinon.stub(dropzone, "processQueue"); - - dropzone.addFile(mockFile); - - let file = dropzone.files[0]; - let removeLink1 = file.previewElement.querySelector( - "a[data-dz-remove].link1" - ); - let removeLink2 = file.previewElement.querySelector( - "a[data-dz-remove].link2" - ); - - sinon.stub(dropzone, "removeFile"); - - let event = document.createEvent("HTMLEvents"); - event.initEvent("click", true, true); - removeLink1.dispatchEvent(event); - - dropzone.removeFile.callCount.should.eql(1); - - event = document.createEvent("HTMLEvents"); - event.initEvent("click", true, true); - removeLink2.dispatchEvent(event); - - return dropzone.removeFile.callCount.should.eql(2); - }); - - return describe("thumbnails", function () { - it("should properly queue the thumbnail creation", function (done) { - let ct_callback; - let doneFunction; - - dropzone.accept = (file, done) => (doneFunction = done); - dropzone.processFile = function () {}; - dropzone.uploadFile = function () {}; - - let mock1 = getMockFile("image/jpg"); - let mock2 = getMockFile("image/jpg"); - let mock3 = getMockFile("image/jpg"); - - let ct_file; - dropzone.createThumbnail = function ( - file, - thumbnailWidth, - thumbnailHeight, - resizeMethod, - fixOrientation, - callback - ) { - ct_file = file; - ct_callback = callback; - }; - - sinon.spy(dropzone, "createThumbnail"); - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - dropzone.addFile(mock3); - - dropzone.files.length.should.eql(3); - return setTimeout(function () { - dropzone.createThumbnail.callCount.should.eql(1); - mock1.should.equal(ct_file); - ct_callback(); - dropzone.createThumbnail.callCount.should.eql(2); - mock2.should.equal(ct_file); - ct_callback(); - dropzone.createThumbnail.callCount.should.eql(3); - mock3.should.equal(ct_file); - - return done(); - }, 10); - }); - - return describe("when file is SVG", () => - it("should use the SVG image itself", function (done) { - let createBlob = function (data, type) { - try { - return new Blob([data], { type }); - } catch (e) { - let BlobBuilder = - window.BlobBuilder || - window.WebKitBlobBuilder || - window.MozBlobBuilder || - window.MSBlobBuilder; - let builder = new BlobBuilder(); - builder.append(data.buffer || data); - return builder.getBlob(type); - } - }; - - let blob = createBlob("foo", "image/svg+xml"); - - return dropzone.createThumbnail( - blob, - dropzone.options.thumbnailWidth, - dropzone.options.thumbnailHeight, - "crop", - false, - function (dataURI, canvas) { - let fileReader = new FileReader(); - fileReader.onload = function () { - fileReader.result.should.equal(dataURI); - return done(); - }; - return fileReader.readAsDataURL(blob); - } - ); - })); - }); - }); - - describe("enqueueFile()", function () { - it("should be wrapped by enqueueFiles()", function () { - sinon.stub(dropzone, "enqueueFile"); - - let mock1 = getMockFile(); - let mock2 = getMockFile(); - let mock3 = getMockFile(); - - 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); - }); - - 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." - ); - 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." - ); - 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." - ); - }); - - 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); - dropzone.enqueueFile(mockFile); - mockFile.status.should.equal(Dropzone.QUEUED); - dropzone.processQueue.callCount.should.equal(0); - return setTimeout(function () { - dropzone.processQueue.callCount.should.equal(1); - return done(); - }, 10); - }); - }); - - describe("uploadFiles()", function () { - let requests; - - beforeEach(function () { - requests = []; - - return (xhr.onCreate = (xhr) => requests.push(xhr)); - }); - - afterEach(() => 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"); - - dropzone.uploadFile(mockFile); - - dropzone.uploadFiles.callCount.should.equal(1); - return dropzone.uploadFiles.calledWith([mockFile]).should.be.ok; - }); - - it("should use url options if strings", function (done) { - dropzone.addFile(mockFile); - - 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); - }); - - it("should call url options if functions", function (done) { - let method = "PUT"; - let url = "/custom/upload/url"; - - dropzone.options.method = sinon.stub().returns(method); - dropzone.options.url = sinon.stub().returns(url); - - dropzone.addFile(mockFile); - - 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); - }); - - it("should use the timeout option", function (done) { - dropzone.options.timeout = 10000; - dropzone.addFile(mockFile); - - return setTimeout(function () { - expect(requests[0].timeout).to.equal(10000); - return done(); - }, 10); - }); - - it("should properly handle if timeout is null", function (done) { - dropzone.options.timeout = null; - dropzone.addFile(mockFile); - - return setTimeout(function () { - expect(requests[0].timeout).to.equal(0); - return done(); - }, 10); - }); - - it("should ignore the onreadystate callback if readyState != 4", function (done) { - dropzone.addFile(mockFile); - return setTimeout(function () { - mockFile.status.should.eql(Dropzone.UPLOADING); - - requests[0].status = 200; - requests[0].readyState = 3; - requests[0].responseHeaders = { "content-type": "text/plain" }; - requests[0].onload(); - - mockFile.status.should.eql(Dropzone.UPLOADING); - - requests[0].readyState = 4; - requests[0].onload(); - - mockFile.status.should.eql(Dropzone.SUCCESS); - return done(); - }, 10); - }); - - it("should emit error and errormultiple when response was not OK", function (done) { - dropzone.options.uploadMultiple = true; - - 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)); - - dropzone.addFile(mockFile); - - return setTimeout(function () { - mockFile.status.should.eql(Dropzone.UPLOADING); - - requests[0].status = 400; - requests[0].readyState = 4; - requests[0].responseHeaders = { "content-type": "text/plain" }; - requests[0].onload(); - - expect( - true === error && - error === errormultiple && - errormultiple === complete && - complete === completemultiple - ).to.be.ok; - - return done(); - }, 10); - }); - - it("should include hidden files in the form and unchecked checkboxes and radiobuttons should be excluded", function (done) { - let element = Dropzone.createElement(`
- - - - - - -
`); - dropzone = new Dropzone(element, { url: "/the/url" }); - - let formData = null; - dropzone.on("sending", function (file, xhr, tformData) { - formData = tformData; - return sinon.spy(tformData, "append"); - }); - - let mock1 = getMockFile(); - - dropzone.addFile(mock1); - - return setTimeout(function () { - formData.append.callCount.should.equal(5); - - formData.append.args[0][0].should.eql("test"); - formData.append.args[0][1].should.eql("hidden"); - - formData.append.args[1][0].should.eql("checked"); - formData.append.args[1][1].should.eql("value1"); - - formData.append.args[2][0].should.eql("radio1"); - formData.append.args[2][1].should.eql("radiovalue2"); - - formData.append.args[3][0].should.eql("select"); - formData.append.args[3][1].should.eql("2"); - - formData.append.args[4][0].should.eql("file"); - formData.append.args[4][1].should.equal(mock1); - - // formData.append.args[1][0].should.eql "myName[]" - return done(); - }, 10); - }); - - it("should all values of a select that has the multiple attribute", function (done) { - let element = Dropzone.createElement(`
- -
`); - dropzone = new Dropzone(element, { url: "/the/url" }); - - let formData = null; - dropzone.on("sending", function (file, xhr, tformData) { - formData = tformData; - return sinon.spy(tformData, "append"); - }); - - let mock1 = getMockFile(); - - dropzone.addFile(mock1); - - return setTimeout(function () { - formData.append.callCount.should.equal(3); - - formData.append.args[0][0].should.eql("select"); - formData.append.args[0][1].should.eql("value2"); - - formData.append.args[1][0].should.eql("select"); - formData.append.args[1][1].should.eql("value4"); - - formData.append.args[2][0].should.eql("file"); - formData.append.args[2][1].should.equal(mock1); - - // formData.append.args[1][0].should.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); - }); - - 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"); - }); - - 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" - ); - }); - - it("should properly use the paramName without [n] as file upload if uploadMultiple is false", function (done) { - dropzone.options.uploadMultiple = false; - dropzone.options.paramName = "myName"; - - let formData = []; - let sendingCount = 0; - dropzone.on("sending", function (files, xhr, tformData) { - sendingCount++; - - formData.push(tformData); - return sinon.spy(tformData, "append"); - }); - - let mock1 = getMockFile(); - let mock2 = getMockFile(); - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - - return setTimeout(function () { - sendingCount.should.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"); - - return done(); - }, 10); - }); - - it("should properly use the paramName with [n] as file upload if uploadMultiple is true", function (done) { - dropzone.options.uploadMultiple = true; - dropzone.options.paramName = "myName"; - - let formData = null; - let sendingMultipleCount = 0; - let sendingCount = 0; - dropzone.on("sending", (file, xhr, tformData) => sendingCount++); - dropzone.on("sendingmultiple", function (files, xhr, tformData) { - sendingMultipleCount++; - formData = tformData; - return sinon.spy(tformData, "append"); - }); - - let mock1 = getMockFile(); - let mock2 = getMockFile(); - - 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); - }); - - it("should use resizeImage if dimensions are provided", function (done) { - sinon.stub(dropzone, "resizeImage"); - sinon.stub(dropzone, "createThumbnail"); - - dropzone.options.resizeWidth = 400; - - let mock1 = getMockFile("image/jpeg"); - - dropzone.addFile(mock1); - - return setTimeout(function () { - dropzone.resizeImage.callCount.should.eql(1); - return done(); - }, 10); - }); - - it("should not use resizeImage for SVG if dimensions are provided", function (done) { - sinon.stub(dropzone, "uploadFiles"); - - dropzone.createThumbnail = function ( - file, - width, - height, - resizeMethod, - fixOrientation, - callback - ) { - callback(null, null); - }; - - dropzone.options.resizeWidth = 400; - - let mock1 = getMockFile("image/svg+xml"); - - dropzone.addFile(mock1); - - setTimeout(function () { - dropzone.uploadFiles.callCount.should.eql(1); - let uploadedFiles = dropzone.uploadFiles.getCall(0).args[0]; - uploadedFiles.should.eql([mock1]); - done(); - }, 10); - }); - - it("should not use resizeImage if dimensions are not provided", function (done) { - sinon.stub(dropzone, "resizeImage"); - sinon.stub(dropzone, "createThumbnail"); - - let mock1 = getMockFile("image/jpeg"); - - dropzone.addFile(mock1); - - return setTimeout(function () { - dropzone.resizeImage.callCount.should.eql(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"); - - dropzone.options.resizeWidth = 400; - - let mock1 = getMockFile("text/plain"); - - dropzone.addFile(mock1); - - return setTimeout(function () { - dropzone.resizeImage.callCount.should.eql(0); - return done(); - }, 10); - }); - }); - - it("should not change the file name if the options.renameFile is not set", function (done) { - let mockFilename = "T3sT ;:_-.,!¨@&%&"; - mockFile = getMockFile("text/html", mockFilename); - - let renamedFilename = dropzone._renameFile(mockFile); - - renamedFilename.should.equal(mockFilename); - return done(); - }); - - it("should rename the file name if options.renamedFilename is set", function (done) { - dropzone.options.renameFile = (file) => - file.name.toLowerCase().replace(/[^\w]/gi, ""); - - mockFile = getMockFile("text/html", "T3sT ;:_-.,!¨@&%&"); - - let renamedFilename = dropzone._renameFile(mockFile); - - renamedFilename.should.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); - - 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" }; - - requests[0].onload(); - - mockFile.status.should.eql(Dropzone.ERROR); - - 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); - })); - }); - - describe("transformFile()", function () { - it("should be invoked and the result should be uploaded if configured", (done) => { - 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); - done(mock2); - }; - - dropzone.addFile(mock1); - - setTimeout(function () { - dropzone._uploadData.callCount.should.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); - done(); - }, 10); - }); - it("should be used as a basis for chunked uploads", (done) => { - sinon.stub(dropzone, "_uploadData"); - - dropzone.options.chunking = true; - dropzone.options.chunkSize = 1; - dropzone.options.parallelChunkUploads = true; - - let mock1 = getMockFile("text/html", "original-file", [ - "Veeeeery long file", - ]); // 18 bytes - let mock2 = getMockFile("text/html", "transformed-file", ["2b"]); // only 2 bytes - - dropzone.options.transformFile = (file, done) => { - file.should.eql(mock1); - done(mock2); - }; - - dropzone.addFile(mock1); - - setTimeout(async function () { - dropzone._uploadData.callCount.should.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); - - // 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); - - 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"); - done(); - }, 10); - }); - }); - - return describe("complete file", () => - it("should properly emit the queuecomplete event when the complete queue is finished", function (done) { - let mock1 = getMockFile("text/html", "mock1"); - let mock2 = getMockFile("text/html", "mock2"); - let mock3 = getMockFile("text/html", "mock3"); - mock1.status = Dropzone.ADDED; - mock2.status = Dropzone.ADDED; - mock3.status = Dropzone.ADDED; - - dropzone.uploadFiles = function (files) { - return setTimeout(() => { - return this._finished(files, null, null); - }, 1); - }; - - let completedFiles = 0; - dropzone.on("complete", (file) => completedFiles++); - - dropzone.on("queuecomplete", function () { - completedFiles.should.equal(3); - return done(); - }); - - dropzone.addFile(mock1); - dropzone.addFile(mock2); - return dropzone.addFile(mock3); - })); - }); -}); 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/static-functions.js b/test/unit-tests/static-functions.js deleted file mode 100644 index 8bea5d75c..000000000 --- a/test/unit-tests/static-functions.js +++ /dev/null @@ -1,345 +0,0 @@ -import { Dropzone } from "../../src/dropzone.js"; - -describe("Static functions", function () { - describe("Dropzone.isBrowserSupported()", function () { - it("should be supported browser", () => { - Dropzone.isBrowserSupported().should.be.true; - }); - }); - - describe("Dropzone.createElement()", function () { - let element = Dropzone.createElement( - '
Hallo
' - ); - - it("should properly create an element from a string", () => - element.tagName.should.equal("DIV")); - it("should properly add the correct class", () => - element.classList.contains("test").should.be.ok); - it("should properly create child elements", () => - element.querySelector("span").tagName.should.equal("SPAN")); - it("should always return only one element", function () { - element = Dropzone.createElement("
"); - return element.tagName.should.equal("DIV"); - }); - }); - - describe("Dropzone.elementInside()", function () { - let element = Dropzone.createElement( - '
' - ); - document.body.appendChild(element); - - let child1 = element.querySelector(".child1"); - let child2 = element.querySelector(".child2"); - - after(() => document.body.removeChild(element)); - - it("should return yes if elements are the same", () => - Dropzone.elementInside(element, element).should.be.ok); - it("should return yes if element is direct child", () => - Dropzone.elementInside(child1, element).should.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; - }); - 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; - }); - }); - - describe("Dropzone.optionsForElement()", function () { - let testOptions = { - url: "/some/url", - method: "put", - }; - - before(() => (Dropzone.options.testElement = testOptions)); - after(() => delete Dropzone.options.testElement); - - let element = document.createElement("div"); - - it("should take options set in Dropzone.options from camelized id", function () { - element.id = "test-element"; - return Dropzone.optionsForElement(element).should.equal(testOptions); - }); - - it("should return undefined if no options set", function () { - element.id = "test-element2"; - return expect(Dropzone.optionsForElement(element)).to.equal(undefined); - }); - - it("should return undefined and not throw if it's a form with an input element of the name 'id'", function () { - element = Dropzone.createElement('
'); - return expect(Dropzone.optionsForElement(element)).to.equal(undefined); - }); - - it("should ignore input fields with the name='id'", function () { - element = Dropzone.createElement( - '
' - ); - return Dropzone.optionsForElement(element).should.equal(testOptions); - }); - }); - - describe("Dropzone.forElement()", function () { - let element = document.createElement("div"); - element.id = "some-test-element"; - let dropzone = null; - before(function () { - document.body.appendChild(element); - return (dropzone = new Dropzone(element, { url: "/test" })); - }); - after(function () { - dropzone.disable(); - return document.body.removeChild(element); - }); - - 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." - )); - - it("should accept css selectors", () => - expect(Dropzone.forElement("#some-test-element")).to.equal(dropzone)); - - it("should accept native elements", () => - expect(Dropzone.forElement(element)).to.equal(dropzone)); - }); - - describe("Dropzone.discover()", function () { - let element1 = document.createElement("div"); - element1.className = "dropzone"; - let element2 = element1.cloneNode(); - let element3 = element1.cloneNode(); - - element1.id = "test-element-1"; - element2.id = "test-element-2"; - element3.id = "test-element-3"; - - describe("specific options", function () { - before(function () { - Dropzone.options.testElement1 = { url: "test-url" }; - Dropzone.options.testElement2 = false; // Disabled - document.body.appendChild(element1); - document.body.appendChild(element2); - return Dropzone.discover(); - }); - after(function () { - document.body.removeChild(element1); - return document.body.removeChild(element2); - }); - - it("should find elements with a .dropzone class", () => - element1.dropzone.should.be.ok); - - it("should not create dropzones with disabled options", () => - expect(element2.dropzone).to.not.be.ok); - }); - }); - - describe("Dropzone.isValidFile()", function () { - it("should return true if called without acceptedFiles", () => - Dropzone.isValidFile({ type: "some/type" }, null).should.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; - }); - - 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; - }); - - 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 - .be.ok; - Dropzone.isValidFile({ type: "application/json" }, acceptedMimeTypes) - .should.be.ok; - return Dropzone.isValidFile({ type: "some/type" }, acceptedMimeTypes) - .should.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; - }); - - 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; - // .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; - }); - }); - - 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); - }); - - 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); - }); - }); - - describe("Dropzone.getElement() / getElements()", function () { - let tmpElements = []; - - beforeEach(function () { - tmpElements = []; - tmpElements.push(Dropzone.createElement('
')); - tmpElements.push( - Dropzone.createElement('
') - ); - tmpElements.push( - Dropzone.createElement('
') - ); - return tmpElements.forEach((el) => document.body.appendChild(el)); - }); - - afterEach(() => tmpElements.forEach((el) => document.body.removeChild(el))); - - describe(".getElement()", function () { - it("should accept a string", function () { - let el = Dropzone.getElement(".tmptest"); - el.should.equal(tmpElements[0]); - el = Dropzone.getElement("#tmptest1"); - return el.should.equal(tmpElements[1]); - }); - it("should accept a node", function () { - let el = Dropzone.getElement(tmpElements[2]); - return el.should.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 - ); - expect(() => - Dropzone.getElement({ lblasdlfsfl: "lblasdlfsfl" }, "clickable") - ).to.throw(errorMessage); - return expect(() => - Dropzone.getElement(["lblasdlfsfl"], "clickable") - ).to.throw(errorMessage); - }); - }); - - 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]]); - }); - it("should accept a list of nodes", function () { - let els = Dropzone.getElements([tmpElements[0], tmpElements[2]]); - return els.should.eql([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]]); - }); - it("should accept a string selector", function () { - let els = Dropzone.getElements(".random"); - return els.should.eql([tmpElements[1], tmpElements[2]]); - }); - it("should accept a single node", function () { - let els = Dropzone.getElements(tmpElements[1]); - return els.should.eql([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 - ); - return expect(() => - Dropzone.getElements(["lblasdlfsfl"], "clickable") - ).to.throw(errorMessage); - }); - }); - }); -}); 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 db9754abf..8a74293dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 8 cacheKey: 10c0 -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.28.6": +"@babel/code-frame@npm:^7.28.6": version: 7.28.6 resolution: "@babel/code-frame@npm:7.28.6" dependencies: @@ -1103,13 +1103,6 @@ __metadata: 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" @@ -1175,20 +1168,11 @@ __metadata: "@parcel/transformer-sass": "npm:^2.16.3" "@swc/helpers": "npm:^0.5.18" babel-loader: "npm:^10.0.0" - 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" webpack: "npm:^5.104.1" languageName: unknown linkType: soft @@ -2378,23 +2362,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" @@ -2440,13 +2407,6 @@ __metadata: 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" @@ -2597,22 +2557,6 @@ __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/eslint-scope@npm:^3.7.7": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" @@ -2647,7 +2591,7 @@ __metadata: 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: @@ -2858,7 +2802,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: @@ -2970,15 +2914,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" @@ -2995,16 +2930,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" @@ -3012,25 +2937,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" @@ -3054,22 +2960,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" @@ -3105,18 +2995,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 - "babel-loader@npm:^10.0.0": version: 10.0.0 resolution: "babel-loader@npm:10.0.0" @@ -3172,78 +3050,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" @@ -3260,13 +3066,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 - "baseline-browser-mapping@npm:^2.9.0": version: 2.9.15 resolution: "baseline-browser-mapping@npm:2.9.15" @@ -3276,13 +3075,6 @@ __metadata: 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" @@ -3292,13 +3084,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" @@ -3340,36 +3125,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" @@ -3379,7 +3134,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: @@ -3388,13 +3143,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.0, browserslist@npm:^4.28.0, browserslist@npm:^4.28.1": version: 4.28.1 resolution: "browserslist@npm:4.28.1" @@ -3448,7 +3196,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 @@ -3492,7 +3240,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: @@ -3502,27 +3250,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, caniuse-lite@npm:^1.0.30001759": version: 1.0.30001764 resolution: "caniuse-lite@npm:1.0.30001764" @@ -3537,32 +3264,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" @@ -3573,35 +3274,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: @@ -3624,18 +3297,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" @@ -3682,28 +3343,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" @@ -3711,15 +3350,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" @@ -3729,13 +3359,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" @@ -3794,25 +3417,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" @@ -3850,13 +3454,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-js-compat@npm:^3.43.0": version: 3.47.0 resolution: "core-js-compat@npm:3.47.0" @@ -3873,33 +3470,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" @@ -3911,13 +3481,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" @@ -3979,20 +3542,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" @@ -4009,7 +3558,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: @@ -4030,7 +3579,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.4.1, debug@npm:^4.4.3": +"debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -4042,45 +3591,6 @@ __metadata: 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 - 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" @@ -4088,14 +3598,14 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0, 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": +"destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 @@ -4118,20 +3628,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" @@ -4139,25 +3635,6 @@ __metadata: 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" @@ -4269,30 +3746,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 - "enhanced-resolve@npm:^5.17.4": version: 5.18.4 resolution: "enhanced-resolve@npm:5.18.4" @@ -4313,19 +3766,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 @@ -4339,15 +3780,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" @@ -4390,7 +3822,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 @@ -4411,31 +3843,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 - "eslint-scope@npm:5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -4446,16 +3853,6 @@ __metadata: 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 - "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -4500,22 +3897,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 - "events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -4595,14 +3976,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: @@ -4640,13 +4021,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 - "fast-uri@npm:^3.0.1": version: 3.1.0 resolution: "fast-uri@npm:3.1.0" @@ -4693,21 +4067,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" @@ -4733,32 +4092,6 @@ __metadata: 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" @@ -4803,17 +4136,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" @@ -4835,32 +4157,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" @@ -4875,20 +4171,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" @@ -4933,17 +4215,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" @@ -4953,15 +4224,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-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" @@ -4985,36 +4247,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" @@ -5047,13 +4279,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" @@ -5096,15 +4321,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" @@ -5125,20 +4341,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: @@ -5148,17 +4351,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" @@ -5170,7 +4362,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: @@ -5187,7 +4379,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: @@ -5219,16 +4411,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" @@ -5243,17 +4425,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 @@ -5284,22 +4456,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-core-module@npm:^2.16.1": version: 2.16.1 resolution: "is-core-module@npm:2.16.1" @@ -5323,7 +4479,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: @@ -5349,32 +4505,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" @@ -5396,13 +4533,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" @@ -5455,17 +4585,6 @@ __metadata: 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" @@ -5489,7 +4608,7 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": +"json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 @@ -5526,18 +4645,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" @@ -5570,87 +4677,6 @@ __metadata: 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" @@ -5761,13 +4787,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" @@ -5868,7 +4887,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: @@ -5890,28 +4909,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" @@ -5928,13 +4925,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" @@ -6024,15 +5014,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" @@ -6040,16 +5021,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: @@ -6058,7 +5030,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 @@ -6150,75 +5122,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" @@ -6297,13 +5200,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" @@ -6406,13 +5302,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" @@ -6429,13 +5318,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" @@ -6443,7 +5325,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: @@ -6452,16 +5334,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: @@ -6527,32 +5400,6 @@ __metadata: 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 - languageName: node - linkType: hard - "package-json-from-dist@npm:^1.0.0": version: 1.0.1 resolution: "package-json-from-dist@npm:1.0.1" @@ -6585,27 +5432,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" @@ -6620,13 +5446,6 @@ __metadata: 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" @@ -6665,13 +5484,6 @@ __metadata: 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" @@ -6693,7 +5505,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 @@ -6742,13 +5554,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" @@ -6769,22 +5574,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" @@ -6792,13 +5581,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" @@ -6809,51 +5591,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" @@ -6863,7 +5600,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: @@ -6881,7 +5618,7 @@ __metadata: 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 @@ -6900,18 +5637,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" @@ -6926,15 +5651,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 - "regenerate-unicode-properties@npm:^10.2.2": version: 10.2.2 resolution: "regenerate-unicode-properties@npm:10.2.2" @@ -6999,13 +5715,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 - "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -7013,20 +5722,6 @@ __metadata: 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 - "resolve@npm:^1.22.10": version: 1.22.11 resolution: "resolve@npm:1.22.11" @@ -7077,17 +5772,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" @@ -7104,17 +5788,6 @@ __metadata: 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" @@ -7160,7 +5833,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.7.3": +"semver@npm:^7.3.2": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -7220,7 +5893,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 @@ -7305,16 +5978,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" @@ -7358,42 +6021,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: @@ -7431,7 +6059,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.0": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 @@ -7482,43 +6110,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: @@ -7565,22 +6157,6 @@ __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": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -7623,34 +6199,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" @@ -7707,15 +6255,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" @@ -7758,13 +6297,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" @@ -7781,7 +6313,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 @@ -7806,7 +6338,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 @@ -7836,7 +6368,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:^4.0.0, type-detect@npm:^4.1.0": +"type-detect@npm:^4.1.0": version: 4.1.0 resolution: "type-detect@npm:4.1.0" checksum: 10c0/df8157ca3f5d311edc22885abc134e18ff8ffbc93d6a9848af5b682730ca6a5a44499259750197250479c5331a8a75b5537529df5ec410622041650a7f293e2a @@ -7874,22 +6406,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" @@ -7946,13 +6462,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" @@ -8025,7 +6534,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 @@ -8043,13 +6552,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 - "watchpack@npm:^2.4.4": version: 2.5.1 resolution: "watchpack@npm:2.5.1" @@ -8067,13 +6569,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 - "webpack-sources@npm:^3.3.3": version: 3.3.3 resolution: "webpack-sources@npm:3.3.3" @@ -8119,17 +6614,6 @@ __metadata: 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" @@ -8152,13 +6636,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" @@ -8199,43 +6676,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:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" @@ -8257,62 +6697,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" @@ -8329,10 +6713,3 @@ __metadata: 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 From fc46ef39e889195b7eb2f4678eabf7a47e55e8ff Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:25:46 +0100 Subject: [PATCH 12/16] fix build --- package.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/package.json b/package.json index 9e954c35e..0f52a8585 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": [ From 24cd1c75ba473a1d95e670dc04adf5f487885337 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 19:28:25 +0100 Subject: [PATCH 13/16] fix workflow --- .github/workflows/validating.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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 From 04f52a8ba29493fce143dcc63d8056e2e1bb53b4 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 20:01:32 +0100 Subject: [PATCH 14/16] remove unneeded dependency --- package.json | 1 - yarn.lock | 36 +----------------------------------- 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/package.json b/package.json index 0f52a8585..675b5b8c9 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,6 @@ "devDependencies": { "@babel/core": "^7.28.6", "@babel/preset-env": "^7.28.6", - "@cypress/webpack-preprocessor": "^7.0.2", "@parcel/core": "^2.16.3", "@parcel/transformer-inline-string": "^2.16.3", "@parcel/transformer-sass": "^2.16.3", diff --git a/yarn.lock b/yarn.lock index 8a74293dd..106a833e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1129,23 +1129,6 @@ __metadata: languageName: node linkType: hard -"@cypress/webpack-preprocessor@npm:^7.0.2": - version: 7.0.2 - resolution: "@cypress/webpack-preprocessor@npm:7.0.2" - dependencies: - bluebird: "npm:3.7.1" - debug: "npm:^4.3.4" - lodash: "npm:^4.17.20" - semver: "npm:^7.3.2" - peerDependencies: - "@babel/core": ^7.28.0 - "@babel/preset-env": ^7.26.0 - babel-loader: ^9 || ^10 - webpack: ^5 - checksum: 10c0/824bc5e6651673f5d431d2410325ea67df6145a172fe88fbe32548560fa38123c8fd963816f07c3e8378fe6d317f1b3ed07a5068d9f72e06c3eddce5abc3c25c - languageName: node - linkType: hard - "@cypress/xvfb@npm:^1.2.4": version: 1.2.4 resolution: "@cypress/xvfb@npm:1.2.4" @@ -1162,7 +1145,6 @@ __metadata: dependencies: "@babel/core": "npm:^7.28.6" "@babel/preset-env": "npm:^7.28.6" - "@cypress/webpack-preprocessor": "npm:^7.0.2" "@parcel/core": "npm:^2.16.3" "@parcel/transformer-inline-string": "npm:^2.16.3" "@parcel/transformer-sass": "npm:^2.16.3" @@ -3091,13 +3073,6 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:3.7.1": - version: 3.7.1 - resolution: "bluebird@npm:3.7.1" - checksum: 10c0/ed3aa4e0de2b794afa95deb78d868b832e51df5a3e4564da09a6a6a0956d46b6e3bfdc62f075230eed96347329bc5c70729d52b5d3d5c4fc118cf6db63574eb7 - languageName: node - linkType: hard - "bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -4880,7 +4855,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c @@ -5833,15 +5808,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2": - version: 7.7.3 - resolution: "semver@npm:7.7.3" - bin: - semver: bin/semver.js - checksum: 10c0/4afe5c986567db82f44c8c6faef8fe9df2a9b1d98098fc1721f57c696c4c21cebd572f297fc21002f81889492345b8470473bc6f4aff5fb032a6ea59ea2bc45e - languageName: node - linkType: hard - "semver@npm:^7.3.5, semver@npm:^7.7.1": version: 7.7.2 resolution: "semver@npm:7.7.2" From 66f19c5e22e0fe6ad7d4b194a23c21819f5ad8ab Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 20:05:12 +0100 Subject: [PATCH 15/16] remove dependencies --- package.json | 7 +- yarn.lock | 2201 +------------------------------------------------- 2 files changed, 13 insertions(+), 2195 deletions(-) diff --git a/package.json b/package.json index 675b5b8c9..7373fbe7a 100644 --- a/package.json +++ b/package.json @@ -56,18 +56,13 @@ "tar": "7.5.3" }, "devDependencies": { - "@babel/core": "^7.28.6", - "@babel/preset-env": "^7.28.6", "@parcel/core": "^2.16.3", "@parcel/transformer-inline-string": "^2.16.3", "@parcel/transformer-sass": "^2.16.3", - "babel-loader": "^10.0.0", "cypress": "^15.9.0", "express": "^4.21.2", "parcel": "^2.16.3", - "sass": "^1.79.3", - "sinon": "^18.0.1", - "webpack": "^5.104.1" + "sass": "^1.79.3" }, "packageManager": "yarn@4.5.3" } diff --git a/yarn.lock b/yarn.lock index 106a833e5..b3f6260a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,1104 +5,6 @@ __metadata: version: 8 cacheKey: 10c0 -"@babel/code-frame@npm:^7.28.6": - 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/compat-data@npm:^7.27.7, @babel/compat-data@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/compat-data@npm:7.28.6" - checksum: 10c0/2d047431041281eaf33e9943d1a269d3374dbc9b498cafe6a18f5ee9aee7bb96f7f6cac0304eab4d13c41fc4db00fe4ca16c7aa44469ca6a211b8b6343b78fc4 - languageName: node - linkType: hard - -"@babel/core@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/core@npm:7.28.6" - dependencies: - "@babel/code-frame": "npm:^7.28.6" - "@babel/generator": "npm:^7.28.6" - "@babel/helper-compilation-targets": "npm:^7.28.6" - "@babel/helper-module-transforms": "npm:^7.28.6" - "@babel/helpers": "npm:^7.28.6" - "@babel/parser": "npm:^7.28.6" - "@babel/template": "npm:^7.28.6" - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - "@jridgewell/remapping": "npm:^2.3.5" - convert-source-map: "npm:^2.0.0" - debug: "npm:^4.1.0" - gensync: "npm:^1.0.0-beta.2" - json5: "npm:^2.2.3" - semver: "npm:^6.3.1" - checksum: 10c0/716b88b1ab057aa53ffa40f2b2fb7e4ab7a35cd6a065fa60e55ca13d2a666672592329f7ea9269aec17e90cc7ce29f42eda566d07859bfd998329a9f283faadb - languageName: node - linkType: hard - -"@babel/generator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/generator@npm:7.28.6" - dependencies: - "@babel/parser": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/162fa358484a9a18e8da1235d998f10ea77c63bab408c8d3e327d5833f120631a77ff022c5ed1d838ee00523f8bb75df1f08196d3657d0bca9f2cfeb8503cc12 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": - version: 7.27.3 - resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" - dependencies: - "@babel/types": "npm:^7.27.3" - checksum: 10c0/94996ce0a05b7229f956033e6dcd69393db2b0886d0db6aff41e704390402b8cdcca11f61449cb4f86cfd9e61b5ad3a73e4fa661eeed7846b125bd1c33dbc633 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2, @babel/helper-compilation-targets@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-compilation-targets@npm:7.28.6" - dependencies: - "@babel/compat-data": "npm:^7.28.6" - "@babel/helper-validator-option": "npm:^7.27.1" - browserslist: "npm:^4.24.0" - lru-cache: "npm:^5.1.1" - semver: "npm:^6.3.1" - checksum: 10c0/3fcdf3b1b857a1578e99d20508859dbd3f22f3c87b8a0f3dc540627b4be539bae7f6e61e49d931542fe5b557545347272bbdacd7f58a5c77025a18b745593a50 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-member-expression-to-functions": "npm:^7.28.5" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.6" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/0b62b46717891f4366006b88c9b7f277980d4f578c4c3789b7a4f5a2e09e121de4cda9a414ab403986745cd3ad1af3fe2d948c9f78ab80d4dc085afc9602af50 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1, @babel/helper-create-regexp-features-plugin@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.28.5" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - regexpu-core: "npm:^6.3.1" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/7af3d604cadecdb2b0d2cedd696507f02a53a58be0523281c2d6766211443b55161dde1e6c0d96ab16ddfd82a2607a2f792390caa24797e9733631f8aa86859f - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.6.5": - version: 0.6.5 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.5" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.2" - "@babel/helper-plugin-utils": "npm:^7.27.1" - debug: "npm:^4.4.1" - lodash.debounce: "npm:^4.0.8" - resolve: "npm:^1.22.10" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/4886a068d9ca1e70af395340656a9dda33c50502c67eed39ff6451785f370bdfc6e57095b90cb92678adcd4a111ca60909af53d3a741120719c5604346ae409e - languageName: node - linkType: hard - -"@babel/helper-globals@npm:^7.28.0": - version: 7.28.0 - resolution: "@babel/helper-globals@npm:7.28.0" - checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232 - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" - dependencies: - "@babel/traverse": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" - checksum: 10c0/4e6e05fbf4dffd0bc3e55e28fcaab008850be6de5a7013994ce874ec2beb90619cda4744b11607a60f8aae0227694502908add6188ceb1b5223596e765b44814 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-module-imports@npm:7.28.6" - dependencies: - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/b49d8d8f204d9dbfd5ac70c54e533e5269afb3cea966a9d976722b13e9922cc773a653405f53c89acb247d5aebdae4681d631a3ae3df77ec046b58da76eda2ac - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.27.1, @babel/helper-module-transforms@npm:^7.28.3, @babel/helper-module-transforms@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-module-transforms@npm:7.28.6" - dependencies: - "@babel/helper-module-imports": "npm:^7.28.6" - "@babel/helper-validator-identifier": "npm:^7.28.5" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/6f03e14fc30b287ce0b839474b5f271e72837d0cafe6b172d759184d998fbee3903a035e81e07c2c596449e504f453463d58baa65b6f40a37ded5bec74620b2b - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" - dependencies: - "@babel/types": "npm:^7.27.1" - checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-plugin-utils@npm:7.28.6" - checksum: 10c0/3f5f8acc152fdbb69a84b8624145ff4f9b9f6e776cb989f9f968f8606eb7185c5c3cfcf3ba08534e37e1e0e1c118ac67080610333f56baa4f7376c99b5f1143d - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.1" - "@babel/helper-wrap-function": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.27.1, @babel/helper-replace-supers@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helper-replace-supers@npm:7.28.6" - dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.28.5" - "@babel/helper-optimise-call-expression": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/04663c6389551b99b8c3e7ba4e2638b8ca2a156418c26771516124c53083aa8e74b6a45abe5dd46360af79709a0e9c6b72c076d0eab9efecdd5aaf836e79d8d5 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" - dependencies: - "@babel/traverse": "npm:^7.27.1" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-string-parser@npm:7.27.1" - checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 - 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 - -"@babel/helper-validator-option@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/helper-validator-option@npm:7.27.1" - checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.27.1": - version: 7.28.6 - resolution: "@babel/helper-wrap-function@npm:7.28.6" - dependencies: - "@babel/template": "npm:^7.28.6" - "@babel/traverse": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/110674c7aa705dd8cc34f278628f540b37a4cb35e81fcaf557772e026a6fd95f571feb51a8efb146e4e91bbf567dc9dd7f534f78da80f55f4be2ec842f36b678 - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/helpers@npm:7.28.6" - dependencies: - "@babel/template": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/c4a779c66396bb0cf619402d92f1610601ff3832db2d3b86b9c9dd10983bf79502270e97ac6d5280cea1b1a37de2f06ecbac561bd2271545270407fbe64027cb - languageName: node - linkType: hard - -"@babel/parser@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/parser@npm:7.28.6" - dependencies: - "@babel/types": "npm:^7.28.6" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/d6bfe8aa8e067ef58909e9905496157312372ca65d8d2a4f2b40afbea48d59250163755bba8ae626a615da53d192b084bcfc8c9dad8b01e315b96967600de581 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.5" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/844b7c7e9eec6d858262b2f3d5af75d3a6bbd9d3ecc740d95271fbdd84985731674536f5d8ac98f2dc0e8872698b516e406636e4d0cb04b50afe471172095a53 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.13.0 - checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/f1a9194e8d1742081def7af748e9249eb5082c25d0ced292720a1f054895f99041c764a05f45af669a2c8898aeb79266058aedb0d3e1038963ad49be8288918a - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": - version: 7.21.0-placeholder-for-preset-env.2 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f3b8bdccb9b4d3e3b9226684ca518e055399d05579da97dfe0160a38d65198cfe7dce809e73179d6463a863a040f980de32425a876d88efe4eda933d0d95982c - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-attributes@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/1be160e2c426faa74e5be2e30e39e8d0d8c543063bd5d06cd804f8751b8fbcb82ce824ca7f9ce4b09c003693f6c06a11ce503b7e34d85e1a259631e4c3f72ad2 - languageName: node - linkType: hard - -"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" - "@babel/helper-plugin-utils": "npm:^7.18.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-generator-functions@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/eddb94b0b990d8057c9c3587db3453eb586d1835626a9d683e6e8bef0ac5f708a76002951fb9cca80c902b3074b21b3a81b8af9090492561d9179862ce5716d8 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.28.6" - dependencies: - "@babel/helper-module-imports": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-remap-async-to-generator": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2eb0826248587df6e50038f36194a138771a7df22581020451c7779edeaf9ef39bf47c5b7a20ae2645af6416e8c896feeca273317329652e84abd79a4ab920ad - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-block-scoping@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/2e3e09e1f9770b56cef4dcbffddf262508fd03416072f815ac66b2b224a3a12cd285cfec12fc067f1add414e7db5ce6dafb5164a6e0fb1a728e6a97d0c6f6e9d - languageName: node - linkType: hard - -"@babel/plugin-transform-class-properties@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-class-properties@npm:7.28.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c4327fcd730c239d9f173f9b695b57b801729e273b4848aef1f75818069dfd31d985d75175db188d947b9b1bbe5353dae298849042026a5e4fcf07582ff3f9f1 - languageName: node - linkType: hard - -"@babel/plugin-transform-class-static-block@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 10c0/dbe9b1fd302ae41b73186e17ac8d8ecf625ebc2416a91f2dc8013977a1bdf21e6ea288a83f084752b412242f3866e789d4fddeb428af323fe35b60e0fae4f98c - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-classes@npm:7.28.6" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-compilation-targets": "npm:^7.28.6" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-replace-supers": "npm:^7.28.6" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/dc22f1f6eadab17305128fbf9cc5f30e87a51a77dd0a6d5498097994e8a9b9a90ab298c11edf2342acbeaac9edc9c601cad72eedcf4b592cd465a787d7f41490 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-computed-properties@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/template": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/1e9893503ae6d651125701cc29450e87c0b873c8febebff19da75da9c40cfb7968c52c28bf948244e461110aeb7b3591f2cc199b7406ff74a24c50c7a5729f39 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-destructuring@npm:7.28.5" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.28.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/288207f488412b23bb206c7c01ba143714e2506b72a9ec09e993f28366cc8188d121bde714659b3437984a86d2881d9b1b06de3089d5582823ccf2f3b3eaa2c4 - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.28.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e2fb76b7ae99087cf4212013a3ca9dee07048f90f98fd6264855080fb6c3f169be11c9b8c9d8b26cf9a407e4d0a5fa6e103f7cef433a542b75cf7127c99d4f97 - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.28.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/a1b4161ed6a4a5e78f802035b38efd71db6691fc1b2b2a1aea49fcb449077105b4925f0c4670f117231462f5cb0a35df4ad297f7b1fac38ec76e89635f8dc51d - languageName: node - linkType: hard - -"@babel/plugin-transform-dynamic-import@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 - languageName: node - linkType: hard - -"@babel/plugin-transform-explicit-resource-management@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-explicit-resource-management@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/plugin-transform-destructuring": "npm:^7.28.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e6ea28c26e058fe61ada3e70b0def1992dd5a44f5fc14d8e2c6a3a512fb4d4c6dc96a3e1d0b466d83db32a9101e0b02df94051e48d3140da115b8ea9f8a31f37 - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4572d955a50dbc9a652a19431b4bb822cb479ee6045f4e6df72659c499c13036da0a2adf650b07ca995f2781e80aa868943bea1e7bff1de3169ec3f0a73a902e - languageName: node - linkType: hard - -"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-for-of@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-function-name@npm:7.27.1" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/traverse": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c - languageName: node - linkType: hard - -"@babel/plugin-transform-json-strings@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-json-strings@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/ab1091798c58e6c0bb8a864ee2b727c400924592c6ed69797a26b4c205f850a935de77ad516570be0419c279a3d9f7740c2aa448762eb8364ea77a6a357a9653 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca - languageName: node - linkType: hard - -"@babel/plugin-transform-logical-assignment-operators@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/4632a35453d2131f0be466681d0a33e3db44d868ff51ec46cd87e0ebd1e47c6a39b894f7d1c9b06f931addf6efa9d30e60c4cdedeb4f69d426f683e11f8490cf - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.28.6" - dependencies: - "@babel/helper-module-transforms": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/7c45992797c6150644c8552feff4a016ba7bd6d59ff2b039ed969a9c5b20a6804cd9d21db5045fc8cca8ca7f08262497e354e93f8f2be6a1cdf3fbfa8c31a9b6 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.28.5" - dependencies: - "@babel/helper-module-transforms": "npm:^7.28.3" - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.28.5" - "@babel/traverse": "npm:^7.28.5" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/7e8c0bcff79689702b974f6a0fedb5d0c6eeb5a5e3384deb7028e7cfe92a5242cc80e981e9c1817aad29f2ecc01841753365dd38d877aa0b91737ceec2acfd07 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" - dependencies: - "@babel/helper-module-transforms": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-new-target@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 - languageName: node - linkType: hard - -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6607f2201d66ccb688f0b1db09475ef995837df19f14705da41f693b669f834c206147a854864ab107913d7b4f4748878b0cd9fe9ca8bfd1bee0c206fc027b49 - languageName: node - linkType: hard - -"@babel/plugin-transform-numeric-separator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/191097d8d2753cdd16d1acca65a945d1645ab20b65655c2f5b030a9e38967a52e093dcb21ebf391e342222705c6ffe5dea15dafd6257f7b51b77fb64a830b637 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-rest-spread@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.28.6" - dependencies: - "@babel/helper-compilation-targets": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/plugin-transform-destructuring": "npm:^7.28.5" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/traverse": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f55334352d4fcde385f2e8a58836687e71ff668c9b6e4c34d52575bf2789cdde92d9d3116edba13647ac0bc3e51fb2a6d1e8fb822dce7e8123334b82600bc4c3 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-object-super@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - "@babel/helper-replace-supers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-catch-binding@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/36e8face000ee65e478a55febf687ce9be7513ad498c60dfe585851555565e0c28e7cb891b3c59709318539ce46f7697d5f42130eb18f385cd47e47cfa297446 - languageName: node - linkType: hard - -"@babel/plugin-transform-optional-chaining@npm:^7.27.1, @babel/plugin-transform-optional-chaining@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c159cc74115c2266be21791f192dd079e2aeb65c8731157e53b80fcefa41e8e28ad370021d4dfbdb31f25e5afa0322669a8eb2d032cd96e65ac37e020324c763 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.27.7": - version: 7.27.7 - resolution: "@babel/plugin-transform-parameters@npm:7.27.7" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/f2da3804e047d9f1cfb27be6c014e2c7f6cf5e1e38290d1cb3cb2607859e3d6facb4ee8c8c1e336e9fbb440091a174ce95ce156582d7e8bf9c0e735d11681f0f - languageName: node - linkType: hard - -"@babel/plugin-transform-private-methods@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-private-methods@npm:7.28.6" - dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/fb504e2bfdcf3f734d2a90ab20d61427c58385f57f950d3de6ff4e6d12dd4aa7d552147312d218367e129b7920dccfc3230ba554de861986cda38921bad84067 - languageName: node - linkType: hard - -"@babel/plugin-transform-private-property-in-object@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.28.6" - dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.27.3" - "@babel/helper-create-class-features-plugin": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/0f6bbc6ec3f93b556d3de7d56bf49335255fc4c43488e51a5025d6ee0286183fd3cf950ffcac1bbeed8a45777f860a49996455c8d3b4a04c3b1a5f28e697fe31 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-regenerator@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/dbb65b7444548807aee558cdaf23996e7a0f6c3bced09c6b5d177734b3addcaf417532186e330341758979651e2af8cb98ae572f794f05c0e2e201e5593a5ffe - languageName: node - linkType: hard - -"@babel/plugin-transform-regexp-modifiers@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.28.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/97e36b086800f71694fa406abc00192e3833662f2bdd5f51c018bd0c95eef247c4ae187417c207d03a9c5374342eac0bb65a39112c431a9b23b09b1eda1562e5 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-spread@npm:7.28.6" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/bcac50e558d6f0c501cbce19ec197af558cef51fe3b3a6eba27276e323e57a5be28109b4264a5425ac12a67bf95d6af9c2a42b05e79c522ce913fb9529259d76 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-property-regex@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.28.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/b25f8cde643f4f47e0fa4f7b5c552e2dfbb6ad0ce07cf40f7e8ae40daa9855ad855d76d4d6d010153b74e48c8794685955c92ca637c0da152ce5f0fa9e7c90fa - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.27.1": - version: 7.27.1 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" - "@babel/helper-plugin-utils": "npm:^7.27.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-sets-regex@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.28.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.28.5" - "@babel/helper-plugin-utils": "npm:^7.28.6" - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 10c0/c03c8818736b138db73d1f7a96fbfa22d1994639164d743f0f00e6383d3b7b3144d333de960ff4afad0bddd0baaac257295e3316969eba995b1b6a1b4dec933e - languageName: node - linkType: hard - -"@babel/preset-env@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/preset-env@npm:7.28.6" - dependencies: - "@babel/compat-data": "npm:^7.28.6" - "@babel/helper-compilation-targets": "npm:^7.28.6" - "@babel/helper-plugin-utils": "npm:^7.28.6" - "@babel/helper-validator-option": "npm:^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.28.5" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.28.6" - "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions": "npm:^7.28.6" - "@babel/plugin-syntax-import-attributes": "npm:^7.28.6" - "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" - "@babel/plugin-transform-async-generator-functions": "npm:^7.28.6" - "@babel/plugin-transform-async-to-generator": "npm:^7.28.6" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" - "@babel/plugin-transform-block-scoping": "npm:^7.28.6" - "@babel/plugin-transform-class-properties": "npm:^7.28.6" - "@babel/plugin-transform-class-static-block": "npm:^7.28.6" - "@babel/plugin-transform-classes": "npm:^7.28.6" - "@babel/plugin-transform-computed-properties": "npm:^7.28.6" - "@babel/plugin-transform-destructuring": "npm:^7.28.5" - "@babel/plugin-transform-dotall-regex": "npm:^7.28.6" - "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.28.6" - "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" - "@babel/plugin-transform-explicit-resource-management": "npm:^7.28.6" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.28.6" - "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" - "@babel/plugin-transform-for-of": "npm:^7.27.1" - "@babel/plugin-transform-function-name": "npm:^7.27.1" - "@babel/plugin-transform-json-strings": "npm:^7.28.6" - "@babel/plugin-transform-literals": "npm:^7.27.1" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.28.6" - "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" - "@babel/plugin-transform-modules-amd": "npm:^7.27.1" - "@babel/plugin-transform-modules-commonjs": "npm:^7.28.6" - "@babel/plugin-transform-modules-systemjs": "npm:^7.28.5" - "@babel/plugin-transform-modules-umd": "npm:^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" - "@babel/plugin-transform-new-target": "npm:^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.28.6" - "@babel/plugin-transform-numeric-separator": "npm:^7.28.6" - "@babel/plugin-transform-object-rest-spread": "npm:^7.28.6" - "@babel/plugin-transform-object-super": "npm:^7.27.1" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.28.6" - "@babel/plugin-transform-optional-chaining": "npm:^7.28.6" - "@babel/plugin-transform-parameters": "npm:^7.27.7" - "@babel/plugin-transform-private-methods": "npm:^7.28.6" - "@babel/plugin-transform-private-property-in-object": "npm:^7.28.6" - "@babel/plugin-transform-property-literals": "npm:^7.27.1" - "@babel/plugin-transform-regenerator": "npm:^7.28.6" - "@babel/plugin-transform-regexp-modifiers": "npm:^7.28.6" - "@babel/plugin-transform-reserved-words": "npm:^7.27.1" - "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" - "@babel/plugin-transform-spread": "npm:^7.28.6" - "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" - "@babel/plugin-transform-template-literals": "npm:^7.27.1" - "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" - "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.28.6" - "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.28.6" - "@babel/preset-modules": "npm:0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2: "npm:^0.4.14" - babel-plugin-polyfill-corejs3: "npm:^0.13.0" - babel-plugin-polyfill-regenerator: "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 10c0/a08f007c5e8c95beb10a4ab8ad8fdbd823c8ace5f24f491f69a10b6cad079825d39cd1bc9dd312680bbd5aa5f95095cce7d01f51e31bae6720039b11e8105ace - languageName: node - linkType: hard - -"@babel/preset-modules@npm:0.1.6-no-external-plugins": - version: 0.1.6-no-external-plugins - resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" - dependencies: - "@babel/helper-plugin-utils": "npm:^7.0.0" - "@babel/types": "npm:^7.4.4" - esutils: "npm:^2.0.2" - peerDependencies: - "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 - languageName: node - linkType: hard - -"@babel/template@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/template@npm:7.28.6" - dependencies: - "@babel/code-frame": "npm:^7.28.6" - "@babel/parser": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - checksum: 10c0/66d87225ed0bc77f888181ae2d97845021838c619944877f7c4398c6748bcf611f216dfd6be74d39016af502bca876e6ce6873db3c49e4ac354c56d34d57e9f5 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6": - version: 7.28.6 - resolution: "@babel/traverse@npm:7.28.6" - dependencies: - "@babel/code-frame": "npm:^7.28.6" - "@babel/generator": "npm:^7.28.6" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.6" - "@babel/template": "npm:^7.28.6" - "@babel/types": "npm:^7.28.6" - debug: "npm:^4.3.1" - checksum: 10c0/ed5deb9c3f03e2d1ad2d44b9c92c84cce24593245c3f7871ce27ee1b36d98034e6cd895fa98a94eb44ebabe1d22f51b10b09432939d1c51a0fcaab98f17a97bc - languageName: node - linkType: hard - -"@babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.4.4": - version: 7.28.6 - resolution: "@babel/types@npm:7.28.6" - dependencies: - "@babel/helper-string-parser": "npm:^7.27.1" - "@babel/helper-validator-identifier": "npm:^7.28.5" - checksum: 10c0/54a6a9813e48ef6f35aa73c03b3c1572cad7fa32b61b35dd07e4230bc77b559194519c8a4d8106a041a27cc7a94052579e238a30a32d5509aa4da4d6fd83d990 - languageName: node - linkType: hard - "@cypress/request@npm:^3.0.10": version: 3.0.10 resolution: "@cypress/request@npm:3.0.10" @@ -1143,19 +45,14 @@ __metadata: version: 0.0.0-use.local resolution: "@deltablot/dropzone@workspace:." dependencies: - "@babel/core": "npm:^7.28.6" - "@babel/preset-env": "npm:^7.28.6" "@parcel/core": "npm:^2.16.3" "@parcel/transformer-inline-string": "npm:^2.16.3" "@parcel/transformer-sass": "npm:^2.16.3" "@swc/helpers": "npm:^0.5.18" - babel-loader: "npm:^10.0.0" cypress: "npm:^15.9.0" express: "npm:^4.21.2" parcel: "npm:^2.16.3" sass: "npm:^1.79.3" - sinon: "npm:^18.0.1" - webpack: "npm:^5.104.1" languageName: unknown linkType: soft @@ -1182,60 +79,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5": - version: 0.3.13 - resolution: "@jridgewell/gen-mapping@npm:0.3.13" - dependencies: - "@jridgewell/sourcemap-codec": "npm:^1.5.0" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/9a7d65fb13bd9aec1fbab74cda08496839b7e2ceb31f5ab922b323e94d7c481ce0fc4fd7e12e2610915ed8af51178bdc61e168e92a8c8b8303b030b03489b13b - languageName: node - linkType: hard - -"@jridgewell/remapping@npm:^2.3.5": - version: 2.3.5 - resolution: "@jridgewell/remapping@npm:2.3.5" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.24" - checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:^3.1.0": - version: 3.1.2 - resolution: "@jridgewell/resolve-uri@npm:3.1.2" - checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e - languageName: node - linkType: hard - -"@jridgewell/source-map@npm:^0.3.3": - version: 0.3.11 - resolution: "@jridgewell/source-map@npm:0.3.11" - dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.5" - "@jridgewell/trace-mapping": "npm:^0.3.25" - checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:^1.4.14, @jridgewell/sourcemap-codec@npm:^1.5.0": - version: 1.5.5 - resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" - checksum: 10c0/f9e538f302b63c0ebc06eecb1dd9918dd4289ed36147a0ddce35d6ea4d7ebbda243cda7b2213b6a5e1d8087a298d5cf630fb2bd39329cdecb82017023f6081a0 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28": - version: 0.3.31 - resolution: "@jridgewell/trace-mapping@npm:0.3.31" - dependencies: - "@jridgewell/resolve-uri": "npm:^3.1.0" - "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 10c0/4b30ec8cd56c5fd9a661f088230af01e0c1a3888d11ffb6b47639700f71225be21d1f7e168048d6d4f9449207b978a235c07c8f15c07705685d16dc06280e9d9 - languageName: node - linkType: hard - "@lezer/common@npm:^1.0.0": version: 1.2.3 resolution: "@lezer/common@npm:1.2.3" @@ -2344,51 +1187,6 @@ __metadata: 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 - "@swc/core-darwin-arm64@npm:1.11.29": version: 1.11.29 resolution: "@swc/core-darwin-arm64@npm:1.11.29" @@ -2539,40 +1337,6 @@ __metadata: languageName: node linkType: hard -"@types/eslint-scope@npm:^3.7.7": - version: 3.7.7 - resolution: "@types/eslint-scope@npm:3.7.7" - dependencies: - "@types/eslint": "npm:*" - "@types/estree": "npm:*" - checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc - languageName: node - linkType: hard - -"@types/eslint@npm:*": - version: 9.6.1 - resolution: "@types/eslint@npm:9.6.1" - dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e - languageName: node - linkType: hard - -"@types/estree@npm:*, @types/estree@npm:^1.0.8": - version: 1.0.8 - resolution: "@types/estree@npm:1.0.8" - checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 - languageName: node - linkType: hard - -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db - languageName: node - linkType: hard - "@types/node@npm:*": version: 22.15.29 resolution: "@types/node@npm:22.15.29" @@ -2612,171 +1376,6 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/ast@npm:1.14.1" - dependencies: - "@webassemblyjs/helper-numbers": "npm:1.13.2" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" - checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b - languageName: node - linkType: hard - -"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" - checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 - languageName: node - linkType: hard - -"@webassemblyjs/helper-api-error@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" - checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb - languageName: node - linkType: hard - -"@webassemblyjs/helper-buffer@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" - checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 - languageName: node - linkType: hard - -"@webassemblyjs/helper-numbers@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" - dependencies: - "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" - "@webassemblyjs/helper-api-error": "npm:1.13.2" - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" - checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 - languageName: node - linkType: hard - -"@webassemblyjs/helper-wasm-section@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@webassemblyjs/helper-buffer": "npm:1.14.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" - "@webassemblyjs/wasm-gen": "npm:1.14.1" - checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 - languageName: node - linkType: hard - -"@webassemblyjs/ieee754@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/ieee754@npm:1.13.2" - dependencies: - "@xtuc/ieee754": "npm:^1.2.0" - checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 - languageName: node - linkType: hard - -"@webassemblyjs/leb128@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/leb128@npm:1.13.2" - dependencies: - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 - languageName: node - linkType: hard - -"@webassemblyjs/utf8@npm:1.13.2": - version: 1.13.2 - resolution: "@webassemblyjs/utf8@npm:1.13.2" - checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-edit@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@webassemblyjs/helper-buffer": "npm:1.14.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" - "@webassemblyjs/helper-wasm-section": "npm:1.14.1" - "@webassemblyjs/wasm-gen": "npm:1.14.1" - "@webassemblyjs/wasm-opt": "npm:1.14.1" - "@webassemblyjs/wasm-parser": "npm:1.14.1" - "@webassemblyjs/wast-printer": "npm:1.14.1" - checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-gen@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" - "@webassemblyjs/ieee754": "npm:1.13.2" - "@webassemblyjs/leb128": "npm:1.13.2" - "@webassemblyjs/utf8": "npm:1.13.2" - checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 - languageName: node - linkType: hard - -"@webassemblyjs/wasm-opt@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@webassemblyjs/helper-buffer": "npm:1.14.1" - "@webassemblyjs/wasm-gen": "npm:1.14.1" - "@webassemblyjs/wasm-parser": "npm:1.14.1" - checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee - languageName: node - linkType: hard - -"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@webassemblyjs/helper-api-error": "npm:1.13.2" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" - "@webassemblyjs/ieee754": "npm:1.13.2" - "@webassemblyjs/leb128": "npm:1.13.2" - "@webassemblyjs/utf8": "npm:1.13.2" - checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 - languageName: node - linkType: hard - -"@webassemblyjs/wast-printer@npm:1.14.1": - version: 1.14.1 - resolution: "@webassemblyjs/wast-printer@npm:1.14.1" - dependencies: - "@webassemblyjs/ast": "npm:1.14.1" - "@xtuc/long": "npm:4.2.2" - checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 - languageName: node - linkType: hard - -"@xtuc/ieee754@npm:^1.2.0": - version: 1.2.0 - resolution: "@xtuc/ieee754@npm:1.2.0" - checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f - languageName: node - linkType: hard - -"@xtuc/long@npm:4.2.2": - version: 4.2.2 - resolution: "@xtuc/long@npm:4.2.2" - checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 - languageName: node - linkType: hard - "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -2794,24 +1393,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-phases@npm:^1.0.3": - version: 1.0.4 - resolution: "acorn-import-phases@npm:1.0.4" - peerDependencies: - acorn: ^8.14.0 - checksum: 10c0/338eb46fc1aed5544f628344cb9af189450b401d152ceadbf1f5746901a5d923016cd0e7740d5606062d374fdf6941c29bb515d2bd133c4f4242d5d4cd73a3c7 - languageName: node - linkType: hard - -"acorn@npm:^8.15.0": - version: 8.15.0 - resolution: "acorn@npm:8.15.0" - bin: - acorn: bin/acorn - checksum: 10c0/dec73ff59b7d6628a01eebaece7f2bdb8bb62b9b5926dcad0f8931f2b8b79c2be21f6c68ac095592adb5adb15831a3635d9343e6a91d028bbe85d564875ec3ec - languageName: node - linkType: hard - "agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": version: 7.1.3 resolution: "agent-base@npm:7.1.3" @@ -2829,43 +1410,6 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:^2.1.1": - version: 2.1.1 - resolution: "ajv-formats@npm:2.1.1" - dependencies: - ajv: "npm:^8.0.0" - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 - languageName: node - linkType: hard - -"ajv-keywords@npm:^5.1.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: "npm:^3.1.3" - peerDependencies: - ajv: ^8.8.2 - checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" - dependencies: - fast-deep-equal: "npm:^3.1.3" - fast-uri: "npm:^3.0.1" - json-schema-traverse: "npm:^1.0.0" - require-from-string: "npm:^2.0.2" - checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 - languageName: node - linkType: hard - "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -2977,54 +1521,6 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^10.0.0": - version: 10.0.0 - resolution: "babel-loader@npm:10.0.0" - dependencies: - find-up: "npm:^5.0.0" - peerDependencies: - "@babel/core": ^7.12.0 - webpack: ">=5.61.0" - checksum: 10c0/882dfacde3ee24b432ad57e468832cd0821e2a410f6c5b75ff945f069a8956592b28c6c357df5bb03db73d2741ec3db5febb106ac0bb3591c3d4288f2cf4df0e - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.4.14": - version: 0.4.14 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.14" - dependencies: - "@babel/compat-data": "npm:^7.27.7" - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - semver: "npm:^6.3.1" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/d74cba0600a6508e86d220bde7164eb528755d91be58020e5ea92ea7fbb12c9d8d2c29246525485adfe7f68ae02618ec428f9a589cac6cbedf53cc3972ad7fbe - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.13.0": - version: 0.13.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.13.0" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - core-js-compat: "npm:^3.43.0" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/5d8e228da425edc040d8c868486fd01ba10b0440f841156a30d9f8986f330f723e2ee61553c180929519563ef5b64acce2caac36a5a847f095d708dda5d8206d - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.6.5": - version: 0.6.5 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.5" - dependencies: - "@babel/helper-define-polyfill-provider": "npm:^0.6.5" - peerDependencies: - "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 10c0/63aa8ed716df6a9277c6ab42b887858fa9f57a70cc1d0ae2b91bdf081e45d4502848cba306fb60b02f59f99b32fd02ff4753b373cac48ccdac9b7d19dd56f06d - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -3048,15 +1544,6 @@ __metadata: languageName: node linkType: hard -"baseline-browser-mapping@npm:^2.9.0": - version: 2.9.15 - resolution: "baseline-browser-mapping@npm:2.9.15" - bin: - baseline-browser-mapping: dist/cli.js - checksum: 10c0/e5c8cb8600fcbed8132f122b737b00b5b3fcf25a119ea5e42476e6d6b2263274ddc5df16d4cffebbcd46974b691008558973b06100508903ea8a382a5edd34ab - languageName: node - linkType: hard - "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" @@ -3118,21 +1605,6 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.0, browserslist@npm:^4.28.0, browserslist@npm:^4.28.1": - version: 4.28.1 - resolution: "browserslist@npm:4.28.1" - dependencies: - baseline-browser-mapping: "npm:^2.9.0" - caniuse-lite: "npm:^1.0.30001759" - electron-to-chromium: "npm:^1.5.263" - node-releases: "npm:^2.0.27" - update-browserslist-db: "npm:^1.2.0" - bin: - browserslist: cli.js - checksum: 10c0/545a5fa9d7234e3777a7177ec1e9134bb2ba60a69e6b95683f6982b1473aad347c77c1264ccf2ac5dea609a9731fbfbda6b85782bdca70f80f86e28a402504bd - languageName: node - linkType: hard - "browserslist@npm:^4.24.5": version: 4.25.0 resolution: "browserslist@npm:4.25.0" @@ -3154,13 +1626,6 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:^1.0.0": - version: 1.1.2 - resolution: "buffer-from@npm:1.1.2" - checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 - languageName: node - linkType: hard - "buffer@npm:^5.7.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -3225,7 +1690,7 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.30001718, caniuse-lite@npm:^1.0.30001759": +"caniuse-lite@npm:^1.0.30001718": version: 1.0.30001764 resolution: "caniuse-lite@npm:1.0.30001764" checksum: 10c0/3fbc2bcb35792bd860e20210283e7c700aab10c5af435dbb8bfbf952edccaa3e7de8b479af0f600c4d23f269dbc166e16b7b72df5cd1981653b252174c9cbfa8 @@ -3371,13 +1836,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 - languageName: node - linkType: hard - "commander@npm:^6.2.1": version: 6.2.1 resolution: "commander@npm:6.2.1" @@ -3408,13 +1866,6 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b - languageName: node - linkType: hard - "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -3429,15 +1880,6 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.43.0": - version: 3.47.0 - resolution: "core-js-compat@npm:3.47.0" - dependencies: - browserslist: "npm:^4.28.0" - checksum: 10c0/71da415899633120db7638dd7b250eee56031f63c4560dcba8eeeafd1168fae171d59b223e3fd2e0aa543a490d64bac7d946764721e2c05897056fdfb22cce33 - languageName: node - linkType: hard - "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -3554,18 +1996,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.4.1": - version: 4.4.3 - resolution: "debug@npm:4.4.3" - dependencies: - ms: "npm:^2.1.3" - peerDependenciesMeta: - supports-color: - optional: true - checksum: 10c0/d79136ec6c83ecbefd0f6a5593da6a9c91ec4d7ddc4b54c883d6e71ec9accb5f67a1a5e96d00a328196b5b5c86d365e98d8a3a70856aaf16b4e7b1985e67f5a6 - languageName: node - linkType: hard - "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -3603,13 +2033,6 @@ __metadata: 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 - "dotenv-expand@npm:^11.0.7": version: 11.0.7 resolution: "dotenv-expand@npm:11.0.7" @@ -3668,13 +2091,6 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.263": - version: 1.5.267 - resolution: "electron-to-chromium@npm:1.5.267" - checksum: 10c0/0732bdb891b657f2e43266a3db8cf86fff6cecdcc8d693a92beff214e136cb5c2ee7dc5945ed75fa1db16e16bad0c38695527a020d15f39e79084e0b2e447621 - languageName: node - linkType: hard - "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -3721,16 +2137,6 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.4": - version: 5.18.4 - resolution: "enhanced-resolve@npm:5.18.4" - dependencies: - graceful-fs: "npm:^4.2.4" - tapable: "npm:^2.2.0" - checksum: 10c0/8f6d42c8a0787a746c493e724c9de5d091cfe8e3f871f2464e2f78a6c55fa1a3aaba495334f923c8ea3ac23e1472491f79feef6fc0fb46a75169cb447ffbe2dc - languageName: node - linkType: hard - "enquirer@npm:^2.3.6": version: 2.4.1 resolution: "enquirer@npm:2.4.1" @@ -3769,13 +2175,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^2.0.0": - version: 2.0.0 - resolution: "es-module-lexer@npm:2.0.0" - checksum: 10c0/ae78dbbd43035a4b972c46cfb6877e374ea290adfc62bc2f5a083fea242c0b2baaab25c5886af86be55f092f4a326741cb94334cd3c478c383fdc8a9ec5ff817 - languageName: node - linkType: hard - "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -3806,55 +2205,15 @@ __metadata: "escape-html@npm:~1.0.3": version: 1.0.3 - resolution: "escape-html@npm:1.0.3" - checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: "npm:^4.3.0" - estraverse: "npm:^4.1.1" - checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: "npm:^5.2.0" - checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d - languageName: node - linkType: hard - -"estraverse@npm:^5.2.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 languageName: node linkType: hard -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 languageName: node linkType: hard @@ -3872,13 +2231,6 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.2.0": - version: 3.3.0 - resolution: "events@npm:3.3.0" - checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 - languageName: node - linkType: hard - "execa@npm:4.1.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -3989,20 +2341,6 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 - languageName: node - linkType: hard - -"fast-uri@npm:^3.0.1": - version: 3.1.0 - resolution: "fast-uri@npm:3.1.0" - checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 - languageName: node - linkType: hard - "fd-slicer@npm:~1.1.0": version: 1.1.0 resolution: "fd-slicer@npm:1.1.0" @@ -4057,16 +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 - "foreground-child@npm:^3.1.0": version: 3.3.1 resolution: "foreground-child@npm:3.3.1" @@ -4139,13 +2467,6 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 - 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" @@ -4199,13 +2520,6 @@ __metadata: languageName: node linkType: hard -"glob-to-regexp@npm:^0.4.1": - version: 0.4.1 - resolution: "glob-to-regexp@npm:0.4.1" - checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 - languageName: node - linkType: hard - "glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -4247,7 +2561,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -4431,15 +2745,6 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.16.1": - version: 2.16.1 - resolution: "is-core-module@npm:2.16.1" - dependencies: - hasown: "npm:^2.0.2" - checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -4542,24 +2847,6 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^27.4.5": - version: 27.5.1 - resolution: "jest-worker@npm:27.5.1" - dependencies: - "@types/node": "npm:*" - merge-stream: "npm:^2.0.0" - supports-color: "npm:^8.0.0" - checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b - 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 - "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -4574,29 +2861,6 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^3.0.2, jsesc@npm:~3.1.0": - version: 3.1.0 - resolution: "jsesc@npm:3.1.0" - bin: - jsesc: bin/jsesc - checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.1": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 - languageName: node - linkType: hard - -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 - languageName: node - linkType: hard - "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" @@ -4645,13 +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 - "lightningcss-darwin-arm64@npm:1.30.1": version: 1.30.1 resolution: "lightningcss-darwin-arm64@npm:1.30.1" @@ -4818,36 +3075,6 @@ __metadata: languageName: node linkType: hard -"loader-runner@npm:^4.3.1": - version: 4.3.1 - resolution: "loader-runner@npm:4.3.1" - checksum: 10c0/a523b6329f114e0a98317158e30a7dfce044b731521be5399464010472a93a15ece44757d1eaed1d8845019869c5390218bc1c7c3110f4eeaef5157394486eac - 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.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 - 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" @@ -4891,15 +3118,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: "npm:^3.0.2" - checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 - languageName: node - linkType: hard - "make-fetch-happen@npm:^14.0.3": version: 14.0.3 resolution: "make-fetch-happen@npm:14.0.3" @@ -4971,7 +3189,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -5168,26 +3386,6 @@ __metadata: languageName: node linkType: hard -"neo-async@npm:^2.6.2": - version: 2.6.2 - resolution: "neo-async@npm:2.6.2" - checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d - 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" @@ -5259,13 +3457,6 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.27": - version: 2.0.27 - resolution: "node-releases@npm:2.0.27" - checksum: 10c0/f1e6583b7833ea81880627748d28a3a7ff5703d5409328c216ae57befbced10ce2c991bea86434e8ec39003bd017f70481e2e5f8c1f7e0a7663241f81d6e00e2 - languageName: node - linkType: hard - "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -5341,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" @@ -5414,13 +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-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -5428,13 +3594,6 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 - languageName: node - linkType: hard - "path-scurry@npm:^1.11.1": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" @@ -5452,13 +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 - "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" @@ -5584,15 +3736,6 @@ __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": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -5626,22 +3769,6 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.2.2": - version: 10.2.2 - resolution: "regenerate-unicode-properties@npm:10.2.2" - dependencies: - regenerate: "npm:^1.4.2" - checksum: 10c0/66a1d6a1dbacdfc49afd88f20b2319a4c33cee56d245163e4d8f5f283e0f45d1085a78f7f7406dd19ea3a5dd7a7799cd020cd817c97464a7507f9d10fbdce87c - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 - languageName: node - linkType: hard - "regenerator-runtime@npm:^0.14.1": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -5649,38 +3776,6 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^6.3.1": - version: 6.4.0 - resolution: "regexpu-core@npm:6.4.0" - dependencies: - regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.2.2" - regjsgen: "npm:^0.8.0" - regjsparser: "npm:^0.13.0" - unicode-match-property-ecmascript: "npm:^2.0.0" - unicode-match-property-value-ecmascript: "npm:^2.2.1" - checksum: 10c0/1eed9783c023dd06fb1f3ce4b6e3fdf0bc1e30cb036f30aeb2019b351e5e0b74355b40462282ea5db092c79a79331c374c7e9897e44a5ca4509e9f0b570263de - languageName: node - linkType: hard - -"regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "regjsgen@npm:0.8.0" - checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd - languageName: node - linkType: hard - -"regjsparser@npm:^0.13.0": - version: 0.13.0 - resolution: "regjsparser@npm:0.13.0" - dependencies: - jsesc: "npm:~3.1.0" - bin: - regjsparser: bin/parser - checksum: 10c0/4702f85cda09f67747c1b2fb673a0f0e5d1ba39d55f177632265a0be471ba59e3f320623f411649141f752b126b8126eac3ff4c62d317921e430b0472bfc6071 - languageName: node - linkType: hard - "request-progress@npm:^3.0.0": version: 3.0.0 resolution: "request-progress@npm:3.0.0" @@ -5690,39 +3785,6 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 - languageName: node - linkType: hard - -"resolve@npm:^1.22.10": - version: 1.22.11 - resolution: "resolve@npm:1.22.11" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/f657191507530f2cbecb5815b1ee99b20741ea6ee02a59c57028e9ec4c2c8d7681afcc35febbd554ac0ded459db6f2d8153382c53a2f266cee2575e512674409 - languageName: node - linkType: hard - -"resolve@patch:resolve@npm%3A^1.22.10#optional!builtin": - version: 1.22.11 - resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.16.1" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/ee5b182f2e37cb1165465e58c6abc797fec0a80b5ba3231607beb4677db0c9291ac010c47cf092b6daa2b7f518d69a0e21888e7e2b633f68d501a874212a8c63 - languageName: node - linkType: hard - "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -5756,7 +3818,7 @@ __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 @@ -5787,27 +3849,6 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.3": - version: 4.3.3 - resolution: "schema-utils@npm:4.3.3" - dependencies: - "@types/json-schema": "npm:^7.0.9" - ajv: "npm:^8.9.0" - ajv-formats: "npm:^2.1.1" - ajv-keywords: "npm:^5.1.0" - checksum: 10c0/1c8d2c480a026d7c02ab2ecbe5919133a096d6a721a3f201fa50663e4f30f6d6ba020dfddd93cb828b66b922e76b342e103edd19a62c95c8f60e9079cc403202 - languageName: node - linkType: hard - -"semver@npm:^6.3.1": - version: 6.3.1 - resolution: "semver@npm:6.3.1" - bin: - semver: bin/semver.js - checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d - languageName: node - linkType: hard - "semver@npm:^7.3.5, semver@npm:^7.7.1": version: 7.7.2 resolution: "semver@npm:7.7.2" @@ -5838,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" @@ -5944,20 +3976,6 @@ __metadata: 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" @@ -6015,23 +4033,6 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:~0.5.20": - version: 0.5.21 - resolution: "source-map-support@npm:0.5.21" - dependencies: - buffer-from: "npm:^1.0.0" - source-map: "npm:^0.6.0" - checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d - languageName: node - linkType: hard - -"source-map@npm:^0.6.0": - 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" @@ -6123,7 +4124,7 @@ __metadata: 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: @@ -6132,7 +4133,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.1.1": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -6141,13 +4142,6 @@ __metadata: languageName: node linkType: hard -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 - languageName: node - linkType: hard - "systeminformation@npm:^5.27.14": version: 5.30.5 resolution: "systeminformation@npm:5.30.5" @@ -6158,13 +4152,6 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.2.0, tapable@npm:^2.3.0": - version: 2.3.0 - resolution: "tapable@npm:2.3.0" - checksum: 10c0/cb9d67cc2c6a74dedc812ef3085d9d681edd2c1fa18e4aef57a3c0605fdbe44e6b8ea00bd9ef21bc74dd45314e39d31227aa031ebf2f5e38164df514136f2681 - languageName: node - linkType: hard - "tar@npm:7.5.3": version: 7.5.3 resolution: "tar@npm:7.5.3" @@ -6185,42 +4172,6 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.16": - version: 5.3.16 - resolution: "terser-webpack-plugin@npm:5.3.16" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.25" - jest-worker: "npm:^27.4.5" - schema-utils: "npm:^4.3.0" - serialize-javascript: "npm:^6.0.2" - terser: "npm:^5.31.1" - peerDependencies: - webpack: ^5.1.0 - peerDependenciesMeta: - "@swc/core": - optional: true - esbuild: - optional: true - uglify-js: - optional: true - checksum: 10c0/39e37c5b3015c1a5354a3633f77235677bfa06eac2608ce26d258b1d1a74070a99910319a6f2f2c437eb61dc321f66434febe01d78e73fa96b4d4393b813f4cf - languageName: node - linkType: hard - -"terser@npm:^5.31.1": - version: 5.46.0 - resolution: "terser@npm:5.46.0" - dependencies: - "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.15.0" - commander: "npm:^2.20.0" - source-map-support: "npm:~0.5.20" - bin: - terser: bin/terser - checksum: 10c0/93ad468f13187c4f66b609bbfc00a6aee752007779ca3157f2c1ee063697815748d6010fd449a16c30be33213748431d5f54cc0224ba6a3fbbf5acd3582a4356 - languageName: node - linkType: hard - "throttleit@npm:^1.0.0": version: 1.0.1 resolution: "throttleit@npm:1.0.1" @@ -6327,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.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" @@ -6379,37 +4316,6 @@ __metadata: languageName: node linkType: hard -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.1 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" - checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: "npm:^2.0.0" - unicode-property-aliases-ecmascript: "npm:^2.0.0" - checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.2.1": - version: 2.2.1 - resolution: "unicode-match-property-value-ecmascript@npm:2.2.1" - checksum: 10c0/93acd1ad9496b600e5379d1aaca154cf551c5d6d4a0aefaf0984fc2e6288e99220adbeb82c935cde461457fb6af0264a1774b8dfd4d9a9e31548df3352a4194d - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.2.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.2.0" - checksum: 10c0/b338529831c988ac696f2bdbcd4579d1c5cc844b24eda7269973c457fa81989bdb49a366af37a448eb1a60f1dae89559ea2a5854db2797e972a0162eee0778c6 - languageName: node - linkType: hard - "unique-filename@npm:^4.0.0": version: 4.0.0 resolution: "unique-filename@npm:4.0.0" @@ -6463,20 +4369,6 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.2.0": - version: 1.2.3 - resolution: "update-browserslist-db@npm:1.2.3" - dependencies: - escalade: "npm:^3.2.0" - picocolors: "npm:^1.1.1" - peerDependencies: - browserslist: ">= 4.21.0" - bin: - update-browserslist-db: cli.js - checksum: 10c0/13a00355ea822388f68af57410ce3255941d5fb9b7c49342c4709a07c9f230bbef7f7499ae0ca7e0de532e79a82cc0c4edbd125f1a323a1845bf914efddf8bec - languageName: node - linkType: hard - "utility-types@npm:^3.11.0": version: 3.11.0 resolution: "utility-types@npm:3.11.0" @@ -6518,16 +4410,6 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.4": - version: 2.5.1 - resolution: "watchpack@npm:2.5.1" - dependencies: - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.1.2" - checksum: 10c0/dffbb483d1f61be90dc570630a1eb308581e2227d507d783b1d94a57ac7b705ecd9a1a4b73d73c15eab596d39874e5276a3d9cb88bbb698bafc3f8d08c34cf17 - languageName: node - linkType: hard - "weak-lru-cache@npm:^1.2.2": version: 1.2.2 resolution: "weak-lru-cache@npm:1.2.2" @@ -6535,51 +4417,6 @@ __metadata: languageName: node linkType: hard -"webpack-sources@npm:^3.3.3": - version: 3.3.3 - resolution: "webpack-sources@npm:3.3.3" - checksum: 10c0/ab732f6933b513ba4d505130418995ddef6df988421fccf3289e53583c6a39e205c4a0739cee98950964552d3006604912679c736031337fb4a9d78d8576ed40 - languageName: node - linkType: hard - -"webpack@npm:^5.104.1": - version: 5.104.1 - resolution: "webpack@npm:5.104.1" - dependencies: - "@types/eslint-scope": "npm:^3.7.7" - "@types/estree": "npm:^1.0.8" - "@types/json-schema": "npm:^7.0.15" - "@webassemblyjs/ast": "npm:^1.14.1" - "@webassemblyjs/wasm-edit": "npm:^1.14.1" - "@webassemblyjs/wasm-parser": "npm:^1.14.1" - acorn: "npm:^8.15.0" - acorn-import-phases: "npm:^1.0.3" - browserslist: "npm:^4.28.1" - chrome-trace-event: "npm:^1.0.2" - enhanced-resolve: "npm:^5.17.4" - es-module-lexer: "npm:^2.0.0" - eslint-scope: "npm:5.1.1" - events: "npm:^3.2.0" - glob-to-regexp: "npm:^0.4.1" - graceful-fs: "npm:^4.2.11" - json-parse-even-better-errors: "npm:^2.3.1" - loader-runner: "npm:^4.3.1" - mime-types: "npm:^2.1.27" - neo-async: "npm:^2.6.2" - schema-utils: "npm:^4.3.3" - tapable: "npm:^2.3.0" - terser-webpack-plugin: "npm:^5.3.16" - watchpack: "npm:^2.4.4" - webpack-sources: "npm:^3.3.3" - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 10c0/ea78c57f80bbd7684f4f1bb38a18408ab0ef4c5b962e25ad382c595d10b9e9701e077f5248a8cef5f127a55902698664c18837e64243bb972fbecf4e5d9aaab0 - languageName: node - linkType: hard - "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -6642,13 +4479,6 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 - languageName: node - linkType: hard - "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" @@ -6672,10 +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 From 946f9f04415785aafd1567be2b377219822dc369 Mon Sep 17 00:00:00 2001 From: Nicolas CARPi Date: Sun, 18 Jan 2026 20:10:22 +0100 Subject: [PATCH 16/16] cleanup --- cypress/e2e/1-basic/zero_configuration.cy.js | 10 ------ src/options.js | 4 +-- src/preview-template.html | 37 -------------------- 3 files changed, 1 insertion(+), 50 deletions(-) delete mode 100644 src/preview-template.html diff --git a/cypress/e2e/1-basic/zero_configuration.cy.js b/cypress/e2e/1-basic/zero_configuration.cy.js index f4b7abf81..87d0f14e9 100644 --- a/cypress/e2e/1-basic/zero_configuration.cy.js +++ b/cypress/e2e/1-basic/zero_configuration.cy.js @@ -3,16 +3,6 @@ describe("Dropzone with zero configuration", () => { beforeEach(() => { cy.visit("/1-basic/zero_configuration.html"); - - // Patch the already auto-created Dropzone instance - cy.window().then((win) => { - const dz = win.Dropzone?.instances?.[0]; - expect(dz, "Dropzone instance").to.exist; - - if (typeof dz.options.previewTemplate === "string") { - dz.options.previewTemplate = dz.options.previewTemplate.trim(); - } - }); }); it("uploads single file", () => { diff --git a/src/options.js b/src/options.js index 6ed9a9dc1..488c10f31 100644 --- a/src/options.js +++ b/src/options.js @@ -1,6 +1,4 @@ import Dropzone from "./dropzone"; -//import defaultPreviewTemplate from "bundle-text:./preview-template.html"; -//import defaultPreviewTemplate from "./preview-template.html?raw"; import defaultPreviewTemplate from "./preview-template.js"; let defaultOptions = { @@ -612,7 +610,7 @@ let defaultOptions = { if (this.previewsContainer && !this.options.disablePreviews) { file.previewElement = Dropzone.createElement( - this.options.previewTemplate + this.options.previewTemplate.trim() ); file.previewTemplate = file.previewElement; // Backwards compatibility diff --git a/src/preview-template.html b/src/preview-template.html deleted file mode 100644 index 021bd0b4e..000000000 --- a/src/preview-template.html +++ /dev/null @@ -1,37 +0,0 @@ -
-
-
-
-
-
-
- -
-
-
- - - -
-
- - - -
-