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();