This commit is contained in:
2021-11-21 11:18:28 +01:00
parent 7a358eb836
commit 230b10b2a3
9339 changed files with 892519 additions and 62 deletions

21
node_modules/copy-props/LICENSE generated vendored Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016-2021 Gulp Team.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

227
node_modules/copy-props/README.md generated vendored Normal file
View File

@@ -0,0 +1,227 @@
# [copy-props][repo-url] [![NPM][npm-img]][npm-url] [![MIT License][mit-img]][mit-url] [![Build Status][travis-img]][travis-url] [![Build Status][appveyor-img]][appveyor-url] [![Coverage Status][coverage-img]][coverage-url]
Copy properties between two objects deeply.
## Install
To install from npm:
```sh
$ npm i copy-props --save
```
## Load this module
For Node.js:
```js
const copyProps = require('copy-props');
```
For Web browser:
```html
<script src="copy-props.min.js"></script>
```
## Usage
Copy *src* to *dst* simply (and return *dst*) :
```js
var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc' };
var dst = { a: 2, b: { b1: 'xxx', b2: 'yyy' } };
copyProps(src, dst);
// => { a: 1, b: { b1: 'bbb', b2: 'yyy' }, c: 'ccc' }
```
Copy *src* to *dst* with property mapping (and return *dst*) :
```js
var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc', d: 'ddd' };
var dst = { f: { a: 2, b1: 'xxx', b2: 'yyy' }, e: 'zzz' };
copyProps(src, dst, {
a: 'f.a',
'b.b1': 'f.b1',
'b.b2': 'f.b2',
'c': 'f.c',
});
// => { f: { a: 1, b1: 'bbb', b2: 'yyy', c: 'ccc' }, e: 'zzz' }
```
Copy *src* to *dst* with convert function (and return *dst*) :
```js
var src = { a: 1, b: { b1: 'bbb' } };
var dst = { a: 0 };
copyProps(src, dst, function(srcInfo) {
if (srcInfo.keyChain === 'a') {
return srcInfo.value * 2;
}
if (srcInfo.keyChain === 'b.b1') {
return srcInfo.value.toUpperCase();
}
});
// => { a: 2, b: { b1: 'BBB' } }
```
Can use an array instead of a map as property mapping :
```js
var src = { a: 1, b: { c: 'CCC' }, d: { e: 'EEE' } };
var dst = { a: 9, b: { c: 'xxx' }, d: { e: 'yyy' } };
var fromto = [ 'b.c', 'd.e' ];
copyProps(src, dst, fromto);
// => { a: 9, b: { c: 'CCC' }, d: { e: 'EEE' } }
```
Can copy reversively (from *dst* to *src*) by reverse flag (and return *src*):
```js
var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc' };
var dst = { a: 2, b: { b1: 'xxx', b2: 'yyy' } };
copyProps(src, dst, true);
// => { a: 2, b: { b1: 'xxx', b2: 'yyy' }, c: 'ccc' }
```
```js
var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc', d: 'ddd' };
var dst = { f: { a: 2, b1: 'xxx', b2: 'yyy' }, e: 'zzz' };
copyProps(src, dst, {
a: 'f.a',
'b.b2': 'f.b2',
'c': 'f.c',
}, true);
// => { a: 2, b: { b1: 'bbb', b2: 'yyy' }, c: 'ccc', d: 'ddd' }
```
If a value of source property is undefined (when not using converter), or a result of converter is undefined (when using converter), the value is not copied.
```js
var src = { a: 'A', b: undefined, c: null, d: 1 };
var dst = { a: 'a', b: 'b', c: 'c' };
copyProps(src, dst, function(srcInfo) {
if (srcInfo.keyChain === 'd') {
return undefined;
} else {
return srcInfo.value;
}
});
// => { a: 'A', b: 'b', c: null }
```
You can operate the parent node object directly in converter.
```js
var src = { a: 1, b: 2 };
var dst = {};
copyProps(src, dst, function(srcInfo, dstInfo) {
Object.defineProperty(dstInfo.parent, dstInfo.key, {
writable: false,
enumerable: true,
configurable: false,
value: srcInfo.value * 2
})
}); // => { a: 2, b: 4 }
dst // => { a: 2, b: 4 }
dst.a = 9
dst // -> { a: 2, b: 4 }
```
## API
### <u>copyProps(src, dst [, fromto] [, converter] [, reverse]) => object</u>
Copy properties of *src* to *dst* deeply.
If *fromto* is given, it is able to copy between different properties.
If *converter* is given, it is able to convert the terminal values.
#### Parameters:
| Parameter | Type | Description |
|:------------|:------:|:-------------------------------------------------|
| *src* | object | A source object of copy. |
| *dst* | object | A destinate object of copy. |
| *fromto* | object &#124; array | An object mapping properties between *src* and *dst*. (Optional) |
| *converter* |function| A function to convert terminal values in *src*. (Optional) |
| *reverse* |boolean | True, if copying reversively from dst to src and returns src object. `fromto` is also reversively used from value to key. This default value is `false`. (Optional) |
#### Returns:
*dst* object after copying.
**Type:** object
* **Format of <i>fromto</i>**
*fromto* is a non-nested key-value object. And the *key*s are property key chains of *src* and the *value*s are property key chains of *dst*.
The key chain is a string which is concatenated property keys on each level with dots, like `'aaa.bbb.ccc'`.
The following example copys the value of `src.aaa.bbb.ccc` to `dst.xxx.yyy`.
```js
copyProps(src, dst, {
'aaa.bbb.ccc' : 'xxx.yyy'
})
```
*fromto* can be an array. In that case, the array works as a map which has pairs of same key and value.
* **API of <i>converter</i>**
**<u>converter(srcInfo, dstInfo) : Any</u>**
*converter* is a function to convert terminal values of propeerties of *src*.
**Parameters:**
| Parameter | Type | Description |
|:------------|:------:|:---------------------------------------------|
| *srcInfo* | object | An object which has informations about the current node of *src*. |
| *dstInfo* | object | An object which has informations about the current node of *dst*. |
**Return:**
The converted value to be set as a destination property value. If this value is undefined, the destination property is not set to the destination node object.
**Type:** *Any*
* **Properties of <i>srcInfo</i> and <i>dstInfo</i>**
*srcInfo* and *dstInfo* has same properties, as follows:
| Property | Type | Description |
|:-----------|:------:|:------------------------------------------|
| *value* | *Any* | The value of the current node. |
| *key* | string | The key name of the current node. |
| *keyChain* | string | The full key of the current node concatenated with dot. |
| *depth* | number | The depth of the current node. |
| *parent* | object | The parent node of the current node. |
## License
Copyright (C) 2016-2021 Gulp Team.
This program is free software under [MIT][mit-url] License.
See the file LICENSE in this distribution for more details.
[repo-url]: https://github.com/gulpjs/copy-props/
[npm-img]: https://img.shields.io/badge/npm-v2.0.5-blue.svg
[npm-url]: https://www.npmjs.org/package/copy-props/
[mit-img]: https://img.shields.io/badge/license-MIT-green.svg
[mit-url]: https://opensource.org/licenses.MIT
[travis-img]: https://travis-ci.org/gulpjs/copy-props.svg?branch=master
[travis-url]: https://travis-ci.org/gulpjs/copy-props
[appveyor-img]: https://ci.appveyor.com/api/projects/status/github/gulpjs/copy-props?branch=master&svg=true
[appveyor-url]: https://ci.appveyor.com/project/gulpjs/copy-props
[coverage-img]: https://coveralls.io/repos/github/gulpjs/copy-props/badge.svg?branch=master
[coverage-url]: https://coveralls.io/github/gulpjs/copy-props?branch=master

