UNPKG

workspace-tools

Version:

A collection of tools that are useful in a git-controlled monorepo that is managed by one of these software:

142 lines (138 loc) 4.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const dependencies_1 = require("../dependencies"); describe("getTransitiveConsumers", () => { it("can get linear transitive consumers", () => { const allPackages = { a: stubPackage("a", ["b"]), b: stubPackage("b", ["c"]), c: stubPackage("c"), }; const actual = dependencies_1.getTransitiveConsumers(["c"], allPackages); expect(actual).toContain("a"); expect(actual).toContain("b"); }); it("can get linear transitive consumers with scope", () => { const allPackages = { grid: stubPackage("grid", ["foo"]), word: stubPackage("word", ["bar"]), foo: stubPackage("foo", ["core"]), bar: stubPackage("bar", ["core"]), core: stubPackage("core"), demo: stubPackage("demo", ["grid", "word"]), }; const actual = dependencies_1.getTransitiveConsumers(["core"], allPackages, [ "grid", "word", ]); expect(actual).toContain("foo"); expect(actual).toContain("bar"); expect(actual).toContain("grid"); expect(actual).toContain("word"); expect(actual).not.toContain("demo"); }); it("can get transitive consumer with deps", () => { /* [b, a] [d, a] [c, b] [e, b] [f, d] [c, g] expected: a, b, g (orignates from c) */ const allPackages = { a: stubPackage("a", ["b", "d"]), b: stubPackage("b", ["c", "e"]), c: stubPackage("c"), d: stubPackage("d", ["f"]), e: stubPackage("e"), f: stubPackage("f"), g: stubPackage("g", ["c"]), }; const actual = dependencies_1.getTransitiveConsumers(["c"], allPackages); expect(actual).toContain("a"); expect(actual).toContain("b"); expect(actual).toContain("g"); expect(actual).not.toContain("d"); expect(actual).not.toContain("e"); expect(actual).not.toContain("f"); expect(actual).not.toContain("c"); }); }); describe("getTransitiveProviders", () => { it("can get linear transitive providers", () => { const allPackages = { a: stubPackage("a", ["b"]), b: stubPackage("b", ["c"]), c: stubPackage("c"), }; const actual = dependencies_1.getTransitiveProviders(["a"], allPackages); expect(actual).toContain("b"); expect(actual).toContain("c"); }); it("can get transitive providers with deps", () => { /* [b, a] [c, b] [e, c] [f, c] [f, e] [g, f] expected: e, f, g */ const allPackages = { a: stubPackage("a", ["b"]), b: stubPackage("b", ["c"]), c: stubPackage("c", ["e", "f"]), d: stubPackage("d"), e: stubPackage("e", ["f"]), f: stubPackage("f", ["g"]), g: stubPackage("g"), }; const actual = dependencies_1.getTransitiveProviders(["c"], allPackages); expect(actual).toContain("e"); expect(actual).toContain("f"); expect(actual).toContain("g"); expect(actual).not.toContain("a"); expect(actual).not.toContain("b"); expect(actual).not.toContain("d"); expect(actual).not.toContain("c"); }); it("can get transitive consumers with deps and scope", () => { /* [b, a] [c, b] [e, c] [f, c] [f, e] [g, f] expected: e, f, g */ const allPackages = { a: stubPackage("a", ["b", "h"]), b: stubPackage("b", ["c"]), c: stubPackage("c", ["e", "f"]), d: stubPackage("d"), e: stubPackage("e", ["f"]), f: stubPackage("f", ["g"]), g: stubPackage("g"), h: stubPackage("h", ["i"]), i: stubPackage("i", ["f"]), }; const actual = dependencies_1.getTransitiveConsumers(["f"], allPackages, ["b"]); expect(actual).toContain("e"); expect(actual).toContain("c"); expect(actual).toContain("b"); expect(actual).not.toContain("h"); }); }); function stubPackage(name, deps = []) { return { name, packageJsonPath: `packages/${name}`, version: "1.0", dependencies: deps.reduce((depMap, dep) => (Object.assign(Object.assign({}, depMap), { [dep]: "*" })), {}), devDependencies: {}, }; }