diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service.d.ts
index 4302d0226..f195ecf6f 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service.d.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service.d.ts
@@ -1,4 +1,6 @@
///
import { Diff } from "deep-diff";
import { Option } from "fp-ts/lib/Option";
-export declare function buildDiff(oldYarnLockContent: (Buffer | string)[], newYarnLockContent: (Buffer | string)[]): Option[]>;
+import { ITSValueOrArray } from 'ts-type/lib/type/base';
+import { IComputedPackage } from './diff-service/types';
+export declare function buildDiff(oldYarnLockContent: ITSValueOrArray, newYarnLockContent: ITSValueOrArray): Option[]>;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service.ts
index 7c7b906ea..9e16748fe 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service.ts
@@ -3,11 +3,13 @@ import { fromNullable, Option } from "fp-ts/lib/Option";
import { yarnLockParse } from '@yarn-tool/yarnlock-parse/index';
import { computeHashmapOfPackageAndVersionList } from './diff-service/computeHashmapOfPackageAndVersionList';
import { buildComputedPackage } from './diff-service/buildComputedPackage';
+import { ITSValueOrArray } from 'ts-type/lib/type/base';
+import { IComputedPackage } from './diff-service/types';
export function buildDiff(
- oldYarnLockContent: (Buffer | string)[],
- newYarnLockContent: (Buffer | string)[],
-): Option[]>
+ oldYarnLockContent: ITSValueOrArray,
+ newYarnLockContent: ITSValueOrArray,
+): Option[]>
{
const oldPacakges = buildComputedPackage(oldYarnLockContent);
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.d.ts
index bfc6575a5..87f8a3596 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.d.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.d.ts
@@ -1,3 +1,4 @@
///
import { IComputedPackage } from './types';
-export declare function buildComputedPackage(yarnLockContentList: (Buffer | string)[], alreadyComputedPackage?: IComputedPackage): IComputedPackage;
+import { ITSValueOrArray } from 'ts-type/lib/type/base';
+export declare function buildComputedPackage(yarnLockContentList: ITSValueOrArray, alreadyComputedPackage?: IComputedPackage): IComputedPackage;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.js
index 012b951b1..cf4ee1d2b 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.js
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.js
@@ -4,6 +4,9 @@ exports.buildComputedPackage = void 0;
const index_1 = require("@yarn-tool/yarnlock-parse/index");
const computeHashmapOfPackageAndVersionList_1 = require("./computeHashmapOfPackageAndVersionList");
function buildComputedPackage(yarnLockContentList, alreadyComputedPackage = {}) {
+ if (!Array.isArray(yarnLockContentList)) {
+ yarnLockContentList = [yarnLockContentList];
+ }
return yarnLockContentList
.map(v => index_1.yarnLockParse(v))
.reduce(computeHashmapOfPackageAndVersionList_1.computeHashmapOfPackageAndVersionList, alreadyComputedPackage);
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.ts
index 708f8153a..c02117cc1 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/buildComputedPackage.ts
@@ -1,9 +1,15 @@
import { IComputedPackage } from './types';
import { yarnLockParse } from '@yarn-tool/yarnlock-parse/index';
import { computeHashmapOfPackageAndVersionList } from './computeHashmapOfPackageAndVersionList';
+import { ITSValueOrArray } from 'ts-type/lib/type/base';
-export function buildComputedPackage(yarnLockContentList: (Buffer | string)[], alreadyComputedPackage: IComputedPackage = {})
+export function buildComputedPackage(yarnLockContentList: ITSValueOrArray, alreadyComputedPackage: IComputedPackage = {})
{
+ if (!Array.isArray(yarnLockContentList))
+ {
+ yarnLockContentList = [yarnLockContentList];
+ }
+
return yarnLockContentList
.map(v => yarnLockParse(v))
.reduce(computeHashmapOfPackageAndVersionList, alreadyComputedPackage);
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.js
index d369c471e..e10b3b2ce 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.js
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.js
@@ -2,16 +2,35 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.computeHashmapOfPackageAndVersionList = void 0;
const index_1 = require("@yarn-tool/yarnlock-parse/index");
-const computeHashmapOfPackageAndVersionList_1 = require("./v1/computeHashmapOfPackageAndVersionList");
-const computeHashmapOfPackageAndVersionList_2 = require("./v2/computeHashmapOfPackageAndVersionList");
+const parsePackageRow_1 = require("./v1/parsePackageRow");
+const parsePackageRow_2 = require("./v2/parsePackageRow");
+const index_2 = require("array-hyper-unique/index");
+const semver_1 = require("semver");
function computeHashmapOfPackageAndVersionList(alreadyComputedPackage, parsedOldPackage) {
+ let fn;
if (index_1.isYarnLockParsedV1(parsedOldPackage)) {
- return computeHashmapOfPackageAndVersionList_1.computeHashmapOfPackageAndVersionList(alreadyComputedPackage, parsedOldPackage.data);
+ fn = parsePackageRow_1.parsePackageRow;
}
else if (index_1.isYarnLockParsedV2(parsedOldPackage)) {
- return computeHashmapOfPackageAndVersionList_2.computeHashmapOfPackageAndVersionList(alreadyComputedPackage, parsedOldPackage.data);
+ fn = parsePackageRow_2.parsePackageRow;
}
- throw new TypeError(`can't detect yarn.lock version`);
+ else {
+ throw new TypeError(`can't detect yarn.lock version`);
+ }
+ Object.entries(parsedOldPackage.data)
+ .forEach(([packageName, packageData]) => {
+ var _a;
+ var _b;
+ const result = fn(packageName, packageData);
+ if (typeof result === 'undefined' || result === null) {
+ return;
+ }
+ (_a = alreadyComputedPackage[_b = result.name]) !== null && _a !== void 0 ? _a : (alreadyComputedPackage[_b] = []);
+ alreadyComputedPackage[result.name].push(result.version);
+ index_2.array_unique_overwrite(alreadyComputedPackage[result.name]);
+ alreadyComputedPackage[result.name].sort(semver_1.compareLoose);
+ });
+ return alreadyComputedPackage;
}
exports.computeHashmapOfPackageAndVersionList = computeHashmapOfPackageAndVersionList;
//# sourceMappingURL=computeHashmapOfPackageAndVersionList.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.ts
index c37810410..60ac034c9 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/computeHashmapOfPackageAndVersionList.ts
@@ -4,21 +4,54 @@ import {
isYarnLockParsedV1,
isYarnLockParsedV2,
} from '@yarn-tool/yarnlock-parse/index';
-import { computeHashmapOfPackageAndVersionList as v1 } from './v1/computeHashmapOfPackageAndVersionList';
-import { computeHashmapOfPackageAndVersionList as v2 } from './v2/computeHashmapOfPackageAndVersionList';
+
+import { parsePackageRow as v1 } from './v1/parsePackageRow';
+import { parsePackageRow as v2 } from './v2/parsePackageRow';
+
import { IComputedPackage } from './types';
+import { array_unique_overwrite } from 'array-hyper-unique/index';
+import { compareLoose } from 'semver';
export function computeHashmapOfPackageAndVersionList(alreadyComputedPackage: IComputedPackage,
- parsedOldPackage: IYarnLockParsedV1 | IYarnLockParsedV2): IComputedPackage
+ parsedOldPackage: IYarnLockParsedV1 | IYarnLockParsedV2,
+): IComputedPackage
{
+ let fn: (...argv) => {
+ name: string;
+ version: string;
+ };
+
if (isYarnLockParsedV1(parsedOldPackage))
{
- return v1(alreadyComputedPackage, parsedOldPackage.data)
+ fn = v1
}
else if (isYarnLockParsedV2(parsedOldPackage))
{
- return v2(alreadyComputedPackage, parsedOldPackage.data)
+ fn = v2
+ }
+ else
+ {
+ throw new TypeError(`can't detect yarn.lock version`)
}
- throw new TypeError(`can't detect yarn.lock version`)
+ Object.entries(parsedOldPackage.data)
+ .forEach(([packageName, packageData]) =>
+ {
+ const result = fn(packageName, packageData);
+
+ if (typeof result === 'undefined' || result === null)
+ {
+ return;
+ }
+
+ alreadyComputedPackage[result.name] ??= [];
+ alreadyComputedPackage[result.name].push(result.version);
+
+ array_unique_overwrite(alreadyComputedPackage[result.name])
+
+ alreadyComputedPackage[result.name].sort(compareLoose);
+ })
+ ;
+
+ return alreadyComputedPackage;
}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.d.ts
index 5b0bd2e14..84258dd48 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.d.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.d.ts
@@ -1,3 +1,7 @@
export interface IComputedPackage {
[packagename: string]: string[];
}
+export interface IParsePackageRow {
+ name: string;
+ version: string;
+}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.ts
index b51964a2f..d5bd70685 100644
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.ts
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/types.ts
@@ -3,3 +3,9 @@ export interface IComputedPackage
{
[packagename: string]: string[];
}
+
+export interface IParsePackageRow
+{
+ name: string;
+ version: string;
+}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.d.ts
deleted file mode 100644
index 4afed61d2..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { IPackageData } from './types';
-import { IComputedPackage } from '../types';
-export declare const PACKAGE_REGEX: RegExp;
-export declare function computeHashmapOfPackageAndVersionList(alreadyComputedPackage: IComputedPackage, parsedOldPackage: Record): IComputedPackage;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.js
deleted file mode 100644
index b33484f5e..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.computeHashmapOfPackageAndVersionList = exports.PACKAGE_REGEX = void 0;
-exports.PACKAGE_REGEX = /(?.*)@(?:(?[\^\$])?(?\d)(?:\.(?\d))?(?:\.(?\d))?(?:-(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?(?:\+(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?|\*)/;
-function computeHashmapOfPackageAndVersionList(alreadyComputedPackage, parsedOldPackage) {
- const newComputedPackage = { ...alreadyComputedPackage };
- Object.entries(parsedOldPackage).forEach(([packageName, packageData]) => {
- const regexResult = exports.PACKAGE_REGEX.exec(packageName);
- const packageNameWithoutVersion = regexResult && regexResult.groups && regexResult.groups.packageName;
- if (!packageNameWithoutVersion)
- return;
- if (newComputedPackage[packageNameWithoutVersion]) {
- newComputedPackage[packageNameWithoutVersion].push(packageData.version);
- newComputedPackage[packageNameWithoutVersion] = [
- ...new Set(newComputedPackage[packageNameWithoutVersion]),
- ];
- newComputedPackage[packageNameWithoutVersion].sort();
- }
- else {
- newComputedPackage[packageNameWithoutVersion] = [packageData.version];
- }
- });
- return newComputedPackage;
-}
-exports.computeHashmapOfPackageAndVersionList = computeHashmapOfPackageAndVersionList;
-//# sourceMappingURL=computeHashmapOfPackageAndVersionList.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.ts
deleted file mode 100644
index a973b478d..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/computeHashmapOfPackageAndVersionList.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { IPackageData } from './types';
-import { IComputedPackage } from '../types';
-
-export const PACKAGE_REGEX = /(?.*)@(?:(?[\^\$])?(?\d)(?:\.(?\d))?(?:\.(?\d))?(?:-(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?(?:\+(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?|\*)/;
-
-export function computeHashmapOfPackageAndVersionList(
- alreadyComputedPackage: IComputedPackage,
- parsedOldPackage: Record,
-): IComputedPackage
-{
- const newComputedPackage = { ...alreadyComputedPackage };
- Object.entries(parsedOldPackage).forEach(([packageName, packageData]) =>
- {
- const regexResult = PACKAGE_REGEX.exec(packageName);
- const packageNameWithoutVersion =
- regexResult && regexResult.groups && regexResult.groups.packageName;
-
- if (!packageNameWithoutVersion) return;
- if (newComputedPackage[packageNameWithoutVersion])
- {
- newComputedPackage[packageNameWithoutVersion].push(packageData.version);
- newComputedPackage[packageNameWithoutVersion] = [
- ...new Set(newComputedPackage[packageNameWithoutVersion]),
- ];
- newComputedPackage[packageNameWithoutVersion].sort();
- }
- else
- {
- newComputedPackage[packageNameWithoutVersion] = [packageData.version];
- }
- });
- return newComputedPackage;
-}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.d.ts
new file mode 100644
index 000000000..6abf37e3f
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.d.ts
@@ -0,0 +1 @@
+export declare const PACKAGE_REGEX: RegExp;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.js
new file mode 100644
index 000000000..2cd1234b6
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.js
@@ -0,0 +1,5 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.PACKAGE_REGEX = void 0;
+exports.PACKAGE_REGEX = /(?.*)@(?:(?[\^\$])?(?\d)(?:\.(?\d))?(?:\.(?\d))?(?:-(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?(?:\+(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?|\*)/;
+//# sourceMappingURL=const.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.ts
new file mode 100644
index 000000000..3132ffec6
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/const.ts
@@ -0,0 +1 @@
+export const PACKAGE_REGEX = /(?.*)@(?:(?[\^\$])?(?\d)(?:\.(?\d))?(?:\.(?\d))?(?:-(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?(?:\+(?[0-9a-zA-Z-]+)(?:.(?[0-9a-zA-Z]+))?)?|\*)/;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.d.ts
new file mode 100644
index 000000000..244648f52
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.d.ts
@@ -0,0 +1,3 @@
+import { IPackageData } from './types';
+import { IParsePackageRow } from '../types';
+export declare function parsePackageRow(packageName: string, packageData: IPackageData): IParsePackageRow;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.js
new file mode 100644
index 000000000..cf2b61f94
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.js
@@ -0,0 +1,17 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parsePackageRow = void 0;
+const const_1 = require("./const");
+function parsePackageRow(packageName, packageData) {
+ var _a;
+ const regexResult = const_1.PACKAGE_REGEX.exec(packageName);
+ const packageNameWithoutVersion = (_a = regexResult === null || regexResult === void 0 ? void 0 : regexResult.groups) === null || _a === void 0 ? void 0 : _a.packageName;
+ if (packageNameWithoutVersion) {
+ return {
+ name: packageNameWithoutVersion,
+ version: packageData.version,
+ };
+ }
+}
+exports.parsePackageRow = parsePackageRow;
+//# sourceMappingURL=parsePackageRow.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.ts
new file mode 100644
index 000000000..5d888e1c3
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v1/parsePackageRow.ts
@@ -0,0 +1,19 @@
+import { IPackageData } from './types';
+import { PACKAGE_REGEX } from './const';
+import { IParsePackageRow } from '../types';
+
+export function parsePackageRow(packageName: string, packageData: IPackageData): IParsePackageRow
+{
+ const regexResult = PACKAGE_REGEX.exec(packageName);
+
+ const packageNameWithoutVersion =
+ regexResult?.groups?.packageName;
+
+ if (packageNameWithoutVersion)
+ {
+ return {
+ name: packageNameWithoutVersion,
+ version: packageData.version,
+ }
+ }
+}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.d.ts
deleted file mode 100644
index ea0775231..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.d.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-import { IComputedPackage } from '../types';
-export declare function computeHashmapOfPackageAndVersionList(alreadyComputedPackage: any, parsedOldPackage: any): IComputedPackage;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.js
deleted file mode 100644
index 049b856e6..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.js
+++ /dev/null
@@ -1,8 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.computeHashmapOfPackageAndVersionList = void 0;
-function computeHashmapOfPackageAndVersionList(alreadyComputedPackage, parsedOldPackage) {
- throw new Error(`not implemented`);
-}
-exports.computeHashmapOfPackageAndVersionList = computeHashmapOfPackageAndVersionList;
-//# sourceMappingURL=computeHashmapOfPackageAndVersionList.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.ts
deleted file mode 100644
index fa66c4a30..000000000
--- a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/computeHashmapOfPackageAndVersionList.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-import { IComputedPackage } from '../types';
-import { IPackageData } from '../v1/types';
-
-export function computeHashmapOfPackageAndVersionList(
- alreadyComputedPackage,
- parsedOldPackage,
-): IComputedPackage
-{
- throw new Error(`not implemented`)
-}
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.d.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.d.ts
new file mode 100644
index 000000000..4d53041c1
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.d.ts
@@ -0,0 +1,2 @@
+import { IParsePackageRow } from '../types';
+export declare function parsePackageRow(packageName: string, packageData: any): IParsePackageRow;
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.js b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.js
new file mode 100644
index 000000000..9cef81d5e
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.js
@@ -0,0 +1,8 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.parsePackageRow = void 0;
+function parsePackageRow(packageName, packageData) {
+ throw new Error(`not implemented`);
+}
+exports.parsePackageRow = parsePackageRow;
+//# sourceMappingURL=parsePackageRow.js.map
\ No newline at end of file
diff --git a/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.ts b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.ts
new file mode 100644
index 000000000..59c702a3d
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/lib/diff-service/v2/parsePackageRow.ts
@@ -0,0 +1,7 @@
+import { IPackageData } from '../v1/types';
+import { IParsePackageRow } from '../types';
+
+export function parsePackageRow(packageName: string, packageData): IParsePackageRow
+{
+ throw new Error(`not implemented`)
+}
diff --git a/packages/@yarn-tool/yarnlock-diff/package.json b/packages/@yarn-tool/yarnlock-diff/package.json
index 4f8170a32..536fc116d 100644
--- a/packages/@yarn-tool/yarnlock-diff/package.json
+++ b/packages/@yarn-tool/yarnlock-diff/package.json
@@ -39,7 +39,9 @@
"chalk": "^4.1.0",
"cli-table": "^0.3.1",
"deep-diff": "^1.0.2",
- "fp-ts": "^2.7.1"
+ "fp-ts": "^2.7.1",
+ "semver": "^7.3.2",
+ "ts-type": "^1.2.32"
},
"devDependencies": {},
"publishConfig": {
diff --git a/packages/@yarn-tool/yarnlock-diff/test/__snapshots__/buildDiff.spec.ts.snap b/packages/@yarn-tool/yarnlock-diff/test/__snapshots__/buildDiff.spec.ts.snap
new file mode 100644
index 000000000..488fffb70
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/test/__snapshots__/buildDiff.spec.ts.snap
@@ -0,0 +1,54 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`buildDiff yarn.lock 1`] = `
+Object {
+ "_tag": "Some",
+ "value": Array [
+ DiffEdit {
+ "kind": "E",
+ "lhs": "7.0.2",
+ "path": Array [
+ "@babel/code-frame",
+ 0,
+ ],
+ "rhs": "7.0.0",
+ },
+ DiffEdit {
+ "kind": "E",
+ "lhs": "7.3.5",
+ "path": Array [
+ "@babel/generator",
+ 1,
+ ],
+ "rhs": "7.3.4",
+ },
+ DiffEdit {
+ "kind": "E",
+ "lhs": "6.3.7",
+ "path": Array [
+ "@babel/generator",
+ 0,
+ ],
+ "rhs": "6.3.4",
+ },
+ DiffDeleted {
+ "kind": "D",
+ "lhs": Array [
+ "7.3.4",
+ ],
+ "path": Array [
+ "@babel/types",
+ ],
+ },
+ DiffNew {
+ "kind": "N",
+ "path": Array [
+ "@babel/parser",
+ ],
+ "rhs": Array [
+ "7.3.4",
+ ],
+ },
+ ],
+}
+`;
diff --git a/packages/@yarn-tool/yarnlock-diff/test/buildDiff.spec.ts b/packages/@yarn-tool/yarnlock-diff/test/buildDiff.spec.ts
new file mode 100644
index 000000000..d30dbe9f3
--- /dev/null
+++ b/packages/@yarn-tool/yarnlock-diff/test/buildDiff.spec.ts
@@ -0,0 +1,34 @@
+import FastGlob from '@bluelovers/fast-glob';
+import { join } from "path";
+import { readFileSync } from "fs";
+import { buildDiff } from '../lib/diff-service';
+
+describe(`buildDiff`, () =>
+{
+ const __res = join(__dirname, 'fixtures');
+
+ const files = FastGlob.sync([
+ '*.lock',
+ ], {
+ cwd: join(__res, 'a'),
+ })
+ ;
+
+ files.forEach(file =>
+ {
+
+ test(file, () =>
+ {
+ const yarnlock_old = readFileSync(join(__res, 'a', file));
+ const yarnlock_new = readFileSync(join(__res, 'b', file));
+
+ let actual = buildDiff(yarnlock_old, yarnlock_new);
+
+ expect(actual).toMatchSnapshot();
+
+ });
+
+ })
+ ;
+
+})
diff --git a/packages/@yarn-tool/yarnlock-diff/test/index.test.ts b/packages/@yarn-tool/yarnlock-diff/test/index.test.ts
deleted file mode 100644
index e9f3d0f6f..000000000
--- a/packages/@yarn-tool/yarnlock-diff/test/index.test.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { expect, test } from "@oclif/test";
-
-import cmd = require("../src");
-
-describe("yarn-lock-diff", () =>
-{
- test
- .stdout()
- .do(() => cmd.run([]))
- .exit(2)
- .it("exit if missing pararms");
-
- test
- .stdout()
- .do(() =>
- cmd.run(["-o", "fixtures/a/yarn.lock", "-n", "fixtures/b/yarn.lock"]),
- )
- .it("display the diff", ctx =>
- {
- expect(ctx.stdout).to.contain("");
- });
-});