234
node_modules/copy-props/index.js generated vendored Normal file
View File

@@ -0,0 +1,234 @@
'use strict';
var eachProps = require('each-props');
var isPlainObject = require('is-plain-object').isPlainObject;
module.exports = function(src, dst, fromto, converter, reverse) {
if (!isObject(src)) {
src = {};
}
if (!isObject(dst)) {
dst = {};
}
if (isPlainObject(fromto)) {
fromto = onlyValueIsString(fromto);
} else if (Array.isArray(fromto)) {
fromto = arrayToObject(fromto);
} else if (typeof fromto === 'boolean') {
reverse = fromto;
converter = noop;
fromto = null;
} else if (typeof fromto === 'function') {
reverse = converter;
converter = fromto;
fromto = null;
} else {
fromto = null;
}
if (typeof converter !== 'function') {
if (typeof converter === 'boolean') {
reverse = converter;
converter = noop;
} else {
converter = noop;
}
}
if (typeof reverse !== 'boolean') {
reverse = false;
}
if (reverse) {
var tmp = src;
src = dst;
dst = tmp;
if (fromto) {
fromto = invert(fromto);
}
}
var opts = {
dest: dst,
fromto: fromto,
convert: converter,
};
if (fromto) {
eachProps(src, copyWithFromto, opts);
setParentEmptyObject(dst, fromto);
} else {
eachProps(src, copyWithoutFromto, opts);
}
return dst;
};
function copyWithFromto(value, keyChain, nodeInfo) {
if (isPlainObject(value)) {
return;
}
var dstKeyChains = nodeInfo.fromto[keyChain];
if (!dstKeyChains) {
return;
}
delete nodeInfo.fromto[keyChain];
if (!Array.isArray(dstKeyChains)) {
dstKeyChains = [dstKeyChains];
}
var srcInfo = {
keyChain: keyChain,
value: value,
key: nodeInfo.name,
depth: nodeInfo.depth,
parent: nodeInfo.parent,
};
for (var i = 0, n = dstKeyChains.length; i < n; i++) {
setDeep(nodeInfo.dest, dstKeyChains[i], function(parent, key, depth) {
var dstInfo = {
keyChain: dstKeyChains[i],
value: parent[key],
key: key,
depth: depth,
parent: parent,
};
return nodeInfo.convert(srcInfo, dstInfo);
});
}
}
function copyWithoutFromto(value, keyChain, nodeInfo) {
if (isPlainObject(value)) {
for (var k in value) {
return;
}
setDeep(nodeInfo.dest, keyChain, newObject);
return;
}
var srcInfo = {
keyChain: keyChain,
value: value,
key: nodeInfo.name,
depth: nodeInfo.depth,
parent: nodeInfo.parent,
};
setDeep(nodeInfo.dest, keyChain, function(parent, key, depth) {
var dstInfo = {
keyChain: keyChain,
value: parent[key],
key: key,
depth: depth,
parent: parent,
};
return nodeInfo.convert(srcInfo, dstInfo);
});
}
function newObject() {
return {};
}
function noop(srcInfo) {
return srcInfo.value;
}
function onlyValueIsString(obj) {
var newObj = {};
for (var key in obj) {
var val = obj[key];
if (typeof val === 'string') {
newObj[key] = val;
}
}
return newObj;
}
function arrayToObject(arr) {
var obj = {};
for (var i = 0, n = arr.length; i < n; i++) {
var elm = arr[i];
if (typeof elm === 'string') {
obj[elm] = elm;
}
}
return obj;
}
function invert(fromto) {
var inv = {};
for (var key in fromto) {
var val = fromto[key];
if (!inv[val]) {
inv[val] = [];
}
inv[val].push(key);
}
return inv;
}
function setDeep(obj, keyChain, valueCreator) {
_setDeep(obj, keyChain.split('.'), 1, valueCreator);
}
function _setDeep(obj, keyElems, depth, valueCreator) {
var key = keyElems.shift();
if (isPossibilityOfPrototypePollution(key)) {
return;
}
if (!keyElems.length) {
var value = valueCreator(obj, key, depth);
if (value === undefined) {
return;
}
if (isPlainObject(value)) { // value is always an empty object.
if (isPlainObject(obj[key])) {
return;
}
}
obj[key] = value;
return;
}
if (!isPlainObject(obj[key])) {
obj[key] = {};
}
_setDeep(obj[key], keyElems, depth + 1, valueCreator);
}
function setParentEmptyObject(obj, fromto) {
for (var srcKeyChain in fromto) {
var dstKeyChains = fromto[srcKeyChain];
if (!Array.isArray(dstKeyChains)) {
dstKeyChains = [dstKeyChains];
}
for (var i = 0, n = dstKeyChains.length; i < n; i++) {
setDeep(obj, dstKeyChains[i], newUndefined);
}
}
}
function newUndefined() {
return undefined;
}
function isObject(v) {
return Object.prototype.toString.call(v) === '[object Object]';
}
function isPossibilityOfPrototypePollution(key) {
return (key === '__proto__' || key === 'constructor');
}

