diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index acb9a176..95a91e34 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -14,22 +14,22 @@ jobs:
strategy:
matrix:
- node-version: [14.x, 16.x, 18.x, 20.x]
+ node-version: [18.x, 20.x]
steps:
- - uses: actions/checkout@v4.2.1
- - name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v4.0.4
- with:
- node-version: ${{ matrix.node-version }}
- - name: npm install and test
- run: |
- npm ci
- npm test
- env:
- CI: true
- - name: Archive production artifacts
- uses: actions/upload-artifact@v4
- with:
- name: tmp-zip-node-v${{ matrix.node-version }}
- path: tmp/*.zip
+ - uses: actions/checkout@v4.2.1
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4.0.4
+ with:
+ node-version: ${{ matrix.node-version }}
+ - name: npm install and test
+ run: |
+ npm ci
+ npm test
+ env:
+ CI: true
+ - name: Archive production artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: tmp-zip-node-v${{ matrix.node-version }}
+ path: tmp/*.zip
diff --git a/.github/workflows/npmpublish.yml b/.github/workflows/npmpublish.yml
index 8f531f0f..2edfb950 100644
--- a/.github/workflows/npmpublish.yml
+++ b/.github/workflows/npmpublish.yml
@@ -11,7 +11,7 @@ jobs:
- uses: actions/checkout@v4.2.1
- uses: actions/setup-node@v4.0.4
with:
- node-version: 16
+ node-version: 20
- run: npm ci
- run: npm test
@@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v4.2.1
- uses: actions/setup-node@v4.0.4
with:
- node-version: 16
+ node-version: 20
registry-url: https://registry.npmjs.org/
- run: npm ci
- run: npm publish
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ae1a2bc7..5e38a286 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
## Changelog
+**7.0.0** - October 14, 2024 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/6.0.1...7.0.0)
+
**6.0.1** - March 9, 2024 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/6.0.0...6.0.1)
**6.0.0** - February 27, 2024 — [Diff](https://github.com/archiverjs/node-zip-stream/compare/5.0.2...6.0.0)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 1fa92d43..ee85a307 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,13 +2,10 @@
#### Code Style Guide
-* code should be indented with 2 spaces
-* single quotes should be used where feasible
-* commas should be followed by a single space (function params, etc)
-* variable declaration should include `var`, [no multiple declarations](http://benalman.com/news/2012/05/multiple-var-statements-javascript/)
+- code should be ran through `prettier`
#### Tests
-* tests should be added to the nodeunit configs in `test/`
-* tests can be run with `npm test`
-* see existing tests for guidance
\ No newline at end of file
+- tests should be added in `test/`
+- tests can be run with `npm test`
+- see existing tests for guidance
diff --git a/README.md b/README.md
index ff85b9ba..6dacf520 100644
--- a/README.md
+++ b/README.md
@@ -21,19 +21,19 @@ This module is meant to be wrapped internally by other modules and therefore lac
If you want a module that handles entry queueing and much more, you should check out [archiver](https://npmjs.org/package/archiver) which uses this module internally.
```js
-const Packer = require('zip-stream');
-const archive = new Packer(); // OR new Packer(options)
+import { ZipStream } from "zip-stream":
+const archive = new ZipStream(); // OR new ZipStream(options)
-archive.on('error', function(err) {
+archive.on("error", function (err) {
throw err;
});
// pipe archive where you want it (ie fs, http, etc)
// listen to the destination's end, close, or finish event
-archive.entry('string contents', { name: 'string.txt' }, function(err, entry) {
+archive.entry("string contents", { name: "string.txt" }, function (err, entry) {
if (err) throw err;
- archive.entry(null, { name: 'directory/' }, function(err, entry) {
+ archive.entry(null, { name: "directory/" }, function (err, entry) {
if (err) throw err;
archive.finish();
});
diff --git a/index.js b/index.js
index 2c692376..2fb259a0 100644
--- a/index.js
+++ b/index.js
@@ -1,3 +1,6 @@
+import { ZipArchiveOutputStream, ZipArchiveEntry } from "compress-commons";
+import util from "archiver-utils";
+
/**
* ZipStream
*
@@ -5,183 +8,153 @@
* @license [MIT]{@link https://github.com/archiverjs/node-zip-stream/blob/master/LICENSE}
* @copyright (c) 2014 Chris Talkington, contributors.
*/
-var inherits = require('util').inherits;
-
-var ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream;
-var ZipArchiveEntry = require('compress-commons').ZipArchiveEntry;
-
-var util = require('archiver-utils');
-
-/**
- * @constructor
- * @extends external:ZipArchiveOutputStream
- * @param {Object} [options]
- * @param {String} [options.comment] Sets the zip archive comment.
- * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.
- * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.
- * @param {Boolean} [options.store=false] Sets the compression method to STORE.
- * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}
- * to control compression.
- */
-var ZipStream = module.exports = function(options) {
- if (!(this instanceof ZipStream)) {
- return new ZipStream(options);
- }
-
- options = this.options = options || {};
- options.zlib = options.zlib || {};
-
- ZipArchiveOutputStream.call(this, options);
-
- if (typeof options.level === 'number' && options.level >= 0) {
- options.zlib.level = options.level;
- delete options.level;
- }
-
- if (!options.forceZip64 && typeof options.zlib.level === 'number' && options.zlib.level === 0) {
- options.store = true;
- }
-
- options.namePrependSlash = options.namePrependSlash || false;
-
- if (options.comment && options.comment.length > 0) {
- this.setComment(options.comment);
- }
-};
-
-inherits(ZipStream, ZipArchiveOutputStream);
-
-/**
- * Normalizes entry data with fallbacks for key properties.
- *
- * @private
- * @param {Object} data
- * @return {Object}
- */
-ZipStream.prototype._normalizeFileData = function(data) {
- data = util.defaults(data, {
- type: 'file',
- name: null,
- namePrependSlash: this.options.namePrependSlash,
- linkname: null,
- date: null,
- mode: null,
- store: this.options.store,
- comment: ''
- });
-
- var isDir = data.type === 'directory';
- var isSymlink = data.type === 'symlink';
-
- if (data.name) {
- data.name = util.sanitizePath(data.name);
-
- if (!isSymlink && data.name.slice(-1) === '/') {
- isDir = true;
- data.type = 'directory';
- } else if (isDir) {
- data.name += '/';
+export default class ZipStream extends ZipArchiveOutputStream {
+ /**
+ * @constructor
+ * @extends external:ZipArchiveOutputStream
+ * @param {Object} [options]
+ * @param {String} [options.comment] Sets the zip archive comment.
+ * @param {Boolean} [options.forceLocalTime=false] Forces the archive to contain local file times instead of UTC.
+ * @param {Boolean} [options.forceZip64=false] Forces the archive to contain ZIP64 headers.
+ * @param {Boolean} [options.store=false] Sets the compression method to STORE.
+ * @param {Object} [options.zlib] Passed to [zlib]{@link https://nodejs.org/api/zlib.html#zlib_class_options}
+ * to control compression.
+ */
+ constructor(options) {
+ options = options || {};
+ options.zlib = options.zlib || {};
+
+ if (typeof options.level === "number" && options.level >= 0) {
+ options.zlib.level = options.level;
+ delete options.level;
}
- }
-
- if (isDir || isSymlink) {
- data.store = true;
- }
-
- data.date = util.dateify(data.date);
-
- return data;
-};
-
-/**
- * Appends an entry given an input source (text string, buffer, or stream).
- *
- * @param {(Buffer|Stream|String)} source The input source.
- * @param {Object} data
- * @param {String} data.name Sets the entry name including internal path.
- * @param {String} [data.comment] Sets the entry comment.
- * @param {(String|Date)} [data.date=NOW()] Sets the entry date.
- * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.
- * @param {Boolean} [data.store=options.store] Sets the compression method to STORE.
- * @param {String} [data.type=file] Sets the entry type. Defaults to `directory`
- * if name ends with trailing slash.
- * @param {Function} callback
- * @return this
- */
-ZipStream.prototype.entry = function(source, data, callback) {
- if (typeof callback !== 'function') {
- callback = this._emitErrorCallback.bind(this);
- }
-
- data = this._normalizeFileData(data);
- if (data.type !== 'file' && data.type !== 'directory' && data.type !== 'symlink') {
- callback(new Error(data.type + ' entries not currently supported'));
- return;
- }
-
- if (typeof data.name !== 'string' || data.name.length === 0) {
- callback(new Error('entry name must be a non-empty string value'));
- return;
- }
-
- if (data.type === 'symlink' && typeof data.linkname !== 'string') {
- callback(new Error('entry linkname must be a non-empty string value when type equals symlink'));
- return;
- }
-
- var entry = new ZipArchiveEntry(data.name);
- entry.setTime(data.date, this.options.forceLocalTime);
-
- if (data.namePrependSlash) {
- entry.setName(data.name, true);
- }
+ if (
+ !options.forceZip64 &&
+ typeof options.zlib.level === "number" &&
+ options.zlib.level === 0
+ ) {
+ options.store = true;
+ }
- if (data.store) {
- entry.setMethod(0);
- }
+ options.namePrependSlash = options.namePrependSlash || false;
- if (data.comment.length > 0) {
- entry.setComment(data.comment);
- }
+ super(options);
- if (data.type === 'symlink' && typeof data.mode !== 'number') {
- data.mode = 40960; // 0120000
+ if (options.comment && options.comment.length > 0) {
+ this.setComment(options.comment);
+ }
}
- if (typeof data.mode === 'number') {
- if (data.type === 'symlink') {
- data.mode |= 40960;
+ /**
+ * Normalizes entry data with fallbacks for key properties.
+ *
+ * @private
+ * @param {Object} data
+ * @return {Object}
+ */
+ _normalizeFileData(data) {
+ data = util.defaults(data, {
+ type: "file",
+ name: null,
+ namePrependSlash: this.options.namePrependSlash,
+ linkname: null,
+ date: null,
+ mode: null,
+ store: this.options.store,
+ comment: "",
+ });
+ var isDir = data.type === "directory";
+ var isSymlink = data.type === "symlink";
+ if (data.name) {
+ data.name = util.sanitizePath(data.name);
+ if (!isSymlink && data.name.slice(-1) === "/") {
+ isDir = true;
+ data.type = "directory";
+ } else if (isDir) {
+ data.name += "/";
+ }
}
-
- entry.setUnixMode(data.mode);
+ if (isDir || isSymlink) {
+ data.store = true;
+ }
+ data.date = util.dateify(data.date);
+ return data;
+ }
+
+ /**
+ * Appends an entry given an input source (text string, buffer, or stream).
+ *
+ * @param {(Buffer|Stream|String)} source The input source.
+ * @param {Object} data
+ * @param {String} data.name Sets the entry name including internal path.
+ * @param {String} [data.comment] Sets the entry comment.
+ * @param {(String|Date)} [data.date=NOW()] Sets the entry date.
+ * @param {Number} [data.mode=D:0755/F:0644] Sets the entry permissions.
+ * @param {Boolean} [data.store=options.store] Sets the compression method to STORE.
+ * @param {String} [data.type=file] Sets the entry type. Defaults to `directory`
+ * if name ends with trailing slash.
+ * @param {Function} callback
+ * @return this
+ */
+ entry(source, data, callback) {
+ if (typeof callback !== "function") {
+ callback = this._emitErrorCallback.bind(this);
+ }
+ data = this._normalizeFileData(data);
+ if (
+ data.type !== "file" &&
+ data.type !== "directory" &&
+ data.type !== "symlink"
+ ) {
+ callback(new Error(data.type + " entries not currently supported"));
+ return;
+ }
+ if (typeof data.name !== "string" || data.name.length === 0) {
+ callback(new Error("entry name must be a non-empty string value"));
+ return;
+ }
+ if (data.type === "symlink" && typeof data.linkname !== "string") {
+ callback(
+ new Error(
+ "entry linkname must be a non-empty string value when type equals symlink",
+ ),
+ );
+ return;
+ }
+ var entry = new ZipArchiveEntry(data.name);
+ entry.setTime(data.date, this.options.forceLocalTime);
+ if (data.namePrependSlash) {
+ entry.setName(data.name, true);
+ }
+ if (data.store) {
+ entry.setMethod(0);
+ }
+ if (data.comment.length > 0) {
+ entry.setComment(data.comment);
+ }
+ if (data.type === "symlink" && typeof data.mode !== "number") {
+ data.mode = 40960; // 0120000
+ }
+ if (typeof data.mode === "number") {
+ if (data.type === "symlink") {
+ data.mode |= 40960;
+ }
+ entry.setUnixMode(data.mode);
+ }
+ if (data.type === "symlink" && typeof data.linkname === "string") {
+ source = Buffer.from(data.linkname);
+ }
+ return super.entry(entry, source, callback);
}
- if (data.type === 'symlink' && typeof data.linkname === 'string') {
- source = Buffer.from(data.linkname);
+ /**
+ * Finalizes the instance and prevents further appending to the archive
+ * structure (queue will continue til drained).
+ *
+ * @return void
+ */
+ finalize() {
+ this.finish();
}
-
- return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback);
-};
-
-/**
- * Finalizes the instance and prevents further appending to the archive
- * structure (queue will continue til drained).
- *
- * @return void
- */
-ZipStream.prototype.finalize = function() {
- this.finish();
-};
-
-/**
- * Returns the current number of bytes written to this stream.
- * @function ZipStream#getBytesWritten
- * @returns {Number}
- */
-
-/**
- * Compress Commons ZipArchiveOutputStream
- * @external ZipArchiveOutputStream
- * @see {@link https://github.com/archiverjs/node-compress-commons}
- */
+}
diff --git a/package-lock.json b/package-lock.json
index 932702c8..39a20a4e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "zip-stream",
"version": "6.0.1",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -10,7 +10,7 @@
"license": "MIT",
"dependencies": {
"archiver-utils": "^5.0.0",
- "compress-commons": "^6.0.2",
+ "compress-commons": "^7.0.0",
"readable-stream": "^4.0.0"
},
"devDependencies": {
@@ -20,10 +20,11 @@
"minami": "1.2.3",
"mkdirp": "3.0.1",
"mocha": "10.7.3",
+ "prettier": "3.3.3",
"rimraf": "5.0.10"
},
"engines": {
- "node": ">= 14"
+ "node": ">=18"
}
},
"node_modules/@babel/helper-string-parser": {
@@ -514,18 +515,29 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/compress-commons": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
- "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-7.0.0.tgz",
+ "integrity": "sha512-8WWFRMWaa37dwjWCxDcmdx6sxfjQTAEQ6s96BWqX9WYC6Mgg95EvwPYS/7QGX3txkst7TD1jIL2HCY9AixLGfA==",
"dependencies": {
"crc-32": "^1.2.0",
- "crc32-stream": "^6.0.0",
- "is-stream": "^2.0.1",
+ "crc32-stream": "^7.0.1",
+ "is-stream": "^4.0.0",
"normalize-path": "^3.0.0",
"readable-stream": "^4.0.0"
},
"engines": {
- "node": ">= 14"
+ "node": ">=18"
+ }
+ },
+ "node_modules/compress-commons/node_modules/is-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
+ "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/core-util-is": {
@@ -545,15 +557,15 @@
}
},
"node_modules/crc32-stream": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
- "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-7.0.1.tgz",
+ "integrity": "sha512-IBWsY8xznyQrcHn8h4bC8/4ErNke5elzgG8GcqF4RFPw6aHkWWRc7Tgw6upjaTX/CT/yQgqYENkxYsTYN+hW2g==",
"dependencies": {
"crc-32": "^1.2.0",
"readable-stream": "^4.0.0"
},
"engines": {
- "node": ">= 14"
+ "node": ">=18"
}
},
"node_modules/cross-spawn": {
@@ -1406,6 +1418,21 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/prettier": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -1942,1379 +1969,5 @@
"url": "https://github.com/sponsors/sindresorhus"
}
}
- },
- "dependencies": {
- "@babel/helper-string-parser": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
- "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
- "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
- "dev": true
- },
- "@babel/parser": {
- "version": "7.25.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
- "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.25.8"
- }
- },
- "@babel/types": {
- "version": "7.25.8",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
- "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.25.7",
- "@babel/helper-validator-identifier": "^7.25.7",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@isaacs/cliui": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
- "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "requires": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- }
- },
- "@jsdoc/salty": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz",
- "integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.21"
- }
- },
- "@pkgjs/parseargs": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
- "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "optional": true
- },
- "@types/linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
- "dev": true
- },
- "@types/markdown-it": {
- "version": "14.1.2",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
- "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
- "dev": true,
- "requires": {
- "@types/linkify-it": "^5",
- "@types/mdurl": "^2"
- }
- },
- "@types/mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
- "dev": true
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true
- },
- "ansi-regex": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
- "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "archiver-jsdoc-theme": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/archiver-jsdoc-theme/-/archiver-jsdoc-theme-1.1.3.tgz",
- "integrity": "sha512-e+YhJq8EBRMyA4V9VOsQkU1JRDcsquAZ4DSnfRwv8a1erISP6b2LAQN/yJbwtZbjA9eo4dak4YzDqflOJF3r5g==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.19"
- }
- },
- "archiver-utils": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz",
- "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
- "requires": {
- "glob": "^10.0.0",
- "graceful-fs": "^4.2.0",
- "is-stream": "^2.0.1",
- "lazystream": "^1.0.0",
- "lodash": "^4.17.15",
- "normalize-path": "^3.0.0",
- "readable-stream": "^4.0.0"
- }
- },
- "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
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true
- },
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "requires": {
- "fill-range": "^7.1.1"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "catharsis": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
- "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "chai": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz",
- "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.3",
- "deep-eql": "^4.1.3",
- "get-func-name": "^2.0.2",
- "loupe": "^2.3.6",
- "pathval": "^1.1.1",
- "type-detect": "^4.1.0"
- }
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.2"
- }
- },
- "chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- },
- "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
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "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"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.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==",
- "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=="
- },
- "compress-commons": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
- "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
- "requires": {
- "crc-32": "^1.2.0",
- "crc32-stream": "^6.0.0",
- "is-stream": "^2.0.1",
- "normalize-path": "^3.0.0",
- "readable-stream": "^4.0.0"
- }
- },
- "core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
- },
- "crc-32": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
- "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="
- },
- "crc32-stream": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
- "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
- "requires": {
- "crc-32": "^1.2.0",
- "readable-stream": "^4.0.0"
- }
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "debug": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
- "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.3"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz",
- "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true
- },
- "eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
- },
- "emoji-regex": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
- },
- "entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true
- },
- "escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true
- },
- "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
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
- },
- "fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "requires": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "foreground-child": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
- "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
- "requires": {
- "cross-spawn": "^7.0.0",
- "signal-exit": "^4.0.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "get-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "glob": {
- "version": "10.4.5",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
- "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
- "requires": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- }
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
- },
- "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
- },
- "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
- },
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "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-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "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"
- }
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true
- },
- "is-stream": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
- "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
- },
- "is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
- },
- "jackspeak": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
- "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
- "requires": {
- "@isaacs/cliui": "^8.0.2",
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "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"
- }
- },
- "js2xmlparser": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
- "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
- "dev": true,
- "requires": {
- "xmlcreate": "^2.0.4"
- }
- },
- "jsdoc": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.3.tgz",
- "integrity": "sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.20.15",
- "@jsdoc/salty": "^0.2.1",
- "@types/markdown-it": "^14.1.1",
- "bluebird": "^3.7.2",
- "catharsis": "^0.9.0",
- "escape-string-regexp": "^2.0.0",
- "js2xmlparser": "^4.0.2",
- "klaw": "^3.0.0",
- "markdown-it": "^14.1.0",
- "markdown-it-anchor": "^8.6.7",
- "marked": "^4.0.10",
- "mkdirp": "^1.0.4",
- "requizzle": "^0.2.3",
- "strip-json-comments": "^3.1.0",
- "underscore": "~1.13.2"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- }
- }
- },
- "klaw": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
- "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.9"
- }
- },
- "lazystream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
- "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
- "requires": {
- "readable-stream": "^2.0.5"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "requires": {
- "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"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "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==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "linkify-it": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
- "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
- "dev": true,
- "requires": {
- "uc.micro": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "requires": {
- "p-locate": "^5.0.0"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "requires": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- }
- },
- "loupe": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
- "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.1"
- }
- },
- "lru-cache": {
- "version": "10.4.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
- "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
- },
- "markdown-it": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
- "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
- "dev": true,
- "requires": {
- "argparse": "^2.0.1",
- "entities": "^4.4.0",
- "linkify-it": "^5.0.0",
- "mdurl": "^2.0.0",
- "punycode.js": "^2.3.1",
- "uc.micro": "^2.1.0"
- }
- },
- "markdown-it-anchor": {
- "version": "8.6.7",
- "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
- "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
- "dev": true,
- "requires": {}
- },
- "marked": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
- "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
- "dev": true
- },
- "mdurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
- "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
- "dev": true
- },
- "minami": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz",
- "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==",
- "dev": true
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "minipass": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
- "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="
- },
- "mkdirp": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
- "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
- "dev": true
- },
- "mocha": {
- "version": "10.7.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
- "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "dependencies": {
- "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": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- }
- },
- "minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "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
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "requires": {
- "yocto-queue": "^0.1.0"
- }
- },
- "p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "requires": {
- "p-limit": "^3.0.2"
- }
- },
- "package-json-from-dist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
- "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
- },
- "path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "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=="
- },
- "path-scurry": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
- "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "requires": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "punycode.js": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
- "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
- "dev": true
- },
- "randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "requires": {
- "safe-buffer": "^5.1.0"
- }
- },
- "readable-stream": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
- "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
- "requires": {
- "abort-controller": "^3.0.0",
- "buffer": "^6.0.3",
- "events": "^3.3.0",
- "process": "^0.11.10",
- "string_decoder": "^1.3.0"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
- },
- "requizzle": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz",
- "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.21"
- }
- },
- "rimraf": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
- "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
- "dev": true,
- "requires": {
- "glob": "^10.3.7"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "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==",
- "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=="
- },
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-width": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
- "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "requires": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- }
- },
- "string-width-cjs": {
- "version": "npm:string-width@4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "requires": {
- "ansi-regex": "^6.0.1"
- }
- },
- "strip-ansi-cjs": {
- "version": "npm:strip-ansi@6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- }
- }
- },
- "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": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "type-detect": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz",
- "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==",
- "dev": true
- },
- "uc.micro": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
- "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
- "dev": true
- },
- "underscore": {
- "version": "1.13.7",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
- "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true
- },
- "wrap-ansi": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
- "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "requires": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
- "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="
- }
- }
- },
- "wrap-ansi-cjs": {
- "version": "npm:wrap-ansi@7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "xmlcreate": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
- "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
- "dev": true
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "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
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "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"
- }
- }
- }
- },
- "yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- }
- },
- "yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
- }
}
}
diff --git a/package.json b/package.json
index a105dd07..25c97d89 100644
--- a/package.json
+++ b/package.json
@@ -15,12 +15,13 @@
"url": "https://github.com/archiverjs/node-zip-stream/issues"
},
"license": "MIT",
- "main": "index.js",
+ "type": "module",
+ "exports": "index.js",
"files": [
"index.js"
],
"engines": {
- "node": ">= 14"
+ "node": ">=18"
},
"scripts": {
"test": "mocha --reporter dot",
@@ -28,7 +29,7 @@
},
"dependencies": {
"archiver-utils": "^5.0.0",
- "compress-commons": "^6.0.2",
+ "compress-commons": "^7.0.0",
"readable-stream": "^4.0.0"
},
"devDependencies": {
@@ -38,6 +39,7 @@
"minami": "1.2.3",
"mkdirp": "3.0.1",
"mocha": "10.7.3",
+ "prettier": "3.3.3",
"rimraf": "5.0.10"
},
"keywords": [
diff --git a/test/helpers/index.js b/test/helpers/index.js
index 07034530..27f230cf 100644
--- a/test/helpers/index.js
+++ b/test/helpers/index.js
@@ -1,101 +1,73 @@
-var crypto = require('crypto');
-var fs = require('fs');
-var inherits = require('util').inherits;
-
-var Stream = require('stream').Stream;
-var Readable = require('readable-stream').Readable;
-var Writable = require('readable-stream').Writable;
-
-function adjustDateByOffset(d, offset) {
- d = (d instanceof Date) ? d : new Date();
-
+import crypto from "crypto";
+import { WriteStream, readFileSync } from "fs";
+import { inherits as inherits$0 } from "util";
+import { Stream } from "stream";
+import { Readable, Writable } from "readable-stream";
+
+export function adjustDateByOffset(d, offset) {
+ d = d instanceof Date ? d : new Date();
if (offset >= 1) {
d.setMinutes(d.getMinutes() - offset);
} else {
d.setMinutes(d.getMinutes() + Math.abs(offset));
}
-
return d;
}
-module.exports.adjustDateByOffset = adjustDateByOffset;
-
-function binaryBuffer(n) {
+export function binaryBuffer(n) {
var buffer = Buffer.alloc(n);
-
for (var i = 0; i < n; i++) {
- buffer.writeUInt8(i&255, i);
+ buffer.writeUInt8(i & 255, i);
}
-
return buffer;
}
-module.exports.binaryBuffer = binaryBuffer;
-
-function BinaryStream(size, options) {
- Readable.call(this, options);
-
- var buf = Buffer.alloc(size);
-
- for (var i = 0; i < size; i++) {
- buf.writeUInt8(i&255, i);
+export class BinaryStream extends Readable {
+ constructor(size, options) {
+ super(options);
+ var buf = Buffer.alloc(size);
+ for (var i = 0; i < size; i++) {
+ buf.writeUInt8(i & 255, i);
+ }
+ this.push(buf);
+ this.push(null);
}
-
- this.push(buf);
- this.push(null);
-}
-
-inherits(BinaryStream, Readable);
-
-BinaryStream.prototype._read = function(size) {};
-
-module.exports.BinaryStream = BinaryStream;
-
-function DeadEndStream(options) {
- Writable.call(this, options);
+ _read = function (size) {};
}
-inherits(DeadEndStream, Writable);
-
-DeadEndStream.prototype._write = function(chuck, encoding, callback) {
- callback();
-};
-
-module.exports.DeadEndStream = DeadEndStream;
-
-function fileBuffer(filepath) {
- return fs.readFileSync(filepath);
+export class DeadEndStream extends Writable {
+ constructor(options) {
+ super(options);
+ }
+ _write = function (chuck, encoding, callback) {
+ callback();
+ };
}
-module.exports.fileBuffer = fileBuffer;
-
-function UnBufferedStream() {
- this.readable = true;
+export function fileBuffer(filepath) {
+ return readFileSync(filepath);
}
-inherits(UnBufferedStream, Stream);
-
-module.exports.UnBufferedStream = UnBufferedStream;
-
-function WriteHashStream(path, options) {
- fs.WriteStream.call(this, path, options);
-
- this.hash = crypto.createHash('sha1');
- this.digest = null;
-
- this.on('close', function() {
- this.digest = this.hash.digest('hex');
- });
+export class UnBufferedStream extends Stream {
+ constructor() {
+ this.readable = true;
+ }
}
-inherits(WriteHashStream, fs.WriteStream);
-
-WriteHashStream.prototype.write = function(chunk) {
- if (chunk) {
- this.hash.update(chunk);
+export class WriteHashStream extends WriteStream {
+ constructor(path, options) {
+ super(path, options);
+ this.hash = crypto.createHash("sha1");
+ this.digest = null;
+ this.on("close", function () {
+ this.digest = this.hash.digest("hex");
+ });
}
- return fs.WriteStream.prototype.write.call(this, chunk);
-};
-
-module.exports.WriteHashStream = WriteHashStream;
+ write(chunk) {
+ if (chunk) {
+ this.hash.update(chunk);
+ }
+ return super.write(chunk);
+ }
+}
diff --git a/test/pack.js b/test/pack.js
index ded0e5b6..7a0150d9 100644
--- a/test/pack.js
+++ b/test/pack.js
@@ -1,374 +1,383 @@
-/*global before,describe,it */
-var fs = require('fs');
-
-var assert = require('chai').assert;
-var mkdir = require('mkdirp');
-var Readable = require('readable-stream').Readable;
-
-var helpers = require('./helpers');
-var binaryBuffer = helpers.binaryBuffer;
-var fileBuffer = helpers.fileBuffer;
-
-var Packer = require('../index.js');
+import { createReadStream, createWriteStream } from "fs";
+import { assert } from "chai";
+import { mkdirp } from "mkdirp";
+import { Readable } from "readable-stream";
+import { binaryBuffer, fileBuffer } from "./helpers/index.js";
+import Packer from "../index.js";
var testBuffer = binaryBuffer(1024 * 16);
-
-var testDate = new Date('Jan 03 2013 14:26:38 GMT');
-var testDate2 = new Date('Feb 10 2013 10:24:42 GMT');
-
-var testDateOverflow = new Date('Jan 1 2044 00:00:00 GMT');
-var testDateUnderflow = new Date('Dec 30 1979 23:59:58 GMT');
-
-describe('pack', function() {
- before(function() {
- mkdir.sync('tmp');
+var testDate = new Date("Jan 03 2013 14:26:38 GMT");
+var testDate2 = new Date("Feb 10 2013 10:24:42 GMT");
+var testDateOverflow = new Date("Jan 1 2044 00:00:00 GMT");
+var testDateUnderflow = new Date("Dec 30 1979 23:59:58 GMT");
+
+describe("pack", function () {
+ before(function () {
+ mkdirp.sync("tmp");
});
-
- describe('#entry', function() {
-
- it('should append Buffer sources', function(done) {
+ describe("#entry", function () {
+ it("should append Buffer sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/buffer.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/buffer.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate });
+ archive.entry(testBuffer, { name: "buffer.txt", date: testDate });
archive.finalize();
});
-
- it('should append Stream sources', function(done) {
+ it("should append Stream sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/stream.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/stream.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(fs.createReadStream('test/fixtures/test.txt'), { name: 'stream.txt', date: testDate });
+ archive.entry(createReadStream("test/fixtures/test.txt"), {
+ name: "stream.txt",
+ date: testDate,
+ });
archive.finalize();
});
-
- it('should append Stream-like sources', function(done) {
+ it("should append Stream-like sources", function (done) {
var archive = new Packer();
- var testStream = fs.createWriteStream('tmp/stream-like.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/stream-like.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(Readable.from(['test']), { name: 'stream-like.txt', date: testDate });
+ archive.entry(Readable.from(["test"]), {
+ name: "stream-like.txt",
+ date: testDate,
+ });
archive.finalize();
});
-
- it('should append multiple sources', function(done) {
+ it("should append multiple sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/multiple.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/multiple.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry('string', { name: 'string.txt', date: testDate }, function(err) {
- if (err) throw err;
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate2 }, function(err) {
+ archive.entry(
+ "string",
+ { name: "string.txt", date: testDate },
+ function (err) {
if (err) throw err;
- archive.entry(fs.createReadStream('test/fixtures/test.txt'), { name: 'stream.txt', date: testDate2 }, function(err) {
- if (err) throw err;
- archive.entry(fs.createReadStream('test/fixtures/test.txt'), { name: 'stream-store.txt', date: testDate, store: true }, function(err) {
+ archive.entry(
+ testBuffer,
+ { name: "buffer.txt", date: testDate2 },
+ function (err) {
if (err) throw err;
- archive.finalize();
- });
- });
- });
- });
+ archive.entry(
+ createReadStream("test/fixtures/test.txt"),
+ { name: "stream.txt", date: testDate2 },
+ function (err) {
+ if (err) throw err;
+ archive.entry(
+ createReadStream("test/fixtures/test.txt"),
+ { name: "stream-store.txt", date: testDate, store: true },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
+ },
+ );
+ },
+ );
});
-
- it('should support STORE for Buffer sources', function(done) {
+ it("should support STORE for Buffer sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/buffer-store.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/buffer-store.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate, store: true });
+ archive.entry(testBuffer, {
+ name: "buffer.txt",
+ date: testDate,
+ store: true,
+ });
archive.finalize();
});
-
- it('should support STORE for Stream sources', function(done) {
+ it("should support STORE for Stream sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/stream-store.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/stream-store.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(fs.createReadStream('test/fixtures/test.txt'), { name: 'stream.txt', date: testDate, store: true });
+ archive.entry(createReadStream("test/fixtures/test.txt"), {
+ name: "stream.txt",
+ date: testDate,
+ store: true,
+ });
archive.finalize();
});
-
- it('should support archive and file comments', function(done) {
+ it("should support archive and file comments", function (done) {
var archive = new Packer({
- comment: 'this is a zip comment',
- forceUTC: true
+ comment: "this is a zip comment",
+ forceUTC: true,
});
-
- var testStream = fs.createWriteStream('tmp/comments.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/comments.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate, comment: 'this is a file comment' });
+ archive.entry(testBuffer, {
+ name: "buffer.txt",
+ date: testDate,
+ comment: "this is a file comment",
+ });
archive.finalize();
});
-
- it('should STORE files when compression level is zero', function(done) {
+ it("should STORE files when compression level is zero", function (done) {
var archive = new Packer({
forceUTC: true,
- level: 0
+ level: 0,
});
-
- var testStream = fs.createWriteStream('tmp/store-level0.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/store-level0.zip");
+ testStream.on("close", function () {
//assert.equal(testStream.digest, '70b50994c971dbb0e457781cf6d23ca82e5ccbc0');
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate });
+ archive.entry(testBuffer, { name: "buffer.txt", date: testDate });
archive.finalize();
});
-
- it('should properly handle utf8 encoded characters in file names and comments', function(done) {
+ it("should properly handle utf8 encoded characters in file names and comments", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/accentedchars-filenames.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/accentedchars-filenames.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'àáâãäçèéêëìíîïñòóôõöùúûüýÿ.txt', date: testDate, comment: 'àáâãäçèéêëìíîïñòóôõöùúûüýÿ' }, function(err) {
- if (err) throw err;
- archive.entry(testBuffer, { name: 'ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ.txt', date: testDate2, comment: 'ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ' }, function(err) {
+ archive.entry(
+ testBuffer,
+ {
+ name: "àáâãäçèéêëìíîïñòóôõöùúûüýÿ.txt",
+ date: testDate,
+ comment: "àáâãäçèéêëìíîïñòóôõöùúûüýÿ",
+ },
+ function (err) {
if (err) throw err;
- archive.finalize();
- });
- });
+ archive.entry(
+ testBuffer,
+ {
+ name: "ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ.txt",
+ date: testDate2,
+ comment: "ÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ",
+ },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
});
-
- it('should append zero length sources', function(done) {
+ it("should append zero length sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/zerolength.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/zerolength.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry('', { name: 'string.txt', date: testDate }, function(err) {
+ archive.entry("", { name: "string.txt", date: testDate }, function (err) {
if (err) throw err;
- archive.entry(Buffer.alloc(0), { name: 'buffer.txt', date: testDate }, function(err) {
- if (err) throw err;
- archive.entry(fs.createReadStream('test/fixtures/empty.txt'), { name: 'stream.txt', date: testDate }, function(err) {
+ archive.entry(
+ Buffer.alloc(0),
+ { name: "buffer.txt", date: testDate },
+ function (err) {
if (err) throw err;
- archive.finalize();
- });
- });
+ archive.entry(
+ createReadStream("test/fixtures/empty.txt"),
+ { name: "stream.txt", date: testDate },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
});
});
-
- it('should support setting file mode (permissions)', function(done) {
+ it("should support setting file mode (permissions)", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/filemode.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/filemode.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'buffer.txt', date: testDate, mode: 0644 });
+ archive.entry(testBuffer, {
+ name: "buffer.txt",
+ date: testDate,
+ mode: 420, // 0644
+ });
archive.finalize();
});
-
- it('should support creating an empty zip', function(done) {
+ it("should support creating an empty zip", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/empty.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/empty.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
archive.finalize();
});
-
- it('should support compressing images for Buffer sources', function(done) {
+ it("should support compressing images for Buffer sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/buffer-image.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/buffer-image.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(fileBuffer('test/fixtures/image.png'), { name: 'image.png', date: testDate });
+ archive.entry(fileBuffer("test/fixtures/image.png"), {
+ name: "image.png",
+ date: testDate,
+ });
archive.finalize();
});
-
- it('should support compressing images for Stream sources', function(done) {
+ it("should support compressing images for Stream sources", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/stream-image.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/stream-image.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(fs.createReadStream('test/fixtures/image.png'), { name: 'image.png', date: testDate });
+ archive.entry(createReadStream("test/fixtures/image.png"), {
+ name: "image.png",
+ date: testDate,
+ });
archive.finalize();
});
-
- it('should prevent UInt32 under/overflow of dates', function(done) {
+ it("should prevent UInt32 under/overflow of dates", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/date-boundaries.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/date-boundaries.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(testBuffer, { name: 'date-underflow.txt', date: testDateUnderflow }, function(err) {
- if (err) throw err;
- archive.entry(testBuffer, { name: 'date-overflow.txt', date: testDateOverflow }, function(err) {
+ archive.entry(
+ testBuffer,
+ { name: "date-underflow.txt", date: testDateUnderflow },
+ function (err) {
if (err) throw err;
- archive.finalize();
- });
- });
+ archive.entry(
+ testBuffer,
+ { name: "date-overflow.txt", date: testDateOverflow },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
});
-
- it('should handle data that exceeds its internal buffer size', function(done) {
+ it("should handle data that exceeds its internal buffer size", function (done) {
var archive = new Packer({
highWaterMark: 1024 * 4,
- forceUTC: true
+ forceUTC: true,
});
-
- var testStream = fs.createWriteStream('tmp/buffer-overflow.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/buffer-overflow.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(binaryBuffer(1024 * 512), { name: 'buffer-overflow.txt', date: testDate }, function(err) {
- if (err) throw err;
- archive.entry(binaryBuffer(1024 * 1024), { name: 'buffer-overflow-store.txt', date: testDate, store: true }, function(err) {
+ archive.entry(
+ binaryBuffer(1024 * 512),
+ { name: "buffer-overflow.txt", date: testDate },
+ function (err) {
if (err) throw err;
- archive.finalize();
- });
- });
+ archive.entry(
+ binaryBuffer(1024 * 1024),
+ { name: "buffer-overflow-store.txt", date: testDate, store: true },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
});
-
- it('should support directory entries', function(done) {
+ it("should support directory entries", function (done) {
var archive = new Packer();
-
- var testStream = fs.createWriteStream('tmp/type-directory.zip');
-
- testStream.on('close', function() {
+ var testStream = createWriteStream("tmp/type-directory.zip");
+ testStream.on("close", function () {
done();
});
-
archive.pipe(testStream);
-
- archive.entry(null, { name: 'directory/', date: testDate });
-
+ archive.entry(null, { name: "directory/", date: testDate });
archive.finalize();
});
-
- it('should support symlink entries', function(done) {
- var archive = new Packer();
- var testStream = fs.createWriteStream('tmp/type-symlink.zip');
-
- testStream.on('close', function() {
- done();
- });
-
- archive.pipe(testStream);
-
- archive.entry('some text', { name: 'file', date: testDate }, function(err) {
- if (err) throw err;
- archive.entry(null, { type: 'symlink', name: 'file-link', linkname: 'file', date: testDate }, function(err) {
- if (err) throw err;
- archive.entry(null, { type: 'symlink', name: 'file-link-2', linkname: 'file', date: testDate, mode: 0644 }, function(err) {
- if (err) throw err;
- archive.finalize();
- });
- });
- });
+ it("should support symlink entries", function (done) {
+ var archive = new Packer();
+ var testStream = createWriteStream("tmp/type-symlink.zip");
+ testStream.on("close", function () {
+ done();
+ });
+ archive.pipe(testStream);
+ archive.entry(
+ "some text",
+ { name: "file", date: testDate },
+ function (err) {
+ if (err) throw err;
+ archive.entry(
+ null,
+ {
+ type: "symlink",
+ name: "file-link",
+ linkname: "file",
+ date: testDate,
+ },
+ function (err) {
+ if (err) throw err;
+ archive.entry(
+ null,
+ {
+ type: "symlink",
+ name: "file-link-2",
+ linkname: "file",
+ date: testDate,
+ mode: 420, // 0644
+ },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
+ },
+ );
});
-
-
- it('should support appending forward slash to entry names', function(done) {
- var archive = new Packer({
- namePrependSlash: true,
- });
- var testStream = fs.createWriteStream('tmp/name-prepend-slash.zip');
-
- testStream.on('close', function() {
- done();
- });
-
- archive.pipe(testStream);
-
- archive.entry('some text', { name: 'file', namePrependSlash: false, date: testDate }, function(err) {
- if (err) throw err;
- archive.entry('more text', { type: 'file', name: 'file-with-prefix', date: testDate }, function(err) {
- if (err) throw err;
- archive.finalize();
- });
- });
+ it("should support appending forward slash to entry names", function (done) {
+ var archive = new Packer({
+ namePrependSlash: true,
+ });
+ var testStream = createWriteStream("tmp/name-prepend-slash.zip");
+ testStream.on("close", function () {
+ done();
+ });
+ archive.pipe(testStream);
+ archive.entry(
+ "some text",
+ { name: "file", namePrependSlash: false, date: testDate },
+ function (err) {
+ if (err) throw err;
+ archive.entry(
+ "more text",
+ { type: "file", name: "file-with-prefix", date: testDate },
+ function (err) {
+ if (err) throw err;
+ archive.finalize();
+ },
+ );
+ },
+ );
});
-
-
});
-
});