dependabot-npm_and_yarn 0.125.0 → 0.125.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/README.md +29 -0
  3. data/helpers/lib/npm/conflicting-dependency-parser.js +76 -0
  4. data/helpers/lib/npm/index.js +3 -0
  5. data/helpers/lib/yarn/conflicting-dependency-parser.js +176 -0
  6. data/helpers/lib/yarn/fix-duplicates.js +5 -3
  7. data/helpers/lib/yarn/helpers.js +8 -1
  8. data/helpers/lib/yarn/index.js +3 -0
  9. data/helpers/package.json +3 -2
  10. data/helpers/test/npm/conflicting-dependency-parser.test.js +67 -0
  11. data/helpers/test/npm/fixtures/conflicting-dependency-parser/deeply-nested/package-lock.json +565 -0
  12. data/helpers/test/npm/fixtures/conflicting-dependency-parser/deeply-nested/package.json +14 -0
  13. data/helpers/test/npm/fixtures/conflicting-dependency-parser/nested/package-lock.json +188 -0
  14. data/helpers/test/npm/fixtures/conflicting-dependency-parser/nested/package.json +14 -0
  15. data/helpers/test/npm/fixtures/conflicting-dependency-parser/simple/package-lock.json +27 -0
  16. data/helpers/test/npm/fixtures/conflicting-dependency-parser/simple/package.json +14 -0
  17. data/helpers/test/npm/helpers.js +14 -0
  18. data/helpers/test/npm/updater.test.js +1 -15
  19. data/helpers/test/yarn/conflicting-dependency-parser.test.js +84 -0
  20. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/deeply-nested/package.json +14 -0
  21. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/deeply-nested/yarn.lock +496 -0
  22. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/dev-dependencies/package.json +14 -0
  23. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/dev-dependencies/yarn.lock +21 -0
  24. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/nested/package.json +14 -0
  25. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/nested/yarn.lock +172 -0
  26. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/simple/package.json +14 -0
  27. data/helpers/test/yarn/fixtures/conflicting-dependency-parser/simple/yarn.lock +21 -0
  28. data/helpers/test/yarn/helpers.js +11 -0
  29. data/helpers/yarn.lock +625 -30
  30. data/lib/dependabot/npm_and_yarn/file_fetcher.rb +2 -6
  31. data/lib/dependabot/npm_and_yarn/file_updater/npm_lockfile_updater.rb +1 -3
  32. data/lib/dependabot/npm_and_yarn/file_updater/npmrc_builder.rb +2 -6
  33. data/lib/dependabot/npm_and_yarn/file_updater/yarn_lockfile_updater.rb +5 -15
  34. data/lib/dependabot/npm_and_yarn/metadata_finder.rb +3 -9
  35. data/lib/dependabot/npm_and_yarn/requirement.rb +2 -6
  36. data/lib/dependabot/npm_and_yarn/update_checker.rb +15 -12
  37. data/lib/dependabot/npm_and_yarn/update_checker/conflicting_dependency_resolver.rb +69 -0
  38. data/lib/dependabot/npm_and_yarn/update_checker/dependency_files_builder.rb +94 -0
  39. data/lib/dependabot/npm_and_yarn/update_checker/latest_version_finder.rb +2 -6
  40. data/lib/dependabot/npm_and_yarn/update_checker/registry_finder.rb +1 -3
  41. data/lib/dependabot/npm_and_yarn/update_checker/subdependency_version_resolver.rb +24 -86
  42. data/lib/dependabot/npm_and_yarn/update_checker/version_resolver.rb +16 -85
  43. data/lib/dependabot/npm_and_yarn/version.rb +1 -3
  44. metadata +27 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f93a700a12bf8acc719d2716900e4fc5c17b5227ba84a6c6761b4736426d8a0
4
- data.tar.gz: 27df298a59ebf2d6c975b8e6370d21f70bc580fa74bd4134f31a060b152e61d7
3
+ metadata.gz: 74b4f8a2fdcbfb3b33dc587ee7fff5488bb2328e5d5cb59327520ce52a19e6f0
4
+ data.tar.gz: f8e09730aec68b7ff4745d58c6873539de25686cac0c10dc41ecff434e1a2435
5
5
  SHA512:
