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(""); - }); -});