View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014-2017, Jon Schlinkert.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,125 @@
# is-plain-object [![NPM version](https://img.shields.io/npm/v/is-plain-object.svg?style=flat)](https://www.npmjs.com/package/is-plain-object) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![NPM total downloads](https://img.shields.io/npm/dt/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-plain-object.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-plain-object)
> Returns true if an object was created by the `Object` constructor, or Object.create(null).
Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
## Install
Install with [npm](https://www.npmjs.com/):
```sh
$ npm install --save is-plain-object
```
Use [isobject](https://github.com/jonschlinkert/isobject) if you only want to check if the value is an object and not an array or null.
## Usage
with es modules
```js
import { isPlainObject } from 'is-plain-object';
```
or with commonjs
```js
const { isPlainObject } = require('is-plain-object');
```
**true** when created by the `Object` constructor, or Object.create(null).
```js
isPlainObject(Object.create({}));
//=> true
isPlainObject(Object.create(Object.prototype));
//=> true
isPlainObject({foo: 'bar'});
//=> true
isPlainObject({});
//=> true
isPlainObject(null);
//=> true
```
**false** when not created by the `Object` constructor.
```js
isPlainObject(1);
//=> false
isPlainObject(['foo', 'bar']);
//=> false
isPlainObject([]);
//=> false
isPlainObject(new Foo);
//=> false
isPlainObject(Object.create(null));
//=> false
```
## About
<details>
<summary><strong>Contributing</strong></summary>
Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
</details>
<details>
<summary><strong>Running Tests</strong></summary>
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
```sh
$ npm install && npm test
```
</details>
<details>
<summary><strong>Building docs</strong></summary>
_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
To generate the readme, run the following command:
```sh
$ npm install -g verbose/verb#dev verb-generate-readme && verb
```
</details>
### Related projects
You might also be interested in these projects:
* [is-number](https://www.npmjs.com/package/is-number): Returns true if a number or string value is a finite number. Useful for regex… [more](https://github.com/jonschlinkert/is-number) | [homepage](https://github.com/jonschlinkert/is-number "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.")
* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
### Contributors
| **Commits** | **Contributor** |
| --- | --- |
| 19 | [jonschlinkert](https://github.com/jonschlinkert) |
| 6 | [TrySound](https://github.com/TrySound) |
| 6 | [stevenvachon](https://github.com/stevenvachon) |
| 3 | [onokumus](https://github.com/onokumus) |
| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
### Author
**Jon Schlinkert**
* [GitHub Profile](https://github.com/jonschlinkert)
* [Twitter Profile](https://twitter.com/jonschlinkert)
* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert)
### License
Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE).
***
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 28, 2019._

View File

@@ -0,0 +1,38 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObject(o) {
return Object.prototype.toString.call(o) === '[object Object]';
}
function isPlainObject(o) {
var ctor,prot;
if (isObject(o) === false) return false;
// If has modified constructor
ctor = o.constructor;
if (ctor === undefined) return true;
// If has modified prototype
prot = ctor.prototype;
if (isObject(prot) === false) return false;
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false;
}
// Most likely a plain Object
return true;
}
exports.isPlainObject = isPlainObject;

View File

@@ -0,0 +1,34 @@
/*!
* is-plain-object <https://github.com/jonschlinkert/is-plain-object>
*
* Copyright (c) 2014-2017, Jon Schlinkert.
* Released under the MIT License.
*/
function isObject(o) {
return Object.prototype.toString.call(o) === '[object Object]';
}
function isPlainObject(o) {
var ctor,prot;
if (isObject(o) === false) return false;
// If has modified constructor
ctor = o.constructor;
if (ctor === undefined) return true;
// If has modified prototype
prot = ctor.prototype;
if (isObject(prot) === false) return false;
// If constructor does not have an Object-specific method
if (prot.hasOwnProperty('isPrototypeOf') === false) {
return false;
}
// Most likely a plain Object
return true;
}
export { isPlainObject };

View File

@@ -0,0 +1 @@
export function isPlainObject(o: any): boolean;

View File

@@ -0,0 +1,85 @@
{
"name": "is-plain-object",
"description": "Returns true if an object was created by the `Object` constructor, or Object.create(null).",
"version": "5.0.0",
"homepage": "https://github.com/jonschlinkert/is-plain-object",
"author": "Jon Schlinkert (https://github.com/jonschlinkert)",
"contributors": [
"Jon Schlinkert (http://twitter.com/jonschlinkert)",
"Osman Nuri Okumuş (http://onokumus.com)",
"Steven Vachon (https://svachon.com)",
"(https://github.com/wtgtybhertgeghgtwtg)",
"Bogdan Chadkin (https://github.com/TrySound)"
],
"repository": "jonschlinkert/is-plain-object",
"bugs": {
"url": "https://github.com/jonschlinkert/is-plain-object/issues"
},
"license": "MIT",
"main": "dist/is-plain-object.js",
"module": "dist/is-plain-object.mjs",
"types": "is-plain-object.d.ts",
"files": [
"is-plain-object.d.ts",
"dist"
],
"exports": {
".": {
"import": "./dist/is-plain-object.mjs",
"require": "./dist/is-plain-object.js"
},
"./package.json": "./package.json"
},
"engines": {
"node": ">=0.10.0"
},
"scripts": {
"build": "rollup -c",
"test_browser": "mocha-headless-chrome --args=disable-web-security -f test/browser.html",
"test_node": "mocha -r esm",
"test": "npm run test_node && npm run build && npm run test_browser",
"prepare": "rollup -c"
},
"devDependencies": {
"chai": "^4.2.0",
"esm": "^3.2.22",
"gulp-format-md": "^1.0.0",
"mocha": "^6.1.4",
"mocha-headless-chrome": "^3.1.0",
"rollup": "^2.22.1"
},
"keywords": [
"check",
"is",
"is-object",
"isobject",
"javascript",
"kind",
"kind-of",
"object",
"plain",
"type",
"typeof",
"value"
],
"verb": {
"toc": false,
"layout": "default",
"tasks": [
"readme"
],
"plugins": [
"gulp-format-md"
],
"related": {
"list": [
"is-number",
"isobject",
"kind-of"
]
},
"lint": {
"reflinks": true
}
}
}

51
node_modules/copy-props/package.json generated vendored Normal file
View File

@@ -0,0 +1,51 @@
{
"name": "copy-props",
"version": "2.0.5",
"description": "Copy properties deeply between two objects.",
"main": "index.js",
"files": [
"index.js"
],
"scripts": {
"lint": "eslint .",
"test": "mocha",
"coverage": "nyc --reporter=lcov --reporter=text-summary npm test",
"coveralls": "nyc --reporter=text-lcov npm test | coveralls",
"web:build": "browserify index.js --standalone copyProps -o web/copy-props.js && cd web && uglifyjs copy-props.js --compress --mangle -o copy-props.min.js --source-map url=copy-props.min.js.map",
"chrome:install": "npm i --no-save mocha-chrome",
"chrome:test": "mocha-chrome test/web/browser-test.html",
"build": "npm run lint && npm run coverage && npm run web:build && node test/web/make.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/gulpjs/copy-props.git"
},
"keywords": [
"object",
"property",
"copy",
"deep",
"map",
"convert"
],
"author": "Gulp Team <team@gulpjs.com> (https://gulpjs.com/)",
"license": "MIT",
"bugs": {
"url": "https://github.com/gulpjs/copy-props/issues"
},
"homepage": "https://github.com/gulpjs/copy-props#readme",
"dependencies": {
"each-props": "^1.3.2",
"is-plain-object": "^5.0.0"
},
"devDependencies": {
"browserify": "^16.5.2",
"chai": "^3.5.0",
"coveralls": "^3.1.0",
"eslint": "^7.9.0",
"eslint-config-gulp": "^5.0.1",
"mocha": "^3.5.3",
"nyc": "^15.1.0",
"uglify-js": "^3.10.4"
}
}