6
- metadata.gz: 416f6346d2784cce5a0e3d3d8422831b4654db8a7c23678d54599f16cd430ddfc50ad863c7eae1d3715d6bbb2e743d416f218b6b30cda14fb3ba285aca14c98d
7
- data.tar.gz: 73dc809d8ef956b018c6973a91b922e8b487aca2d3a2cdde11894d51f94b7a3fc07889035e11c7543ecbafc775ad870652be0e61f01abd0a00449cd93b978915
6
+ metadata.gz: 8338c4eae0027af367594c67c79befb5603a2c9534adffb0f6bc501e264c40e453643aa423d1cf18d8e7e87c3d9b99b384cbbc494d0548e5f05bc3dd904feb04
7
+ data.tar.gz: 542f15a0de016dd10b58c128e47f997b76a32cbc411945f6db40e3f5544760c2c683b83104ef5fbe194b5c3008e729bcafc9b6a3b0e47a329adab1bb1d59c49e
@@ -0,0 +1,29 @@
1
+ Native JavaScript helpers
2
+ -------------------------
3
+
4
+ This directory contains helper functions for npm and yarn, natively written in
5
+ Javascript so that we can utilize the package managers internal APIs and other
6
+ native tooling for these ecosystems.
7
+
8
+ These helpers are called from the Ruby code via `run.js`, they are passed
9
+ arguments via stdin and return JSON data to stdout.
10
+
11
+ ## Testing
12
+
13
+ When working on these helpers, it's convenient to write some high level tests in
14
+ JavaScript to make it easier to debug the code.
15
+
16
+ You can now run the tests from this directory by running:
17
+
18
+ ```
19
+ yarn test path/to/test.js
20
+ ```
21
+
22
+ ### Debugging
23
+
24
+ In order to run an interactive debugger:
25
+
26
+ - `node --inspect-brk node_modules/.bin/jest --runInBand path/to/test/test.js`
27
+ - In Chrome, nativate to chrome://inspect
28
+ - Click `Open dedicated DevTools for Node`
29
+ - You'll now be able to interactively debug using the chrome dev tools.
@@ -0,0 +1,76 @@
1
+ /* Conflicting dependency parser for npm
2
+ *
3
+ * Inputs:
4
+ * - directory containing a package.json and a yarn.lock
5
+ * - dependency name
6
+ * - target dependency version
7
+ *
8
+ * Outputs:
9
+ * - An array of objects with conflicting dependencies
10
+ */
11
+
12
+ const Arborist = require("@npmcli/arborist");
13
+ const semver = require("semver");
14
+
15
+ async function findConflictingDependencies(directory, depName, targetVersion) {
16
+ const arb = new Arborist({
17
+ path: directory,
18
+ });
19
+
20
+ return await arb.loadVirtual().then((tree) => {
21
+ const parents = [];
22
+ for (const node of tree.inventory.query("name", depName)) {
23
+ for (const edge of node.edgesIn) {
24
+ if (!semver.satisfies(targetVersion, edge.spec)) {
25
+ findTopLevelEdges(edge).forEach((topLevel) => {
26
+ explanation = buildExplanation(node, edge, topLevel);
27
+
28
+ parents.push({
29
+ explanation: explanation,
30
+ name: edge.from.name,
31
+ version: edge.from.version,
32
+ requirement: edge.spec,
33
+ });
34
+ });
35
+ }
36
+ }
37
+ }
38
+
39
+ return parents;
40
+ });
41
+ }
42
+
43
+ function buildExplanation(node, directEdge, topLevelEdge) {
44
+ if (directEdge.from === topLevelEdge.to) {
45
+ // The nodes parent is top-level
46
+ return `${directEdge.from.name}@${directEdge.from.version} requires ${directEdge.to.name}@${directEdge.spec}`;
47
+ } else if (topLevelEdge.to.edgesOut.has(directEdge.from.name)) {
48
+ // The nodes parent is a direct dependency of the top-level dependency
49
+ return (
50
+ `${topLevelEdge.to.name}@${topLevelEdge.to.version} requires ${directEdge.to.name}@${directEdge.spec} ` +
51
+ `via ${directEdge.from.name}@${directEdge.from.version}`
52
+ );
53
+ } else {
54
+ // The nodes parent is a transitive dependency of the top-level dependency
55
+ return (
56
+ `${topLevelEdge.to.name}@${topLevelEdge.to.version} requires ${directEdge.to.name}@${directEdge.spec} ` +
57
+ `via a transitive dependency on ${directEdge.from.name}@${directEdge.from.version}`
58
+ );
59
+ }
60
+ }
61
+
62
+ function findTopLevelEdges(edge, parents = []) {
63
+ edge.from.edgesIn.forEach((parent) => {
64
+ if (parent.from.edgesIn.size === 0) {
65
+ if (!parents.includes(parent)) {
66
+ parents.push(parent);
67
+ }
68
+ } else {
69
+ findTopLevelEdges(parent, parents);
70
+ }
71
+ });
72
+
73
+ return parents;
74
+ }
75
+
76
+ module.exports = { findConflictingDependencies };
@@ -1,9 +1,12 @@
1
1
  const updater = require("./updater");
2
2
  const peerDependencyChecker = require("./peer-dependency-checker");
3
3
  const subdependencyUpdater = require("./subdependency-updater");
4
+ const conflictingDependencyParser = require("./conflicting-dependency-parser");
4
5
 
5
6
  module.exports = {
6
7
  update: updater.updateDependencyFiles,
7
8
  updateSubdependency: subdependencyUpdater.updateDependencyFile,
8
9
  checkPeerDependencies: peerDependencyChecker.checkPeerDependencies,
10
+ findConflictingDependencies:
11
+ conflictingDependencyParser.findConflictingDependencies,
9
12
  };
