diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..7c3f0271 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,43 @@ +"use strict"; + +module.exports = { + "env": { + "browser": true, + "commonjs": true, + "es2021": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": "latest" + }, + "ignorePatterns": ["vendor/*.js", "dist/*.js", "test/jquery-1.8.3.min.js"], + "rules": { + "indent": [ + "error", + 4 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ], + "curly": "error", + "eqeqeq": "error", + "no-new": "error", + "no-caller": "error", + "guard-for-in": "error", + "no-extend-native": "error", + "strict": [ + "error", + "global" + ], + } +}; diff --git a/.jshintignore b/.jshintignore deleted file mode 100644 index 3c3629e6..00000000 --- a/.jshintignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index e7bffa0e..00000000 --- a/.jshintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "nonew": true, - "noarg": true, - "forin": true, - "futurehostile": true, - "freeze": true, - "undef": true, - "strict": true, - "sub": true, - "esversion": 3, - - "globals": { - "TextEncoder": false, - "TextDecoder": false, - "self": true - }, - "browser": true, - "node": true -} diff --git a/Gruntfile.js b/Gruntfile.js index 35533e2e..9f1b1b88 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,67 +1,46 @@ -/*jshint node: true */ "use strict"; module.exports = function(grunt) { - var version = require("./package.json").version; + var version = require("./package.json").version; - grunt.initConfig({ - jshint: { - // see https://github.com/gruntjs/grunt-contrib-jshint/issues/198 - // we can't override the options using the jshintrc path - options: grunt.file.readJSON('.jshintrc'), - production: ['./lib/**/*.js'], - test: ['./test/helpers/**/*.js', './test/asserts/**/*.js'], - documentation: { - options: { - // we include js files with jekyll, jshint can't see all - // variables and we can't declare all of them - undef: false, - // 'implied' still give false positives in our case - strict: false + grunt.initConfig({ + browserify: { + all: { + files: { + "dist/jszip.js": ["lib/index.js"] + }, + options: { + browserifyOptions: { + standalone: "JSZip", + transform: ["package-json-versionify"], + insertGlobalVars: { + process: undefined, + Buffer: undefined, + __filename: undefined, + __dirname: undefined + }, + builtins: false + }, + banner: grunt.file.read("lib/license_header.js").replace(/__VERSION__/, version) + } + } }, - files: { - src: ['./documentation/**/*.js'] - } - } - }, - browserify: { - all: { - files: { - 'dist/jszip.js': ['lib/index.js'] - }, - options: { - browserifyOptions: { - standalone: 'JSZip', - transform: ['package-json-versionify'], - insertGlobalVars: { - process: undefined, - Buffer: undefined, - __filename: undefined, - __dirname: undefined + uglify: { + options: { + mangle: true, + preserveComments: false, + banner: grunt.file.read("lib/license_header.js").replace(/__VERSION__/, version) }, - builtins: false - }, - banner: grunt.file.read('lib/license_header.js').replace(/__VERSION__/, version) + all: { + src: "dist/jszip.js", + dest: "dist/jszip.min.js" + } } - } - }, - uglify: { - options: { - mangle: true, - preserveComments: false, - banner: grunt.file.read('lib/license_header.js').replace(/__VERSION__/, version) - }, - all: { - src: 'dist/jszip.js', - dest: 'dist/jszip.min.js' - } - } - }); + }); - grunt.loadNpmTasks('grunt-browserify'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks("grunt-browserify"); + grunt.loadNpmTasks("grunt-contrib-uglify"); - grunt.registerTask("build", ["browserify", "uglify"]); - grunt.registerTask("default", ["jshint", "build"]); + grunt.registerTask("build", ["browserify", "uglify"]); + grunt.registerTask("default", ["build"]); }; diff --git a/documentation/.eslintrc.js b/documentation/.eslintrc.js new file mode 100644 index 00000000..17f7a7e6 --- /dev/null +++ b/documentation/.eslintrc.js @@ -0,0 +1,12 @@ +"use strict"; + +module.exports = { + globals: { + $: false, + jQuery: false, + JSZip: false, + JSZipUtils: false, + // From FileSaver.js + saveAs: false, + }, +}; diff --git a/documentation/contributing.md b/documentation/contributing.md index 334a9187..8b129997 100644 --- a/documentation/contributing.md +++ b/documentation/contributing.md @@ -30,7 +30,7 @@ Here are the interesting build commands : * `npm run test-browser` will the tests in some browsers using SauceLabs, see below. * `npm run test` will run the tests in nodejs and in the browser. -* `npm run lint` will use jshint the check the source code. +* `npm run lint` will use eslint the check the source code. #### Documentation diff --git a/documentation/examples/download-zip-file.inc/blob.js b/documentation/examples/download-zip-file.inc/blob.js index d7f96792..b43939f6 100644 --- a/documentation/examples/download-zip-file.inc/blob.js +++ b/documentation/examples/download-zip-file.inc/blob.js @@ -1,3 +1,5 @@ +"use strict"; + var zip = new JSZip(); zip.file("Hello.txt", "Hello world\n"); diff --git a/documentation/examples/download-zip-file.inc/data_uri.js b/documentation/examples/download-zip-file.inc/data_uri.js index bf3c4a57..e764ff65 100644 --- a/documentation/examples/download-zip-file.inc/data_uri.js +++ b/documentation/examples/download-zip-file.inc/data_uri.js @@ -1,3 +1,5 @@ +"use strict"; + var zip = new JSZip(); zip.file("Hello.txt", "Hello world\n"); diff --git a/documentation/examples/downloader.inc/downloader.js b/documentation/examples/downloader.inc/downloader.js index 38fd8102..443ce010 100644 --- a/documentation/examples/downloader.inc/downloader.js +++ b/documentation/examples/downloader.inc/downloader.js @@ -1,8 +1,6 @@ - -var Promise = window.Promise; -if (!Promise) { - Promise = JSZip.external.Promise; -} +"use strict"; +// From helpers.js: +/* global resetMessage, showMessage, showError, updatePercent */ /** * Fetch the content and return the associated promise. @@ -21,8 +19,7 @@ function urlToPromise(url) { }); } -var $form = $("#download_form").on("submit", function () { - +$("#download_form").on("submit", function () { resetMessage(); var zip = new JSZip(); @@ -44,15 +41,15 @@ var $form = $("#download_form").on("submit", function () { showMessage(msg); updatePercent(metadata.percent|0); }) - .then(function callback(blob) { + .then(function callback(blob) { - // see FileSaver.js - saveAs(blob, "example.zip"); + // see FileSaver.js + saveAs(blob, "example.zip"); - showMessage("done !"); - }, function (e) { - showError(e); - }); + showMessage("done !"); + }, function (e) { + showError(e); + }); return false; }); diff --git a/documentation/examples/downloader.inc/helpers.js b/documentation/examples/downloader.inc/helpers.js index b51aa60d..63966577 100644 --- a/documentation/examples/downloader.inc/helpers.js +++ b/documentation/examples/downloader.inc/helpers.js @@ -1,20 +1,23 @@ +"use strict"; + /** * Reset the message. */ function resetMessage () { $("#result") - .removeClass() - .text(""); + .removeClass() + .text(""); } /** * show a successful message. * @param {String} text the text to show. */ +// eslint-disable-next-line no-unused-vars function showMessage(text) { resetMessage(); $("#result") - .addClass("alert alert-success") - .text(text); + .addClass("alert alert-success") + .text(text); } /** * show an error message. @@ -23,24 +26,23 @@ function showMessage(text) { function showError(text) { resetMessage(); $("#result") - .addClass("alert alert-danger") - .text(text); + .addClass("alert alert-danger") + .text(text); } /** * Update the progress bar. * @param {Integer} percent the current percent */ +// eslint-disable-next-line no-unused-vars function updatePercent(percent) { $("#progress_bar").removeClass("hide") - .find(".progress-bar") - .attr("aria-valuenow", percent) - .css({ - width : percent + "%" - }); + .find(".progress-bar") + .attr("aria-valuenow", percent) + .css({ + width : percent + "%" + }); } if(!JSZip.support.blob) { showError("This demo works only with a recent browser !"); - return; } - diff --git a/documentation/examples/get-binary-files-ajax.inc/fetch_api.js b/documentation/examples/get-binary-files-ajax.inc/fetch_api.js index fd56fccd..777a89ab 100644 --- a/documentation/examples/get-binary-files-ajax.inc/fetch_api.js +++ b/documentation/examples/get-binary-files-ajax.inc/fetch_api.js @@ -1,23 +1,25 @@ -fetch('{{site.baseurl}}/test/ref/text.zip') // 1) fetch the url -.then(function (response) { // 2) filter on 200 OK - if (response.status === 200 || response.status === 0) { - return Promise.resolve(response.blob()); - } else { - return Promise.reject(new Error(response.statusText)); - } -}) -.then(JSZip.loadAsync) // 3) chain with the zip promise -.then(function (zip) { - return zip.file("Hello.txt").async("string"); // 4) chain with the text content promise -}) -.then(function success(text) { // 5) display the result - $("#fetch").append($("

", { - "class": "alert alert-success", - text: "loaded, content = " + text - })); -}, function error(e) { - $("#fetch").append($("

", { - "class": "alert alert-danger", - text: e - })); -}); +"use strict"; + +fetch("{{site.baseurl}}/test/ref/text.zip") // 1) fetch the url + .then(function (response) { // 2) filter on 200 OK + if (response.status === 200 || response.status === 0) { + return Promise.resolve(response.blob()); + } else { + return Promise.reject(new Error(response.statusText)); + } + }) + .then(JSZip.loadAsync) // 3) chain with the zip promise + .then(function (zip) { + return zip.file("Hello.txt").async("string"); // 4) chain with the text content promise + }) + .then(function success(text) { // 5) display the result + $("#fetch").append($("

", { + "class": "alert alert-success", + text: "loaded, content = " + text + })); + }, function error(e) { + $("#fetch").append($("

", { + "class": "alert alert-danger", + text: e + })); + }); diff --git a/documentation/examples/get-binary-files-ajax.inc/jszip_utils.js b/documentation/examples/get-binary-files-ajax.inc/jszip_utils.js index ea4191be..cae1da18 100644 --- a/documentation/examples/get-binary-files-ajax.inc/jszip_utils.js +++ b/documentation/examples/get-binary-files-ajax.inc/jszip_utils.js @@ -1,6 +1,8 @@ +"use strict"; + // 1) get a promise of the content var promise = new JSZip.external.Promise(function (resolve, reject) { - JSZipUtils.getBinaryContent('{{site.baseurl}}/test/ref/text.zip', function(err, data) { + JSZipUtils.getBinaryContent("{{site.baseurl}}/test/ref/text.zip", function(err, data) { if (err) { reject(err); } else { @@ -10,18 +12,17 @@ var promise = new JSZip.external.Promise(function (resolve, reject) { }); promise.then(JSZip.loadAsync) // 2) chain with the zip promise -.then(function(zip) { - return zip.file("Hello.txt").async("string"); // 3) chain with the text content promise -}) -.then(function success(text) { // 4) display the result - $("#jszip_utils").append($("

", { - "class": "alert alert-success", - text: "loaded, content = " + text - })); -}, function error(e) { - $("#jszip_utils").append($("

", { - "class": "alert alert-danger", - text: e - })); -}); - + .then(function(zip) { + return zip.file("Hello.txt").async("string"); // 3) chain with the text content promise + }) + .then(function success(text) { // 4) display the result + $("#jszip_utils").append($("

", { + "class": "alert alert-success", + text: "loaded, content = " + text + })); + }, function error(e) { + $("#jszip_utils").append($("

", { + "class": "alert alert-danger", + text: e + })); + }); diff --git a/documentation/examples/read-local-file-api.inc/read.js b/documentation/examples/read-local-file-api.inc/read.js index 3c559580..3481ae30 100644 --- a/documentation/examples/read-local-file-api.inc/read.js +++ b/documentation/examples/read-local-file-api.inc/read.js @@ -1,3 +1,5 @@ +"use strict"; + var $result = $("#result"); $("#file").on("change", function(evt) { // remove content @@ -16,24 +18,24 @@ $("#file").on("change", function(evt) { var dateBefore = new Date(); JSZip.loadAsync(f) // 1) read the Blob - .then(function(zip) { - var dateAfter = new Date(); - $title.append($("", { - "class": "small", - text:" (loaded in " + (dateAfter - dateBefore) + "ms)" - })); + .then(function(zip) { + var dateAfter = new Date(); + $title.append($("", { + "class": "small", + text:" (loaded in " + (dateAfter - dateBefore) + "ms)" + })); - zip.forEach(function (relativePath, zipEntry) { // 2) print entries - $fileContent.append($("

  • ", { - text : zipEntry.name + zip.forEach(function (relativePath, zipEntry) { // 2) print entries + $fileContent.append($("
  • ", { + text : zipEntry.name + })); + }); + }, function (e) { + $result.append($("
    ", { + "class" : "alert alert-danger", + text : "Error reading " + f.name + ": " + e.message })); }); - }, function (e) { - $result.append($("
    ", { - "class" : "alert alert-danger", - text : "Error reading " + f.name + ": " + e.message - })); - }); } var files = evt.target.files; @@ -41,4 +43,3 @@ $("#file").on("change", function(evt) { handleFile(files[i]); } }); - diff --git a/lib/base64.js b/lib/base64.js index 75d7e3ce..6f46deaa 100644 --- a/lib/base64.js +++ b/lib/base64.js @@ -1,6 +1,6 @@ -'use strict'; -var utils = require('./utils'); -var support = require('./support'); +"use strict"; +var utils = require("./utils"); +var support = require("./support"); // private property var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; @@ -55,7 +55,7 @@ exports.decode = function(input) { throw new Error("Invalid base64 input, it looks like a data url."); } - input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + input = input.replace(/[^A-Za-z0-9+/=]/g, ""); var totalLength = input.length * 3 / 4; if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { diff --git a/lib/compressedObject.js b/lib/compressedObject.js index 7b86a575..0acd4c42 100644 --- a/lib/compressedObject.js +++ b/lib/compressedObject.js @@ -1,9 +1,9 @@ -'use strict'; +"use strict"; var external = require("./external"); -var DataWorker = require('./stream/DataWorker'); -var Crc32Probe = require('./stream/Crc32Probe'); -var DataLengthProbe = require('./stream/DataLengthProbe'); +var DataWorker = require("./stream/DataWorker"); +var Crc32Probe = require("./stream/Crc32Probe"); +var DataLengthProbe = require("./stream/DataLengthProbe"); /** * Represent a compressed object, with everything needed to decompress it. @@ -34,7 +34,7 @@ CompressedObject.prototype = { var that = this; worker.on("end", function () { - if (this.streamInfo['data_length'] !== that.uncompressedSize) { + if (this.streamInfo["data_length"] !== that.uncompressedSize) { throw new Error("Bug : uncompressed data size mismatch"); } }); @@ -50,7 +50,7 @@ CompressedObject.prototype = { .withStreamInfo("uncompressedSize", this.uncompressedSize) .withStreamInfo("crc32", this.crc32) .withStreamInfo("compression", this.compression) - ; + ; } }; diff --git a/lib/compressions.js b/lib/compressions.js index 1e81ea94..81c67b4e 100644 --- a/lib/compressions.js +++ b/lib/compressions.js @@ -1,14 +1,14 @@ -'use strict'; +"use strict"; var GenericWorker = require("./stream/GenericWorker"); exports.STORE = { magic: "\x00\x00", - compressWorker : function (compressionOptions) { + compressWorker : function () { return new GenericWorker("STORE compression"); }, uncompressWorker : function () { return new GenericWorker("STORE decompression"); } }; -exports.DEFLATE = require('./flate'); +exports.DEFLATE = require("./flate"); diff --git a/lib/crc32.js b/lib/crc32.js index 62a0d52b..fc111e9b 100644 --- a/lib/crc32.js +++ b/lib/crc32.js @@ -1,6 +1,6 @@ -'use strict'; +"use strict"; -var utils = require('./utils'); +var utils = require("./utils"); /** * The following functions come from pako, from pako/lib/zlib/crc32.js diff --git a/lib/defaults.js b/lib/defaults.js index 41800c3f..8fb6c1e7 100644 --- a/lib/defaults.js +++ b/lib/defaults.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; exports.base64 = false; exports.binary = false; exports.dir = false; diff --git a/lib/external.js b/lib/external.js index 8803e55f..c846f5fa 100644 --- a/lib/external.js +++ b/lib/external.js @@ -1,5 +1,4 @@ -/* global Promise */ -'use strict'; +"use strict"; // load the global object first: // - it should be better integrated in the system (unhandledRejection in node) diff --git a/lib/flate.js b/lib/flate.js index a078f6fe..cd9e062c 100644 --- a/lib/flate.js +++ b/lib/flate.js @@ -1,5 +1,5 @@ -'use strict'; -var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); +"use strict"; +var USE_TYPEDARRAY = (typeof Uint8Array !== "undefined") && (typeof Uint16Array !== "undefined") && (typeof Uint32Array !== "undefined"); var pako = require("pako"); var utils = require("./utils"); diff --git a/lib/generate/ZipFileWorker.js b/lib/generate/ZipFileWorker.js index 4c7a6112..a86d46aa 100644 --- a/lib/generate/ZipFileWorker.js +++ b/lib/generate/ZipFileWorker.js @@ -1,10 +1,10 @@ -'use strict'; +"use strict"; -var utils = require('../utils'); -var GenericWorker = require('../stream/GenericWorker'); -var utf8 = require('../utf8'); -var crc32 = require('../crc32'); -var signature = require('../signature'); +var utils = require("../utils"); +var GenericWorker = require("../stream/GenericWorker"); +var utf8 = require("../utf8"); +var crc32 = require("../crc32"); +var signature = require("../signature"); /** * Transform an integer into a string in hexadecimal. @@ -62,8 +62,7 @@ var generateUnixExternalFileAttr = function (unixPermissions, isDir) { * Bit 4 Directory * Bit 5 Archive */ -var generateDosExternalFileAttr = function (dosPermissions, isDir) { - +var generateDosExternalFileAttr = function (dosPermissions) { // the dir flag is already set for compatibility return (dosPermissions || 0) & 0x3F; }; @@ -79,23 +78,23 @@ var generateDosExternalFileAttr = function (dosPermissions, isDir) { * @return {Object} the zip parts. */ var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { - var file = streamInfo['file'], - compression = streamInfo['compression'], - useCustomEncoding = encodeFileName !== utf8.utf8encode, - encodedFileName = utils.transformTo("string", encodeFileName(file.name)), - utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), - comment = file.comment, - encodedComment = utils.transformTo("string", encodeFileName(comment)), - utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), - useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, - useUTF8ForComment = utfEncodedComment.length !== comment.length, - dosTime, - dosDate, - extraFields = "", - unicodePathExtraField = "", - unicodeCommentExtraField = "", - dir = file.dir, - date = file.date; + var file = streamInfo["file"], + compression = streamInfo["compression"], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; var dataInfo = { @@ -107,9 +106,9 @@ var generateZipParts = function(streamInfo, streamedContent, streamingEnded, off // if the content is streamed, the sizes/crc32 are only available AFTER // the end of the stream. if (!streamedContent || streamingEnded) { - dataInfo.crc32 = streamInfo['crc32']; - dataInfo.compressedSize = streamInfo['compressedSize']; - dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + dataInfo.crc32 = streamInfo["crc32"]; + dataInfo.compressedSize = streamInfo["compressedSize"]; + dataInfo.uncompressedSize = streamInfo["uncompressedSize"]; } var bitflag = 0; @@ -301,11 +300,11 @@ var generateDataDescriptors = function (streamInfo) { var descriptor = ""; descriptor = signature.DATA_DESCRIPTOR + // crc-32 4 bytes - decToHex(streamInfo['crc32'], 4) + + decToHex(streamInfo["crc32"], 4) + // compressed size 4 bytes - decToHex(streamInfo['compressedSize'], 4) + + decToHex(streamInfo["compressedSize"], 4) + // uncompressed size 4 bytes - decToHex(streamInfo['uncompressedSize'], 4); + decToHex(streamInfo["uncompressedSize"], 4); return descriptor; }; @@ -384,9 +383,9 @@ ZipFileWorker.prototype.push = function (chunk) { */ ZipFileWorker.prototype.openedSource = function (streamInfo) { this.currentSourceOffset = this.bytesWritten; - this.currentFile = streamInfo['file'].name; + this.currentFile = streamInfo["file"].name; - var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var streamedContent = this.streamFiles && !streamInfo["file"].dir; // don't stream folders (because they don't have any content) if(streamedContent) { @@ -407,7 +406,7 @@ ZipFileWorker.prototype.openedSource = function (streamInfo) { */ ZipFileWorker.prototype.closedSource = function (streamInfo) { this.accumulate = false; - var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var streamedContent = this.streamFiles && !streamInfo["file"].dir; var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); this.dirRecords.push(record.dirRecord); @@ -473,10 +472,10 @@ ZipFileWorker.prototype.registerPrevious = function (previous) { this._sources.push(previous); var self = this; - previous.on('data', function (chunk) { + previous.on("data", function (chunk) { self.processChunk(chunk); }); - previous.on('end', function () { + previous.on("end", function () { self.closedSource(self.previous.streamInfo); if(self._sources.length) { self.prepareNextSource(); @@ -484,7 +483,7 @@ ZipFileWorker.prototype.registerPrevious = function (previous) { self.end(); } }); - previous.on('error', function (e) { + previous.on("error", function (e) { self.error(e); }); return this; diff --git a/lib/generate/index.js b/lib/generate/index.js index 083ddeb1..2b3f7d67 100644 --- a/lib/generate/index.js +++ b/lib/generate/index.js @@ -1,7 +1,7 @@ -'use strict'; +"use strict"; -var compressions = require('../compressions'); -var ZipFileWorker = require('./ZipFileWorker'); +var compressions = require("../compressions"); +var ZipFileWorker = require("./ZipFileWorker"); /** * Find the compression to use. @@ -38,15 +38,15 @@ exports.generateWorker = function (zip, options, comment) { var dir = file.dir, date = file.date; file._compressWorker(compression, compressionOptions) - .withStreamInfo("file", { - name : relativePath, - dir : dir, - date : date, - comment : file.comment || "", - unixPermissions : file.unixPermissions, - dosPermissions : file.dosPermissions - }) - .pipe(zipFileWorker); + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); }); zipFileWorker.entriesCount = entriesCount; } catch (e) { diff --git a/lib/index.js b/lib/index.js index 8cab905d..50eb5a70 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,11 +1,11 @@ -'use strict'; +"use strict"; /** * Representation a of zip file in js * @constructor */ function JSZip() { - // if this constructor is used without `new`, it adds `new` before itself: + // if this constructor is used without `new`, it adds `new` before itself: if(!(this instanceof JSZip)) { return new JSZip(); } @@ -38,10 +38,10 @@ function JSZip() { return newObj; }; } -JSZip.prototype = require('./object'); -JSZip.prototype.loadAsync = require('./load'); -JSZip.support = require('./support'); -JSZip.defaults = require('./defaults'); +JSZip.prototype = require("./object"); +JSZip.prototype.loadAsync = require("./load"); +JSZip.support = require("./support"); +JSZip.defaults = require("./defaults"); // TODO find a better way to handle this version, // a require('package.json').version doesn't work with webpack, see #327 diff --git a/lib/load.js b/lib/load.js index 389aafe5..69fa2694 100644 --- a/lib/load.js +++ b/lib/load.js @@ -1,9 +1,9 @@ -'use strict'; -var utils = require('./utils'); +"use strict"; +var utils = require("./utils"); var external = require("./external"); -var utf8 = require('./utf8'); -var ZipEntries = require('./zipEntries'); -var Crc32Probe = require('./stream/Crc32Probe'); +var utf8 = require("./utf8"); +var ZipEntries = require("./zipEntries"); +var Crc32Probe = require("./stream/Crc32Probe"); var nodejsUtils = require("./nodejsUtils"); /** diff --git a/lib/nodejs/NodejsStreamInputAdapter.js b/lib/nodejs/NodejsStreamInputAdapter.js index 0ef320c8..635c5047 100644 --- a/lib/nodejs/NodejsStreamInputAdapter.js +++ b/lib/nodejs/NodejsStreamInputAdapter.js @@ -1,7 +1,7 @@ "use strict"; -var utils = require('../utils'); -var GenericWorker = require('../stream/GenericWorker'); +var utils = require("../utils"); +var GenericWorker = require("../stream/GenericWorker"); /** * A worker that use a nodejs stream as source. @@ -27,28 +27,28 @@ NodejsStreamInputAdapter.prototype._bindStream = function (stream) { this._stream = stream; stream.pause(); stream - .on("data", function (chunk) { - self.push({ - data: chunk, - meta : { - percent : 0 + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); } }); - }) - .on("error", function (e) { - if(self.isPaused) { - this.generatedError = e; - } else { - self.error(e); - } - }) - .on("end", function () { - if(self.isPaused) { - self._upstreamEnded = true; - } else { - self.end(); - } - }); }; NodejsStreamInputAdapter.prototype.pause = function () { if(!GenericWorker.prototype.pause.call(this)) { diff --git a/lib/nodejs/NodejsStreamOutputAdapter.js b/lib/nodejs/NodejsStreamOutputAdapter.js index 3757cdf9..e6aafb9b 100644 --- a/lib/nodejs/NodejsStreamOutputAdapter.js +++ b/lib/nodejs/NodejsStreamOutputAdapter.js @@ -1,8 +1,8 @@ -'use strict'; +"use strict"; -var Readable = require('readable-stream').Readable; +var Readable = require("readable-stream").Readable; -var utils = require('../utils'); +var utils = require("../utils"); utils.inherits(NodejsStreamOutputAdapter, Readable); /** @@ -26,12 +26,12 @@ function NodejsStreamOutputAdapter(helper, options, updateCb) { updateCb(meta); } }) - .on("error", function(e) { - self.emit('error', e); - }) - .on("end", function () { - self.push(null); - }); + .on("error", function(e) { + self.emit("error", e); + }) + .on("end", function () { + self.push(null); + }); } diff --git a/lib/nodejsUtils.js b/lib/nodejsUtils.js index 83001064..6d9b3c3f 100644 --- a/lib/nodejsUtils.js +++ b/lib/nodejsUtils.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; module.exports = { /** diff --git a/lib/object.js b/lib/object.js index aec3db78..0e979778 100644 --- a/lib/object.js +++ b/lib/object.js @@ -1,11 +1,11 @@ -'use strict'; -var utf8 = require('./utf8'); -var utils = require('./utils'); -var GenericWorker = require('./stream/GenericWorker'); -var StreamHelper = require('./stream/StreamHelper'); -var defaults = require('./defaults'); -var CompressedObject = require('./compressedObject'); -var ZipObject = require('./zipObject'); +"use strict"; +var utf8 = require("./utf8"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); +var StreamHelper = require("./stream/StreamHelper"); +var defaults = require("./defaults"); +var CompressedObject = require("./compressedObject"); +var ZipObject = require("./zipObject"); var generate = require("./generate"); var nodejsUtils = require("./nodejsUtils"); var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); @@ -107,10 +107,10 @@ var fileAdd = function(name, data, originalOptions) { * @return {string} the parent folder, or "" */ var parentFolder = function (path) { - if (path.slice(-1) === '/') { + if (path.slice(-1) === "/") { path = path.substring(0, path.length - 1); } - var lastSlash = path.lastIndexOf('/'); + var lastSlash = path.lastIndexOf("/"); return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; }; @@ -137,7 +137,7 @@ var forceTrailingSlash = function(path) { * @return {Object} the new folder. */ var folderAdd = function(name, createFolders) { - createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + createFolders = (typeof createFolders !== "undefined") ? createFolders : defaults.createFolders; name = forceTrailingSlash(name); @@ -179,8 +179,8 @@ var out = { */ forEach: function(cb) { var filename, relativePath, file; - /* jshint ignore:start */ // ignore warning about unwanted properties because this.files is a null prototype object + /* eslint-disable-next-line guard-for-in */ for (filename in this.files) { file = this.files[filename]; relativePath = filename.slice(this.root.length, filename.length); @@ -188,7 +188,6 @@ var out = { cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... } } - /* jshint ignore:end */ }, /** @@ -301,13 +300,9 @@ var out = { }, /** - * Generate the complete zip file - * @param {Object} options the options to generate the zip file : - * - compression, "STORE" by default. - * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. - * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide. */ - generate: function(options) { + generate: function() { throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); }, @@ -319,53 +314,53 @@ var out = { * @return {StreamHelper} the streamed zip file. */ generateInternalStream: function(options) { - var worker, opts = {}; - try { - opts = utils.extend(options || {}, { - streamFiles: false, - compression: "STORE", - compressionOptions : null, - type: "", - platform: "DOS", - comment: null, - mimeType: 'application/zip', - encodeFileName: utf8.utf8encode - }); - - opts.type = opts.type.toLowerCase(); - opts.compression = opts.compression.toUpperCase(); - - // "binarystring" is preferred but the internals use "string". - if(opts.type === "binarystring") { - opts.type = "string"; - } - - if (!opts.type) { - throw new Error("No output type specified."); - } - - utils.checkSupport(opts.type); - - // accept nodejs `process.platform` - if( - opts.platform === 'darwin' || - opts.platform === 'freebsd' || - opts.platform === 'linux' || - opts.platform === 'sunos' - ) { - opts.platform = "UNIX"; - } - if (opts.platform === 'win32') { - opts.platform = "DOS"; - } - - var comment = opts.comment || this.comment || ""; - worker = generate.generateWorker(this, opts, comment); - } catch (e) { - worker = new GenericWorker("error"); - worker.error(e); - } - return new StreamHelper(worker, opts.type || "string", opts.mimeType); + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: "application/zip", + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is preferred but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === "darwin" || + opts.platform === "freebsd" || + opts.platform === "linux" || + opts.platform === "sunos" + ) { + opts.platform = "UNIX"; + } + if (opts.platform === "win32") { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); }, /** * Generate the complete zip file asynchronously. diff --git a/lib/readable-stream-browser.js b/lib/readable-stream-browser.js index 49410a46..a07d91ab 100644 --- a/lib/readable-stream-browser.js +++ b/lib/readable-stream-browser.js @@ -1,3 +1,4 @@ +"use strict"; /* * This file is used by module bundlers (browserify/webpack/etc) when * including a stream implementation. We use "readable-stream" to get a diff --git a/lib/reader/ArrayReader.js b/lib/reader/ArrayReader.js index 3e9e4eb3..32a9569b 100644 --- a/lib/reader/ArrayReader.js +++ b/lib/reader/ArrayReader.js @@ -1,12 +1,12 @@ -'use strict'; -var DataReader = require('./DataReader'); -var utils = require('../utils'); +"use strict"; +var DataReader = require("./DataReader"); +var utils = require("../utils"); function ArrayReader(data) { DataReader.call(this, data); - for(var i = 0; i < this.data.length; i++) { - data[i] = data[i] & 0xFF; - } + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } } utils.inherits(ArrayReader, DataReader); /** diff --git a/lib/reader/DataReader.js b/lib/reader/DataReader.js index c4e1e03b..b61b839b 100644 --- a/lib/reader/DataReader.js +++ b/lib/reader/DataReader.js @@ -1,5 +1,5 @@ -'use strict'; -var utils = require('../utils'); +"use strict"; +var utils = require("../utils"); function DataReader(data) { this.data = data; // type : see implementation @@ -48,7 +48,7 @@ DataReader.prototype = { * @param {number} i the index to use. * @return {number} a byte. */ - byteAt: function(i) { + byteAt: function() { // see implementations }, /** @@ -79,7 +79,7 @@ DataReader.prototype = { * @param {number} size the number of bytes to read. * @return {Object} the raw data, implementation specific. */ - readData: function(size) { + readData: function() { // see implementations }, /** @@ -87,7 +87,7 @@ DataReader.prototype = { * @param {string} sig the signature to find. * @return {number} the index of the last occurrence, -1 if not found. */ - lastIndexOfSignature: function(sig) { + lastIndexOfSignature: function() { // see implementations }, /** @@ -95,7 +95,7 @@ DataReader.prototype = { * @param {string} sig the expected signature * @return {boolean} true if the signature matches, false otherwise. */ - readAndCheckSignature: function(sig) { + readAndCheckSignature: function() { // see implementations }, /** @@ -105,12 +105,12 @@ DataReader.prototype = { readDate: function() { var dostime = this.readInt(4); return new Date(Date.UTC( - ((dostime >> 25) & 0x7f) + 1980, // year - ((dostime >> 21) & 0x0f) - 1, // month - (dostime >> 16) & 0x1f, // day - (dostime >> 11) & 0x1f, // hour - (dostime >> 5) & 0x3f, // minute - (dostime & 0x1f) << 1)); // second + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second } }; module.exports = DataReader; diff --git a/lib/reader/NodeBufferReader.js b/lib/reader/NodeBufferReader.js index 5d4d3cb3..cbedf258 100644 --- a/lib/reader/NodeBufferReader.js +++ b/lib/reader/NodeBufferReader.js @@ -1,6 +1,6 @@ -'use strict'; -var Uint8ArrayReader = require('./Uint8ArrayReader'); -var utils = require('../utils'); +"use strict"; +var Uint8ArrayReader = require("./Uint8ArrayReader"); +var utils = require("../utils"); function NodeBufferReader(data) { Uint8ArrayReader.call(this, data); diff --git a/lib/reader/StringReader.js b/lib/reader/StringReader.js index e64e58ab..fc90784a 100644 --- a/lib/reader/StringReader.js +++ b/lib/reader/StringReader.js @@ -1,6 +1,6 @@ -'use strict'; -var DataReader = require('./DataReader'); -var utils = require('../utils'); +"use strict"; +var DataReader = require("./DataReader"); +var utils = require("../utils"); function StringReader(data) { DataReader.call(this, data); diff --git a/lib/reader/Uint8ArrayReader.js b/lib/reader/Uint8ArrayReader.js index c753dc47..2bf2bdcf 100644 --- a/lib/reader/Uint8ArrayReader.js +++ b/lib/reader/Uint8ArrayReader.js @@ -1,6 +1,6 @@ -'use strict'; -var ArrayReader = require('./ArrayReader'); -var utils = require('../utils'); +"use strict"; +var ArrayReader = require("./ArrayReader"); +var utils = require("../utils"); function Uint8ArrayReader(data) { ArrayReader.call(this, data); diff --git a/lib/reader/readerFor.js b/lib/reader/readerFor.js index c089ea0f..7558eb4f 100644 --- a/lib/reader/readerFor.js +++ b/lib/reader/readerFor.js @@ -1,11 +1,11 @@ -'use strict'; +"use strict"; -var utils = require('../utils'); -var support = require('../support'); -var ArrayReader = require('./ArrayReader'); -var StringReader = require('./StringReader'); -var NodeBufferReader = require('./NodeBufferReader'); -var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require("../utils"); +var support = require("../support"); +var ArrayReader = require("./ArrayReader"); +var StringReader = require("./StringReader"); +var NodeBufferReader = require("./NodeBufferReader"); +var Uint8ArrayReader = require("./Uint8ArrayReader"); /** * Create a reader adapted to the data. diff --git a/lib/signature.js b/lib/signature.js index 4ee817b8..a799611f 100644 --- a/lib/signature.js +++ b/lib/signature.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; exports.LOCAL_FILE_HEADER = "PK\x03\x04"; exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; diff --git a/lib/stream/ConvertWorker.js b/lib/stream/ConvertWorker.js index ab7ee84d..22d27b0b 100644 --- a/lib/stream/ConvertWorker.js +++ b/lib/stream/ConvertWorker.js @@ -1,7 +1,7 @@ -'use strict'; +"use strict"; -var GenericWorker = require('./GenericWorker'); -var utils = require('../utils'); +var GenericWorker = require("./GenericWorker"); +var utils = require("../utils"); /** * A worker which convert chunks to a specified type. diff --git a/lib/stream/Crc32Probe.js b/lib/stream/Crc32Probe.js index 93f0ad38..59c3da0b 100644 --- a/lib/stream/Crc32Probe.js +++ b/lib/stream/Crc32Probe.js @@ -1,8 +1,8 @@ -'use strict'; +"use strict"; -var GenericWorker = require('./GenericWorker'); -var crc32 = require('../crc32'); -var utils = require('../utils'); +var GenericWorker = require("./GenericWorker"); +var crc32 = require("../crc32"); +var utils = require("../utils"); /** * A worker which calculate the crc32 of the data flowing through. diff --git a/lib/stream/DataLengthProbe.js b/lib/stream/DataLengthProbe.js index c6915cdb..12356926 100644 --- a/lib/stream/DataLengthProbe.js +++ b/lib/stream/DataLengthProbe.js @@ -1,7 +1,7 @@ -'use strict'; +"use strict"; -var utils = require('../utils'); -var GenericWorker = require('./GenericWorker'); +var utils = require("../utils"); +var GenericWorker = require("./GenericWorker"); /** * A worker which calculate the total length of the data flowing through. diff --git a/lib/stream/DataWorker.js b/lib/stream/DataWorker.js index 5e3fa3a2..ffb99bdd 100644 --- a/lib/stream/DataWorker.js +++ b/lib/stream/DataWorker.js @@ -1,7 +1,7 @@ -'use strict'; +"use strict"; -var utils = require('../utils'); -var GenericWorker = require('./GenericWorker'); +var utils = require("../utils"); +var GenericWorker = require("./GenericWorker"); // the size of the generated chunks // TODO expose this as a public variable @@ -92,15 +92,15 @@ DataWorker.prototype._tick = function() { return this.end(); } else { switch(this.type) { - case "string": - data = this.data.substring(this.index, nextIndex); + case "string": + data = this.data.substring(this.index, nextIndex); break; - case "uint8array": - data = this.data.subarray(this.index, nextIndex); + case "uint8array": + data = this.data.subarray(this.index, nextIndex); break; - case "array": - case "nodebuffer": - data = this.data.slice(this.index, nextIndex); + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); break; } this.index = nextIndex; diff --git a/lib/stream/GenericWorker.js b/lib/stream/GenericWorker.js index cc3f8fac..4b283101 100644 --- a/lib/stream/GenericWorker.js +++ b/lib/stream/GenericWorker.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; /** * A worker that does nothing but passing chunks to the next one. This is like @@ -31,9 +31,9 @@ function GenericWorker(name) { this.isLocked = false; // the event listeners this._listeners = { - 'data':[], - 'end':[], - 'error':[] + "data":[], + "end":[], + "error":[] }; // the previous worker, if any this.previous = null; @@ -150,13 +150,13 @@ GenericWorker.prototype = { this.mergeStreamInfo(); this.previous = previous; var self = this; - previous.on('data', function (chunk) { + previous.on("data", function (chunk) { self.processChunk(chunk); }); - previous.on('end', function () { + previous.on("end", function () { self.end(); }); - previous.on('error', function (e) { + previous.on("error", function (e) { self.error(e); }); return this; @@ -225,7 +225,7 @@ GenericWorker.prototype = { */ mergeStreamInfo : function () { for(var key in this.extraStreamInfo) { - if (!this.extraStreamInfo.hasOwnProperty(key)) { + if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) { continue; } this.streamInfo[key] = this.extraStreamInfo[key]; diff --git a/lib/stream/StreamHelper.js b/lib/stream/StreamHelper.js index 09958deb..64575132 100644 --- a/lib/stream/StreamHelper.js +++ b/lib/stream/StreamHelper.js @@ -1,17 +1,19 @@ -'use strict'; +"use strict"; -var utils = require('../utils'); -var ConvertWorker = require('./ConvertWorker'); -var GenericWorker = require('./GenericWorker'); -var base64 = require('../base64'); +var utils = require("../utils"); +var ConvertWorker = require("./ConvertWorker"); +var GenericWorker = require("./GenericWorker"); +var base64 = require("../base64"); var support = require("../support"); var external = require("../external"); var NodejsStreamOutputAdapter = null; if (support.nodestream) { try { - NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); - } catch(e) {} + NodejsStreamOutputAdapter = require("../nodejs/NodejsStreamOutputAdapter"); + } catch(e) { + // ignore + } } /** @@ -25,12 +27,12 @@ if (support.nodestream) { */ function transformZipOutput(type, content, mimeType) { switch(type) { - case "blob" : - return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); - case "base64" : - return base64.encode(content); - default : - return utils.transformTo(type, content); + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); } } @@ -47,21 +49,21 @@ function concat (type, dataArray) { totalLength += dataArray[i].length; } switch(type) { - case "string": - return dataArray.join(""); - case "array": - return Array.prototype.concat.apply([], dataArray); - case "uint8array": - res = new Uint8Array(totalLength); - for(i = 0; i < dataArray.length; i++) { - res.set(dataArray[i], index); - index += dataArray[i].length; - } - return res; - case "nodebuffer": - return Buffer.concat(dataArray); - default: - throw new Error("concat : unsupported type '" + type + "'"); + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); } } @@ -81,26 +83,26 @@ function accumulate(helper, updateCallback) { resultType = helper._outputType, mimeType = helper._mimeType; helper - .on('data', function (data, meta) { - dataArray.push(data); - if(updateCallback) { - updateCallback(meta); - } - }) - .on('error', function(err) { - dataArray = []; - reject(err); - }) - .on('end', function (){ - try { - var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); - resolve(result); - } catch (e) { - reject(e); - } - dataArray = []; - }) - .resume(); + .on("data", function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on("error", function(err) { + dataArray = []; + reject(err); + }) + .on("end", function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); }); } @@ -114,12 +116,12 @@ function accumulate(helper, updateCallback) { function StreamHelper(worker, outputType, mimeType) { var internalType = outputType; switch(outputType) { - case "blob": - case "arraybuffer": - internalType = "uint8array"; + case "blob": + case "arraybuffer": + internalType = "uint8array"; break; - case "base64": - internalType = "string"; + case "base64": + internalType = "string"; break; } diff --git a/lib/support.js b/lib/support.js index 9a18aafd..ef60feaa 100644 --- a/lib/support.js +++ b/lib/support.js @@ -1,4 +1,4 @@ -'use strict'; +"use strict"; exports.base64 = true; exports.array = true; @@ -23,7 +23,7 @@ else { var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; var builder = new Builder(); builder.append(buffer); - exports.blob = builder.getBlob('application/zip').size === 0; + exports.blob = builder.getBlob("application/zip").size === 0; } catch (e) { exports.blob = false; @@ -32,7 +32,7 @@ else { } try { - exports.nodestream = !!require('readable-stream').Readable; + exports.nodestream = !!require("readable-stream").Readable; } catch(e) { exports.nodestream = false; } diff --git a/lib/utf8.js b/lib/utf8.js index 5c1380f3..18e8f829 100644 --- a/lib/utf8.js +++ b/lib/utf8.js @@ -1,9 +1,9 @@ -'use strict'; +"use strict"; -var utils = require('./utils'); -var support = require('./support'); -var nodejsUtils = require('./nodejsUtils'); -var GenericWorker = require('./stream/GenericWorker'); +var utils = require("./utils"); +var support = require("./support"); +var nodejsUtils = require("./nodejsUtils"); +var GenericWorker = require("./stream/GenericWorker"); /** * The following functions come from pako, from pako/lib/utils/strings @@ -15,7 +15,7 @@ var GenericWorker = require('./stream/GenericWorker'); // because max possible codepoint is 0x10ffff var _utf8len = new Array(256); for (var i=0; i<256; i++) { - _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); } _utf8len[254]=_utf8len[254]=1; // Invalid sequence start @@ -106,7 +106,7 @@ var utf8border = function(buf, max) { // convert array to string var buf2string = function (buf) { - var str, i, out, c, c_len; + var i, out, c, c_len; var len = buf.length; // Reserve max possible length (2 words per char) diff --git a/lib/utils.js b/lib/utils.js index 68ad18da..fe585f40 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,10 +1,10 @@ -'use strict'; +"use strict"; -var support = require('./support'); -var base64 = require('./base64'); -var nodejsUtils = require('./nodejsUtils'); +var support = require("./support"); +var base64 = require("./base64"); +var nodejsUtils = require("./nodejsUtils"); var external = require("./external"); -require('setimmediate'); +require("setimmediate"); /** @@ -17,9 +17,9 @@ require('setimmediate'); function string2binary(str) { var result = null; if (support.uint8array) { - result = new Uint8Array(str.length); + result = new Uint8Array(str.length); } else { - result = new Array(str.length); + result = new Array(str.length); } return stringToArrayLike(str, result); } @@ -387,11 +387,11 @@ exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is pa * @return {string} a pretty string. */ exports.pretty = function(str) { - var res = '', + var res = "", code, i; for (i = 0; i < (str || "").length; i++) { code = str.charCodeAt(i); - res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + res += "\\x" + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); } return res; }; @@ -429,7 +429,7 @@ exports.extend = function() { var result = {}, i, attr; for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers for (attr in arguments[i]) { - if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === "undefined") { result[attr] = arguments[i][attr]; } } @@ -452,7 +452,7 @@ exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinarySt var promise = external.Promise.resolve(inputData).then(function(data) { - var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + var isBlob = support.blob && (data instanceof Blob || ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(data)) !== -1); if (isBlob && typeof FileReader !== "undefined") { return new external.Promise(function (resolve, reject) { diff --git a/lib/zipEntries.js b/lib/zipEntries.js index 2e3aba90..13cb4777 100644 --- a/lib/zipEntries.js +++ b/lib/zipEntries.js @@ -1,10 +1,9 @@ -'use strict'; -var readerFor = require('./reader/readerFor'); -var utils = require('./utils'); -var sig = require('./signature'); -var ZipEntry = require('./zipEntry'); -var utf8 = require('./utf8'); -var support = require('./support'); +"use strict"; +var readerFor = require("./reader/readerFor"); +var utils = require("./utils"); +var sig = require("./signature"); +var ZipEntry = require("./zipEntry"); +var support = require("./support"); // class ZipEntries {{{ /** * All the entries in the zip file. diff --git a/lib/zipEntry.js b/lib/zipEntry.js index f204524e..2d2565f4 100644 --- a/lib/zipEntry.js +++ b/lib/zipEntry.js @@ -1,11 +1,11 @@ -'use strict'; -var readerFor = require('./reader/readerFor'); -var utils = require('./utils'); -var CompressedObject = require('./compressedObject'); -var crc32fn = require('./crc32'); -var utf8 = require('./utf8'); -var compressions = require('./compressions'); -var support = require('./support'); +"use strict"; +var readerFor = require("./reader/readerFor"); +var utils = require("./utils"); +var CompressedObject = require("./compressedObject"); +var crc32fn = require("./crc32"); +var utf8 = require("./utf8"); +var compressions = require("./compressions"); +var support = require("./support"); var MADE_BY_DOS = 0x00; var MADE_BY_UNIX = 0x03; @@ -17,7 +17,7 @@ var MADE_BY_UNIX = 0x03; */ var findCompression = function(compressionMethod) { for (var method in compressions) { - if (!compressions.hasOwnProperty(method)) { + if (!Object.prototype.hasOwnProperty.call(compressions, method)) { continue; } if (compressions[method].magic === compressionMethod) { @@ -153,7 +153,7 @@ ZipEntry.prototype = { } // fail safe : if the name ends with a / it probably means a folder - if (!this.dir && this.fileNameStr.slice(-1) === '/') { + if (!this.dir && this.fileNameStr.slice(-1) === "/") { this.dir = true; } }, @@ -162,8 +162,7 @@ ZipEntry.prototype = { * Parse the ZIP64 extra field and merge the info in the current ZipEntry. * @param {DataReader} reader the reader to use. */ - parseZIP64ExtraField: function(reader) { - + parseZIP64ExtraField: function() { if (!this.extraFields[0x0001]) { return; } diff --git a/lib/zipObject.js b/lib/zipObject.js index 04d7b618..8d709d2c 100644 --- a/lib/zipObject.js +++ b/lib/zipObject.js @@ -1,10 +1,10 @@ -'use strict'; +"use strict"; -var StreamHelper = require('./stream/StreamHelper'); -var DataWorker = require('./stream/DataWorker'); -var utf8 = require('./utf8'); -var CompressedObject = require('./compressedObject'); -var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require("./stream/StreamHelper"); +var DataWorker = require("./stream/DataWorker"); +var utf8 = require("./utf8"); +var CompressedObject = require("./compressedObject"); +var GenericWorker = require("./stream/GenericWorker"); /** * A simple object representing a file in the zip file. diff --git a/package-lock.json b/package-lock.json index b1edfedb..298c6918 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,5130 @@ { "name": "jszip", "version": "3.10.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "jszip", + "version": "3.10.0", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + }, + "devDependencies": { + "browserify": "~13.0.0", + "eslint": "^8.18.0", + "grunt": "~0.4.1", + "grunt-browserify": "~5.0.0", + "grunt-cli": "~1.1.0", + "grunt-contrib-uglify": "~4.0.1", + "http-server": "^13.0.2", + "jszip-utils": "~0.0.2", + "package-json-versionify": "1.0.2", + "playwright": "^1.15.2", + "qunit": "~2.9.2", + "tmp": "0.0.28", + "typescript": "^4.6.3" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.10.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", + "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "node_modules/acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/argparse": { + "version": "0.1.16", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", + "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", + "dev": true, + "dependencies": { + "underscore": "~1.7.0", + "underscore.string": "~2.4.0" + } + }, + "node_modules/argparse/node_modules/underscore.string": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", + "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "node_modules/array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "node_modules/array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1.js": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/assert": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", + "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", + "dev": true, + "dependencies": { + "util": "0.10.3" + } + }, + "node_modules/astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "dependencies": { + "acorn": "^4.0.3" + } + }, + "node_modules/async": { + "version": "0.1.22", + "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", + "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-pack": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.2.tgz", + "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", + "dev": true, + "dependencies": { + "combine-source-map": "~0.7.1", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/browserify": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.0.1.tgz", + "integrity": "sha1-03F5y7IiF57Pcw7H5iXpmGd5AtQ=", + "dev": true, + "dependencies": { + "assert": "~1.3.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.1.2", + "buffer": "^4.1.0", + "concat-stream": "~1.5.1", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "~1.1.0", + "duplexer2": "~0.1.2", + "events": "~1.1.0", + "glob": "^5.0.15", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "~0.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "module-deps": "^4.0.2", + "os-browserify": "~0.1.1", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.4.3", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "~0.10.0", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "~0.0.0", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "~0.0.1", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + } + }, + "node_modules/browserify-aes": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.6.tgz", + "integrity": "sha1-Xncl297x/Vkw1OurSFZ85FHEigo=", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.2", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "dependencies": { + "pako": "~0.2.0" + } + }, + "node_modules/browserify-zlib/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "node_modules/buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "optionalDependencies": { + "fsevents": "^1.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/coffee-script": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", + "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", + "deprecated": "CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen)", + "dev": true, + "bin": { + "cake": "bin/cake", + "coffee": "bin/coffee" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "dependencies": { + "date-now": "^0.1.4" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha512-Na7ZlwCOqoaW5RwUK1WpXws2kv8mNhWdTlzob0UXulk6G9BDbyiJaGTYBIX61Ozn9l1EPPJpICZb4DaOpT9NlQ==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "node_modules/dateformat": { + "version": "1.0.2-1.2.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", + "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "dependencies": { + "JSONStream": "^1.0.3", + "shasum": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detective": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.5.0.tgz", + "integrity": "sha1-blqMaybmx6JUsca210kNmOyR7dE=", + "dev": true, + "dependencies": { + "acorn": "^4.0.3", + "defined": "^1.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz", + "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", + "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", + "dev": true, + "dependencies": { + "glob": "~3.2.9", + "lodash": "~2.4.1" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/findup-sync/node_modules/glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "dependencies": { + "inherits": "2", + "minimatch": "0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/findup-sync/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/findup-sync/node_modules/minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flat-cache/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "bundleDependencies": [ + "node-pre-gyp" + ], + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fsevents/node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/are-we-there-yet": { + "version": "1.1.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/fsevents/node_modules/balanced-match": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/fsevents/node_modules/chownr": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/fsevents/node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fsevents/node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/detect-libc": { + "version": "1.0.3", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/fsevents/node_modules/fs-minipass": { + "version": "1.2.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/fsevents/node_modules/glob": { + "version": "7.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/ignore-walk": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/fsevents/node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/ini": { + "version": "1.3.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/minimatch": { + "version": "3.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/fsevents/node_modules/minimist": { + "version": "0.0.8", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/minipass": { + "version": "2.3.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/fsevents/node_modules/minizlib": { + "version": "1.2.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^2.2.1" + } + }, + "node_modules/fsevents/node_modules/mkdirp": { + "version": "0.5.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/fsevents/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/needle": { + "version": "2.2.4", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/fsevents/node_modules/node-pre-gyp": { + "version": "0.10.3", + "dev": true, + "inBundle": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/fsevents/node_modules/nopt": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/fsevents/node_modules/npm-bundled": { + "version": "1.0.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/npm-packlist": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "node_modules/fsevents/node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/fsevents/node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/once": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/fsevents/node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/osenv": { + "version": "0.1.5", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/fsevents/node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/process-nextick-args": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/rc": { + "version": "1.2.8", + "dev": true, + "inBundle": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/fsevents/node_modules/rc/node_modules/minimist": { + "version": "1.2.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/readable-stream": { + "version": "2.3.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fsevents/node_modules/rimraf": { + "version": "2.6.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/fsevents/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/sax": { + "version": "1.2.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/semver": { + "version": "5.6.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/fsevents/node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/signal-exit": { + "version": "3.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fsevents/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fsevents/node_modules/tar": { + "version": "4.4.8", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/fsevents/node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/fsevents/node_modules/wide-align": { + "version": "1.1.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/fsevents/node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/fsevents/node_modules/yallist": { + "version": "3.0.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getobject": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", + "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", + "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", + "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/grunt": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", + "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", + "dev": true, + "dependencies": { + "async": "~0.1.22", + "coffee-script": "~1.3.3", + "colors": "~0.6.2", + "dateformat": "1.0.2-1.2.3", + "eventemitter2": "~0.4.13", + "exit": "~0.1.1", + "findup-sync": "~0.1.2", + "getobject": "~0.1.0", + "glob": "~3.1.21", + "grunt-legacy-log": "~0.1.0", + "grunt-legacy-util": "~0.2.0", + "hooker": "~0.2.3", + "iconv-lite": "~0.2.11", + "js-yaml": "~2.0.5", + "lodash": "~0.9.2", + "minimatch": "~0.2.12", + "nopt": "~1.0.10", + "rimraf": "~2.2.8", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-browserify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/grunt-browserify/-/grunt-browserify-5.0.0.tgz", + "integrity": "sha1-HTM8qYvaxEV29kbg1mgAh8v4xhU=", + "dev": true, + "dependencies": { + "async": "^1.5.0", + "browserify": "^13.0.0", + "glob": "^6.0.3", + "lodash": "^3.10.1", + "resolve": "^1.1.6", + "watchify": "^3.6.1" + }, + "engines": { + "node": ">= 0.8.x" + } + }, + "node_modules/grunt-browserify/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "node_modules/grunt-browserify/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-browserify/node_modules/lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "node_modules/grunt-cli": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.1.0.tgz", + "integrity": "sha1-r9eWmTTd8zYg6ER+3B+pTlHlWjQ=", + "dev": true, + "dependencies": { + "findup-sync": "~0.3.0", + "nopt": "~3.0.6", + "resolve": "~1.1.0" + }, + "bin": { + "grunt": "bin/grunt" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-cli/node_modules/findup-sync": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", + "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", + "dev": true, + "dependencies": { + "glob": "~5.0.0" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/grunt-cli/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/grunt-cli/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/grunt-contrib-uglify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz", + "integrity": "sha512-dwf8/+4uW1+7pH72WButOEnzErPGmtUvc8p08B0eQS/6ON0WdeQu0+WFeafaPTbbY1GqtS25lsHWaDeiTQNWPg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "maxmin": "^2.1.0", + "uglify-js": "^3.5.0", + "uri-path": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/gzip-size": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", + "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", + "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", + "dev": true, + "dependencies": { + "chalk": "^1.0.0", + "figures": "^1.0.1", + "gzip-size": "^3.0.0", + "pretty-bytes": "^3.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/maxmin/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/pretty-bytes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", + "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/grunt-contrib-uglify/node_modules/uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "dev": true, + "dependencies": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/grunt-legacy-log": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", + "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", + "dev": true, + "dependencies": { + "colors": "~0.6.2", + "grunt-legacy-log-utils": "~0.1.1", + "hooker": "~0.2.3", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-legacy-log-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", + "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", + "dev": true, + "dependencies": { + "colors": "~0.6.2", + "lodash": "~2.4.1", + "underscore.string": "~2.3.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt-legacy-log-utils/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log-utils/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-legacy-log/node_modules/lodash": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", + "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/grunt-legacy-log/node_modules/underscore.string": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", + "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/grunt-legacy-util": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", + "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", + "dev": true, + "dependencies": { + "async": "~0.1.22", + "exit": "~0.1.1", + "getobject": "~0.1.0", + "hooker": "~0.2.3", + "lodash": "~0.9.2", + "underscore.string": "~2.2.1", + "which": "~1.0.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/grunt/node_modules/glob": { + "version": "3.1.21", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", + "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", + "dev": true, + "dependencies": { + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" + }, + "engines": { + "node": "*" + } + }, + "node_modules/grunt/node_modules/inherits": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", + "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", + "dev": true + }, + "node_modules/grunt/node_modules/minimatch": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", + "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", + "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", + "dev": true, + "dependencies": { + "lru-cache": "2", + "sigmund": "~1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "dependencies": { + "function-bind": "^1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hooker": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-server": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-13.0.2.tgz", + "integrity": "sha512-R8kvPT7qp11AMJWLZsRShvm6heIXdlR/+tL5oAWNG/86A/X+IAFX6q0F9SA2G+dR5aH/759+9PLH0V34Q6j4rg==", + "dev": true, + "dependencies": { + "basic-auth": "^1.0.3", + "colors": "^1.4.0", + "corser": "^2.0.1", + "he": "^1.1.0", + "http-proxy": "^1.18.0", + "mime": "^1.6.0", + "minimist": "^1.2.5", + "opener": "^1.5.1", + "portfinder": "^1.0.25", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^2.0.5" + }, + "bin": { + "http-server": "bin/http-server" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/http-server/node_modules/basic-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tgz", + "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-server/node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/http-server/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/http-server/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/https-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", + "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", + "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", + "dev": true, + "dependencies": { + "combine-source-map": "~0.7.1", + "concat-stream": "~1.5.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "lexical-scope": "^1.2.0", + "process": "~0.11.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "deprecated": "This version of 'is-buffer' is out-of-date. You must update to v1.1.6 or newer", + "dev": true + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", + "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", + "dev": true + }, + "node_modules/js-reporters": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/js-reporters/-/js-reporters-1.2.1.tgz", + "integrity": "sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs=", + "dev": true + }, + "node_modules/js-yaml": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", + "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", + "dev": true, + "dependencies": { + "argparse": "~ 0.1.11", + "esprima": "~ 1.0.2" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "index.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jszip-utils": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jszip-utils/-/jszip-utils-0.0.2.tgz", + "integrity": "sha1-RX1cvKYKHC4HBunaK1ROjnvFC/g=", + "dev": true + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "isarray": "~0.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/labeled-stream-splicer/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "dependencies": { + "astw": "^2.0.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lodash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", + "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", + "dev": true, + "engines": [ + "node", + "rhino" + ] + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/md5.js/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp/node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "dependencies": { + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.0", + "defined": "^1.0.0", + "detective": "^4.0.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.3", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nan": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", + "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-watch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.6.0.tgz", + "integrity": "sha512-XAgTL05z75ptd7JSVejH1a2Dm1zmXYhuDr9l230Qk6Z7/7GPcnAs/UyJJ4ggsXSvWil8iOzwQLW0zuGUvHpG8g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", + "integrity": "sha1-ScoCk+CxlZCl9d4Qx/JlphfY/lQ=", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outpipe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", + "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", + "dev": true, + "dependencies": { + "shell-quote": "^1.4.2" + } + }, + "node_modules/package-json-versionify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/package-json-versionify/-/package-json-versionify-1.0.2.tgz", + "integrity": "sha1-Kcqvd2ZPjf//LezEczZwP/c0bxE=", + "dev": true, + "dependencies": { + "through2": "^2.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.5.tgz", + "integrity": "sha1-0iBd/ludqK95fnwWPbTR+E5GALw=" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "dependencies": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.13.tgz", + "integrity": "sha512-+dCHxDH+djNtjgWmvVC/my3SYBAKpKNqKSjLkp+GtWWYe4XPE+e/PSD2aCanlEZZnqPk2uekTKNC/ccbwd2X2Q==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/playwright": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.15.2.tgz", + "integrity": "sha512-+Z+7ckihyxR6rK5q8DWC6eUbKARfXpyxpjNcoJfgwSr64lAOzjhyFQiPC/JkdIqhsLgZjxpWfl1S7fLb+wPkgA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "commander": "^6.1.0", + "debug": "^4.1.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.0", + "jpeg-js": "^0.4.2", + "mime": "^2.4.6", + "pngjs": "^5.0.0", + "progress": "^2.0.3", + "proper-lockfile": "^4.1.1", + "proxy-from-env": "^1.1.0", + "rimraf": "^3.0.2", + "stack-utils": "^2.0.3", + "ws": "^7.4.6", + "yazl": "^2.5.1" + }, + "bin": { + "playwright": "lib/cli/cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/playwright/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/playwright/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/playwright/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/playwright/node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/playwright/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/playwright/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/playwright/node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/portfinder/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proper-lockfile/node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/qunit": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.9.2.tgz", + "integrity": "sha512-wTOYHnioWHcx5wa85Wl15IE7D6zTZe2CQlsodS14yj7s2FZ3MviRnQluspBZsueIDEO7doiuzKlv05yfky1R7w==", + "dev": true, + "dependencies": { + "commander": "2.12.2", + "js-reporters": "1.2.1", + "minimatch": "3.0.4", + "node-watch": "0.6.0", + "resolve": "1.9.0" + }, + "bin": { + "qunit": "bin/qunit.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qunit/node_modules/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "node_modules/qunit/node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/qunit/node_modules/resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + } + }, + "node_modules/randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randomatic/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/readdirp/node_modules/graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/regex-cache": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", + "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "dev": true, + "dependencies": { + "is-equal-shallow": "^0.1.3", + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha512-aW7sVKPufyHqOmyyLzg/J+8606v5nevBgaliIlV7nUpVMsDnoBGV/cbSLNjZAg9q0Cfd/+easKVKQ8vOu8fn1Q==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.5" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "node_modules/secure-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", + "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=", + "dev": true + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/sha.js": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.8.tgz", + "integrity": "sha1-NwaMLEdra69ALRSknGf1l5IfY08=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "dependencies": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.2.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/syntax-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", + "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", + "dev": true, + "dependencies": { + "acorn": "^4.0.3" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "dependencies": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmp": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", + "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true, + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "node_modules/underscore.string": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", + "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/union": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", + "dev": true, + "dependencies": { + "qs": "^6.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/uri-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", + "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-join": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", + "dev": true + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "dependencies": { + "indexof": "0.0.1" + } + }, + "node_modules/watchify": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.9.0.tgz", + "integrity": "sha1-8HX9LoqGrN6Eztum5cKgvt1SPZ4=", + "dev": true, + "dependencies": { + "anymatch": "^1.3.0", + "browserify": "^14.0.0", + "chokidar": "^1.0.0", + "defined": "^1.0.0", + "outpipe": "^1.1.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "watchify": "bin/cmd.js" + } + }, + "node_modules/watchify/node_modules/assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "dependencies": { + "util": "0.10.3" + } + }, + "node_modules/watchify/node_modules/browserify": { + "version": "14.4.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.4.0.tgz", + "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", + "dev": true, + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.1.2", + "buffer": "^5.0.2", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.1", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "~1.1.0", + "duplexer2": "~0.1.2", + "events": "~1.1.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "module-deps": "^4.0.8", + "os-browserify": "~0.1.1", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^2.0.0", + "string_decoder": "~1.0.0", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "~0.0.0", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "~0.0.1", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + } + }, + "node_modules/watchify/node_modules/buffer": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.7.tgz", + "integrity": "sha512-NeeHXWh5pCbPQCt2/6rLvXqapZfVsqw/YgRgaHpT3H9Uzgs+S0lSg5SQzouIuDvcmlQRqBe8hOO2scKCu3cxrg==", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v5.0.8 or newer", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/watchify/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/watchify/node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/watchify/node_modules/string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/which": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", + "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", + "dev": true, + "bin": { + "which": "bin/which" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } + } + }, "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@types/node": { "version": "16.10.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", @@ -21,16 +5142,6 @@ "@types/node": "*" } }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, "abbrev": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", @@ -43,18 +5154,24 @@ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", "dev": true }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -220,9 +5337,9 @@ "integrity": "sha1-+GzWzvT1MAyOY+B6TVEvZfv/RTE=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.7.1", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "through2": "^2.0.0", "umd": "^3.0.0" } @@ -250,7 +5367,6 @@ "integrity": "sha1-03F5y7IiF57Pcw7H5iXpmGd5AtQ=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "~1.3.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", @@ -271,6 +5387,7 @@ "https-browserify": "~0.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "module-deps": "^4.0.2", "os-browserify": "~0.1.1", @@ -410,18 +5527,11 @@ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", "dev": true }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "chokidar": { "version": "1.7.0", @@ -450,32 +5560,6 @@ "safe-buffer": "^5.0.1" } }, - "cli": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", - "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "^7.1.1" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "coffee-script": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", @@ -622,6 +5706,28 @@ "sha.js": "^2.4.8" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "crypto-browserify": { "version": "3.11.1", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", @@ -652,6 +5758,21 @@ "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", "dev": true }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", @@ -701,28 +5822,13 @@ "randombytes": "^2.0.0" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", - "dev": true - } + "esutils": "^2.0.2" } }, "domain-browser": { @@ -731,31 +5837,6 @@ "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", "dev": true }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", - "dev": true - }, - "domhandler": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", - "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -777,40 +5858,292 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", + "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.2", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "dev": true, + "requires": { + "acorn": "^8.7.1", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + } + } + }, + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" } }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "once": "^1.4.0" + "estraverse": "^5.2.0" } }, - "entities": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", - "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "eventemitter2": { @@ -884,25 +6217,26 @@ "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -922,6 +6256,15 @@ "object-assign": "^4.1.0" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -979,6 +6322,56 @@ } } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, "follow-redirects": { "version": "1.14.4", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", @@ -1475,24 +6868,24 @@ "dev": true, "optional": true }, - "string-width": { - "version": "1.0.2", + "string_decoder": { + "version": "1.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "safe-buffer": "~5.1.0" } }, - "string_decoder": { - "version": "1.1.1", + "string-width": { + "version": "1.0.2", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -1560,6 +6953,12 @@ "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -1607,6 +7006,15 @@ "is-glob": "^2.0.0" } }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, "graceful-fs": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", @@ -1748,17 +7156,6 @@ } } }, - "grunt-contrib-jshint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.0.0.tgz", - "integrity": "sha1-MPQFpR3mVr+m6wKbmkZLn+AqQCo=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "hooker": "^0.2.3", - "jshint": "~2.9.1" - } - }, "grunt-contrib-uglify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-4.0.1.tgz", @@ -2014,39 +7411,6 @@ "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", "dev": true }, - "htmlparser2": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", - "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.3", - "domutils": "1.5", - "entities": "1.0", - "readable-stream": "1.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -2122,11 +7486,33 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -2163,10 +7549,10 @@ "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.7.1", "concat-stream": "~1.5.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "lexical-scope": "^1.2.0", "process": "~0.11.0", "through2": "^2.0.0", @@ -2250,6 +7636,12 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", @@ -2281,29 +7673,11 @@ "esprima": "~ 1.0.2" } }, - "jshint": { - "version": "2.9.5", - "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", - "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", - "dev": true, - "requires": { - "cli": "~1.0.0", - "console-browserify": "1.1.x", - "exit": "0.1.x", - "htmlparser2": "3.8.x", - "lodash": "3.7.x", - "minimatch": "~3.0.2", - "shelljs": "0.3.x", - "strip-json-comments": "1.0.x" - }, - "dependencies": { - "lodash": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", - "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", - "dev": true - } - } + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify": { "version": "0.0.1", @@ -2314,6 +7688,12 @@ "jsonify": "~0.0.0" } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "jsonify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", @@ -2326,6 +7706,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", + "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "jszip-utils": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/jszip-utils/-/jszip-utils-0.0.2.tgz", @@ -2360,6 +7750,16 @@ } } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lexical-scope": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", @@ -2389,6 +7789,12 @@ "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", @@ -2498,7 +7904,6 @@ "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", "cached-path-relative": "^1.0.0", "concat-stream": "~1.5.0", @@ -2506,6 +7911,7 @@ "detective": "^4.0.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.1.3", @@ -2515,6 +7921,12 @@ "xtend": "^4.0.0" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", @@ -2522,6 +7934,12 @@ "dev": true, "optional": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node-watch": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.6.0.tgz", @@ -2583,6 +8001,20 @@ "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "os-browserify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz", @@ -2618,6 +8050,15 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.5.tgz", "integrity": "sha1-0iBd/ludqK95fnwWPbTR+E5GALw=" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parents": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", @@ -2664,6 +8105,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", @@ -2732,15 +8179,6 @@ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -2771,12 +8209,6 @@ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2790,7 +8222,8 @@ "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -2843,6 +8276,12 @@ } } }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -3093,6 +8532,12 @@ "is-primitive": "^2.0.0" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", @@ -3126,6 +8571,12 @@ "path-parse": "^1.0.5" } }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -3189,6 +8640,21 @@ "sha.js": "~2.4.4" } }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", @@ -3201,12 +8667,6 @@ "jsonify": "~0.0.0" } }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", - "dev": true - }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -3326,12 +8786,6 @@ "ansi-regex": "^2.0.0" } }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", - "dev": true - }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", @@ -3341,12 +8795,6 @@ "minimist": "^1.1.0" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, "syntax-error": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", @@ -3356,6 +8804,12 @@ "acorn": "^4.0.3" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -3428,6 +8882,21 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -3467,6 +8936,23 @@ "qs": "^6.4.0" } }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, "uri-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", @@ -3519,6 +9005,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -3558,7 +9050,6 @@ "integrity": "sha1-CJo0Y69Y0OSNjNQHCz90ZU1avKk=", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", @@ -3580,6 +9071,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "module-deps": "^4.0.8", "os-browserify": "~0.1.1", @@ -3654,6 +9146,12 @@ "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", "dev": true }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 75fd0a11..8e7a1da7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "test": "npm run test-node && npm run test-browser && tsc", "test-node": "qunit --require ./test/helpers/test-utils.js --require ./test/helpers/node-test-utils.js test/asserts/", "test-browser": "grunt build && node test/run.js", - "lint": "grunt jshint" + "lint": "eslint ." }, "contributors": [ { @@ -40,13 +40,12 @@ ], "devDependencies": { "browserify": "~13.0.0", + "eslint": "^8.18.0", "grunt": "~0.4.1", "grunt-browserify": "~5.0.0", "grunt-cli": "~1.1.0", - "grunt-contrib-jshint": "~1.0.0", "grunt-contrib-uglify": "~4.0.1", "http-server": "^13.0.2", - "jshint": "~2.9.1", "jszip-utils": "~0.0.2", "package-json-versionify": "1.0.2", "playwright": "^1.15.2", diff --git a/test/.eslintrc.js b/test/.eslintrc.js new file mode 100644 index 00000000..b997d8c1 --- /dev/null +++ b/test/.eslintrc.js @@ -0,0 +1,10 @@ +"use strict"; + +module.exports = { + globals: { + JSZip: false, + JSZipUtils: false, + JSZipTestUtils: false, + QUnit: false, + }, +}; diff --git a/test/asserts/constructor.js b/test/asserts/constructor.js index 16ddf1ae..c3b12c6a 100644 --- a/test/asserts/constructor.js +++ b/test/asserts/constructor.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("constructor"); @@ -13,7 +12,6 @@ QUnit.test("new JSZip()", function(assert){ }); QUnit.test("JSZip()", function(assert){ - var zip = JSZip(); // jshint ignore:line + var zip = JSZip(); assert.ok(zip instanceof JSZip, "Constructor adds `new` before itself where necessary"); }); - diff --git a/test/asserts/delete.js b/test/asserts/delete.js index abd3ac8b..0e089c4f 100644 --- a/test/asserts/delete.js +++ b/test/asserts/delete.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("delete"); @@ -12,7 +11,7 @@ JSZipTestUtils.testZipFile("Delete file", "ref/text.zip", function(assert, expec zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete file in folder", "ref/folder.zip", function(assert, expected) { @@ -23,7 +22,7 @@ JSZipTestUtils.testZipFile("Delete file in folder", "ref/folder.zip", function(a zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete file in folder, with a relative path", "ref/folder.zip", function(assert, expected) { @@ -35,7 +34,7 @@ JSZipTestUtils.testZipFile("Delete file in folder, with a relative path", "ref/f zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete folder", "ref/text.zip", function(assert, expected) { @@ -47,7 +46,7 @@ JSZipTestUtils.testZipFile("Delete folder", "ref/text.zip", function(assert, exp zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete folder with a final /", "ref/text.zip", function(assert, expected) { @@ -59,7 +58,7 @@ JSZipTestUtils.testZipFile("Delete folder with a final /", "ref/text.zip", funct zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete unknown path", "ref/text.zip", function(assert, expected) { @@ -71,7 +70,7 @@ JSZipTestUtils.testZipFile("Delete unknown path", "ref/text.zip", function(asser zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete nested folders", "ref/text.zip", function(assert, expected) { @@ -85,7 +84,7 @@ JSZipTestUtils.testZipFile("Delete nested folders", "ref/text.zip", function(ass zip.generateAsync({type:"binarystring"}).then(function(actual) { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Delete nested folders from relative path", "ref/folder.zip", function(assert, expected) { @@ -98,6 +97,5 @@ JSZipTestUtils.testZipFile("Delete nested folders from relative path", "ref/fold assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); - diff --git a/test/asserts/deprecated.js b/test/asserts/deprecated.js index 2080cc11..72ebc66e 100644 --- a/test/asserts/deprecated.js +++ b/test/asserts/deprecated.js @@ -1,10 +1,8 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("deprecated"); QUnit.test("Removed load method throws an exception", function(assert) { - var file = JSZipTestUtils.createZipAll().file("Hello.txt"); assert.throws( function() { new JSZip().load(""); @@ -14,10 +12,10 @@ QUnit.test("Removed load method throws an exception", function(assert) { ); }); QUnit.test("Removed constructor with data throws an exception", function(assert) { - var file = JSZipTestUtils.createZipAll().file("Hello.txt"); assert.throws( function() { - var zip = new JSZip(""); + // eslint-disable-next-line no-new + new JSZip(""); }, /upgrade guide/, "new JSZip(data) throws an exception" @@ -34,7 +32,6 @@ QUnit.test("Removed asText method throws an exception", function(assert) { ); }); QUnit.test("Removed generate method throws an exception", function(assert) { - var file = JSZipTestUtils.createZipAll().file("Hello.txt"); assert.throws( function() { new JSZip().generate({type:"string"}); diff --git a/test/asserts/external.js b/test/asserts/external.js index 083565ad..613da0c9 100644 --- a/test/asserts/external.js +++ b/test/asserts/external.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils,Promise */ -'use strict'; +"use strict"; QUnit.module("external"); @@ -24,7 +23,7 @@ function createPromiseProxy(OriginalPromise) { return new MyShinyPromise(this._promise.then(onFulfilled, onRejected)); }, "catch": function (onRejected) { - return new MyShinyPromise(this._promise['catch'](onRejected)); + return new MyShinyPromise(this._promise["catch"](onRejected)); }, isACustomImplementation: true }; @@ -63,11 +62,11 @@ QUnit.test("external.Promise can be replaced in .async()", function (assert) { JSZip.external.Promise = MyShinyPromise; - var promise = JSZipTestUtils.createZipAll().file("Hello.txt").async("string").then(function (result) { + var promise = JSZipTestUtils.createZipAll().file("Hello.txt").async("string").then(function () { assert.ok(MyShinyPromise.calls > 0, "at least 1 call of the new Promise"); JSZip.external.Promise = OriginalPromise; done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); assert.ok(promise.isACustomImplementation, "the custom implementation is used"); }); @@ -79,11 +78,11 @@ QUnit.test("external.Promise can be replaced in .generateAsync()", function (ass JSZip.external.Promise = MyShinyPromise; - var promise = JSZipTestUtils.createZipAll().generateAsync({type:"string"}).then(function (result) { + var promise = JSZipTestUtils.createZipAll().generateAsync({type:"string"}).then(function () { assert.ok(MyShinyPromise.calls > 0, "at least 1 call of the new Promise"); JSZip.external.Promise = OriginalPromise; done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); assert.ok(promise.isACustomImplementation, "the custom implementation is used"); }); @@ -95,11 +94,11 @@ JSZipTestUtils.testZipFile("external.Promise can be replaced in .loadAsync()", " JSZip.external.Promise = MyShinyPromise; - var promise = JSZip.loadAsync(all).then(function (result) { + var promise = JSZip.loadAsync(all).then(function () { assert.ok(MyShinyPromise.calls > 0, "at least 1 call of the new Promise"); JSZip.external.Promise = OriginalPromise; done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); assert.ok(promise.isACustomImplementation, "the custom implementation is used"); }); diff --git a/test/asserts/file.js b/test/asserts/file.js index 6b406be8..1d36ff0f 100644 --- a/test/asserts/file.js +++ b/test/asserts/file.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils,Promise */ -'use strict'; +"use strict"; QUnit.module("file", function () { @@ -30,7 +29,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Zip text, folder and image", "ref/all.zip", function(assert, expected) { @@ -42,7 +41,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, 3 * JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Add a file to overwrite", "ref/text.zip", function(assert, expected) { @@ -55,7 +54,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Zip text file with date", "ref/text.zip", function(assert, expected) { @@ -74,7 +73,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, 10) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); @@ -86,7 +85,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("add file: from XHR (with bytes > 255)", "ref/text.zip", function(assert, textZip) { @@ -97,17 +96,17 @@ QUnit.module("file", function () { // high-order byte is discarded and won't mess up the result JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("add file: wrong string as base64", function(assert) { var zip = new JSZip(); zip.file("text.txt", "a random string", {base64:true}); var done = assert.async(); - zip.generateAsync({type:"binarystring"}).then(function(actual) { + zip.generateAsync({type:"binarystring"}).then(function() { assert.ok(false, "generateAsync should fail"); done(); - })['catch'](function (e) { + })["catch"](function (e) { assert.equal(e.message, "Invalid base64 input, bad content length.", "triggers the correct error"); done(); }); @@ -117,10 +116,10 @@ QUnit.module("file", function () { var zip = new JSZip(); zip.file("text.txt", "data:image/png;base64,YmFzZTY0", {base64:true}); var done = assert.async(); - zip.generateAsync({type:"binarystring"}).then(function(actual) { + zip.generateAsync({type:"binarystring"}).then(function() { assert.ok(false, "generateAsync should fail"); done(); - })['catch'](function (e) { + })["catch"](function (e) { assert.equal(e.message, "Invalid base64 input, it looks like a data url.", "triggers the correct error"); done(); }); @@ -144,29 +143,29 @@ QUnit.module("file", function () { var done = assert.async(); opts.zip.generateAsync({type:"binarystring"}) - .then(JSZip.loadAsync) - .then(function(zip) { - var reloaded = { - name : "(reloaded) " + opts.name, - zip : zip, - textData : opts.textData, - rawData : opts.rawData - }; - _actualTestFileDataGetters.testGetter(assert, reloaded, "string"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "text"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "base64"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "array"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "binarystring"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "arraybuffer"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "uint8array"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "nodebuffer"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "blob"); - _actualTestFileDataGetters.testGetter(assert, reloaded, "unknown"); - _actualTestFileDataGetters.testGetter(assert, reloaded, null); - - opts.zip.file("file.txt", "changing the content after the call won't change the result"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function(zip) { + var reloaded = { + name : "(reloaded) " + opts.name, + zip : zip, + textData : opts.textData, + rawData : opts.rawData + }; + _actualTestFileDataGetters.testGetter(assert, reloaded, "string"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "text"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "base64"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "array"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "binarystring"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "arraybuffer"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "uint8array"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "nodebuffer"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "blob"); + _actualTestFileDataGetters.testGetter(assert, reloaded, "unknown"); + _actualTestFileDataGetters.testGetter(assert, reloaded, null); + + opts.zip.file("file.txt", "changing the content after the call won't change the result"); + done(); + })["catch"](JSZipTestUtils.assertNoError); opts.zip.file("file.txt", "changing the content after the call won't change the result"); } @@ -175,8 +174,6 @@ QUnit.module("file", function () { testGetter : function (assert, opts, askedType) { var asyncTestName = "[test = " + opts.name + "] [method = async(" + askedType + ")] "; - var err = null, content = null; - var stream = opts.zip.file("file.txt").internalStream(askedType); JSZipTestUtils.checkBasicStreamBehavior(assert, stream, asyncTestName); @@ -345,16 +342,16 @@ QUnit.module("file", function () { zip.file("test.txt", new Date()); zip.file("test.txt") - .async("string") + .async("string") // XXX zip.file(name, data) returns a ZipObject for chaining, // we need to try to get the value to get the error - .then(function () { - assert.ok(false, "An unsupported object was added, but no exception thrown"); - done(); - }, function (e) { - assert.ok(e.message.match("Is it in a supported JavaScript type"), "the error message is useful"); - done(); - }); + .then(function () { + assert.ok(false, "An unsupported object was added, but no exception thrown"); + done(); + }, function (e) { + assert.ok(e.message.match("Is it in a supported JavaScript type"), "the error message is useful"); + done(); + }); }); if (JSZip.support.uint8array) { @@ -422,7 +419,7 @@ QUnit.module("file", function () { if (typeof Promise !== "undefined") { QUnit.test("add file: file(name, native Promise)", function (assert) { var str2promise = function (str) { - return new Promise(function(resolve, reject) { + return new Promise(function(resolve) { setTimeout(function () { resolve(str); }, 10); @@ -444,7 +441,7 @@ QUnit.module("file", function () { QUnit.test("add file: file(name, polyfill Promise[string] as binary)", function (assert) { var str2promise = function (str) { - return new JSZip.external.Promise(function(resolve, reject) { + return new JSZip.external.Promise(function(resolve) { setTimeout(function () { resolve(str); }, 10); @@ -457,7 +454,7 @@ QUnit.module("file", function () { QUnit.test("add file: file(name, polyfill Promise[string] force text)", function (assert) { var str2promise = function (str) { - return new JSZip.external.Promise(function(resolve, reject) { + return new JSZip.external.Promise(function(resolve) { setTimeout(function () { resolve(str); }, 10); @@ -496,7 +493,7 @@ QUnit.module("file", function () { if (JSZip.support.blob) { QUnit.test("add file: file(name, polyfill Promise[Blob])", function (assert) { var str2promiseOfBlob = function (str) { - return new JSZip.external.Promise(function(resolve, reject) { + return new JSZip.external.Promise(function(resolve) { setTimeout(function () { resolve(str2blob(str)); }, 10); @@ -560,7 +557,7 @@ QUnit.module("file", function () { assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("file() creates a folder with dir:true", function (assert) { @@ -568,7 +565,7 @@ QUnit.module("file", function () { zip.file("folder", null, { dir : true }); - assert.ok(zip.files['folder/'].dir, "the folder with options is marked as a folder"); + assert.ok(zip.files["folder/"].dir, "the folder with options is marked as a folder"); }); QUnit.test("file() creates a folder with the right unix permissions", function (assert) { @@ -576,7 +573,7 @@ QUnit.module("file", function () { zip.file("folder", null, { unixPermissions : parseInt("40500", 8) }); - assert.ok(zip.files['folder/'].dir, "the folder with options is marked as a folder"); + assert.ok(zip.files["folder/"].dir, "the folder with options is marked as a folder"); }); QUnit.test("file() creates a folder with the right dos permissions", function (assert) { @@ -584,7 +581,7 @@ QUnit.module("file", function () { zip.file("folder", null, { dosPermissions : parseInt("010000", 2) }); - assert.ok(zip.files['folder/'].dir, "the folder with options is marked as a folder"); + assert.ok(zip.files["folder/"].dir, "the folder with options is marked as a folder"); }); QUnit.test("A folder stays a folder when created with file", function (assert) { @@ -598,23 +595,23 @@ QUnit.module("file", function () { unixPermissions : parseInt("40500", 8) }); - assert.ok(zip.files['folder/'].dir, "the folder with options is marked as a folder"); - assert.equal(zip.files['folder/'].date.getTime(), referenceDate.getTime(), "the folder with options has the correct date"); - assert.equal(zip.files['folder/'].comment, referenceComment, "the folder with options has the correct comment"); - assert.equal(zip.files['folder/'].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); + assert.ok(zip.files["folder/"].dir, "the folder with options is marked as a folder"); + assert.equal(zip.files["folder/"].date.getTime(), referenceDate.getTime(), "the folder with options has the correct date"); + assert.equal(zip.files["folder/"].comment, referenceComment, "the folder with options has the correct comment"); + assert.equal(zip.files["folder/"].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); var done = assert.async(); zip.generateAsync({type:"string", platform:"UNIX"}) - .then(JSZip.loadAsync) - .then(function (reloaded) { - assert.ok(reloaded.files['folder/'].dir, "the folder with options is marked as a folder"); - - assert.ok(reloaded.files['folder/'].dir, "the folder with options is marked as a folder"); - assert.equal(reloaded.files['folder/'].date.getTime(), referenceDate.getTime(), "the folder with options has the correct date"); - assert.equal(reloaded.files['folder/'].comment, referenceComment, "the folder with options has the correct comment"); - assert.equal(reloaded.files['folder/'].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function (reloaded) { + assert.ok(reloaded.files["folder/"].dir, "the folder with options is marked as a folder"); + + assert.ok(reloaded.files["folder/"].dir, "the folder with options is marked as a folder"); + assert.equal(reloaded.files["folder/"].date.getTime(), referenceDate.getTime(), "the folder with options has the correct date"); + assert.equal(reloaded.files["folder/"].comment, referenceComment, "the folder with options has the correct comment"); + assert.equal(reloaded.files["folder/"].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); @@ -626,8 +623,8 @@ QUnit.module("file", function () { zip.file("folder_with_slash/", null, { dir : true }); - assert.ok(zip.files['folder_without_slash/'], "added a slash if not provided"); - assert.ok(zip.files['folder_with_slash/'], "keep the existing slash"); + assert.ok(zip.files["folder_without_slash/"], "added a slash if not provided"); + assert.ok(zip.files["folder_with_slash/"], "keep the existing slash"); }); QUnit.test("folder() doesn't overwrite existing entries", function (assert) { @@ -642,8 +639,8 @@ QUnit.module("file", function () { // calling folder() doesn't override it zip.folder("folder"); - assert.equal(zip.files['folder/'].comment, referenceComment, "the folder with options has the correct comment"); - assert.equal(zip.files['folder/'].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); + assert.equal(zip.files["folder/"].comment, referenceComment, "the folder with options has the correct comment"); + assert.equal(zip.files["folder/"].unixPermissions.toString(8), "40500", "the folder with options has the correct UNIX permissions"); }); QUnit.test("createFolders works on a file", function (assert) { @@ -676,17 +673,17 @@ QUnit.module("file", function () { QUnit.test("A folder stays a folder", function (assert) { var zip = new JSZip(); zip.folder("folder/"); - assert.ok(zip.files['folder/'].dir, "the folder is marked as a folder"); + assert.ok(zip.files["folder/"].dir, "the folder is marked as a folder"); var done = assert.async(); zip.generateAsync({type:"binarystring"}) - .then(JSZip.loadAsync) - .then(function (reloaded) { - assert.ok(reloaded.files['folder/'].dir, "the folder is marked as a folder"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function (reloaded) { + assert.ok(reloaded.files["folder/"].dir, "the folder is marked as a folder"); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("Folders are created by default", function (assert) { @@ -716,7 +713,7 @@ QUnit.module("file", function () { zip.file("Readme.French").async("string").then(function (content) { assert.equal(content, "Bonjour tout le monde!\n", "Exact match found"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); assert.equal(zip.file("Readme.Deutsch"), null, "Match exactly nothing"); assert.equal(zip.file(/Readme\../).length, 2, "Match regex free text"); assert.equal(zip.file(/pirate/i).length, 1, "Match regex 1 result"); @@ -732,15 +729,15 @@ QUnit.module("file", function () { zip.file("files/translation/Readme.French").async("string").then(function (content) { assert.equal(content, "Bonjour tout le monde!\n", "finding file with the full path"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); zip.folder("files").file("translation/Readme.French").async("string").then(function (content) { assert.equal(content, "Bonjour tout le monde!\n", "finding file with a relative path"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); zip.folder("files/translation").file("Readme.French").async("string").then(function (content) { assert.equal(content, "Bonjour tout le monde!\n", "finding file with a relative path"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("Finding files (regex) with a relative folder", function (assert) { @@ -798,12 +795,12 @@ QUnit.module("file", function () { zipObjectsAssertions(assert, zip.files["Hello.txt"]); var done = assert.async(); zip.generateAsync({type:"binarystring"}) - .then(JSZip.loadAsync) - .then(function(reloaded) { - zipObjectsAssertions(assert, reloaded.file("Hello.txt")); - zipObjectsAssertions(assert, reloaded.files["Hello.txt"]); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function(reloaded) { + zipObjectsAssertions(assert, reloaded.file("Hello.txt")); + zipObjectsAssertions(assert, reloaded.files["Hello.txt"]); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("generate uses updated ZipObject date attribute", function (assert) { var date = new Date("July 17, 2009 14:36:57"); @@ -812,14 +809,12 @@ QUnit.module("file", function () { zip.files["Hello.txt"].date = date; var done = assert.async(); zip.generateAsync({type:"binarystring"}) - .then(JSZip.loadAsync) - .then(function(reloaded) { - zipObjectsAssertions(assert, reloaded.file("Hello.txt")); - zipObjectsAssertions(assert, reloaded.files["Hello.txt"]); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function(reloaded) { + zipObjectsAssertions(assert, reloaded.file("Hello.txt")); + zipObjectsAssertions(assert, reloaded.files["Hello.txt"]); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); }); - - diff --git a/test/asserts/filter.js b/test/asserts/filter.js index 935c8ed3..d1be9692 100644 --- a/test/asserts/filter.js +++ b/test/asserts/filter.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("filter"); @@ -8,7 +7,7 @@ QUnit.test("Filtering a zip", function(assert) { zip.file("1.txt", "1\n"); zip.file("2.txt", "2\n"); zip.file("3.log", "3\n"); - var result = zip.filter(function(relativeFilename, file) { + var result = zip.filter(function(relativeFilename) { return relativeFilename.indexOf(".txt") !== -1; }); assert.equal(result.length, 2, "filter has filtered"); @@ -26,7 +25,7 @@ QUnit.test("Filtering a zip from a relative path", function(assert) { zip.file("3.log", "3\n"); var count = 0; - var result = zip.folder("foo").filter(function(relativeFilename, file) { + var result = zip.folder("foo").filter(function(relativeFilename) { count++; return relativeFilename.indexOf("3") !== -1; }); diff --git a/test/asserts/foreach.js b/test/asserts/foreach.js index d058719a..5392ab40 100644 --- a/test/asserts/foreach.js +++ b/test/asserts/foreach.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("forEach"); diff --git a/test/asserts/generate.js b/test/asserts/generate.js index 4830be82..7b794fc2 100644 --- a/test/asserts/generate.js +++ b/test/asserts/generate.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("generate"); @@ -13,31 +12,31 @@ function testGenerateFor(testCases, fn) { function testGenerate(assert, options) { var done = assert.async(); var triggeredCallback = false; - new JSZip.external.Promise(function(resolve, reject) { + new JSZip.external.Promise(function(resolve) { resolve(options.prepare()); }) - .then(function (zip) { - JSZipTestUtils.checkBasicStreamBehavior(assert, zip.generateInternalStream(options.options)); - return zip; - }) - .then(function(zip) { - var promise = zip.generateAsync(options.options); - zip.file("Hello.txt", "updating the zip file after the call won't change the result"); - return promise; - }) - .then(function(result) { - triggeredCallback = true; - options.assertions(null, result); - - if (!options.skipReloadTest) { - JSZipTestUtils.checkGenerateStability(assert, result, options.options); - } - done(); - }, function (err) { - triggeredCallback = true; - options.assertions(err, null); - done(); - }); + .then(function (zip) { + JSZipTestUtils.checkBasicStreamBehavior(assert, zip.generateInternalStream(options.options)); + return zip; + }) + .then(function(zip) { + var promise = zip.generateAsync(options.options); + zip.file("Hello.txt", "updating the zip file after the call won't change the result"); + return promise; + }) + .then(function(result) { + triggeredCallback = true; + options.assertions(null, result); + + if (!options.skipReloadTest) { + JSZipTestUtils.checkGenerateStability(assert, result, options.options); + } + done(); + }, function (err) { + triggeredCallback = true; + options.assertions(err, null); + done(); + }); assert.ok(!triggeredCallback, "the async callback is async"); } @@ -62,7 +61,7 @@ testGenerateFor([{ } }); }); - JSZipTestUtils.testZipFile("generate : type:base64. " + testName, file, function(assert, expected) { + JSZipTestUtils.testZipFile("generate : type:base64. " + testName, file, function(assert) { testGenerate(assert, { prepare : function () { // fix date to get a predictable output @@ -238,11 +237,11 @@ JSZipTestUtils.testZipFile("STORE is the default method", "ref/text.zip", functi var zip = new JSZip(); zip.file("Hello.txt", "Hello World\n"); var done = assert.async(); - zip.generateAsync({type:"binarystring", compression:'STORE'}).then(function(content) { + zip.generateAsync({type:"binarystring", compression:"STORE"}).then(function(content) { // no difference with the "Zip text file" test. assert.ok(JSZipTestUtils.similar(content, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); @@ -257,11 +256,11 @@ function testLazyDecompression(assert, from, to) { }, skipReloadTest : true, options : {type:"binarystring", compression:to}, - assertions : function (err, result) { + assertions : function (err) { assert.equal(err, null, from + " -> " + to + " : no error"); } }); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); } QUnit.test("Lazy decompression works", function(assert) { testLazyDecompression(assert, "STORE", "STORE"); @@ -289,7 +288,7 @@ JSZipTestUtils.testZipFile("empty zip", "ref/empty.zip", function(assert, expect QUnit.test("unknown compression throws an exception", function (assert) { testGenerate(assert, { prepare : JSZipTestUtils.createZipAll, - options : {type:"string",compression:'MAYBE'}, + options : {type:"string",compression:"MAYBE"}, assertions : function (err, result) { assert.equal(result, null, "no data"); assert.ok(err.message.match("not a valid compression"), "the error message is useful"); @@ -316,16 +315,16 @@ QUnit.test("generateAsync uses the current folder level", function (assert) { zip.folder("root1"); zip.folder("root2").file("leaf1", "a"); zip.folder("root2") - .generateAsync({type:"string"}) - .then(JSZip.loadAsync) - .then(function(zip) { - assert.ok(!zip.file("file1"), "root files are not present"); - assert.ok(!zip.file("root1"), "root folders are not present"); - assert.ok(!zip.file("root2"), "root folders are not present"); - assert.ok(zip.file("leaf1"), "leaves are present"); - - done(); - })['catch'](JSZipTestUtils.assertNoError); + .generateAsync({type:"string"}) + .then(JSZip.loadAsync) + .then(function(zip) { + assert.ok(!zip.file("file1"), "root files are not present"); + assert.ok(!zip.file("root1"), "root folders are not present"); + assert.ok(!zip.file("root2"), "root folders are not present"); + assert.ok(zip.file("leaf1"), "leaves are present"); + + done(); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("generateAsync keep the explicit / folder", function (assert) { @@ -335,32 +334,32 @@ QUnit.test("generateAsync keep the explicit / folder", function (assert) { zip.file("/file1", "a"); zip.file("/root1/file2", "b"); zip.generateAsync({type:"string"}) - .then(JSZip.loadAsync) - .then(function(zip) { - assert.ok(zip.file("/file1"), "root files are present"); - assert.ok(zip.file("/root1/file2"), "root folders are present"); + .then(JSZip.loadAsync) + .then(function(zip) { + assert.ok(zip.file("/file1"), "root files are present"); + assert.ok(zip.file("/root1/file2"), "root folders are present"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("generate with promises as files", "ref/all.zip", function (assert, expected) { var done = assert.async(); var zip = new JSZip(); - zip.file("Hello.txt", new JSZip.external.Promise(function (resolve, reject) { + zip.file("Hello.txt", new JSZip.external.Promise(function (resolve) { setTimeout(function () { resolve("Hello World\n"); }, 50); })); - zip.folder("images").file("smile.gif", new JSZip.external.Promise(function (resolve, reject) { + zip.folder("images").file("smile.gif", new JSZip.external.Promise(function (resolve) { setTimeout(function () { resolve("R0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADs="); }, 100); }), {base64: true}); zip.generateAsync({type:"string"}) - .then(function (result) { - assert.ok(JSZipTestUtils.similar(result, expected, 3 * JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "generated ZIP matches reference ZIP"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (result) { + assert.ok(JSZipTestUtils.similar(result, expected, 3 * JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "generated ZIP matches reference ZIP"); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); diff --git a/test/asserts/load.js b/test/asserts/load.js index 669b9fdf..395ec720 100644 --- a/test/asserts/load.js +++ b/test/asserts/load.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("load", function () { @@ -8,26 +7,26 @@ QUnit.module("load", function () { var done = assert.async(); assert.ok(typeof file === "string"); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }) - .then(function(result) { - assert.equal(result, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }) + .then(function(result) { + assert.equal(result, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Load files which shadow Object prototype methods", "ref/pollution.zip", function(assert, file) { var done = assert.async(); assert.ok(typeof file === "string"); JSZip.loadAsync(file) - .then(function (zip) { - assert.notEqual(Object.getPrototypeOf(zip.files), zip.files.__proto__); // jshint ignore:line - return zip.file("__proto__").async("string"); }) - .then(function(result) { - assert.equal(result, "hello\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + assert.notEqual(Object.getPrototypeOf(zip.files), zip.files.__proto__); + return zip.file("__proto__").async("string"); }) + .then(function(result) { + assert.equal(result, "hello\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("load(string) handles bytes > 255", "ref/all.zip", function(assert, file) { @@ -40,13 +39,13 @@ QUnit.module("load", function () { } JSZip.loadAsync(updatedFile) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); @@ -57,13 +56,13 @@ QUnit.module("load", function () { updatedFile[i] = file.charCodeAt(i); } JSZip.loadAsync(updatedFile) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("load(array) handles bytes > 255", "ref/deflate.zip", function(assert, file) { @@ -73,13 +72,13 @@ QUnit.module("load", function () { updatedFile[i] = file.charCodeAt(i) + 0x4200; } JSZip.loadAsync(updatedFile) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); if (JSZip.support.arraybuffer) { @@ -96,28 +95,28 @@ QUnit.module("load", function () { // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array. // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file). JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("arraybuffer"); - }).then(function (content){ - assert.equal(content.byteLength, 12, "don't get the original buffer"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("arraybuffer"); + }).then(function (content){ + assert.equal(content.byteLength, 12, "don't get the original buffer"); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("uint8array"); - }).then(function (content){ - assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer"); - done(); - }); + .then(function (zip) { + return zip.file("Hello.txt").async("uint8array"); + }).then(function (content){ + assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer"); + done(); + }); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - }); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + }); }); } @@ -130,12 +129,12 @@ QUnit.module("load", function () { } JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - }); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + }); }); } @@ -152,28 +151,28 @@ QUnit.module("load", function () { // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array. // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file). JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("arraybuffer"); - }).then(function (content){ - assert.equal(content.byteLength, 12, "don't get the original buffer"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("arraybuffer"); + }).then(function (content){ + assert.equal(content.byteLength, 12, "don't get the original buffer"); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("uint8array"); - }).then(function (content){ - assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("uint8array"); + }).then(function (content){ + assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer"); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); } @@ -181,26 +180,26 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("zip with DEFLATE", "ref/deflate.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // zip -0 -X -z -c archive_comment.zip Hello.txt JSZipTestUtils.testZipFile("read zip with comment", "ref/archive_comment.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - assert.equal(zip.comment, "file comment", "the archive comment was correctly read."); - assert.equal(zip.file("Hello.txt").comment, "entry comment", "the entry comment was correctly read."); - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + assert.equal(zip.comment, "file comment", "the archive comment was correctly read."); + assert.equal(zip.file("Hello.txt").comment, "entry comment", "the entry comment was correctly read."); + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("generate zip with comment", "ref/archive_comment.zip", function(assert, file) { var zip = new JSZip(); @@ -210,19 +209,19 @@ QUnit.module("load", function () { assert.ok(JSZipTestUtils.similar(generated, file, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, generated); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); // zip -0 extra_attributes.zip Hello.txt JSZipTestUtils.testZipFile("zip with extra attributes", "ref/extra_attributes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // use -fz to force use of Zip64 format @@ -230,12 +229,12 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("zip 64", "ref/zip64.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // use -fd to force data descriptors as if streaming @@ -243,12 +242,12 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("zip with data descriptor", "ref/data_descriptor.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // combo of zip64 and data descriptors : @@ -260,56 +259,56 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("nested zip", "ref/nested.zip", function(assert, file) { var done = assert.async(2); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("zip_within_zip.zip").async("binarystring"); - }) - .then(JSZip.loadAsync) - .then(function (innerZip) { - return innerZip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the inner zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("zip_within_zip.zip").async("binarystring"); + }) + .then(JSZip.loadAsync) + .then(function (innerZip) { + return innerZip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the inner zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // zip -fd -0 nested_data_descriptor.zip data_descriptor.zip JSZipTestUtils.testZipFile("nested zip with data descriptors", "ref/nested_data_descriptor.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("data_descriptor.zip").async("binarystring"); - }) - .then(JSZip.loadAsync) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the inner zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("data_descriptor.zip").async("binarystring"); + }) + .then(JSZip.loadAsync) + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the inner zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // zip -fz -0 nested_zip64.zip zip64.zip JSZipTestUtils.testZipFile("nested zip 64", "ref/nested_zip64.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("zip64.zip").async("binarystring"); - }) - .then(JSZip.loadAsync) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the inner zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("zip64.zip").async("binarystring"); + }) + .then(JSZip.loadAsync) + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the inner zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // nested zip 64 with data descriptors @@ -321,23 +320,23 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(assert, file) { var done = assert.async(2); JSZip.loadAsync(file) - .then(function (zip){ - assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here."); - return zip.file("€15.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async)."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here."); + return zip.file("€15.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async)."); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip){ - return zip.files["€15.txt"].async("string"); - }) - .then(function (content) { - assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async)."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + return zip.files["€15.txt"].async("string"); + }) + .then(function (content) { + assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async)."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // Created with winrar @@ -345,109 +344,109 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename and windows compatibility", "ref/winrar_utf8_in_name.zip", function(assert, file) { var done = assert.async(2); JSZip.loadAsync(file) - .then(function (zip){ - assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here."); - return zip.file("€15.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async)."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here."); + return zip.file("€15.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async)."); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function (zip){ - return zip.files["€15.txt"].async("string"); - }) - .then(function (content) { - assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async)."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + return zip.files["€15.txt"].async("string"); + }) + .then(function (content) { + assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async)."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // zip backslash.zip -0 -X Hel\\lo.txt JSZipTestUtils.testZipFile("Zip text file with backslash in filename", "ref/backslash.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip){ - return zip.file("Hel\\lo.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "Hello World\n", "the utf8 content was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + return zip.file("Hel\\lo.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "Hello World\n", "the utf8 content was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // use izarc to generate a zip file on windows JSZipTestUtils.testZipFile("Zip text file from windows with \\ in central dir", "ref/slashes_and_izarc.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip){ - return zip.folder("test").file("Hello.txt").async("string"); - }) - .then(function (content) { - assert.equal(content, "Hello world\r\n", "the content was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip){ + return zip.folder("test").file("Hello.txt").async("string"); + }) + .then(function (content) { + assert.equal(content, "Hello world\r\n", "the content was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // cat Hello.txt all.zip > all_prepended_bytes.zip JSZipTestUtils.testZipFile("zip file with prepended bytes", "ref/all_prepended_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success(zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function success(zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // cat all.zip Hello.txt > all_appended_bytes.zip JSZipTestUtils.testZipFile("zip file with appended bytes", "ref/all_appended_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success(zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function success(zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // cat Hello.txt zip64.zip > zip64_prepended_bytes.zip JSZipTestUtils.testZipFile("zip64 file with extra bytes", "ref/zip64_prepended_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success(zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function success(zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // cat zip64.zip Hello.txt > zip64_appended_bytes.zip JSZipTestUtils.testZipFile("zip64 file with extra bytes", "ref/zip64_appended_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success(zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content) { - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function success(zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content) { + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("load(promise) works", "ref/all.zip", function(assert, fileAsString) { var done = assert.async(); JSZip.loadAsync(JSZip.external.Promise.resolve(fileAsString)) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); if (JSZip.support.blob) { @@ -469,40 +468,40 @@ QUnit.module("load", function () { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }).then(function (content){ - assert.equal(content, "Hello World\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }).then(function (content){ + assert.equal(content, "Hello World\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); } JSZipTestUtils.testZipFile("valid crc32", "ref/all.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {checkCRC32:true}) - .then(function success() { - assert.ok(true, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(false, "An exception were thrown: " + e.message); - done(); - }); + .then(function success() { + assert.ok(true, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(false, "An exception were thrown: " + e.message); + done(); + }); }); JSZipTestUtils.testZipFile("loading in a sub folder", "ref/all.zip", function(assert, file) { var done = assert.async(); var zip = new JSZip(); zip.folder("sub").loadAsync(file) - .then(function success(zip) { - assert.ok(zip.file("Hello.txt"), "the zip was correctly read."); - assert.equal(zip.file("Hello.txt").name, "sub/Hello.txt", "the zip was read in a sub folder"); - assert.equal(zip.root, "sub/", "the promise contains the correct folder level"); - done(); - }, function failure(e) { - assert.ok(false, "An exception were thrown: " + e.message); - done(); - }); + .then(function success(zip) { + assert.ok(zip.file("Hello.txt"), "the zip was correctly read."); + assert.equal(zip.file("Hello.txt").name, "sub/Hello.txt", "the zip was read in a sub folder"); + assert.equal(zip.root, "sub/", "the promise contains the correct folder level"); + done(); + }, function failure(e) { + assert.ok(false, "An exception were thrown: " + e.message); + done(); + }); }); JSZipTestUtils.testZipFile("loading overwrite files", "ref/all.zip", function(assert, file) { @@ -511,21 +510,21 @@ QUnit.module("load", function () { zip.file("Hello.txt", "bonjour à tous"); zip.file("Bye.txt", "au revoir"); zip.loadAsync(file) - .then(function success(zip) { - return JSZip.external.Promise.all([ - zip.file("Hello.txt").async("text"), - zip.file("Bye.txt").async("text") - ]); - }).then(function (result) { - var hello = result[0]; - var bye = result[1]; - assert.equal(hello, "Hello World\n", "conflicting content was overwritten."); - assert.equal(bye, "au revoir", "other content was kept."); - done(); - }, function failure(e) { - assert.ok(false, "An exception were thrown: " + e.message); - done(); - }); + .then(function success(zip) { + return JSZip.external.Promise.all([ + zip.file("Hello.txt").async("text"), + zip.file("Bye.txt").async("text") + ]); + }).then(function (result) { + var hello = result[0]; + var bye = result[1]; + assert.equal(hello, "Hello World\n", "conflicting content was overwritten."); + assert.equal(bye, "au revoir", "other content was kept."); + done(); + }, function failure(e) { + assert.ok(false, "An exception were thrown: " + e.message); + done(); + }); }); QUnit.module("not supported features"); @@ -534,13 +533,13 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("basic encryption", "ref/encrypted.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success() { - assert.ok(false, "Encryption is not supported, but no exception were thrown"); - done(); - }, function failure(e) { - assert.equal(e.message, "Encrypted zip are not supported", "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "Encryption is not supported, but no exception were thrown"); + done(); + }, function failure(e) { + assert.equal(e.message, "Encrypted zip are not supported", "the error message is useful"); + done(); + }); }); QUnit.module("corrupted zip"); @@ -548,148 +547,148 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("bad compression method", "ref/invalid/compression.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); // dd if=all.zip of=all_missing_bytes.zip bs=32 skip=1 JSZipTestUtils.testZipFile("zip file with missing bytes", "ref/all_missing_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); // dd if=zip64.zip of=zip64_missing_bytes.zip bs=32 skip=1 JSZipTestUtils.testZipFile("zip64 file with missing bytes", "ref/zip64_missing_bytes.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); JSZipTestUtils.testZipFile("zip file with extra field is Non-standard", "ref/extra_filed_non_standard.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function success() { - assert.ok(true, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(false, "An exception were thrown: " + e.message); - done(); - }); + .then(function success() { + assert.ok(true, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(false, "An exception were thrown: " + e.message); + done(); + }); }); QUnit.test("not a zip file", function(assert) { var done = assert.async(); JSZip.loadAsync("this is not a zip file") - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("stuk.github.io/jszip/documentation"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("stuk.github.io/jszip/documentation"), "the error message is useful"); + done(); + }); }); QUnit.test("truncated zip file", function(assert) { var done = assert.async(); JSZip.loadAsync("PK\x03\x04\x0A\x00\x00\x00") - .then(function success() { - done(); - assert.ok(false, "no exception were thrown"); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + done(); + assert.ok(false, "no exception were thrown"); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); JSZipTestUtils.testZipFile("invalid crc32 but no check", "ref/invalid/crc32.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {checkCRC32:false}) - .then(function success() { - assert.ok(true, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(false, "An exception were thrown but the check should have been disabled."); - done(); - }); + .then(function success() { + assert.ok(true, "no exception were thrown"); + done(); + }, function failure() { + assert.ok(false, "An exception were thrown but the check should have been disabled."); + done(); + }); }); JSZipTestUtils.testZipFile("invalid crc32", "ref/invalid/crc32.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {checkCRC32:true}) - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); JSZipTestUtils.testZipFile("bad offset", "ref/invalid/bad_offset.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {checkCRC32:false}) - .then(function success() { - assert.ok(false, "no exception were thrown"); - done(); - }, function failure(e) { - assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); - done(); - }); + .then(function success() { + assert.ok(false, "no exception were thrown"); + done(); + }, function failure(e) { + assert.ok(e.message.match("Corrupted zip"), "the error message is useful"); + done(); + }); }); JSZipTestUtils.testZipFile("bad decompressed size, read a file", "ref/invalid/bad_decompressed_size.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { - return zip.file("Hello.txt").async("string"); - }) - .then(function success() { - assert.ok(false, "successful result in an error test"); - done(); - }, function failure(e) { - assert.ok(e.message.match("size mismatch"), "async call : the error message is useful"); - done(); - }); + .then(function (zip) { + return zip.file("Hello.txt").async("string"); + }) + .then(function success() { + assert.ok(false, "successful result in an error test"); + done(); + }, function failure(e) { + assert.ok(e.message.match("size mismatch"), "async call : the error message is useful"); + done(); + }); }); JSZipTestUtils.testZipFile("bad decompressed size, generate a zip", "ref/invalid/bad_decompressed_size.zip", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file) - .then(function (zip) { + .then(function (zip) { - // add other files to be sure to trigger the right code path - zip.file("zz", "zz"); + // add other files to be sure to trigger the right code path + zip.file("zz", "zz"); - return zip.generateAsync({ - type:"string", - compression:"DEFLATE" // a different compression to force a read + return zip.generateAsync({ + type:"string", + compression:"DEFLATE" // a different compression to force a read + }); + }) + .then(function success() { + assert.ok(false, "successful result in an error test"); + done(); + }, function failure(e) { + assert.ok(e.message.match("size mismatch"), "async call : the error message is useful"); + done(); }); - }) - .then(function success() { - assert.ok(false, "successful result in an error test"); - done(); - }, function failure(e) { - assert.ok(e.message.match("size mismatch"), "async call : the error message is useful"); - done(); - }); }); QUnit.module("complex files"); @@ -700,24 +699,24 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("Franz Kafka - The Metamorphosis.epub", "ref/complex_files/Franz Kafka - The Metamorphosis.epub", function(assert, file) { var done = assert.async(2); JSZip.loadAsync(file) - .then(function(zip) { - assert.equal(zip.filter(function(){return true;}).length, 26, "the zip contains the good number of elements."); - return zip.file("mimetype").async("string"); - }) - .then(function (content) { - assert.equal(content, "application/epub+zip\r\n", "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function(zip) { + assert.equal(zip.filter(function(){return true;}).length, 26, "the zip contains the good number of elements."); + return zip.file("mimetype").async("string"); + }) + .then(function (content) { + assert.equal(content, "application/epub+zip\r\n", "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(file) - .then(function(zip) { - return zip.file("OPS/main0.xml").async("string"); - }) - .then(function (content) { + .then(function(zip) { + return zip.file("OPS/main0.xml").async("string"); + }) + .then(function (content) { // the .ncx file tells us that the first chapter is in the main0.xml file. - assert.ok(content.indexOf("One morning, as Gregor Samsa was waking up from anxious dreams") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.ok(content.indexOf("One morning, as Gregor Samsa was waking up from anxious dreams") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // a showcase in http://msdn.microsoft.com/en-us/windows/hardware/gg463429 @@ -725,30 +724,30 @@ QUnit.module("load", function () { var done = assert.async(); JSZip.loadAsync(file, {createFolders: false}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 15 entries. - assert.equal(zip.filter(function(){return true;}).length, 15, "the zip contains the good number of elements."); - return zip.file("[Content_Types].xml").async("string"); - }) - .then(function (content) { - assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function(){return true;}).length, 15, "the zip contains the good number of elements."); + return zip.file("[Content_Types].xml").async("string"); + }) + .then(function (content) { + assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // Same test as above, but with createFolders option set to true JSZipTestUtils.testZipFile("Outlook2007_Calendar.xps, createFolders: true", "ref/complex_files/Outlook2007_Calendar.xps", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {createFolders: true}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 15 entries, but we get 23 when creating all the sub-folders. - assert.equal(zip.filter(function(){return true;}).length, 23, "the zip contains the good number of elements."); - return zip.file("[Content_Types].xml").async("string"); - }) - .then(function (content) { - assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function(){return true;}).length, 23, "the zip contains the good number of elements."); + return zip.file("[Content_Types].xml").async("string"); + }) + .then(function (content) { + assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // an example file in http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip @@ -756,58 +755,58 @@ QUnit.module("load", function () { JSZipTestUtils.testZipFile("AntarcticaTemps.xlsx, createFolders: false", "ref/complex_files/AntarcticaTemps.xlsx", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {createFolders: false}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 17 entries. - assert.equal(zip.filter(function(){return true;}).length, 17, "the zip contains the good number of elements."); - return zip.file("[Content_Types].xml").async("string"); - }).then(function (content) { - assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function(){return true;}).length, 17, "the zip contains the good number of elements."); + return zip.file("[Content_Types].xml").async("string"); + }).then(function (content) { + assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // Same test as above, but with createFolders option set to true JSZipTestUtils.testZipFile("AntarcticaTemps.xlsx, createFolders: true", "ref/complex_files/AntarcticaTemps.xlsx", function(assert, file) { var done = assert.async(); JSZip.loadAsync(file, {createFolders: true}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 16 entries, but we get 27 when creating all the sub-folders. - assert.equal(zip.filter(function(){return true;}).length, 27, "the zip contains the good number of elements."); - return zip.file("[Content_Types].xml").async("string"); - }).then(function (content) { - assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function(){return true;}).length, 27, "the zip contains the good number of elements."); + return zip.file("[Content_Types].xml").async("string"); + }).then(function (content) { + assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // same as two up, but in the Open Document format JSZipTestUtils.testZipFile("AntarcticaTemps.ods, createFolders: false", "ref/complex_files/AntarcticaTemps.ods", function (assert, file) { var done = assert.async(); JSZip.loadAsync(file, {createFolders: false}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 20 entries. - assert.equal(zip.filter(function () {return true;}).length, 20, "the zip contains the good number of elements."); - return zip.file("META-INF/manifest.xml").async("string"); - }) - .then(function (content) { - assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function () {return true;}).length, 20, "the zip contains the good number of elements."); + return zip.file("META-INF/manifest.xml").async("string"); + }) + .then(function (content) { + assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // same as above, but in the Open Document format JSZipTestUtils.testZipFile("AntarcticaTemps.ods, createFolders: true", "ref/complex_files/AntarcticaTemps.ods", function (assert, file) { var done = assert.async(); JSZip.loadAsync(file, {createFolders: true}) - .then(function(zip) { + .then(function(zip) { // the zip file contains 19 entries, but we get 27 when creating all the sub-folders. - assert.equal(zip.filter(function () {return true;}).length, 27, "the zip contains the good number of elements."); - return zip.file("META-INF/manifest.xml").async("string"); - }) - .then(function (content) { - assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read."); - done(); - })['catch'](JSZipTestUtils.assertNoError); + assert.equal(zip.filter(function () {return true;}).length, 27, "the zip contains the good number of elements."); + return zip.file("META-INF/manifest.xml").async("string"); + }) + .then(function (content) { + assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read."); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); } }); diff --git a/test/asserts/permissions.js b/test/asserts/permissions.js index d959e614..9afa1cea 100644 --- a/test/asserts/permissions.js +++ b/test/asserts/permissions.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("permissions", function () { @@ -23,16 +22,16 @@ QUnit.module("permissions", function () { var done = assert.async(); JSZip.loadAsync(file, {createFolders:false}) - .then(function(zip) { - doAsserts(zip, "dir_777/", true, "40777"); - doAsserts(zip, "dir_755/", true, "40755"); - doAsserts(zip, "dir_500/", true, "40500"); - doAsserts(zip, "file_666", false, "100666"); - doAsserts(zip, "file_640", false, "100640"); - doAsserts(zip, "file_400", false, "100400"); - doAsserts(zip, "file_755", false, "100755"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function(zip) { + doAsserts(zip, "dir_777/", true, "40777"); + doAsserts(zip, "dir_755/", true, "40755"); + doAsserts(zip, "dir_500/", true, "40500"); + doAsserts(zip, "file_666", false, "100666"); + doAsserts(zip, "file_640", false, "100640"); + doAsserts(zip, "file_400", false, "100400"); + doAsserts(zip, "file_755", false, "100755"); + done(); + })["catch"](JSZipTestUtils.assertNoError); } function assertDosPermissions(assert, file){ @@ -45,42 +44,42 @@ QUnit.module("permissions", function () { var done = assert.async(); JSZip.loadAsync(file, {createFolders:false}) - .then(function(zip) { - if (zip.files["dir/"]) { - doAsserts(zip, "dir/", true, "010000"); - } - if (zip.files["dir_hidden/"]) { - doAsserts(zip, "dir_hidden/", true, "010010"); - } - doAsserts(zip, "file", false, "100000"); - doAsserts(zip, "file_ro", false, "100001"); - doAsserts(zip, "file_hidden", false, "100010"); - doAsserts(zip, "file_ro_hidden", false, "100011"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function(zip) { + if (zip.files["dir/"]) { + doAsserts(zip, "dir/", true, "010000"); + } + if (zip.files["dir_hidden/"]) { + doAsserts(zip, "dir_hidden/", true, "010010"); + } + doAsserts(zip, "file", false, "100000"); + doAsserts(zip, "file_ro", false, "100001"); + doAsserts(zip, "file_hidden", false, "100010"); + doAsserts(zip, "file_ro_hidden", false, "100011"); + done(); + })["catch"](JSZipTestUtils.assertNoError); } function reloadAndAssertUnixPermissions(assert, file){ var done = assert.async(); JSZip.loadAsync(file, {createFolders:false}) - .then(function (zip) { - return zip.generateAsync({type:"string", platform:"UNIX"}); - }) - .then(function (content) { - assertUnixPermissions(assert, content); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.generateAsync({type:"string", platform:"UNIX"}); + }) + .then(function (content) { + assertUnixPermissions(assert, content); + done(); + })["catch"](JSZipTestUtils.assertNoError); } function reloadAndAssertDosPermissions(assert, file){ var done = assert.async(); JSZip.loadAsync(file, {createFolders:false}) - .then(function (zip) { - return zip.generateAsync({type:"string", platform:"DOS"}); - }) - .then(function (content) { - assertDosPermissions(assert, content); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + return zip.generateAsync({type:"string", platform:"DOS"}); + }) + .then(function (content) { + assertDosPermissions(assert, content); + done(); + })["catch"](JSZipTestUtils.assertNoError); } JSZipTestUtils.testZipFile("permissions on linux : file created by zip", "ref/permissions/linux_zip.zip", assertUnixPermissions); JSZipTestUtils.testZipFile("permissions on linux : file created by zip, reloaded", "ref/permissions/linux_zip.zip", reloadAndAssertUnixPermissions); diff --git a/test/asserts/stream.js b/test/asserts/stream.js index 2e9a8d7e..1880ae83 100644 --- a/test/asserts/stream.js +++ b/test/asserts/stream.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("stream", function () { @@ -19,54 +18,64 @@ QUnit.module("stream", function () { var helper = zip.generateInternalStream({streamFiles:true, type:"binarystring"}); helper - .on("data", function () { - chunkCount++; - assert.equal(allowChunks, true, "be sure to get chunks only when allowed"); + .on("data", function () { + chunkCount++; + assert.equal(allowChunks, true, "be sure to get chunks only when allowed"); - /* + /* * We stop at ~ half of chunks. * A setTimeout aside this stream is not reliable and can be * triggered *after* the completion of the stream. */ - if (chunkCount === 20) { - - allowChunks = false; - helper.pause(); - setTimeout(function () { - allowChunks = true; - helper.resume(); - }, 50); - } - }) - .on("error", function (e) { - done(); - assert.ok(false, e.message); - }) - .on("end", function () { - done(); - }); + if (chunkCount === 20) { + + allowChunks = false; + helper.pause(); + setTimeout(function () { + allowChunks = true; + helper.resume(); + }, 50); + } + }) + .on("error", function (e) { + done(); + assert.ok(false, e.message); + }) + .on("end", function () { + done(); + }); helper.resume(); }); QUnit.module("nodejs"); if (JSZip.support.nodestream) { - var fs = require('fs'); + var fs = require("fs"); } - function generateStreamTest(name, ref, createFunction, generateOptions, updateStream) { + function generateStreamTest(name, ref, createFunction, generateOptions) { JSZipTestUtils.testZipFile(name,ref, function(assert, expected) { var done = assert.async(); - var tempFile = require('tmp').tmpNameSync({postfix:".zip"}); + var tempFile = require("tmp").tmpNameSync({postfix:".zip"}); var zip = createFunction(); zip.generateNodeStream(generateOptions) - .pipe(fs.createWriteStream(tempFile)) - .on("close", function () { - fs.readFile(tempFile, function (e, data) { - var actual = JSZipTestUtils.toString(data); - assert.ok(JSZipTestUtils.similar(actual, expected, 3 * JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "generated ZIP matches reference ZIP"); + .pipe(fs.createWriteStream(tempFile)) + .on("close", function () { + fs.readFile(tempFile, function (e, data) { + var actual = JSZipTestUtils.toString(data); + assert.ok(JSZipTestUtils.similar(actual, expected, 3 * JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "generated ZIP matches reference ZIP"); + fs.unlink(tempFile, function (err) { + if (err) { + assert.ok(false, err); + } + done(); + }); + }); + }) + .on("error", function (e) { + assert.ok(false, e.message); fs.unlink(tempFile, function (err) { if (err) { assert.ok(false, err); @@ -74,27 +83,27 @@ QUnit.module("stream", function () { done(); }); }); - }) - .on("error", function (e) { - assert.ok(false, e.message); - fs.unlink(tempFile, function (err) { - if (err) { - assert.ok(false, err); - } - done(); - }); - }); }); } function zipObjectStreamTest(name, createFunction) { QUnit.test(name, function(assert) { - var tempFile = require('tmp').tmpNameSync({postfix:".txt"}); + var tempFile = require("tmp").tmpNameSync({postfix:".txt"}); var done = assert.async(); createFunction().pipe(fs.createWriteStream(tempFile)) - .on("close", function () { - fs.readFile(tempFile, function (e, data) { - var actual = JSZipTestUtils.toString(data); - assert.equal(actual, "Hello World\n", "the generated content is ok"); + .on("close", function () { + fs.readFile(tempFile, function (e, data) { + var actual = JSZipTestUtils.toString(data); + assert.equal(actual, "Hello World\n", "the generated content is ok"); + fs.unlink(tempFile, function (err) { + if (err) { + assert.ok(false, err); + } + done(); + }); + }); + }) + .on("error", function (e) { + assert.ok(false, e.message); fs.unlink(tempFile, function (err) { if (err) { assert.ok(false, err); @@ -102,16 +111,6 @@ QUnit.module("stream", function () { done(); }); }); - }) - .on("error", function (e) { - assert.ok(false, e.message); - fs.unlink(tempFile, function (err) { - if (err) { - assert.ok(false, err); - } - done(); - }); - }); }); } @@ -120,7 +119,7 @@ QUnit.module("stream", function () { generateStreamTest( "generateNodeStream(type:nodebuffer / !streamFiles) generates a working stream", "ref/all.zip", JSZipTestUtils.createZipAll, - {type:'nodebuffer',streamFiles:false} + {type:"nodebuffer",streamFiles:false} ); generateStreamTest( "generateNodeStream(type: / !streamFiles) generates a working stream", "ref/all.zip", @@ -134,7 +133,7 @@ QUnit.module("stream", function () { generateStreamTest( "generateNodeStream(type:nodebuffer / streamFiles) generates a working stream", "ref/all-stream.zip", JSZipTestUtils.createZipAll, - {type:'nodebuffer',streamFiles:true} + {type:"nodebuffer",streamFiles:true} ); generateStreamTest( "generateNodeStream(type: / streamFiles) generates a working stream", "ref/all-stream.zip", @@ -153,7 +152,7 @@ QUnit.module("stream", function () { return zip; }, - {type:'nodebuffer',streamFiles:false} + {type:"nodebuffer",streamFiles:false} ); generateStreamTest( "generateNodeStream(type:nodebuffer / streamFiles) generates a working stream from other streams", "ref/all-stream.zip", @@ -166,13 +165,13 @@ QUnit.module("stream", function () { return zip; }, - {type:'nodebuffer',streamFiles:true} + {type:"nodebuffer",streamFiles:true} ); zipObjectStreamTest("ZipObject#nodeStream generates a working stream[nodebuffer]", function() { var zip = JSZipTestUtils.createZipAll(); - return zip.file("Hello.txt").nodeStream('nodebuffer'); + return zip.file("Hello.txt").nodeStream("nodebuffer"); }); zipObjectStreamTest("ZipObject#nodeStream generates a working stream[default]", function() { var zip = JSZipTestUtils.createZipAll(); @@ -187,7 +186,7 @@ QUnit.module("stream", function () { zip.file("Hello.txt").async("text").then(function(actual) { assert.equal(actual, "Hello World\n", "the stream has been read correctly"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("a ZipObject containing a stream can't be read with async 2 times", function(assert) { @@ -201,13 +200,13 @@ QUnit.module("stream", function () { zip.file("Hello.txt").async("text"); // second time, it shouldn't work zip.file("Hello.txt").async("text") - .then(function (data) { - assert.ok(false, "calling 2 times a stream should generate an error"); - done(); - }, function ko(e) { - assert.ok(e.message.match("has already been used"), "the error message is useful"); - done(); - }); + .then(function () { + assert.ok(false, "calling 2 times a stream should generate an error"); + done(); + }, function ko(e) { + assert.ok(e.message.match("has already been used"), "the error message is useful"); + done(); + }); }); QUnit.test("a ZipObject containing a stream can't be read with nodeStream 2 times", function(assert) { @@ -221,15 +220,15 @@ QUnit.module("stream", function () { zip.file("Hello.txt").nodeStream().resume(); // second time, it shouldn't work zip.file("Hello.txt").nodeStream() - .on("error", function (e) { - assert.ok(e.message.match("has already been used"), "the error message is useful"); - done(); - }) - .on ("end", function () { - assert.ok(false, "calling 2 times a stream should generate an error"); - done(); - }) - .resume(); + .on("error", function (e) { + assert.ok(e.message.match("has already been used"), "the error message is useful"); + done(); + }) + .on ("end", function () { + assert.ok(false, "calling 2 times a stream should generate an error"); + done(); + }) + .resume(); }); QUnit.test("generateAsync with a stream can't be read 2 times", function(assert) { @@ -243,13 +242,13 @@ QUnit.module("stream", function () { zip.generateAsync({type:"string"}); // second time, it shouldn't work zip.generateAsync({type:"string"}) - .then(function (data) { - assert.ok(false, "calling 2 times a stream should generate an error"); - done(); - }, function ko(e) { - assert.ok(e.message.match("has already been used"), "the error message is useful"); - done(); - }); + .then(function () { + assert.ok(false, "calling 2 times a stream should generate an error"); + done(); + }, function ko(e) { + assert.ok(e.message.match("has already been used"), "the error message is useful"); + done(); + }); }); QUnit.test("generateNodeStream with a stream can't be read 2 times", function(assert) { @@ -263,15 +262,15 @@ QUnit.module("stream", function () { zip.generateNodeStream().resume(); // second time, it shouldn't work zip.generateNodeStream() - .on("error", function (e) { - assert.ok(e.message.match("has already been used"), "the error message is useful"); - done(); - }) - .on ("end", function () { - assert.ok(false, "calling 2 times a stream should generate an error"); - done(); - }) - .resume(); + .on("error", function (e) { + assert.ok(e.message.match("has already been used"), "the error message is useful"); + done(); + }) + .on ("end", function () { + assert.ok(false, "calling 2 times a stream should generate an error"); + done(); + }) + .resume(); }); QUnit.test("loadAsync ends with an error when called with a stream", function(assert) { @@ -291,7 +290,7 @@ QUnit.module("stream", function () { QUnit.test("generateNodeStream generates an error", function(assert) { try { var zip = new JSZip(); - zip.generateNodeStream({type:'nodebuffer',streamFiles:true}); + zip.generateNodeStream({type:"nodebuffer",streamFiles:true}); assert.ok(false, "generateNodeStream should generate an error"); } catch(err) { assert.ok(err.message.match("not supported by this platform"), "the error message is useful"); @@ -301,7 +300,7 @@ QUnit.module("stream", function () { QUnit.test("ZipObject#nodeStream generates an error", function(assert) { try { var zip = JSZipTestUtils.createZipAll(); - zip.file("Hello.txt").nodeStream('nodebuffer'); + zip.file("Hello.txt").nodeStream("nodebuffer"); assert.ok(false, "nodeStream should generate an error"); } catch(err) { assert.ok(err.message.match("not supported by this platform"), "the error message is useful"); diff --git a/test/asserts/unicode.js b/test/asserts/unicode.js index 4bb7eac1..c4dfd60a 100644 --- a/test/asserts/unicode.js +++ b/test/asserts/unicode.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("unicode"); @@ -12,7 +11,7 @@ JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters", "ref/utf8.zip" assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); QUnit.test("Text file with long unicode string", function(assert) { @@ -24,18 +23,18 @@ QUnit.test("Text file with long unicode string", function(assert) { zip.file("amount.txt", expected); var done = assert.async(); zip.generateAsync({type:"binarystring"}) - .then(JSZip.loadAsync) - .then(function (zip) { - var file = zip.file("amount.txt"); - return file.async("string"); - }).then(function (fileContent){ - assert.equal(fileContent, expected, "Generated ZIP can be parsed"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(JSZip.loadAsync) + .then(function (zip) { + var file = zip.file("amount.txt"); + return file.async("string"); + }).then(function (fileContent){ + assert.equal(fileContent, expected, "Generated ZIP can be parsed"); + done(); + })["catch"](JSZipTestUtils.assertNoError); }); // zip -X -0 utf8_in_name.zip €15.txt -JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(assert, expected) { +JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(assert) { var zip = new JSZip(); zip.file("€15.txt", "€15\n"); var done = assert.async(); @@ -47,7 +46,7 @@ JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename", "r // assert.ok(JSZipTestUtils.similar(actual, expected, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP"); JSZipTestUtils.checkGenerateStability(assert, actual); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Zip text file with non unicode characters in filename: loadAsync without decodeFileName", "ref/local_encoding_in_name.zip", function(assert, content) { @@ -57,7 +56,7 @@ JSZipTestUtils.testZipFile("Zip text file with non unicode characters in filenam assert.ok(!zipUnicode.files["Новая папка/"], "default : the folder is not found"); assert.ok(!zipUnicode.files["Новая папка/Новый текстовый документ.txt"], "default : the file is not found"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); @@ -82,7 +81,7 @@ JSZipTestUtils.testZipFile("Zip text file with non unicode characters in filenam assert.ok(zipCP866.files["Новая папка/"], "with decodeFileName : the folder has been correctly read"); assert.ok(zipCP866.files["Новая папка/Новый текстовый документ.txt"], "with decodeFileName : the file has been correctly read"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); JSZipTestUtils.testZipFile("Zip text file with non unicode characters in filename: generateAsync with encodeassert, fileName", "ref/local_encoding_in_name.zip", function(assert, content) { @@ -122,7 +121,7 @@ JSZipTestUtils.testZipFile("Zip text file with non unicode characters in filenam assert.ok(zipCP866.files["Новая папка/"], "with decodeFileName : the folder has been correctly read"); assert.ok(zipCP866.files["Новая папка/Новый текстовый документ.txt"], "with decodeFileName : the file has been correctly read"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); // zip --entry-comments --archive-comment -X -0 pile_of_poo.zip Iñtërnâtiônàlizætiøn☃$'\360\237\222\251'.txt @@ -132,7 +131,7 @@ JSZipTestUtils.testZipFile("Zip text file and UTF-8, Pile Of Poo test", "ref/pil // see http://mathiasbynens.be/notes/javascript-unicode // but escaped, to avoid troubles // thanks http://mothereff.in/js-escapes#1I%C3%B1t%C3%ABrn%C3%A2ti%C3%B4n%C3%A0liz%C3%A6ti%C3%B8n%E2%98%83%F0%9F%92%A9 - var text = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; + var text = "I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9"; zip.file(text + ".txt", text, {comment : text}); var done = assert.async(3); zip.generateAsync({type:"binarystring", comment : text}).then(function(actual) { @@ -140,31 +139,30 @@ JSZipTestUtils.testZipFile("Zip text file and UTF-8, Pile Of Poo test", "ref/pil JSZipTestUtils.checkGenerateStability(assert, actual); JSZip.loadAsync(expected) - .then(function (zip) { - var file = zip.file(text + ".txt"); - assert.ok(file, "JSZip finds the unicode file name on the external file"); - assert.equal(file.comment, text, "JSZip can decode the external file comment"); - return file.async("string"); - }) - .then(function (content) { - assert.equal(content, text, "JSZip can decode the external file"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + var file = zip.file(text + ".txt"); + assert.ok(file, "JSZip finds the unicode file name on the external file"); + assert.equal(file.comment, text, "JSZip can decode the external file comment"); + return file.async("string"); + }) + .then(function (content) { + assert.equal(content, text, "JSZip can decode the external file"); + done(); + })["catch"](JSZipTestUtils.assertNoError); JSZip.loadAsync(actual) - .then(function (zip) { - var file = zip.file(text + ".txt"); - assert.ok(file, "JSZip finds the unicode file name on its own file"); - assert.equal(file.comment, text, "JSZip can decode its own file comment"); - return file.async("string"); - }) - .then(function (content) { - assert.equal(content, text, "JSZip can decode its own file"); - done(); - })['catch'](JSZipTestUtils.assertNoError); + .then(function (zip) { + var file = zip.file(text + ".txt"); + assert.ok(file, "JSZip finds the unicode file name on its own file"); + assert.equal(file.comment, text, "JSZip can decode its own file comment"); + return file.async("string"); + }) + .then(function (content) { + assert.equal(content, text, "JSZip can decode its own file"); + done(); + })["catch"](JSZipTestUtils.assertNoError); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }); - diff --git a/test/asserts/utils.js b/test/asserts/utils.js index b9438e1d..6d8c5355 100644 --- a/test/asserts/utils.js +++ b/test/asserts/utils.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; // These tests only run in Node var utils = require("../../lib/utils"); diff --git a/test/asserts/version.js b/test/asserts/version.js index ee050f65..ee1efdde 100644 --- a/test/asserts/version.js +++ b/test/asserts/version.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; QUnit.module("version"); diff --git a/test/helpers/browser-test-utils.js b/test/helpers/browser-test-utils.js index f1d5db3a..add57eb8 100644 --- a/test/helpers/browser-test-utils.js +++ b/test/helpers/browser-test-utils.js @@ -1,5 +1,4 @@ -/* global JSZip,JSZipUtils,JSZipTestUtils */ -'use strict'; +"use strict"; JSZipTestUtils.loadZipFile = function (name, callback) { JSZipUtils.getBinaryContent(name + "?_=" + ( new Date() ).getTime(), callback); }; diff --git a/test/helpers/node-test-utils.js b/test/helpers/node-test-utils.js index b415b7a7..9dc22eea 100644 --- a/test/helpers/node-test-utils.js +++ b/test/helpers/node-test-utils.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; var fs = require("fs"); var path = require("path"); @@ -9,12 +8,12 @@ global.JSZip = require("../../lib/index"); global.JSZipTestUtils.loadZipFile = function(name, callback) { fs.readFile(path.join("test", name), "binary", callback); }; -process.on('uncaughtException', function(err) { - console.log('uncaughtException: ' + err, err.stack); - process.exit(1); +process.on("uncaughtException", function(err) { + console.log("uncaughtException: " + err, err.stack); + process.exit(1); }); -process.on('unhandledRejection', function(err) { - console.log('unhandledRejection: ' + err, err.stack); - process.exit(1); +process.on("unhandledRejection", function(err) { + console.log("unhandledRejection: " + err, err.stack); + process.exit(1); }); diff --git a/test/helpers/test-utils.js b/test/helpers/test-utils.js index 77543948..ef7528d2 100644 --- a/test/helpers/test-utils.js +++ b/test/helpers/test-utils.js @@ -1,5 +1,4 @@ -/* global QUnit,JSZip,JSZipTestUtils */ -'use strict'; +"use strict"; (function (global) { // Expose assert object globally @@ -64,7 +63,7 @@ }).then(function (content) { assert.ok(JSZipTestUtils.similar(bytesStream, content, 0), "generate stability : stable"); done(); - })['catch'](JSZipTestUtils.assertNoError); + })["catch"](JSZipTestUtils.assertNoError); }; JSZipTestUtils.checkBasicStreamBehavior = function checkBasicStreamBehavior(assert, stream, testName) { @@ -74,26 +73,26 @@ } var triggeredStream = false; stream - .on("data", function (data, metadata) { + .on("data", function (data, metadata) { // triggering a lot of passing checks makes the result unreadable - if (!data) { - assert.ok(data, testName + "basic check stream, data event handler, data is defined"); - } - if(!metadata) { - assert.ok(metadata, testName + "basic check stream, data event handler, metadata is defined"); - } - triggeredStream = true; - }) - .on("error", function (e) { - assert.ok(e, testName + "basic check stream, error event handler, error is defined"); - triggeredStream = true; - done(); - }) - .on("end", function () { - triggeredStream = true; - done(); - }) - .resume() + if (!data) { + assert.ok(data, testName + "basic check stream, data event handler, data is defined"); + } + if(!metadata) { + assert.ok(metadata, testName + "basic check stream, data event handler, metadata is defined"); + } + triggeredStream = true; + }) + .on("error", function (e) { + assert.ok(e, testName + "basic check stream, error event handler, error is defined"); + triggeredStream = true; + done(); + }) + .on("end", function () { + triggeredStream = true; + done(); + }) + .resume() ; assert.ok(!triggeredStream, testName + "basic check stream, the stream callback is async"); }; @@ -189,7 +188,7 @@ var base64Dict = { "": "", - "\xE2\x82\xAC15\n": "4oKsMTUK", + "\xE2\x82\xAC15\n": "4oKsMTUK", "test\r\ntest\r\n": "dGVzdA0KdGVzdA0K", "all.zip.base64,stream=false": "UEsDBAoAAAAAAO+7TTrj5ZWwDAAAAAwAAAAJAAAASGVsbG8udHh0SGVsbG8gV29ybGQKUEsDBAoAAAAAAA9qUToAAAAAAAAAAAAAAAAHAAAAaW1hZ2VzL1BLAwQKAAAAAACZoEg6PD/riikAAAApAAAAEAAAAGltYWdlcy9zbWlsZS5naWZHSUY4N2EFAAUAgAIAAAAA/94ALAAAAAAFAAUAAAIIjA+RZ6sKUgEAO1BLAQIUAAoAAAAAAO+7TTrj5ZWwDAAAAAwAAAAJAAAAAAAAAAAAAAAAAAAAAABIZWxsby50eHRQSwECFAAKAAAAAAAPalE6AAAAAAAAAAAAAAAABwAAAAAAAAAAABAAAAAzAAAAaW1hZ2VzL1BLAQIUAAoAAAAAAJmgSDo8P+uKKQAAACkAAAAQAAAAAAAAAAAAAAAAAFgAAABpbWFnZXMvc21pbGUuZ2lmUEsFBgAAAAADAAMAqgAAAK8AAAAAAA==", "all.zip.base64,stream=true": "UEsDBAoACAAAAO+7TToAAAAAAAAAAAAAAAAJAAAASGVsbG8udHh0SGVsbG8gV29ybGQKUEsHCOPllbAMAAAADAAAAFBLAwQKAAAAAAAPalE6AAAAAAAAAAAAAAAABwAAAGltYWdlcy9QSwMECgAIAAAAmaBIOgAAAAAAAAAAAAAAABAAAABpbWFnZXMvc21pbGUuZ2lmR0lGODdhBQAFAIACAAAAAP/eACwAAAAABQAFAAACCIwPkWerClIBADtQSwcIPD/riikAAAApAAAAUEsBAhQACgAIAAAA77tNOuPllbAMAAAADAAAAAkAAAAAAAAAAAAAAAAAAAAAAEhlbGxvLnR4dFBLAQIUAAoAAAAAAA9qUToAAAAAAAAAAAAAAAAHAAAAAAAAAAAAEAAAAEMAAABpbWFnZXMvUEsBAhQACgAIAAAAmaBIOjw/64opAAAAKQAAABAAAAAAAAAAAAAAAAAAaAAAAGltYWdlcy9zbWlsZS5naWZQSwUGAAAAAAMAAwCqAAAAzwAAAAAA" diff --git a/test/run.js b/test/run.js index 9c5c7c8d..fe52d6de 100644 --- a/test/run.js +++ b/test/run.js @@ -1,3 +1,5 @@ +"use strict"; + const path = require("path"); const playwright = require("playwright"); const createServer = require("http-server").createServer; @@ -27,14 +29,14 @@ async function run(browserType) { const context = await browser.newContext(); const page = await context.newPage(); - await page.goto(`http://127.0.0.1:8080/test/index.html?hidepassed`); + await page.goto("http://127.0.0.1:8080/test/index.html?hidepassed"); let result; do { result = await page.evaluate(() => { return window.global_test_results; }); - } while (!result) + } while (!result); console.log("Closing", browserType); await browser.close();