diff --git a/.depunusedignore b/.depunusedignore
new file mode 100644
index 00000000..9096200b
--- /dev/null
+++ b/.depunusedignore
@@ -0,0 +1 @@
+eslint
diff --git a/.idea/robo-config.iml b/.idea/robo-config.iml
index 6c3da9e9..91696c31 100644
--- a/.idea/robo-config.iml
+++ b/.idea/robo-config.iml
@@ -10,4 +10,4 @@
-
\ No newline at end of file
+
diff --git a/package.json b/package.json
index f3be7656..eacbdc52 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,8 @@
"babel-eslint": "10.0.1",
"chai": "4.2.0",
"coveralls": "3.0.3",
- "js-gardener": "1.38.2",
+ "eslint": "5.15.1",
+ "js-gardener": "1.38.3",
"nyc": "13.3.0",
"semantic-release": "15.13.3",
"tmp": "0.0.33"
@@ -94,6 +95,7 @@
"joi": "14.3.1",
"lodash.clonedeep": "4.5.0",
"lodash.difference": "4.5.0",
+ "object-deep-contain": "1.0.4",
"object-scan": "5.0.3",
"smart-fs": "1.3.0"
}
diff --git a/src/configs/jetbrains/@common.json b/src/configs/jetbrains/@common.json
new file mode 100644
index 00000000..944c5861
--- /dev/null
+++ b/src/configs/jetbrains/@common.json
@@ -0,0 +1,5 @@
+{
+ "configs": [
+ "jetbrains/exclude-coverage-folder"
+ ]
+}
diff --git a/src/configs/jetbrains/exclude-coverage-folder.json b/src/configs/jetbrains/exclude-coverage-folder.json
new file mode 100644
index 00000000..0dd941fd
--- /dev/null
+++ b/src/configs/jetbrains/exclude-coverage-folder.json
@@ -0,0 +1,13 @@
+{
+ "target": ".idea/${projectName}.iml",
+ "format": "xml",
+ "strategy": "xml-merge",
+ "snippets": [
+ {
+ "name": "exclude-folder-from-module",
+ "variables": {
+ "folder": "coverage"
+ }
+ }
+ ]
+}
diff --git a/src/configs/jetbrains/snippets/exclude-folder-from-module.iml b/src/configs/jetbrains/snippets/exclude-folder-from-module.iml
new file mode 100644
index 00000000..b52c64f9
--- /dev/null
+++ b/src/configs/jetbrains/snippets/exclude-folder-from-module.iml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/util/config.js b/src/util/config.js
index 44bb8c89..cb7b0d02 100644
--- a/src/util/config.js
+++ b/src/util/config.js
@@ -10,6 +10,7 @@ const strategies = require('./strategies');
const configSchema = Joi.object().keys({
target: Joi.string(),
+ format: Joi.string().allow(null),
strategy: Joi.string().valid(...Object.keys(strategies)),
snippets: Joi.array().items(
Joi.string(),
@@ -20,7 +21,7 @@ const configSchema = Joi.object().keys({
).min(1),
configs: Joi.array().items(Joi.string())
})
- .and('target', 'strategy', 'snippets')
+ .and('target', 'strategy', 'snippets', 'format')
.xor('target', 'configs')
.unknown(false)
.required();
@@ -34,7 +35,7 @@ const loadSnippet = (snippetDir, snippetName, config, snippetVars) => {
const fileName = sls.guessFile(path.join(snippetDir, snippetName));
assert(fileName !== null, `Invalid Snippet File Name: ${snippetName}`);
- const snippet = sls.smartRead(fileName);
+ const snippet = sls.smartRead(fileName, { treatAs: config.format });
return populateVars(snippet, snippetVars, false);
};
@@ -50,6 +51,9 @@ module.exports.loadConfig = (configName, variables) => {
return null;
}
const config = sls.smartRead(configFilePath);
+ if (config.target !== undefined) {
+ config.format = config.format || null;
+ }
assert(Joi.validate(config, configSchema).error === null, `Invalid Config Detected: ${configName}`);
assert(configName.includes('/@') === (config.configs !== undefined), `Invalid Config Name Detected: ${configName}`);
@@ -57,6 +61,7 @@ module.exports.loadConfig = (configName, variables) => {
if (typeof config.target === 'string') {
// load and merge config snippets into config
const snippetDir = path.join(__dirname, '..', 'configs', configName.split('/')[0], 'snippets');
+ config.target = populateVars([config.target], variables, true)[0];
config.toWrite = deepmerge.all(config.snippets
.map(m => (typeof m === 'string' ? [m, {}] : [m.name, m.variables]))
.map(([snippetName, snippetVars]) => [snippetName, populateVars(snippetVars, variables, true)])
@@ -73,6 +78,7 @@ module.exports.applyConfig = (config, projectRoot) => {
const target = path.join(projectRoot, config.target);
return sls.smartWrite(target, config.toWrite, {
+ treatAs: config.format,
mergeStrategy: strategies[config.strategy]
});
};
diff --git a/src/util/strategies.js b/src/util/strategies.js
index 8fb8a22d..3a3fa8d9 100644
--- a/src/util/strategies.js
+++ b/src/util/strategies.js
@@ -1,4 +1,5 @@
const assert = require('assert');
+const xmlMerge = require('./xml-merge');
module.exports = {
'merge-below-title': (existing, changeset) => {
@@ -32,5 +33,6 @@ module.exports = {
return changeset.concat(existing);
},
'merge-shallow': (existing, changeset) => Object.assign(existing, changeset),
+ 'xml-merge': (existing, changeset) => xmlMerge(existing, changeset),
overwrite: (existing, changeset) => changeset
};
diff --git a/src/util/xml-merge.js b/src/util/xml-merge.js
new file mode 100644
index 00000000..5ee61eed
--- /dev/null
+++ b/src/util/xml-merge.js
@@ -0,0 +1,42 @@
+const objectDeepContain = require('object-deep-contain');
+
+const mergeRec = (target, changeset) => {
+ if (changeset === undefined) {
+ return target;
+ }
+
+ const isArray = Array.isArray(target);
+ if (isArray !== Array.isArray(changeset)) {
+ return changeset;
+ }
+
+ if (isArray) {
+ let next = 0;
+ for (let idx = 0; idx < target.length && next < changeset.length; idx += 1) {
+ const targetElement = target[idx];
+ const toInsert = changeset[next];
+
+ if (objectDeepContain(
+ targetElement,
+ Object
+ .entries(toInsert)
+ .reduce((p, [k, v]) => Object.assign(p, k === 'elements' ? {} : { [k]: v }), {})
+ )) {
+ // eslint-disable-next-line no-param-reassign
+ target[idx] = mergeRec(targetElement, toInsert);
+ next += 1;
+ }
+ }
+ target.push(...changeset.slice(next));
+ return target;
+ }
+
+ if (target instanceof Object && changeset instanceof Object) {
+ return [...new Set(Object.keys(target).concat(Object.keys(changeset)))]
+ .reduce((p, k) => Object.assign(p, { [k]: mergeRec(target[k], changeset[k]) }), {});
+ }
+
+ return changeset;
+};
+
+module.exports = (target, changeset) => Object.assign(target, { data: mergeRec(target.data, changeset.data) });
diff --git a/test/index.spec.js b/test/index.spec.js
index c33d4994..84851ab9 100644
--- a/test/index.spec.js
+++ b/test/index.spec.js
@@ -4,10 +4,14 @@ const robo = require('../src/index');
it('Executing Configuration', () => {
expect(robo({
- configs: ['assorted/@npm-opensource'],
+ configs: [
+ 'assorted/@npm-opensource',
+ 'jetbrains/@common'
+ ],
variables: {
repoKey: 'blackflux/robo-config',
repoName: 'robo-config',
+ projectName: 'robo-config',
owner: 'simlu',
authorName: 'Lukas Siemon',
mergeBot: 'MrsFlux'
diff --git a/test/util/xml-merge.spec.js b/test/util/xml-merge.spec.js
new file mode 100644
index 00000000..5d7e24e4
--- /dev/null
+++ b/test/util/xml-merge.spec.js
@@ -0,0 +1,51 @@
+const fs = require('fs');
+const path = require('path');
+const expect = require('chai').expect;
+const tmp = require('tmp');
+const sfs = require('smart-fs');
+const xmlMerge = require('../../src/util/xml-merge');
+
+describe('Integration xml-merge.js', () => {
+ fs.readdirSync(path.join(__dirname, 'xml-merge'))
+ .forEach((f) => {
+ it(`Testing '${f}'`, () => {
+ const target = sfs.smartRead(path.join(__dirname, 'xml-merge', f, 'target.xml'));
+ const changeset = sfs.smartRead(path.join(__dirname, 'xml-merge', f, 'changeset.xml'));
+ const result = sfs.smartRead(path.join(__dirname, 'xml-merge', f, 'result.xml'));
+ const merged = xmlMerge(target, changeset);
+ expect(result).to.deep.equal(merged);
+ });
+ });
+});
+
+describe('Unit xml-merge.js', () => {
+ let dir;
+ beforeEach(() => {
+ dir = tmp.dirSync({ keep: false, unsafeCleanup: true }).name;
+ });
+
+ const executeTest = (target, changeset, result) => {
+ fs.writeFileSync(path.join(dir, 'target.xml'), target);
+ fs.writeFileSync(path.join(dir, 'changeset.xml'), changeset);
+ fs.writeFileSync(path.join(dir, 'result.xml'), result);
+
+ const merged = xmlMerge(
+ sfs.smartRead(path.join(dir, 'target.xml')),
+ sfs.smartRead(path.join(dir, 'changeset.xml'))
+ );
+ expect(merged).to.deep.equal(sfs.smartRead(path.join(dir, 'result.xml')));
+ };
+
+ it('Test Simple Merge', () => {
+ executeTest('', '', '');
+ executeTest('', '', '');
+ });
+
+ it('Test Header Merge', () => {
+ executeTest(
+ '',
+ '',
+ ''
+ );
+ });
+});
diff --git a/test/util/xml-merge/append/changeset.xml b/test/util/xml-merge/append/changeset.xml
new file mode 100644
index 00000000..c96de081
--- /dev/null
+++ b/test/util/xml-merge/append/changeset.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/test/util/xml-merge/append/result.xml b/test/util/xml-merge/append/result.xml
new file mode 100644
index 00000000..82896496
--- /dev/null
+++ b/test/util/xml-merge/append/result.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/append/target.xml b/test/util/xml-merge/append/target.xml
new file mode 100644
index 00000000..b25f125e
--- /dev/null
+++ b/test/util/xml-merge/append/target.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/test/util/xml-merge/header/changeset.xml b/test/util/xml-merge/header/changeset.xml
new file mode 100644
index 00000000..575dbaa0
--- /dev/null
+++ b/test/util/xml-merge/header/changeset.xml
@@ -0,0 +1 @@
+
diff --git a/test/util/xml-merge/header/result.xml b/test/util/xml-merge/header/result.xml
new file mode 100644
index 00000000..800c39c1
--- /dev/null
+++ b/test/util/xml-merge/header/result.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/test/util/xml-merge/header/target.xml b/test/util/xml-merge/header/target.xml
new file mode 100644
index 00000000..bba4e4b5
--- /dev/null
+++ b/test/util/xml-merge/header/target.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/test/util/xml-merge/no-change/changeset.xml b/test/util/xml-merge/no-change/changeset.xml
new file mode 100644
index 00000000..45d954be
--- /dev/null
+++ b/test/util/xml-merge/no-change/changeset.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/no-change/result.xml b/test/util/xml-merge/no-change/result.xml
new file mode 100644
index 00000000..a594f5c1
--- /dev/null
+++ b/test/util/xml-merge/no-change/result.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/no-change/target.xml b/test/util/xml-merge/no-change/target.xml
new file mode 100644
index 00000000..a594f5c1
--- /dev/null
+++ b/test/util/xml-merge/no-change/target.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/target-first/changeset.xml b/test/util/xml-merge/target-first/changeset.xml
new file mode 100644
index 00000000..6cdcd370
--- /dev/null
+++ b/test/util/xml-merge/target-first/changeset.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/target-first/result.xml b/test/util/xml-merge/target-first/result.xml
new file mode 100644
index 00000000..6cdcd370
--- /dev/null
+++ b/test/util/xml-merge/target-first/result.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/target-first/target.xml b/test/util/xml-merge/target-first/target.xml
new file mode 100644
index 00000000..4decb2c1
--- /dev/null
+++ b/test/util/xml-merge/target-first/target.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/test/util/xml-merge/target-second/changeset.xml b/test/util/xml-merge/target-second/changeset.xml
new file mode 100644
index 00000000..45d954be
--- /dev/null
+++ b/test/util/xml-merge/target-second/changeset.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/target-second/result.xml b/test/util/xml-merge/target-second/result.xml
new file mode 100644
index 00000000..a594f5c1
--- /dev/null
+++ b/test/util/xml-merge/target-second/result.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/test/util/xml-merge/target-second/target.xml b/test/util/xml-merge/target-second/target.xml
new file mode 100644
index 00000000..7d3f8f6d
--- /dev/null
+++ b/test/util/xml-merge/target-second/target.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/yarn.lock b/yarn.lock
index 2761ed70..9d622722 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -213,22 +213,22 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
-"@octokit/endpoint@^3.1.1":
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.1.3.tgz#f6e9c2521b83b74367600e474b24efec2b0471c4"
- integrity sha512-vAWzeoj9Lzpl3V3YkWKhGzmDUoMfKpyxJhpq74/ohMvmLXDoEuAGnApy/7TRi3OmnjyX2Lr+e9UGGAD0919ohA==
+"@octokit/endpoint@^3.2.0":
+ version "3.2.3"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-3.2.3.tgz#bd9aea60cd94ce336656b57a5c9cb7f10be8f4f3"
+ integrity sha512-yUPCt4vMIOclox13CUxzuKiPJIFo46b/6GhUnUTw5QySczN1L0DtSxgmIZrZV4SAb9EyAqrceoyrWoYVnfF2AA==
dependencies:
deepmerge "3.2.0"
is-plain-object "^2.0.4"
universal-user-agent "^2.0.1"
url-template "^2.0.8"
-"@octokit/request@2.4.1":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.1.tgz#98c4d6870e4abe3ccdd2b9799034b4ae3f441c30"
- integrity sha512-nN8W24ZXEpJQJoVgMsGZeK9FOzxkc39Xn9ykseUpPpPMNEDFSvqfkCeqqKrjUiXRm72ubGLWG1SOz0aJPcgGww==
+"@octokit/request@2.4.2":
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-2.4.2.tgz#87c36e820dd1e43b1629f4f35c95b00cd456320b"
+ integrity sha512-lxVlYYvwGbKSHXfbPk5vxEA8w4zHOH1wobado4a9EfsyD3Cbhuhus1w0Ye9Ro0eMubGO8kNy5d+xNFisM3Tvaw==
dependencies:
- "@octokit/endpoint" "^3.1.1"
+ "@octokit/endpoint" "^3.2.0"
deprecation "^1.0.1"
is-plain-object "^2.0.4"
node-fetch "^2.3.0"
@@ -236,17 +236,19 @@
universal-user-agent "^2.0.1"
"@octokit/rest@^16.13.1":
- version "16.17.0"
- resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.17.0.tgz#3a8c0ff5290e25a48b11f6957aa90791c672c91e"
- integrity sha512-1RB7e4ptR/M+1Ik3Qn84pbppbSadBaCtpgFqgqsXn6s4ZVE6hqW9SOm6UW5yd3KT7ObVfdYUkhMlgR937oKyDw==
+ version "16.18.1"
+ resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.18.1.tgz#e6cbf111a8afc3d5ad44c98edf264124f1568ea0"
+ integrity sha512-ozKUH4KCusmPQ6xHxF2q1IDVM5tPbmmAUP69yRLd98BH16mqOVwMkm6zLCUJPD03IVhG+YNHShJDc077CTkIWg==
dependencies:
- "@octokit/request" "2.4.1"
+ "@octokit/request" "2.4.2"
before-after-hook "^1.4.0"
btoa-lite "^1.0.0"
+ deprecation "^1.0.1"
lodash.get "^4.4.2"
lodash.set "^4.3.2"
lodash.uniq "^4.5.0"
octokit-pagination-methods "^1.1.0"
+ once "^1.4.0"
universal-user-agent "^2.0.0"
url-template "^2.0.8"
@@ -342,9 +344,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
- version "11.11.1"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.1.tgz#9ee55ffce20f72e141863b0036a6e51c6fc09a1f"
- integrity sha512-2azXFP9n4aA2QNLkKm/F9pzKxgYj1SMawZ5Eh9iC21RH3XNcFsivLVU2NhpMgQm7YobSByvIol4c42ZFusXFHQ==
+ version "11.11.3"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.3.tgz#7c6b0f8eaf16ae530795de2ad1b85d34bf2f5c58"
+ integrity sha512-wp6IOGu1lxsfnrD+5mX6qwSwWuqsdkKKxTN4aQc4wByHAKZJf9/D4KXPQ1POUjEbnCP5LMggB0OEFNY9OTsMqg==
JSONStream@^1.0.4, JSONStream@^1.3.4:
version "1.3.5"
@@ -612,9 +614,9 @@ astral-regex@^1.0.0:
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
async-each@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
- integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.2.tgz#8b8a7ca2a658f927e9f307d6d1a42f4199f0f735"
+ integrity sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==
async@^2.5.0:
version "2.6.2"
@@ -2286,12 +2288,12 @@ find-cache-dir@^1.0.0:
pkg-dir "^2.0.0"
find-cache-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d"
- integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
dependencies:
commondir "^1.0.1"
- make-dir "^1.0.0"
+ make-dir "^2.0.0"
pkg-dir "^3.0.0"
find-npm-prefix@^1.0.2:
@@ -3477,10 +3479,10 @@ joi@14.3.1:
isemail "3.x.x"
topo "3.x.x"
-js-gardener@1.38.2:
- version "1.38.2"
- resolved "https://registry.yarnpkg.com/js-gardener/-/js-gardener-1.38.2.tgz#5986df5d1f722765d7fe439ff19b611a5726e233"
- integrity sha512-Bd/dlqM2OvZat7sbCZxC1TNf2pa4TaAZa0wGj4X2wcZZZvKviJ4DRd6lxMwOKNgEJVPhYWJhkY58YEcfaE6I3w==
+js-gardener@1.38.3:
+ version "1.38.3"
+ resolved "https://registry.yarnpkg.com/js-gardener/-/js-gardener-1.38.3.tgz#0c60e3526ab56ec445789c603ec9cd907addbfac"
+ integrity sha512-yj2+DM0dPmtVrft7BPQ84e7XlrmzOEyUYCwsWCU4utUtglK0DExuGb9c8cLUz7AOkuS/i7NZOEVX+UGeEhwTPg==
dependencies:
chalk "2.4.2"
eslint "5.15.1"
@@ -4075,12 +4077,12 @@ mem@^1.1.0:
mimic-fn "^1.0.0"
mem@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a"
- integrity sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025"
+ integrity sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==
dependencies:
map-age-cleaner "^0.1.1"
- mimic-fn "^1.0.0"
+ mimic-fn "^2.0.0"
p-is-promise "^2.0.0"
meow@^3.7.0:
@@ -4167,6 +4169,11 @@ mimic-fn@^1.0.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+mimic-fn@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde"
+ integrity sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==
+
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -4331,9 +4338,9 @@ mute-stream@~0.0.4:
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
nan@^2.9.2:
- version "2.12.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552"
- integrity sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==
+ version "2.13.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.1.tgz#a15bee3790bde247e8f38f1d446edcdaeb05f2dd"
+ integrity sha512-I6YB/YEuDeUZMmhscXKxGgZlFnhsn5y0hgOZBadkzfTRrZBtJDZeg6eQf7PYMIEclwmorTKK8GztsyOUSVBREA==
nanomatch@^1.2.9:
version "1.2.13"
@@ -4847,6 +4854,11 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
+object-deep-contain@1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/object-deep-contain/-/object-deep-contain-1.0.4.tgz#67aff0a661f9d3fbf2a5222af7341a9d0f22d75f"
+ integrity sha512-DvaKKA6M32cSkt3nWmLTbmThdr0Z6YjM9orEkXYWlk/RBiGJbWXBjrrn9PfkWxedItgXiBTYh6RsJfzsVtHHew==
+
object-keys@^1.0.11, object-keys@^1.0.12:
version "1.1.0"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032"
@@ -5471,9 +5483,9 @@ qs@~6.5.2:
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
query-string@^6.1.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.3.0.tgz#41ae8a61e1213c80b182d5db6cf129e05af89fc5"
- integrity sha512-jkpCkoHiAA2BYZvni5GieU3x860QDfkh2+M6bPnrYUywqOWbGwPq5VzntTS06ixX4GVHEiq2ZhlmGy/e9LQ3zA==
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.4.0.tgz#1566c0cec3a2da2d82c222ed3f9e2a921dba5e6a"
+ integrity sha512-Werid2I41/tJTqOGPJ3cC3vwrIh/8ZupBQbp7BSsqXzr+pTin3aMJ/EZb8UEuk7ZO3VqQFvq2qck/ihc6wqIdw==
dependencies:
decode-uri-component "^0.2.0"
strict-uri-encode "^2.0.0"
@@ -6193,9 +6205,9 @@ source-map-resolve@^0.5.0:
urix "^0.1.0"
source-map-support@^0.5.9:
- version "0.5.10"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
- integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
+ version "0.5.11"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.11.tgz#efac2ce0800355d026326a0ca23e162aeac9a4e2"
+ integrity sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"