@@ -0,0 +1,176 @@
1
+ /* Conflicting dependency parser for yarn
2
+ *
3
+ * Inputs:
4
+ * - directory containing a package.json and a yarn.lock
5
+ * - dependency name
6
+ * - target dependency version
7
+ *
8
+ * Outputs:
9
+ * - An array of objects with conflicting dependencies
10
+ */
11
+
12
+ const fs = require("fs");
13
+ const path = require("path");
14
+ const semver = require("semver");
15
+ const { parse } = require("./lockfile-parser");
16
+ const { LOCKFILE_ENTRY_REGEX } = require("./helpers");
17
+
18
+ async function findConflictingDependencies(directory, depName, targetVersion) {
19
+ const lockfileJson = await parse(directory);
20
+ const packageJson = fs
21
+ .readFileSync(path.join(directory, "package.json"))
22
+ .toString();
23
+ const dependencyTypes = [
24
+ "dependencies",
25
+ "devDependencies",
26
+ "optionalDependencies",
27
+ ];
28
+ const topLevelDependencies = dependencyTypes.flatMap((type) => {
29
+ return Object.entries(JSON.parse(packageJson)[type] || {});
30
+ });
31
+
32
+ const conflictingParents = topLevelDependencies.flatMap(
33
+ ([topLevelDepName, topLevelRequirement]) => {
34
+ const topLevelSpec = {
35
+ name: topLevelDepName,
36
+ requirement: topLevelRequirement,
37
+ };
38
+
39
+ return Array.from(
40
+ findConflictingParentDependencies(
41
+ topLevelDepName,
42
+ topLevelRequirement,
43
+ depName,
44
+ targetVersion,
45
+ topLevelSpec,
46
+ lockfileJson
47
+ ).values()
48
+ );
49
+ }
50
+ );
51
+
52
+ return conflictingParents.map((parentSpec) => {
53
+ const explanation = buildExplanation(parentSpec, depName);
54
+ return {
55
+ explanation: explanation,
56
+ name: parentSpec.name,
57
+ version: parentSpec.version,
58
+ requirement: parentSpec.requirement,
59
+ };
60
+ });
61
+ }
62
+
63
+ function buildExplanation(parentSpec, targetDepName) {
64
+ if (
65
+ parentSpec.name === parentSpec.topLevelSpec.name &&
66
+ parentSpec.version === parentSpec.topLevelSpec.version
67
+ ) {
68
+ // The nodes parent is top-level
69
+ return (
70
+ `${parentSpec.name}@${parentSpec.version} requires ${targetDepName}` +
71
+ `@${parentSpec.requirement}`
72
+ );
73
+ } else if (
74
+ parentSpec.transitiveSpec.name === parentSpec.topLevelSpec.name &&
75
+ parentSpec.transitiveSpec.version === parentSpec.topLevelSpec.version
76
+ ) {
77
+ // The nodes parent is a direct dependency of the top-level dependency
78
+ return (
79
+ `${parentSpec.topLevelSpec.name}@${parentSpec.topLevelSpec.version} requires ` +
80
+ `${targetDepName}@${parentSpec.requirement} ` +
81
+ `via ${parentSpec.name}@${parentSpec.version}`
82
+ );
83
+ } else {
84
+ // The nodes parent is a transitive dependency of the top-level dependency
85
+ return (
86
+ `${parentSpec.topLevelSpec.name}@${parentSpec.topLevelSpec.version} requires ` +
87
+ `${targetDepName}@${parentSpec.requirement} ` +
88
+ `via a transitive dependency on ${parentSpec.name}@${parentSpec.version}`
89
+ );
90
+ }
91
+ }
92
+
93
+ function findConflictingParentDependencies(
94
+ dependency,
95
+ requirement,
96
+ targetDep,
97
+ targetversion,
98
+ topLevelSpec,
99
+ lockfileJson,
100
+ transitiveSpec = {},
101
+ checkedEntries = new Set(),
102
+ conflictingParents = new Map()
103
+ ) {
104
+ // Prevent infinte loops for circular dependencies by only checking each
105
+ // lockfile entry once
106
+ const checkedEntry = [dependency, requirement].join("@");
107
+ if (checkedEntries.has(checkedEntry)) {
108
+ return conflictingParents;
109
+ }
110
+
111
+ checkedEntries.add(checkedEntry);
112
+
113
+ for (const [entry, pkg] of Object.entries(lockfileJson)) {
114
+ const [_, parentDepName, parentDepRequirement] = entry.match(
115
+ LOCKFILE_ENTRY_REGEX
116
+ );
117
+ // Decorate the top-level dependency spec with an installed version as we
118
+ // only have the requirement from the package.json manifest
119
+ if (
120
+ topLevelSpec.name == parentDepName &&
121
+ topLevelSpec.requirement == parentDepRequirement
122
+ ) {
123
+ topLevelSpec.version = pkg.version;
124
+ }
125
+
126
+ if (
127
+ pkg.dependencies &&
128
+ dependency == parentDepName &&
129
+ requirement == parentDepRequirement
130
+ ) {
131
+ // Recursive check for sub-dependencies finding dependencies that don't
132
+ // allow the target version of the vulnerable dependency to be installed
133
+ for (const [subDepName, spec] of Object.entries(pkg.dependencies)) {
134
+ if (
135
+ subDepName === targetDep &&
136
+ !semver.satisfies(targetversion, spec)
137
+ ) {
138
+ // Only add the conflicting parent once per version preventing
139
+ // duplicate dependencies from circular graphs
140
+ const key = [parentDepName, pkg.version].join("@");
141
+ conflictingParents.set(key, {
142
+ name: parentDepName,
143
+ version: pkg.version,
144
+ requirement: spec,
145
+ transitiveSpec,
146
+ topLevelSpec,
147
+ });
148
+ } else {
149
+ // Keep track of the parent dependency as a way to check if the
150
+ // conflicting dependency ends up being a direct dependency of a
151
+ // top-level dependency
152
+ transitiveSpec = {
153
+ name: parentDepName,
154
+ version: pkg.version,
155
+ requirement: parentDepRequirement,
156
+ };
157
+ findConflictingParentDependencies(
158
+ subDepName,
159
+ spec,
160
+ targetDep,
161
+ targetversion,
162
+ topLevelSpec,
163
+ lockfileJson,
164
+ transitiveSpec,
165
+ checkedEntries,
166
+ conflictingParents
167
+ );
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ return conflictingParents;
174
+ }
175
+
176
+ module.exports = { findConflictingDependencies };
@@ -2,6 +2,7 @@ const parse = require("@dependabot/yarn-lib/lib/lockfile/parse").default;
2
2
  const stringify = require("@dependabot/yarn-lib/lib/lockfile/stringify")
3
3
  .default;
4
4
  const semver = require("semver");
5
+ const { LOCKFILE_ENTRY_REGEX } = require("./helpers");
5
6
 
6
7
  function flattenIndirectDependencies(packages) {
7
8
  return (packages || []).reduce((acc, { pkg }) => {
@@ -24,11 +25,12 @@ module.exports = (data, updatedDependencyName) => {
24
25
  const noHeader = !Boolean(data.match(/^# THIS IS AN AU/m));
25
26
 
26
27
  const packages = {};
27
- const re = /^(.*)@([^@]*?)$/;
28
28
 
29
29
  Object.entries(json).forEach(([name, pkg]) => {
30
- if (name.match(re)) {
31
- const [_, packageName, requestedVersion] = name.match(re);
30
+ if (name.match(LOCKFILE_ENTRY_REGEX)) {
31
+ const [_, packageName, requestedVersion] = name.match(
32
+ LOCKFILE_ENTRY_REGEX
33
+ );
32
34
  packages[packageName] = packages[packageName] || [];
33
35
  packages[packageName].push(
34
36
  Object.assign({}, { name, pkg, packageName, requestedVersion })
@@ -44,4 +44,11 @@ class LightweightInstall extends Install {
44
44
  }
45
45
  }
46
46
 
47
- module.exports = { isString, LightweightAdd, LightweightInstall };
47
+ const LOCKFILE_ENTRY_REGEX = /^(.*)@([^@]*?)$/;
48
+
49
+ module.exports = {
50
+ isString,
51
+ LightweightAdd,
52
+ LightweightInstall,
53
+ LOCKFILE_ENTRY_REGEX,
54
+ };
@@ -2,10 +2,13 @@ const lockfileParser = require("./lockfile-parser");
2
2
  const updater = require("./updater");
3
3
  const subdependencyUpdater = require("./subdependency-updater");
4
4
  const peerDependencyChecker = require("./peer-dependency-checker");
5
+ const conflictingDependencyParser = require("./conflicting-dependency-parser");
5
6
 
6
7
  module.exports = {
7
8
  parseLockfile: lockfileParser.parse,
8
9
  update: updater.updateDependencyFiles,
9
10
  updateSubdependency: subdependencyUpdater.updateDependencyFile,
10
11
  checkPeerDependencies: peerDependencyChecker.checkPeerDependencies,
12
+ findConflictingDependencies:
13
+ conflictingDependencyParser.findConflictingDependencies,
11
14
  };
@@ -10,12 +10,13 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@dependabot/yarn-lib": "^1.21.1",
13
+ "@npmcli/arborist": "^1.0.12",
13
14
  "detect-indent": "^6.0.0",
14
- "npm": "6.14.8",
15
+ "npm": "6.14.9",
15
16
  "semver": "^7.3.2"
16
17
  },
17
18
  "devDependencies": {
18
- "eslint": "^7.12.1",
19
+ "eslint": "^7.14.0",
19
20
  "eslint-plugin-prettier": "^3.1.4",
20
21
  "jest": "^26.6.2",
21
22
  "prettier": "^2.1.2",
@@ -0,0 +1,67 @@
1
+ const path = require("path");
2
+ const os = require("os");
3
+ const fs = require("fs");
4
+ const rimraf = require("rimraf");
5
+ const {
6
+ findConflictingDependencies,
7
+ } = require("../../lib/npm/conflicting-dependency-parser");
8
+ const helpers = require("./helpers");
9
+
10
+ describe("findConflictingDependencies", () => {
11
+ let tempDir;
12
+ beforeEach(() => {
13
+ tempDir = fs.mkdtempSync(os.tmpdir() + path.sep);
14
+ });
15
+ afterEach(() => rimraf.sync(tempDir));
16
+
17
+ it("finds conflicting dependencies", async () => {
18
+ helpers.copyDependencies("conflicting-dependency-parser/simple", tempDir);
19
+
20
+ const result = await findConflictingDependencies(tempDir, "abind", "2.0.0");
21
+ expect(result).toEqual([
22
+ {
23
+ explanation: "objnest@4.1.2 requires abind@^1.0.0",
24
+ name: "objnest",
25
+ version: "4.1.2",
26
+ requirement: "^1.0.0",
27
+ },
28
+ ]);
29
+ });
30
+
31
+ it("finds the top-level conflicting dependency", async () => {
32
+ helpers.copyDependencies("conflicting-dependency-parser/nested", tempDir);
33
+
34
+ const result = await findConflictingDependencies(tempDir, "abind", "2.0.0");
35
+ expect(result).toEqual([
36
+ {
37
+ explanation: "askconfig@4.0.4 requires abind@^1.0.4 via objnest@5.0.10",
38
+ name: "objnest",
39
+ version: "5.0.10",
40
+ requirement: "^1.0.4",
41
+ },
42
+ ]);
43
+ });
44
+
45
+ it("explains a deeply nested dependency", async () => {
46
+ helpers.copyDependencies(
47
+ "conflicting-dependency-parser/deeply-nested",
48
+ tempDir
49
+ );
50
+
51
+ const result = await findConflictingDependencies(tempDir, "abind", "2.0.0");
52
+ expect(result).toEqual([
53
+ {
54
+ explanation: "apass@1.1.0 requires abind@^1.0.0 via cipherjson@2.1.0",
55
+ name: "cipherjson",
56
+ version: "2.1.0",
57
+ requirement: "^1.0.0",
58
+ },
59
+ {
60
+ explanation: `apass@1.1.0 requires abind@^1.0.0 via a transitive dependency on objnest@3.0.9`,
61
+ name: "objnest",
62
+ version: "3.0.9",
63
+ requirement: "^1.0.0",
64
+ },
65
+ ]);
66
+ });
67
+ });
@@ -0,0 +1,565 @@
1
+ {
2
+ "name": "test",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 1,
5
+ "requires": true,
6
+ "dependencies": {
7
+ "abind": {
8
+ "version": "1.0.5",
9
+ "resolved": "https://registry.npmjs.org/abind/-/abind-1.0.5.tgz",
10
+ "integrity": "sha512-dbaEZphdPje0ihqSdWg36Sb8S20TuqQomiz2593oIx+enQ9Q4vDZRjIzhnkWltGRKVKqC28kTribkgRLBexWVQ=="
11
+ },
12
+ "aglob": {
13
+ "version": "2.0.1",
14
+ "resolved": "https://registry.npmjs.org/aglob/-/aglob-2.0.1.tgz",
15
+ "integrity": "sha1-kl7PJC11AkLAcVrNMy+V90kGZhQ=",
16
+ "requires": {
17
+ "co": "^4.6.0",
18
+ "glob": "^7.1.1"
19
+ }
20
+ },
21
+ "ansi-regex": {
22
+ "version": "2.1.1",
23
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
24
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
25
+ },
26
+ "apass": {
27
+ "version": "1.1.0",
28
+ "resolved": "https://registry.npmjs.org/apass/-/apass-1.1.0.tgz",
29
+ "integrity": "sha1-WNdSImWxQTtctC/2v/CfIaKDVpc=",
30
+ "requires": {
31
+ "asfs": "^1.1.1",
32
+ "askconfig": "^3.0.5",
33
+ "cipherjson": "^2.1.0",
34
+ "co": "^4.6.0",
35
+ "colorprint": "^4.1.0",
36
+ "commander": "^2.9.0",
37
+ "execcli": "^4.0.10",
38
+ "fmtjson": "^3.0.7"
39
+ }
40
+ },
41
+ "argx": {
42
+ "version": "3.0.2",
43
+ "resolved": "https://registry.npmjs.org/argx/-/argx-3.0.2.tgz",
44
+ "integrity": "sha1-G6qI0WCrb1Rrbs4OB1lswrs0JKk=",
45
+ "requires": {
46
+ "iftype": "^3.0.0"
47
+ }
48
+ },
49
+ "arrayreduce": {
50
+ "version": "2.1.0",
51
+ "resolved": "https://registry.npmjs.org/arrayreduce/-/arrayreduce-2.1.0.tgz",
52
+ "integrity": "sha1-6lg24whra1S3pWK0eez4BpyU0Qo="
53
+ },
54
+ "asfs": {
55
+ "version": "1.2.3",
56
+ "resolved": "https://registry.npmjs.org/asfs/-/asfs-1.2.3.tgz",
57
+ "integrity": "sha1-VnE2PoPEOQjvFaJciBkcYbUICDM=",
58
+ "requires": {
59
+ "aglob": "^2.0.1",
60
+ "co": "^4.6.0",
61
+ "filecopy": "^3.0.0",
62
+ "mkdirp": "^0.5.1"
63
+ }
64
+ },
65
+ "askconfig": {
66
+ "version": "3.0.5",
67
+ "resolved": "https://registry.npmjs.org/askconfig/-/askconfig-3.0.5.tgz",
68
+ "integrity": "sha1-PwcA078U8w44yAH57QDC2Wgqne0=",
69
+ "requires": {
70
+ "argx": "^3.0.0",
71
+ "cli-color": "^1.1.0",
72
+ "co": "^4.6.0",
73
+ "objnest": "^3.0.6"
74
+ }
75
+ },
76
+ "asleep": {
77
+ "version": "1.0.3",
78
+ "resolved": "https://registry.npmjs.org/asleep/-/asleep-1.0.3.tgz",
79
+ "integrity": "sha1-oQTiSsIpVjxCXk6n51tXihnuIY4="
80
+ },
81
+ "async": {
82
+ "version": "2.6.3",
83
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
84
+ "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
85
+ "requires": {
86
+ "lodash": "^4.17.14"
87
+ }
88
+ },
89
+ "babel-runtime": {
90
+ "version": "6.26.0",
91
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
92
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
93
+ "requires": {
94
+ "core-js": "^2.4.0",
95
+ "regenerator-runtime": "^0.11.0"
96
+ }
97
+ },
98
+ "balanced-match": {
99
+ "version": "1.0.0",
100
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
101
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
102
+ },
103
+ "brace-expansion": {
104
+ "version": "1.1.11",
105
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
106
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
107
+ "requires": {
108
+ "balanced-match": "^1.0.0",
109
+ "concat-map": "0.0.1"
110
+ }
111
+ },
112
+ "cipherjson": {
113
+ "version": "2.1.0",
114
+ "resolved": "https://registry.npmjs.org/cipherjson/-/cipherjson-2.1.0.tgz",
115
+ "integrity": "sha1-NxWib+PkEKL2W9jQw3jnzdei0eI=",
116
+ "requires": {
117
+ "abind": "^1.0.0",
118
+ "argx": "^3.0.2",
119
+ "async": "^2.1.4",
120
+ "objnest": "^3.0.9",
121
+ "writeout": "^2.1.0"
122
+ }
123
+ },
124
+ "cli-color": {
125
+ "version": "1.4.0",
126
+ "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz",
127
+ "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==",
128
+ "requires": {
129
+ "ansi-regex": "^2.1.1",
130
+ "d": "1",
131
+ "es5-ext": "^0.10.46",
132
+ "es6-iterator": "^2.0.3",
133
+ "memoizee": "^0.4.14",
134
+ "timers-ext": "^0.1.5"
135
+ }
136
+ },
137
+ "co": {
138
+ "version": "4.6.0",
139
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
140
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
141
+ },
142
+ "colorprint": {
143
+ "version": "4.1.0",
144
+ "resolved": "https://registry.npmjs.org/colorprint/-/colorprint-4.1.0.tgz",
145
+ "integrity": "sha1-BSroTEv9Ed7l7xvwfC9iVYT8CYk=",
146
+ "requires": {
147
+ "cli-color": "^1.1.0",
148
+ "commander": "^2.9.0"
149
+ }
150
+ },
151
+ "commander": {
152
+ "version": "2.20.3",
153
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
154
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
155
+ },
156
+ "concat-map": {
157
+ "version": "0.0.1",
158
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
159
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
160
+ },
161
+ "core-js": {
162
+ "version": "2.6.11",
163
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
164
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
165
+ },
166
+ "d": {
167
+ "version": "1.0.1",
168
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
169
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
170
+ "requires": {
171
+ "es5-ext": "^0.10.50",
172
+ "type": "^1.0.1"
173
+ }
174
+ },
175
+ "es5-ext": {
176
+ "version": "0.10.53",
177
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
178
+ "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
179
+ "requires": {
180
+ "es6-iterator": "~2.0.3",
181
+ "es6-symbol": "~3.1.3",
182
+ "next-tick": "~1.0.0"
183
+ }
184
+ },
185
+ "es6-iterator": {
186
+ "version": "2.0.3",
187
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
188
+ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
189
+ "requires": {
190
+ "d": "1",
191
+ "es5-ext": "^0.10.35",
192
+ "es6-symbol": "^3.1.1"
193
+ }
194
+ },
195
+ "es6-symbol": {
196
+ "version": "3.1.3",
197
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
198
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
199
+ "requires": {
200
+ "d": "^1.0.1",
201
+ "ext": "^1.1.2"
202
+ }
203
+ },
204
+ "es6-weak-map": {
205
+ "version": "2.0.3",
206
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
207
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
208
+ "requires": {
209
+ "d": "1",
210
+ "es5-ext": "^0.10.46",
211
+ "es6-iterator": "^2.0.3",
212
+ "es6-symbol": "^3.1.1"
213
+ }
214
+ },
215
+ "event-emitter": {
216
+ "version": "0.3.5",
217
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
218
+ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
219
+ "requires": {
220
+ "d": "1",
221
+ "es5-ext": "~0.10.14"
222
+ }
223
+ },
224
+ "execcli": {
225
+ "version": "4.0.11",
226
+ "resolved": "https://registry.npmjs.org/execcli/-/execcli-4.0.11.tgz",
227
+ "integrity": "sha1-PbmCCoP6EkK5v7UNEVUdBQWSfUM=",
228
+ "requires": {
229
+ "argx": "^3.0.0",
230
+ "arrayreduce": "^2.1.0",
231
+ "babel-runtime": "^6.23.0",
232
+ "findout": "^2.0.1",
233
+ "hasbin": "^1.2.3",
234
+ "stringcase": "^3.2.1"
235
+ }
236
+ },
237
+ "ext": {
238
+ "version": "1.4.0",
239
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
240
+ "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
241
+ "requires": {
242
+ "type": "^2.0.0"
243
+ },
244
+ "dependencies": {
245
+ "type": {
246
+ "version": "2.1.0",
247
+ "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
248
+ "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="
249
+ }
250
+ }
251
+ },
252
+ "extend": {
253
+ "version": "3.0.2",
254
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
255
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
256
+ },
257
+ "filecopy": {
258
+ "version": "3.0.1",
259
+ "resolved": "https://registry.npmjs.org/filecopy/-/filecopy-3.0.1.tgz",
260
+ "integrity": "sha1-hqX4pylo7K6qW7suPoEKh3zUmWY=",
261
+ "requires": {
262
+ "aglob": "^2.0.1",
263
+ "argx": "^3.0.0",
264
+ "co": "^4.6.0",
265
+ "mkdirp": "^0.5.1"
266
+ }
267
+ },
268
+ "filedel": {
269
+ "version": "4.1.2",
270
+ "resolved": "https://registry.npmjs.org/filedel/-/filedel-4.1.2.tgz",
271
+ "integrity": "sha512-GmCi+mLI3DgGFde0W3vsZshRtSBK5BxTkrVLioGLoARBY5Ef42anaXP1PmQTI6AI/TVoM8Mkw5mBisGy5MPlTA==",
272
+ "requires": {
273
+ "aglob": "^3.0.2",
274
+ "argx": "^4.0.4",
275
+ "asfs": "^2.3.0",
276
+ "rimraf": "^3.0.2"
277
+ },
278
+ "dependencies": {
279
+ "aglob": {
280
+ "version": "3.0.2",
281
+ "resolved": "https://registry.npmjs.org/aglob/-/aglob-3.0.2.tgz",
282
+ "integrity": "sha512-0khk6p36zn0NbYAMtNov7o4VQpWOZChVt+cQHIEb0KSqxNn5hvGU2+pPI5+6vydUhe8W3ZxREMcpkAmMEi8p9Q==",
283
+ "requires": {
284
+ "glob": "^7.1.3"
285
+ }
286
+ },
287
+ "argx": {
288
+ "version": "4.0.4",
289
+ "resolved": "https://registry.npmjs.org/argx/-/argx-4.0.4.tgz",
290
+ "integrity": "sha512-XLWeRTNBJRzQkbMweLIxdtnvpE7iYUBraPwrIJX57FjL4D1RHLMJRM1AyEP6KZHgvjW7TSnxF8MpGic7YdTGOA==",
291
+ "requires": {
292
+ "iftype": "^4.0.9"
293
+ }
294
+ },
295
+ "asfs": {
296
+ "version": "2.3.0",
297
+ "resolved": "https://registry.npmjs.org/asfs/-/asfs-2.3.0.tgz",
298
+ "integrity": "sha512-mPfLlrZuoDFjR0Cd9ructfhJ4Cq0OH3CNVaO2RjMk+I9Utfb28sxFdnAVPByziTzTh2jgd7wX7Wy+8LIBjz2nw==",
299
+ "requires": {
300
+ "aglob": "^3.0.1",
301
+ "filecopy": "^4.1.0",
302
+ "mkdirp": "^1.0.3"
303
+ }
304
+ },
305
+ "filecopy": {
306
+ "version": "4.1.0",
307
+ "resolved": "https://registry.npmjs.org/filecopy/-/filecopy-4.1.0.tgz",
308
+ "integrity": "sha512-1K2VHl+WVzODCwcZzmSrNCUIYTM37F4/yny0bI05bN3PdQHZjfszsW2L2yia7/Xb1B854f6XrA3ZTv0KjBmogA==",
309
+ "requires": {
310
+ "aglob": "^3.0.2",
311
+ "argx": "^4.0.4",
312
+ "mkdirp": "^1.0.3"
313
+ }
314
+ },
315
+ "iftype": {
316
+ "version": "4.0.9",
317
+ "resolved": "https://registry.npmjs.org/iftype/-/iftype-4.0.9.tgz",
318
+ "integrity": "sha512-01Klo+04dkDzY193D1GVfOdQzmpqaYFJTAlZKRztkT/BOaU7sSnvxGimSln+7DMqLUP4tpDTNFgxqVPLYZVypA=="
319
+ },
320
+ "mkdirp": {
321
+ "version": "1.0.4",
322
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
323
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
324
+ }
325
+ }
326
+ },
327
+ "findout": {
328
+ "version": "2.1.2",
329
+ "resolved": "https://registry.npmjs.org/findout/-/findout-2.1.2.tgz",
330
+ "integrity": "sha1-eEFc9z7Z4nwC4pqbxETn0ir2AQU=",
331
+ "requires": {
332
+ "babel-runtime": "^6.11.6",
333
+ "co": "^4.6.0"
334
+ }
335
+ },
336
+ "fmtjson": {
337
+ "version": "3.0.7",
338
+ "resolved": "https://registry.npmjs.org/fmtjson/-/fmtjson-3.0.7.tgz",
339
+ "integrity": "sha1-eGM+7hRk33CotIRWfN7rS+j/08w=",
340
+ "requires": {
341
+ "aglob": "^1.0.2",
342
+ "argx": "^3.0.1",
343
+ "asfs": "^1.0.5",
344
+ "co": "^4.6.0",
345
+ "writeout": "^2.0.7"
346
+ },
347
+ "dependencies": {
348
+ "aglob": {
349
+ "version": "1.1.1",
350
+ "resolved": "https://registry.npmjs.org/aglob/-/aglob-1.1.1.tgz",
351
+ "integrity": "sha1-+VJpKq29nVKHdekUtpXgdjH58Io=",
352
+ "requires": {
353
+ "babel-runtime": "^6.11.6",
354
+ "co": "^4.6.0",
355
+ "glob": "^7.0.5"
356
+ }
357
+ }
358
+ }
359
+ },
360
+ "fs.realpath": {
361
+ "version": "1.0.0",
362
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
363
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
364
+ },
365
+ "glob": {
366
+ "version": "7.1.6",
367
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
368
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
369
+ "requires": {
370
+ "fs.realpath": "^1.0.0",
371
+ "inflight": "^1.0.4",
372
+ "inherits": "2",
373
+ "minimatch": "^3.0.4",
374
+ "once": "^1.3.0",
375
+ "path-is-absolute": "^1.0.0"
376
+ }
377
+ },
378
+ "hasbin": {
379
+ "version": "1.2.3",
380
+ "resolved": "https://registry.npmjs.org/hasbin/-/hasbin-1.2.3.tgz",
381
+ "integrity": "sha1-eMWSaJPIAhXCtWiuH9P8q3omlrA=",
382
+ "requires": {
383
+ "async": "~1.5"
384
+ },
385
+ "dependencies": {
386
+ "async": {
387
+ "version": "1.5.2",
388
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
389
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
390
+ }
391
+ }
392
+ },
393
+ "iftype": {
394
+ "version": "3.0.2",
395
+ "resolved": "https://registry.npmjs.org/iftype/-/iftype-3.0.2.tgz",
396
+ "integrity": "sha1-V3EmHmT7NaaA0yDTZox1Kfklq3Q=",
397
+ "requires": {
398
+ "babel-runtime": "^6.11.6"
399
+ }
400
+ },
401
+ "inflight": {
402
+ "version": "1.0.6",
403
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
404
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
405
+ "requires": {
406
+ "once": "^1.3.0",
407
+ "wrappy": "1"
408
+ }
409
+ },
410
+ "inherits": {
411
+ "version": "2.0.4",
412
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
413
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
414
+ },
415
+ "is-promise": {
416
+ "version": "2.2.2",
417
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
418
+ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
419
+ },
420
+ "lodash": {
421
+ "version": "4.17.20",
422
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
423
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
424
+ },
425
+ "lru-queue": {
426
+ "version": "0.1.0",
427
+ "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz",
428
+ "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=",
429
+ "requires": {
430
+ "es5-ext": "~0.10.2"
431
+ }
432
+ },
433
+ "memoizee": {
434
+ "version": "0.4.14",
435
+ "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz",
436
+ "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==",
437
+ "requires": {
438
+ "d": "1",
439
+ "es5-ext": "^0.10.45",
440
+ "es6-weak-map": "^2.0.2",
441
+ "event-emitter": "^0.3.5",
442
+ "is-promise": "^2.1",
443
+ "lru-queue": "0.1",
444
+ "next-tick": "1",
445
+ "timers-ext": "^0.1.5"
446
+ }
447
+ },
448
+ "minimatch": {
449
+ "version": "3.0.4",
450
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
451
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
452
+ "requires": {
453
+ "brace-expansion": "^1.1.7"
454
+ }
455
+ },
456
+ "minimist": {
457
+ "version": "1.2.5",
458
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
459
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
460
+ },
461
+ "mkdirp": {
462
+ "version": "0.5.5",
463
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
464
+ "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
465
+ "requires": {
466
+ "minimist": "^1.2.5"
467
+ }
468
+ },
469
+ "next-tick": {
470
+ "version": "1.0.0",
471
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
472
+ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
473
+ },
474
+ "objnest": {
475
+ "version": "3.0.9",
476
+ "resolved": "https://registry.npmjs.org/objnest/-/objnest-3.0.9.tgz",
477
+ "integrity": "sha1-yBHtOVXPRgO6Ncx+A0j+oZUbk5U=",
478
+ "requires": {
479
+ "abind": "^1.0.0",
480
+ "extend": "^3.0.0"
481
+ }
482
+ },
483
+ "once": {
484
+ "version": "1.4.0",
485
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
486
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
487
+ "requires": {
488
+ "wrappy": "1"
489
+ }
490
+ },
491
+ "path-is-absolute": {
492
+ "version": "1.0.1",
493
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
494
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
495
+ },
496
+ "regenerator-runtime": {
497
+ "version": "0.11.1",
498
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
499
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
500
+ },
501
+ "rimraf": {
502
+ "version": "3.0.2",
503
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
504
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
505
+ "requires": {
506
+ "glob": "^7.1.3"
507
+ }
508
+ },
509
+ "stringcase": {
510
+ "version": "3.2.1",
511
+ "resolved": "https://registry.npmjs.org/stringcase/-/stringcase-3.2.1.tgz",
512
+ "integrity": "sha1-iTRRYwSXZM92q89c4Ctkv7ZHLlY="
513
+ },
514
+ "timers-ext": {
515
+ "version": "0.1.7",
516
+ "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz",
517
+ "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==",
518
+ "requires": {
519
+ "es5-ext": "~0.10.46",
520
+ "next-tick": "1"
521
+ }
522
+ },
523
+ "type": {
524
+ "version": "1.2.0",
525
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
526
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
527
+ },
528
+ "wrappy": {
529
+ "version": "1.0.2",
530
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
531
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
532
+ },
533
+ "writeout": {
534
+ "version": "2.3.4",
535
+ "resolved": "https://registry.npmjs.org/writeout/-/writeout-2.3.4.tgz",
536
+ "integrity": "sha512-8EO+2MdDKvyhVGGA7hXtCOWIyfpzi1PAkmYTFUhq3/duskEDYzcDvZTiYgVV/CectCRSelGdIW++ym58uNOuYw==",
537
+ "requires": {
538
+ "argx": "^4.0.4",
539
+ "asleep": "^1.0.3",
540
+ "filedel": "^4.1.2",
541
+ "mkdirp": "^1.0.4"
542
+ },
543
+ "dependencies": {
544
+ "argx": {
545
+ "version": "4.0.4",
546
+ "resolved": "https://registry.npmjs.org/argx/-/argx-4.0.4.tgz",
547
+ "integrity": "sha512-XLWeRTNBJRzQkbMweLIxdtnvpE7iYUBraPwrIJX57FjL4D1RHLMJRM1AyEP6KZHgvjW7TSnxF8MpGic7YdTGOA==",
548
+ "requires": {
549
+ "iftype": "^4.0.9"
550
+ }
551
+ },
552
+ "iftype": {
553
+ "version": "4.0.9",
554
+ "resolved": "https://registry.npmjs.org/iftype/-/iftype-4.0.9.tgz",
555
+ "integrity": "sha512-01Klo+04dkDzY193D1GVfOdQzmpqaYFJTAlZKRztkT/BOaU7sSnvxGimSln+7DMqLUP4tpDTNFgxqVPLYZVypA=="
556
+ },
557
+ "mkdirp": {
558
+ "version": "1.0.4",
559
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
560
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
561
+ }
562
+ }
563
+ }
564
+ }
565
+ }