yarn-why-duplicate 1.0.0 → 1.1.0

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.
@@ -1,31 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { execSync } from 'child_process';
3
+ import {readAndParseYarnWhy} from '../lib/readAndParseYarnWhy.js';
4
+ import { identifyDuplicates } from '../lib/identifyDuplicates.js';
5
+ import { displayDuplicates } from '../lib/displayDuplicates.js';
4
6
 
5
7
  const pkgName = process.argv.slice(2)[0];
6
8
 
7
- const yarnWhyResult = execSync(`yarn why ${pkgName} --json`, { encoding: 'utf8' })
8
- .split('\n')
9
- .filter(Boolean)
10
- .map((line) => JSON.parse(line));
11
-
12
- const groupByVersions = new Map();
9
+ const yarnWhyResult = readAndParseYarnWhy(pkgName);
13
10
 
14
11
  for (const line of yarnWhyResult) {
15
- for (const [key, child] of Object.entries(line.children)) {
16
- let values = groupByVersions.get(child.locator);
17
- if (!values) {
18
- values = [];
19
- groupByVersions.set(child.locator, values);
20
- }
21
- values.push(line.value);
12
+ if (line.type === 'error') {
13
+ console.error('yarn error: ' + line.data);
14
+ process.exit(1);
15
+ } else if (line.type === 'step') {
16
+ console.error('yarn 1 is not supported, use yarn berry (>=2)');
17
+ process.exit(1);
22
18
  }
23
19
  }
24
20
 
25
- for (const [version, values] of groupByVersions.entries()) {
26
- console.log(version);
27
- for (const value of values) {
28
- console.log(`- ${value}`);
29
- }
30
- console.log();
31
- }
21
+ const groupByVersions = identifyDuplicates(yarnWhyResult);
22
+ displayDuplicates(groupByVersions);
@@ -0,0 +1,19 @@
1
+ import { structUtils, Configuration } from '@yarnpkg/core';
2
+
3
+ export const displayDuplicates = (groupByVersions, log = console.log, configuration = Configuration.create(process.cwd())) => {
4
+ if (!groupByVersions.length) {
5
+ log('No version found');
6
+ return;
7
+ }
8
+
9
+ log(`Found ${groupByVersions.length} version${groupByVersions.length === 1 ? '' : 's'}:`)
10
+ log();
11
+
12
+ for (const { descriptor, sources } of groupByVersions) {
13
+ log(structUtils.prettyDescriptor(configuration,descriptor));
14
+ for (const { source, locator, descriptor } of sources) {
15
+ log(`- ${structUtils.prettyDescriptor(configuration,source)} (${structUtils.prettyDescriptor(configuration,descriptor)})`); // TODO prettyDescriptor from structUtils
16
+ }
17
+ log();
18
+ }
19
+ }
@@ -0,0 +1,40 @@
1
+ import { structUtils } from '@yarnpkg/core';
2
+ import { compare as compareRange } from 'semver';
3
+
4
+ export const identifyDuplicates = (yarnWhyResult) => {
5
+ const groupByVersions = new Map();
6
+
7
+ for (const line of yarnWhyResult) {
8
+ const parsedValue = structUtils.parseDescriptor(line.value);
9
+
10
+ if (structUtils.isVirtualDescriptor(parsedValue)) {
11
+ // when looking for duplicates, we don't want to look at virtual packages
12
+ continue;
13
+ }
14
+
15
+ for (const [key, child] of Object.entries(line.children)) {
16
+ let byVersion = groupByVersions.get(key);
17
+ if (!byVersion) {
18
+ byVersion = {
19
+ descriptor: structUtils.parseDescriptor(key),
20
+ sources: [],
21
+ };
22
+ groupByVersions.set(key, byVersion);
23
+ }
24
+ byVersion.sources.push({
25
+ source: parsedValue, // source of the dependency
26
+ descriptor: structUtils.parseDescriptor(child.descriptor), // value parsed from package.json eg date-fns@npm:^1.29.0
27
+ locator: structUtils.parseLocator(child.locator), // value resolved by yarn eg date-fns@npm:1.30.1
28
+ });
29
+ }
30
+ }
31
+
32
+ const groups = [...groupByVersions.values()];
33
+ groups.sort((a, b) => {
34
+ const aRange = structUtils.parseRange(a.descriptor.range);
35
+ const bRange = structUtils.parseRange(b.descriptor.range);
36
+ return -compareRange(aRange.selector, bRange.selector);
37
+ });
38
+
39
+ return groups;
40
+ }
@@ -0,0 +1,19 @@
1
+ import { spawnSync } from 'child_process';
2
+
3
+ export const parseYarnWhy = (content) => {
4
+ return content.split('\n')
5
+ .filter(Boolean)
6
+ .map((line) => JSON.parse(line));
7
+ };
8
+
9
+ export const readAndParseYarnWhy = (pkgName) => {
10
+ const { stdout, stderr } = spawnSync('yarn',['why', pkgName, '--json'], { encoding: 'utf8', 'stdio': 'pipe', pwd: process.cwd() });
11
+ if (stderr) {
12
+ try {
13
+ return parseYarnWhy(stderr);
14
+ } catch (err) {
15
+ throw new Error('yarn failed: ' + stderr);
16
+ }
17
+ }
18
+ return parseYarnWhy(stdout);
19
+ };
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "yarn-why-duplicate",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Simple bin to know why a package is duplicated",
5
5
  "main": "bin/yarn-why-duplicate.mjs",
6
+ "type": "module",
6
7
  "scripts": {
7
8
  "test": "echo \"Error: no test specified\" && exit 1"
8
9
  },
@@ -22,5 +23,8 @@
22
23
  "bugs": {
23
24
  "url": "https://github.com/christophehurpeau/yarn-why-duplicate/issues"
24
25
  },
25
- "homepage": "https://github.com/christophehurpeau/yarn-why-duplicate#readme"
26
- }
26
+ "homepage": "https://github.com/christophehurpeau/yarn-why-duplicate#readme",
27
+ "dependencies": {
28
+ "@yarnpkg/core": "^4.0.0-rc.42"
29
+ }
30
+ }
@@ -0,0 +1,7 @@
1
+ {"value":"@ornikar/learner-apps-shared@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#workspace:@ornikar/learner-apps-shared","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:1.30.1"}}}
2
+ {"value":"@ornikar/learner-apps-shared@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#workspace:@ornikar/learner-apps-shared","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:1.30.1"}}}
3
+ {"value":"@ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:1.30.1"}}}
4
+ {"value":"@ornikar/learner-native-app@workspace:@ornikar/learner-native-app","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:1.30.1"}}}
5
+ {"value":"@ornikar/learner-webapp@workspace:@ornikar/learner-webapp","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:1.30.1"}}}
6
+ {"value":"date-fns-timezone@npm:0.1.4","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:^1.29.0"}}}
7
+ {"value":"listr-verbose-renderer@npm:0.5.0","children":{"date-fns@npm:1.30.1":{"locator":"date-fns@npm:1.30.1","descriptor":"date-fns@npm:^1.27.2"}}}
@@ -0,0 +1,9 @@
1
+ {"value":"@ornikar/kitt-universal@npm:9.47.2","children":{"native-base@patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
2
+ {"value":"@ornikar/kitt-universal@virtual:0be1bed3bf44b487b4f72ea3695e753a329b20e6f34aad2b49c1ffe05302161a5820d406390378609bd21e85f867075b568762523dded617babeee2a4931d60c#npm:9.47.2","children":{"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
3
+ {"value":"@ornikar/kitt-universal@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:9.47.2","children":{"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
4
+ {"value":"@ornikar/kitt-universal@virtual:1136f75479f1c0368379cdac9e20ca0d345350ab0b4bc311d0e68cd11cf749e0e6c3da8127f098c07ca6c98279501ed797a99404d1a7d7b28228182a8666befd#npm:9.47.2","children":{"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:90f5f41ee6601135942900f486c3c5ffedde9284b4533392d4dff9f0f03959aa66453ebc8ca730d75ba9f32e751d5c196d42c4e9b160d95d68d8cc4c382bf9b9#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
5
+ {"value":"@ornikar/kitt-universal@virtual:1f1cae68357607dff1de137d1818886277734c6ef3353ca79fcafc15661da2f5a24850b7813fd6c37767689b4ca26137572e6c5f677492fe71ecf7c4b6013047#npm:9.47.2","children":{"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
6
+ {"value":"@ornikar/kitt-universal@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:9.47.2","children":{"native-base@virtual:7e32c6d530be59789f2b5bd604ab253edad99eca5686bf4aa54de4acfc450f1913bb49e8a06d399f730db201824476391d6c76c642188c6ce41996fd39ecdaa5#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:7e32c6d530be59789f2b5bd604ab253edad99eca5686bf4aa54de4acfc450f1913bb49e8a06d399f730db201824476391d6c76c642188c6ce41996fd39ecdaa5#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:7e32c6d530be59789f2b5bd604ab253edad99eca5686bf4aa54de4acfc450f1913bb49e8a06d399f730db201824476391d6c76c642188c6ce41996fd39ecdaa5#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
7
+ {"value":"@ornikar/kitt-universal@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#npm:9.47.2","children":{"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
8
+ {"value":"@ornikar/kitt-universal@virtual:a17044608ff370441880abc6c9644f8eab0c9711e8541578ef687648781bbafb9e2f16d4e9c8922e4f978da848d66ce5fd9ba4e4ccab272c7abd57eeea4a8499#npm:9.47.2","children":{"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
9
+ {"value":"@ornikar/kitt-universal@virtual:a263e33b1a50d76cea6ded5941f5756223998e8d38de08d4b0717fd7d8bf285b7eb6b3009a326693a41b27b271e9ce1b5a82c32769ac357127bcb51edde55b1f#npm:9.47.2","children":{"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.":{"locator":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.","descriptor":"native-base@virtual:52b0d29897f20bc016d2290033e1ba0da865e17e2ba48137dc23ae8a9b50c1163a6794c1ffc5ba320e3915131fd7441b1b39bbec567fcb06a150b36e61d8607a#patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A."}}}
@@ -0,0 +1,58 @@
1
+ {"value":"@ornikar/api-helpers@npm:4.9.8","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
2
+ {"value":"@ornikar/kitt-universal@npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
3
+ {"value":"@ornikar/kitt-universal@virtual:0be1bed3bf44b487b4f72ea3695e753a329b20e6f34aad2b49c1ffe05302161a5820d406390378609bd21e85f867075b568762523dded617babeee2a4931d60c#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
4
+ {"value":"@ornikar/kitt-universal@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
5
+ {"value":"@ornikar/kitt-universal@virtual:1136f75479f1c0368379cdac9e20ca0d345350ab0b4bc311d0e68cd11cf749e0e6c3da8127f098c07ca6c98279501ed797a99404d1a7d7b28228182a8666befd#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
6
+ {"value":"@ornikar/kitt-universal@virtual:1f1cae68357607dff1de137d1818886277734c6ef3353ca79fcafc15661da2f5a24850b7813fd6c37767689b4ca26137572e6c5f677492fe71ecf7c4b6013047#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
7
+ {"value":"@ornikar/kitt-universal@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
8
+ {"value":"@ornikar/kitt-universal@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
9
+ {"value":"@ornikar/kitt-universal@virtual:a17044608ff370441880abc6c9644f8eab0c9711e8541578ef687648781bbafb9e2f16d4e9c8922e4f978da848d66ce5fd9ba4e4ccab272c7abd57eeea4a8499#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
10
+ {"value":"@ornikar/kitt-universal@virtual:a263e33b1a50d76cea6ded5941f5756223998e8d38de08d4b0717fd7d8bf285b7eb6b3009a326693a41b27b271e9ce1b5a82c32769ac357127bcb51edde55b1f#npm:9.47.2","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
11
+ {"value":"@ornikar/kitt@npm:34.6.4","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
12
+ {"value":"@ornikar/kitt@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:34.6.4","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
13
+ {"value":"@ornikar/kitt@virtual:da577c8f16da6474f3dba62af00535e709b51ddb3169861379b7841bdd1533b5977dc9d9554ac25a380f243246f8920d037a3e2cbe381f0d98e059beacc155ed#npm:34.6.4","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
14
+ {"value":"@ornikar/learner-apps-shared@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#workspace:@ornikar/learner-apps-shared","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:2.19.0"}}}
15
+ {"value":"@ornikar/learner-apps-shared@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#workspace:@ornikar/learner-apps-shared","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:2.19.0"}}}
16
+ {"value":"@ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:2.19.0"}}}
17
+ {"value":"@ornikar/learner-webapp@workspace:@ornikar/learner-webapp","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:2.19.0"}}}
18
+ {"value":"@ornikar/react-apollo@npm:5.7.3","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
19
+ {"value":"@ornikar/react-apollo@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:5.7.3","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
20
+ {"value":"@ornikar/react-apollo@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:5.7.3","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
21
+ {"value":"@ornikar/react-app-error-provider@npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
22
+ {"value":"@ornikar/react-app-error-provider@virtual:0be1bed3bf44b487b4f72ea3695e753a329b20e6f34aad2b49c1ffe05302161a5820d406390378609bd21e85f867075b568762523dded617babeee2a4931d60c#npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
23
+ {"value":"@ornikar/react-app-error-provider@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
24
+ {"value":"@ornikar/react-app-error-provider@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
25
+ {"value":"@ornikar/react-app-error-provider@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
26
+ {"value":"@ornikar/react-app-error-provider@virtual:a263e33b1a50d76cea6ded5941f5756223998e8d38de08d4b0717fd7d8bf285b7eb6b3009a326693a41b27b271e9ce1b5a82c32769ac357127bcb51edde55b1f#npm:7.10.0","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
27
+ {"value":"@ornikar/react-forms@npm:13.4.12","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
28
+ {"value":"@ornikar/react-forms@virtual:6770e8087524c83554bada67a9fa4cb309227999c62fd9e0a8446680d3e08c41437b67326aaf58d9b680e0a5d9fad92496921281e9846e94d85c0deffdcef441#npm:13.4.12","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
29
+ {"value":"@ornikar/react-forms@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:13.4.12","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
30
+ {"value":"@ornikar/react-forms@virtual:cd4444764c288b532f422165f7e60a4431bd20c3cb04efb487d7ea857b10e04a1c2de14ae081851286c6600b42253b0cb167f5f2be42abd5ac9725dbc80da841#npm:13.4.12","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
31
+ {"value":"@ornikar/react-header@npm:12.6.4","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
32
+ {"value":"@ornikar/react-header@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:12.6.4","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
33
+ {"value":"@ornikar/react-mixpanel@npm:1.1.2","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
34
+ {"value":"@ornikar/react-mixpanel@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:1.1.2","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
35
+ {"value":"@ornikar/react-mixpanel@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:1.1.2","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
36
+ {"value":"@ornikar/react-notification@npm:10.4.9","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
37
+ {"value":"@ornikar/react-notification@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:10.4.9","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
38
+ {"value":"@ornikar/react-notification@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:10.4.9","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.3.0"}}}
39
+ {"value":"@ornikar/webapp-configs@npm:4.2.3","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
40
+ {"value":"@ornikar/webapp-configs@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:4.2.3","children":{"type-fest@npm:2.19.0":{"locator":"type-fest@npm:2.19.0","descriptor":"type-fest@npm:^2.0.0"}}}
41
+ {"value":"ansi-escapes@npm:4.3.2","children":{"type-fest@npm:0.21.3":{"locator":"type-fest@npm:0.21.3","descriptor":"type-fest@npm:^0.21.3"}}}
42
+ {"value":"boxen@npm:4.2.0","children":{"type-fest@npm:0.8.1":{"locator":"type-fest@npm:0.8.1","descriptor":"type-fest@npm:^0.8.1"}}}
43
+ {"value":"boxen@npm:5.1.2","children":{"type-fest@npm:0.20.2":{"locator":"type-fest@npm:0.20.2","descriptor":"type-fest@npm:^0.20.2"}}}
44
+ {"value":"check-package-dependencies@npm:6.3.1","children":{"type-fest@npm:3.5.3":{"locator":"type-fest@npm:3.5.3","descriptor":"type-fest@npm:^3.0.0"}}}
45
+ {"value":"globals@npm:13.20.0","children":{"type-fest@npm:0.20.2":{"locator":"type-fest@npm:0.20.2","descriptor":"type-fest@npm:^0.20.2"}}}
46
+ {"value":"load-json-file@npm:5.3.0","children":{"type-fest@npm:0.3.1":{"locator":"type-fest@npm:0.3.1","descriptor":"type-fest@npm:^0.3.0"}}}
47
+ {"value":"load-json-file@npm:6.2.0","children":{"type-fest@npm:0.6.0":{"locator":"type-fest@npm:0.6.0","descriptor":"type-fest@npm:^0.6.0"}}}
48
+ {"value":"meow@npm:8.1.2","children":{"type-fest@npm:0.18.1":{"locator":"type-fest@npm:0.18.1","descriptor":"type-fest@npm:^0.18.0"}}}
49
+ {"value":"meow@npm:9.0.0","children":{"type-fest@npm:0.18.1":{"locator":"type-fest@npm:0.18.1","descriptor":"type-fest@npm:^0.18.0"}}}
50
+ {"value":"msw@npm:0.29.0","children":{"type-fest@npm:1.4.0":{"locator":"type-fest@npm:1.4.0","descriptor":"type-fest@npm:^1.1.3"}}}
51
+ {"value":"read-pkg-up@npm:7.0.1","children":{"type-fest@npm:0.8.1":{"locator":"type-fest@npm:0.8.1","descriptor":"type-fest@npm:^0.8.1"}}}
52
+ {"value":"read-pkg@npm:5.2.0","children":{"type-fest@npm:0.6.0":{"locator":"type-fest@npm:0.6.0","descriptor":"type-fest@npm:^0.6.0"}}}
53
+ {"value":"serialize-error@npm:6.0.0","children":{"type-fest@npm:0.12.0":{"locator":"type-fest@npm:0.12.0","descriptor":"type-fest@npm:^0.12.0"}}}
54
+ {"value":"serialize-error@npm:7.0.1","children":{"type-fest@npm:0.13.1":{"locator":"type-fest@npm:0.13.1","descriptor":"type-fest@npm:^0.13.1"}}}
55
+ {"value":"stacktrace-parser@npm:0.1.10","children":{"type-fest@npm:0.7.1":{"locator":"type-fest@npm:0.7.1","descriptor":"type-fest@npm:^0.7.1"}}}
56
+ {"value":"tempy@npm:0.3.0","children":{"type-fest@npm:0.3.1":{"locator":"type-fest@npm:0.3.1","descriptor":"type-fest@npm:^0.3.1"}}}
57
+ {"value":"tempy@npm:0.7.1","children":{"type-fest@npm:0.16.0":{"locator":"type-fest@npm:0.16.0","descriptor":"type-fest@npm:^0.16.0"}}}
58
+ {"value":"write-pkg@npm:4.0.0","children":{"type-fest@npm:0.4.1":{"locator":"type-fest@npm:0.4.1","descriptor":"type-fest@npm:^0.4.1"}}}
@@ -0,0 +1,19 @@
1
+ {"value":"@ornikar/learner-apps-shared@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#workspace:@ornikar/learner-apps-shared","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:7.3.0"}}}
2
+ {"value":"@ornikar/learner-apps-shared@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#workspace:@ornikar/learner-apps-shared","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:7.3.0"}}}
3
+ {"value":"@ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:7.3.0"}}}
4
+ {"value":"@ornikar/learner-native-app@workspace:@ornikar/learner-native-app","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:7.3.0"}}}
5
+ {"value":"@ornikar/learner-webapp@workspace:@ornikar/learner-webapp","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:7.3.0"}}}
6
+ {"value":"@ornikar/react-forms-universal@npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
7
+ {"value":"@ornikar/react-forms-universal@virtual:0be1bed3bf44b487b4f72ea3695e753a329b20e6f34aad2b49c1ffe05302161a5820d406390378609bd21e85f867075b568762523dded617babeee2a4931d60c#npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
8
+ {"value":"@ornikar/react-forms-universal@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
9
+ {"value":"@ornikar/react-forms-universal@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
10
+ {"value":"@ornikar/react-forms-universal@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
11
+ {"value":"@ornikar/react-forms-universal@virtual:a263e33b1a50d76cea6ded5941f5756223998e8d38de08d4b0717fd7d8bf285b7eb6b3009a326693a41b27b271e9ce1b5a82c32769ac357127bcb51edde55b1f#npm:12.2.0","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.10"}}}
12
+ {"value":"@ornikar/react-validators@npm:8.0.10","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:^7.3.0"}}}
13
+ {"value":"@ornikar/react-validators@npm:8.0.8","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.11"}}}
14
+ {"value":"@ornikar/react-validators@virtual:085310bb81d85a57193990d1ee74e85e6e6450b9384d4da43f24e3e764c9745557583a229c8213ce540b91033f5e655b5121c971e0a3a5ad698d5eb2c629d846#npm:8.0.8","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.11"}}}
15
+ {"value":"@ornikar/react-validators@virtual:0ca324951f76c640d167f8be57292cc5427c8e53f9895c89483e077c606224ccbcf16ad9922d175a40513e38e935f54868149960f54484e24b48c8cccfab76e1#npm:8.0.10","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:^7.3.0"}}}
16
+ {"value":"@ornikar/react-validators@virtual:2461a6aeecc99f352c5f65b0edebf5e7cae3321973320f143a89cdea29fd814895846db5b05845a6f72a92d056a24a389c6a29326c997b79d163846b510f6081#npm:8.0.8","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.11"}}}
17
+ {"value":"@ornikar/react-validators@virtual:5aeba2480109c20d26c87f1e67d4063eb6a5e9e1ffb5041e41df1f1b64e330b7cc0429c7ad153e9ad5b6e1a420cf4c6f9b5c8247be874e99d0778808010f3a34#npm:8.0.8","children":{"@ornikar/validators@npm:7.2.11":{"locator":"@ornikar/validators@npm:7.2.11","descriptor":"@ornikar/validators@npm:^7.2.11"}}}
18
+ {"value":"@ornikar/react-validators@virtual:72efe2163a558449a8f66d9788562063236597b9b91f180e4c4438146efb94a72f711a8dd32272d11bfb7021567117fcfc487b64e6e65b2d2dd86917a2212195#npm:8.0.10","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:^7.3.0"}}}
19
+ {"value":"@ornikar/react-validators@virtual:74b4ee70bd6a38b10f925bd66e65d0142e2ee6418cefa62443ad0a5071d5e3013ade614aacfa04ed7ad7eb898eb4f5d788c3b246824acc7ce546f40d4046456a#npm:8.0.10","children":{"@ornikar/validators@npm:7.3.0":{"locator":"@ornikar/validators@npm:7.3.0","descriptor":"@ornikar/validators@npm:^7.3.0"}}}
package/tests/tests.js ADDED
@@ -0,0 +1,95 @@
1
+ import { strictEqual } from 'assert/strict';
2
+ import { Configuration } from '@yarnpkg/core';
3
+ import fs from 'fs';
4
+ import {parseYarnWhy} from '../lib/readAndParseYarnWhy.js';
5
+ import { identifyDuplicates } from '../lib/identifyDuplicates.js';
6
+ import { displayDuplicates } from '../lib/displayDuplicates.js';
7
+
8
+ const configuration = Configuration.create(process.cwd());
9
+ configuration.values.set('enableColors', false);
10
+
11
+ const loadAndAssert = (fileName, expected) => {
12
+ const fileContent = fs.readFileSync(new URL(`./fixtures/${fileName}`, import.meta.url), 'utf-8');
13
+ const content = parseYarnWhy(fileContent);
14
+ const duplicates = identifyDuplicates(content);
15
+ const logs = [];
16
+ displayDuplicates(duplicates, (log = '') => logs.push(log), configuration);
17
+ strictEqual( logs.join('\n'), expected);
18
+ };
19
+ // no duplicates
20
+ loadAndAssert('date-fns.txt', 'date-fns@npm:1.30.1\n' +
21
+ '- @ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared (date-fns@npm:1.30.1)\n' +
22
+ '- @ornikar/learner-native-app@workspace:@ornikar/learner-native-app (date-fns@npm:1.30.1)\n' +
23
+ '- @ornikar/learner-webapp@workspace:@ornikar/learner-webapp (date-fns@npm:1.30.1)\n' +
24
+ '- date-fns-timezone@npm:0.1.4 (date-fns@npm:^1.29.0)\n' +
25
+ '- listr-verbose-renderer@npm:0.5.0 (date-fns@npm:^1.27.2)\n');
26
+ loadAndAssert('type-fest.txt', 'type-fest@npm:3.5.3\n' +
27
+ '- @ornikar/api-helpers@npm:4.9.8 (type-fest@npm:^3.3.0)\n' +
28
+ '- @ornikar/kitt-universal@npm:9.47.2 (type-fest@npm:^3.0.0)\n' +
29
+ '- @ornikar/kitt@npm:34.6.4 (type-fest@npm:^3.0.0)\n' +
30
+ '- @ornikar/react-forms@npm:13.4.12 (type-fest@npm:^3.3.0)\n' +
31
+ '- @ornikar/react-header@npm:12.6.4 (type-fest@npm:^3.3.0)\n' +
32
+ '- @ornikar/react-notification@npm:10.4.9 (type-fest@npm:^3.3.0)\n' +
33
+ '- check-package-dependencies@npm:6.3.1 (type-fest@npm:^3.0.0)\n' +
34
+ '\n' +
35
+ 'type-fest@npm:2.19.0\n' +
36
+ '- @ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared (type-fest@npm:2.19.0)\n' +
37
+ '- @ornikar/learner-webapp@workspace:@ornikar/learner-webapp (type-fest@npm:2.19.0)\n' +
38
+ '- @ornikar/react-apollo@npm:5.7.3 (type-fest@npm:^2.0.0)\n' +
39
+ '- @ornikar/react-app-error-provider@npm:7.10.0 (type-fest@npm:^2.0.0)\n' +
40
+ '- @ornikar/react-mixpanel@npm:1.1.2 (type-fest@npm:^2.0.0)\n' +
41
+ '- @ornikar/webapp-configs@npm:4.2.3 (type-fest@npm:^2.0.0)\n' +
42
+ '\n' +
43
+ 'type-fest@npm:1.4.0\n' +
44
+ '- msw@npm:0.29.0 (type-fest@npm:^1.1.3)\n' +
45
+ '\n' +
46
+ 'type-fest@npm:0.21.3\n' +
47
+ '- ansi-escapes@npm:4.3.2 (type-fest@npm:^0.21.3)\n' +
48
+ '\n' +
49
+ 'type-fest@npm:0.20.2\n' +
50
+ '- boxen@npm:5.1.2 (type-fest@npm:^0.20.2)\n' +
51
+ '- globals@npm:13.20.0 (type-fest@npm:^0.20.2)\n' +
52
+ '\n' +
53
+ 'type-fest@npm:0.18.1\n' +
54
+ '- meow@npm:8.1.2 (type-fest@npm:^0.18.0)\n' +
55
+ '- meow@npm:9.0.0 (type-fest@npm:^0.18.0)\n' +
56
+ '\n' +
57
+ 'type-fest@npm:0.16.0\n' +
58
+ '- tempy@npm:0.7.1 (type-fest@npm:^0.16.0)\n' +
59
+ '\n' +
60
+ 'type-fest@npm:0.13.1\n' +
61
+ '- serialize-error@npm:7.0.1 (type-fest@npm:^0.13.1)\n' +
62
+ '\n' +
63
+ 'type-fest@npm:0.12.0\n' +
64
+ '- serialize-error@npm:6.0.0 (type-fest@npm:^0.12.0)\n' +
65
+ '\n' +
66
+ 'type-fest@npm:0.8.1\n' +
67
+ '- boxen@npm:4.2.0 (type-fest@npm:^0.8.1)\n' +
68
+ '- read-pkg-up@npm:7.0.1 (type-fest@npm:^0.8.1)\n' +
69
+ '\n' +
70
+ 'type-fest@npm:0.7.1\n' +
71
+ '- stacktrace-parser@npm:0.1.10 (type-fest@npm:^0.7.1)\n' +
72
+ '\n' +
73
+ 'type-fest@npm:0.6.0\n' +
74
+ '- load-json-file@npm:6.2.0 (type-fest@npm:^0.6.0)\n' +
75
+ '- read-pkg@npm:5.2.0 (type-fest@npm:^0.6.0)\n' +
76
+ '\n' +
77
+ 'type-fest@npm:0.4.1\n' +
78
+ '- write-pkg@npm:4.0.0 (type-fest@npm:^0.4.1)\n' +
79
+ '\n' +
80
+ 'type-fest@npm:0.3.1\n' +
81
+ '- load-json-file@npm:5.3.0 (type-fest@npm:^0.3.0)\n' +
82
+ '- tempy@npm:0.3.0 (type-fest@npm:^0.3.1)\n'); // simple duplicates
83
+ loadAndAssert('native-base.txt',
84
+ 'native-base@patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::version=3.4.18&hash=f36c02&locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.\n' +
85
+ '- @ornikar/kitt-universal@npm:9.47.2 (native-base@patch:native-base@npm%3A3.4.18#./.yarn/patches/native-base-npm-3.4.18-63dd34e5ad.patch::locator=%40ornikar%2Flearner-apps-monorepo%40workspace%3A.)\n'); // example with patch
86
+ loadAndAssert('validators.txt',
87
+ '@ornikar/validators@npm:7.3.0\n' +
88
+ '- @ornikar/learner-apps-shared@workspace:@ornikar/learner-apps-shared (@ornikar/validators@npm:7.3.0)\n' +
89
+ '- @ornikar/learner-native-app@workspace:@ornikar/learner-native-app (@ornikar/validators@npm:7.3.0)\n' +
90
+ '- @ornikar/learner-webapp@workspace:@ornikar/learner-webapp (@ornikar/validators@npm:7.3.0)\n' +
91
+ '- @ornikar/react-validators@npm:8.0.10 (@ornikar/validators@npm:^7.3.0)\n' +
92
+ '\n' +
93
+ '@ornikar/validators@npm:7.2.11\n' +
94
+ '- @ornikar/react-forms-universal@npm:12.2.0 (@ornikar/validators@npm:^7.2.10)\n' +
95
+ '- @ornikar/react-validators@npm:8.0.8 (@ornikar/validators@npm:^7.2.11)\n'); // complex duplicates