@monorepolint/rules 0.6.0-alpha.2 → 0.6.0-alpha.4
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.
- package/.turbo/turbo-clean.log +1 -1
- package/.turbo/turbo-compile-typescript.log +1 -1
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +161 -102
- package/.turbo/turbo-transpile-typescript.log +4 -4
- package/CHANGELOG.md +19 -0
- package/build/js/index.js +429 -241
- package/build/js/index.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/__tests__/utils.d.ts +0 -1
- package/build/types/__tests__/utils.d.ts.map +1 -1
- package/build/types/bannedDependencies.d.ts.map +1 -1
- package/build/types/fileContents.d.ts.map +1 -1
- package/build/types/forceError.d.ts +4 -0
- package/build/types/forceError.d.ts.map +1 -0
- package/build/types/index.d.ts +5 -3
- package/build/types/index.d.ts.map +1 -1
- package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -1
- package/build/types/nestedWorkspaces.d.ts.map +1 -1
- package/build/types/oncePerPackage.d.ts +11 -0
- package/build/types/oncePerPackage.d.ts.map +1 -0
- package/build/types/packageEntry.d.ts.map +1 -1
- package/build/types/packageOrder.d.ts.map +1 -1
- package/build/types/packageScript.d.ts.map +1 -1
- package/build/types/requireDependency.d.ts +12 -12
- package/build/types/requireDependency.d.ts.map +1 -1
- package/build/types/util/checkAlpha.d.ts.map +1 -1
- package/build/types/util/createRuleFactory.d.ts.map +1 -1
- package/build/types/util/packageDependencyGraphService.d.ts.map +1 -1
- package/coverage/clover.xml +1201 -813
- package/coverage/coverage-final.json +20 -18
- package/coverage/index.html +20 -20
- package/coverage/src/alphabeticalDependencies.ts.html +11 -11
- package/coverage/src/alphabeticalScripts.ts.html +5 -5
- package/coverage/src/bannedDependencies.ts.html +76 -28
- package/coverage/src/consistentDependencies.ts.html +51 -18
- package/coverage/src/consistentVersions.ts.html +144 -48
- package/coverage/src/fileContents.ts.html +47 -23
- package/coverage/src/forceError.ts.html +184 -0
- package/coverage/src/index.html +96 -66
- package/coverage/src/index.ts.html +39 -33
- package/coverage/src/mustSatisfyPeerDependencies.ts.html +323 -80
- package/coverage/src/nestedWorkspaces.ts.html +47 -20
- package/coverage/src/oncePerPackage.ts.html +181 -0
- package/coverage/src/packageEntry.ts.html +40 -19
- package/coverage/src/packageOrder.ts.html +30 -12
- package/coverage/src/packageScript.ts.html +81 -27
- package/coverage/src/requireDependency.ts.html +77 -32
- package/coverage/src/standardTsconfig.ts.html +84 -21
- package/coverage/src/util/checkAlpha.ts.html +18 -9
- package/coverage/src/util/createRuleFactory.ts.html +16 -4
- package/coverage/src/util/index.html +17 -17
- package/coverage/src/util/makeDirectory.ts.html +5 -5
- package/coverage/src/util/packageDependencyGraphService.ts.html +94 -19
- package/package.json +4 -5
- package/src/__tests__/alphabeticalScripts.spec.ts +12 -4
- package/src/__tests__/bannedDependencies.spec.ts +45 -16
- package/src/__tests__/consistentDependencies.spec.ts +11 -5
- package/src/__tests__/consistentVersions.spec.ts +72 -18
- package/src/__tests__/fileContents.spec.ts +5 -5
- package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +191 -76
- package/src/__tests__/nestedWorkspaces.spec.ts +10 -7
- package/src/__tests__/packageEntry.spec.ts +48 -47
- package/src/__tests__/packageOrder.spec.ts +72 -71
- package/src/__tests__/packageScript.spec.ts +19 -10
- package/src/__tests__/requireDependency.spec.ts +12 -6
- package/src/__tests__/utils.ts +16 -7
- package/src/bannedDependencies.ts +32 -16
- package/src/consistentDependencies.ts +19 -8
- package/src/consistentVersions.ts +70 -38
- package/src/fileContents.ts +19 -11
- package/src/forceError.ts +33 -0
- package/src/index.ts +5 -3
- package/src/mustSatisfyPeerDependencies.ts +141 -60
- package/src/nestedWorkspaces.ts +19 -10
- package/src/oncePerPackage.ts +32 -0
- package/src/packageEntry.ts +18 -11
- package/src/packageOrder.ts +9 -3
- package/src/packageScript.ts +37 -19
- package/src/requireDependency.ts +26 -11
- package/src/standardTsconfig.ts +31 -10
- package/src/util/checkAlpha.ts +5 -2
- package/src/util/createRuleFactory.ts +6 -2
- package/src/util/packageDependencyGraphService.ts +38 -13
- package/vitest.config.mjs +6 -7
|
@@ -9,6 +9,7 @@ import { WorkspaceContextImpl } from "@monorepolint/core";
|
|
|
9
9
|
import { Host, PackageJson, SimpleHost } from "@monorepolint/utils";
|
|
10
10
|
import * as path from "path";
|
|
11
11
|
import * as tmp from "tmp";
|
|
12
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
12
13
|
import {
|
|
13
14
|
doesASatisfyB as doesASatisfyBTyped,
|
|
14
15
|
findIntersection as findIntersectionTyped,
|
|
@@ -21,7 +22,6 @@ import {
|
|
|
21
22
|
RANGE_REGEX,
|
|
22
23
|
} from "../mustSatisfyPeerDependencies.js";
|
|
23
24
|
import { makeDirectoryRecursively } from "../util/makeDirectory.js";
|
|
24
|
-
import { describe, expect, it, beforeEach, afterEach, vi } from "vitest";
|
|
25
25
|
|
|
26
26
|
const doesASatisfyB = (a: string, b: string) => {
|
|
27
27
|
if (!isValidRange(a)) {
|
|
@@ -75,7 +75,7 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
75
75
|
verbose: false,
|
|
76
76
|
silent: true,
|
|
77
77
|
},
|
|
78
|
-
host
|
|
78
|
+
host,
|
|
79
79
|
);
|
|
80
80
|
const addErrorSpy = vi.spyOn(workspaceContext, "addError");
|
|
81
81
|
|
|
@@ -86,7 +86,11 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
86
86
|
return { addErrorSpy, check, host };
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
function addPackageJson(
|
|
89
|
+
function addPackageJson(
|
|
90
|
+
host: Host,
|
|
91
|
+
filePath: string,
|
|
92
|
+
packageJson: PackageJson,
|
|
93
|
+
) {
|
|
90
94
|
const dirPath = path.resolve(cwd!, path.dirname(filePath));
|
|
91
95
|
const resolvedFilePath = path.resolve(cwd!, filePath);
|
|
92
96
|
|
|
@@ -226,7 +230,8 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
226
230
|
it("Properly matches greator or equal version range regex", async () => {
|
|
227
231
|
const passTests = [...greaterOrEqualVersionRangePassTests];
|
|
228
232
|
for (const passTest of passTests) {
|
|
229
|
-
expect(MATCH_GREATER_OR_EQUAL_VERSION_RANGE.test(passTest))
|
|
233
|
+
expect(MATCH_GREATER_OR_EQUAL_VERSION_RANGE.test(passTest))
|
|
234
|
+
.toBeTruthy();
|
|
230
235
|
}
|
|
231
236
|
const failTests = [
|
|
232
237
|
...anyVersionRangePassTests,
|
|
@@ -682,13 +687,20 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
682
687
|
describe("Determines dependencies intersections correctly", () => {
|
|
683
688
|
it("equivalence", () => {
|
|
684
689
|
const exactVersion = "15.1.0";
|
|
685
|
-
expect(findIntersection(exactVersion, exactVersion)).toEqual(
|
|
690
|
+
expect(findIntersection(exactVersion, exactVersion)).toEqual(
|
|
691
|
+
exactVersion,
|
|
692
|
+
);
|
|
686
693
|
const majorVersion1 = "^15";
|
|
687
|
-
expect(findIntersection(majorVersion1, majorVersion1)).toEqual(
|
|
694
|
+
expect(findIntersection(majorVersion1, majorVersion1)).toEqual(
|
|
695
|
+
majorVersion1,
|
|
696
|
+
);
|
|
688
697
|
const majorVersion2 = "^15.2";
|
|
689
|
-
expect(findIntersection(majorVersion2, majorVersion2)).toEqual(
|
|
698
|
+
expect(findIntersection(majorVersion2, majorVersion2)).toEqual(
|
|
699
|
+
majorVersion2,
|
|
700
|
+
);
|
|
690
701
|
const greaterOrEqualVersion = ">=1";
|
|
691
|
-
expect(findIntersection(greaterOrEqualVersion, greaterOrEqualVersion))
|
|
702
|
+
expect(findIntersection(greaterOrEqualVersion, greaterOrEqualVersion))
|
|
703
|
+
.toEqual(greaterOrEqualVersion);
|
|
692
704
|
});
|
|
693
705
|
|
|
694
706
|
it("exact vs any", () => {
|
|
@@ -708,8 +720,12 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
708
720
|
it("greater or equal vs any", () => {
|
|
709
721
|
const greaterOrEqualVersion = ">=15";
|
|
710
722
|
const anyVersion = "*";
|
|
711
|
-
expect(findIntersection(greaterOrEqualVersion, anyVersion)).toEqual(
|
|
712
|
-
|
|
723
|
+
expect(findIntersection(greaterOrEqualVersion, anyVersion)).toEqual(
|
|
724
|
+
greaterOrEqualVersion,
|
|
725
|
+
);
|
|
726
|
+
expect(findIntersection(anyVersion, greaterOrEqualVersion)).toEqual(
|
|
727
|
+
greaterOrEqualVersion,
|
|
728
|
+
);
|
|
713
729
|
});
|
|
714
730
|
|
|
715
731
|
it("any vs any", () => {
|
|
@@ -720,45 +736,75 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
720
736
|
it("exact vs greater or equal", () => {
|
|
721
737
|
const exactVersion = "15.1.0";
|
|
722
738
|
const greaterOrEqualVersion1 = ">=1";
|
|
723
|
-
expect(findIntersection(exactVersion, greaterOrEqualVersion1)).toEqual(
|
|
724
|
-
|
|
739
|
+
expect(findIntersection(exactVersion, greaterOrEqualVersion1)).toEqual(
|
|
740
|
+
exactVersion,
|
|
741
|
+
);
|
|
742
|
+
expect(findIntersection(greaterOrEqualVersion1, exactVersion)).toEqual(
|
|
743
|
+
exactVersion,
|
|
744
|
+
);
|
|
725
745
|
const greaterOrEqualVersion2 = ">=15";
|
|
726
|
-
expect(findIntersection(exactVersion, greaterOrEqualVersion2)).toEqual(
|
|
727
|
-
|
|
746
|
+
expect(findIntersection(exactVersion, greaterOrEqualVersion2)).toEqual(
|
|
747
|
+
exactVersion,
|
|
748
|
+
);
|
|
749
|
+
expect(findIntersection(greaterOrEqualVersion2, exactVersion)).toEqual(
|
|
750
|
+
exactVersion,
|
|
751
|
+
);
|
|
728
752
|
const greaterOrEqualVersion3 = ">=100";
|
|
729
|
-
expect(findIntersection(exactVersion, greaterOrEqualVersion3))
|
|
730
|
-
|
|
753
|
+
expect(findIntersection(exactVersion, greaterOrEqualVersion3))
|
|
754
|
+
.toBeUndefined();
|
|
755
|
+
expect(findIntersection(greaterOrEqualVersion3, exactVersion))
|
|
756
|
+
.toBeUndefined();
|
|
731
757
|
});
|
|
732
758
|
|
|
733
759
|
it("major vs greater or equal", () => {
|
|
734
760
|
const majorVersion = "^15";
|
|
735
761
|
const greaterOrEqualVersion1 = ">=1";
|
|
736
|
-
expect(findIntersection(majorVersion, greaterOrEqualVersion1)).toEqual(
|
|
737
|
-
|
|
762
|
+
expect(findIntersection(majorVersion, greaterOrEqualVersion1)).toEqual(
|
|
763
|
+
majorVersion,
|
|
764
|
+
);
|
|
765
|
+
expect(findIntersection(greaterOrEqualVersion1, majorVersion)).toEqual(
|
|
766
|
+
majorVersion,
|
|
767
|
+
);
|
|
738
768
|
const greaterOrEqualVersion2 = ">=15";
|
|
739
|
-
expect(findIntersection(majorVersion, greaterOrEqualVersion2)).toEqual(
|
|
740
|
-
|
|
769
|
+
expect(findIntersection(majorVersion, greaterOrEqualVersion2)).toEqual(
|
|
770
|
+
majorVersion,
|
|
771
|
+
);
|
|
772
|
+
expect(findIntersection(greaterOrEqualVersion2, majorVersion)).toEqual(
|
|
773
|
+
majorVersion,
|
|
774
|
+
);
|
|
741
775
|
const greaterOrEqualVersion3 = ">=100";
|
|
742
|
-
expect(findIntersection(majorVersion, greaterOrEqualVersion3))
|
|
743
|
-
|
|
776
|
+
expect(findIntersection(majorVersion, greaterOrEqualVersion3))
|
|
777
|
+
.toBeUndefined();
|
|
778
|
+
expect(findIntersection(greaterOrEqualVersion3, majorVersion))
|
|
779
|
+
.toBeUndefined();
|
|
744
780
|
const greaterOrEqualVersion4 = ">=15.2.3";
|
|
745
|
-
expect(findIntersection(majorVersion, greaterOrEqualVersion4)).toEqual(
|
|
746
|
-
|
|
781
|
+
expect(findIntersection(majorVersion, greaterOrEqualVersion4)).toEqual(
|
|
782
|
+
"^15.2.3",
|
|
783
|
+
);
|
|
784
|
+
expect(findIntersection(greaterOrEqualVersion4, majorVersion)).toEqual(
|
|
785
|
+
"^15.2.3",
|
|
786
|
+
);
|
|
747
787
|
});
|
|
748
788
|
|
|
749
789
|
it("greater or equal vs greater or equal", () => {
|
|
750
790
|
const greaterOrEqualVersion1 = ">=1";
|
|
751
791
|
const greaterOrEqualVersion2 = ">=15";
|
|
752
|
-
expect(findIntersection(greaterOrEqualVersion1, greaterOrEqualVersion2))
|
|
753
|
-
|
|
792
|
+
expect(findIntersection(greaterOrEqualVersion1, greaterOrEqualVersion2))
|
|
793
|
+
.toEqual(greaterOrEqualVersion2);
|
|
794
|
+
expect(findIntersection(greaterOrEqualVersion2, greaterOrEqualVersion1))
|
|
795
|
+
.toEqual(greaterOrEqualVersion2);
|
|
754
796
|
});
|
|
755
797
|
|
|
756
798
|
it("exact vs major", () => {
|
|
757
799
|
expect(findIntersection("15.1.0", "^15")).toEqual("15.1.0");
|
|
758
800
|
const exactVersion = "15.1.0";
|
|
759
801
|
const majorVersion1 = "^15";
|
|
760
|
-
expect(findIntersection(exactVersion, majorVersion1)).toEqual(
|
|
761
|
-
|
|
802
|
+
expect(findIntersection(exactVersion, majorVersion1)).toEqual(
|
|
803
|
+
exactVersion,
|
|
804
|
+
);
|
|
805
|
+
expect(findIntersection(majorVersion1, exactVersion)).toEqual(
|
|
806
|
+
exactVersion,
|
|
807
|
+
);
|
|
762
808
|
const majorVersion2 = "^14";
|
|
763
809
|
expect(findIntersection(exactVersion, majorVersion2)).toBeUndefined();
|
|
764
810
|
expect(findIntersection(majorVersion2, exactVersion)).toBeUndefined();
|
|
@@ -770,11 +816,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
770
816
|
it("major vs major", () => {
|
|
771
817
|
const majorVersion1 = "^15";
|
|
772
818
|
const majorVersion2 = "^15.2";
|
|
773
|
-
expect(findIntersection(majorVersion1, majorVersion2)).toEqual(
|
|
774
|
-
|
|
819
|
+
expect(findIntersection(majorVersion1, majorVersion2)).toEqual(
|
|
820
|
+
majorVersion2,
|
|
821
|
+
);
|
|
822
|
+
expect(findIntersection(majorVersion2, majorVersion1)).toEqual(
|
|
823
|
+
majorVersion2,
|
|
824
|
+
);
|
|
775
825
|
const majorVersion3 = "15";
|
|
776
|
-
expect(findIntersection(majorVersion3, majorVersion2)).toEqual(
|
|
777
|
-
|
|
826
|
+
expect(findIntersection(majorVersion3, majorVersion2)).toEqual(
|
|
827
|
+
majorVersion2,
|
|
828
|
+
);
|
|
829
|
+
expect(findIntersection(majorVersion2, majorVersion3)).toEqual(
|
|
830
|
+
majorVersion2,
|
|
831
|
+
);
|
|
778
832
|
const majorVersion4 = "16";
|
|
779
833
|
expect(findIntersection(majorVersion4, majorVersion2)).toBeUndefined();
|
|
780
834
|
expect(findIntersection(majorVersion2, majorVersion4)).toBeUndefined();
|
|
@@ -783,11 +837,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
783
837
|
it("exact vs union", () => {
|
|
784
838
|
const exactVersion = "15.1.0";
|
|
785
839
|
const unionVersion1 = "^15 || ^16";
|
|
786
|
-
expect(findIntersection(exactVersion, unionVersion1)).toEqual(
|
|
787
|
-
|
|
840
|
+
expect(findIntersection(exactVersion, unionVersion1)).toEqual(
|
|
841
|
+
exactVersion,
|
|
842
|
+
);
|
|
843
|
+
expect(findIntersection(unionVersion1, exactVersion)).toEqual(
|
|
844
|
+
exactVersion,
|
|
845
|
+
);
|
|
788
846
|
const unionVersion2 = "^14 || ^15";
|
|
789
|
-
expect(findIntersection(exactVersion, unionVersion2)).toEqual(
|
|
790
|
-
|
|
847
|
+
expect(findIntersection(exactVersion, unionVersion2)).toEqual(
|
|
848
|
+
exactVersion,
|
|
849
|
+
);
|
|
850
|
+
expect(findIntersection(unionVersion2, exactVersion)).toEqual(
|
|
851
|
+
exactVersion,
|
|
852
|
+
);
|
|
791
853
|
const unionVersion3 = "^16 || ^17";
|
|
792
854
|
expect(findIntersection(exactVersion, unionVersion3)).toBeUndefined();
|
|
793
855
|
expect(findIntersection(unionVersion3, exactVersion)).toBeUndefined();
|
|
@@ -796,11 +858,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
796
858
|
it("major vs union", () => {
|
|
797
859
|
const majorVersion = "^15.2";
|
|
798
860
|
const unionVersion1 = "^15 || ^16";
|
|
799
|
-
expect(findIntersection(majorVersion, unionVersion1)).toEqual(
|
|
800
|
-
|
|
861
|
+
expect(findIntersection(majorVersion, unionVersion1)).toEqual(
|
|
862
|
+
majorVersion,
|
|
863
|
+
);
|
|
864
|
+
expect(findIntersection(unionVersion1, majorVersion)).toEqual(
|
|
865
|
+
majorVersion,
|
|
866
|
+
);
|
|
801
867
|
const unionVersion2 = "^14 || ^15";
|
|
802
|
-
expect(findIntersection(majorVersion, unionVersion2)).toEqual(
|
|
803
|
-
|
|
868
|
+
expect(findIntersection(majorVersion, unionVersion2)).toEqual(
|
|
869
|
+
majorVersion,
|
|
870
|
+
);
|
|
871
|
+
expect(findIntersection(unionVersion2, majorVersion)).toEqual(
|
|
872
|
+
majorVersion,
|
|
873
|
+
);
|
|
804
874
|
const unionVersion3 = "^16 || ^17";
|
|
805
875
|
expect(findIntersection(majorVersion, unionVersion3)).toBeUndefined();
|
|
806
876
|
expect(findIntersection(unionVersion3, majorVersion)).toBeUndefined();
|
|
@@ -809,11 +879,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
809
879
|
it("union vs union", () => {
|
|
810
880
|
const unionVersion1 = "^15.2 || ^16";
|
|
811
881
|
const unionVersion2 = "^15 || ^16";
|
|
812
|
-
expect(findIntersection(unionVersion1, unionVersion2)).toEqual(
|
|
813
|
-
|
|
882
|
+
expect(findIntersection(unionVersion1, unionVersion2)).toEqual(
|
|
883
|
+
"^15.2 || ^16",
|
|
884
|
+
);
|
|
885
|
+
expect(findIntersection(unionVersion2, unionVersion1)).toEqual(
|
|
886
|
+
"^15.2 || ^16",
|
|
887
|
+
);
|
|
814
888
|
const unionVersion3 = "^15 || ^16.4";
|
|
815
|
-
expect(findIntersection(unionVersion1, unionVersion3)).toEqual(
|
|
816
|
-
|
|
889
|
+
expect(findIntersection(unionVersion1, unionVersion3)).toEqual(
|
|
890
|
+
"^15.2 || ^16.4",
|
|
891
|
+
);
|
|
892
|
+
expect(findIntersection(unionVersion3, unionVersion1)).toEqual(
|
|
893
|
+
"^15.2 || ^16.4",
|
|
894
|
+
);
|
|
817
895
|
const unionVersion4 = "14 || 15";
|
|
818
896
|
expect(findIntersection(unionVersion1, unionVersion4)).toEqual("^15.2");
|
|
819
897
|
expect(findIntersection(unionVersion4, unionVersion1)).toEqual("^15.2");
|
|
@@ -843,13 +921,17 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
843
921
|
const greatLibPackageJson = {
|
|
844
922
|
name: "greatLib",
|
|
845
923
|
};
|
|
846
|
-
addPackageJson(
|
|
924
|
+
addPackageJson(
|
|
925
|
+
host,
|
|
926
|
+
"./node_modules/greatLib/package.json",
|
|
927
|
+
greatLibPackageJson,
|
|
928
|
+
);
|
|
847
929
|
|
|
848
930
|
await check({});
|
|
849
931
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
850
932
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
851
|
-
`[0] Package ${testPackageJson.name} has overloaded greatLib dependencies.\n\t`
|
|
852
|
-
`Peer dependency '${testPackageJson.peerDependencies.greatLib}' and regular dependency '${testPackageJson.dependencies.greatLib}'
|
|
933
|
+
`[0] Package ${testPackageJson.name} has overloaded greatLib dependencies.\n\t`
|
|
934
|
+
+ `Peer dependency '${testPackageJson.peerDependencies.greatLib}' and regular dependency '${testPackageJson.dependencies.greatLib}'.`,
|
|
853
935
|
);
|
|
854
936
|
});
|
|
855
937
|
|
|
@@ -898,18 +980,18 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
898
980
|
await check({});
|
|
899
981
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
900
982
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
901
|
-
`[1] Package ${testPackageJson.name} has conflicting inherited greatLib peer dependencies.\n\t`
|
|
902
|
-
`Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}' but\n\t`
|
|
903
|
-
`Dependency ${aaaPackageJson.name} requires '${aaaPackageJson.peerDependencies.greatLib}'
|
|
983
|
+
`[1] Package ${testPackageJson.name} has conflicting inherited greatLib peer dependencies.\n\t`
|
|
984
|
+
+ `Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}' but\n\t`
|
|
985
|
+
+ `Dependency ${aaaPackageJson.name} requires '${aaaPackageJson.peerDependencies.greatLib}'.`,
|
|
904
986
|
);
|
|
905
987
|
addErrorSpy.mockReset();
|
|
906
988
|
|
|
907
989
|
await check({ enforceForDevDependencies: true });
|
|
908
990
|
expect(addErrorSpy).toHaveBeenCalledTimes(2);
|
|
909
991
|
expect(addErrorSpy.mock.calls[1][0].message).toEqual(
|
|
910
|
-
`[1] Package ${testPackageJson.name} has conflicting inherited greatestLib peer dependencies.\n\t`
|
|
911
|
-
`Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatestLib}' but\n\t`
|
|
912
|
-
`Dependency ${aaaPackageJson.name} requires '${aaaPackageJson.peerDependencies.greatestLib}'
|
|
992
|
+
`[1] Package ${testPackageJson.name} has conflicting inherited greatestLib peer dependencies.\n\t`
|
|
993
|
+
+ `Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatestLib}' but\n\t`
|
|
994
|
+
+ `Dependency ${aaaPackageJson.name} requires '${aaaPackageJson.peerDependencies.greatestLib}'.`,
|
|
913
995
|
);
|
|
914
996
|
addErrorSpy.mockReset();
|
|
915
997
|
});
|
|
@@ -933,7 +1015,11 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
933
1015
|
const greatLibPackageJson = {
|
|
934
1016
|
name: "greatLib",
|
|
935
1017
|
};
|
|
936
|
-
addPackageJson(
|
|
1018
|
+
addPackageJson(
|
|
1019
|
+
host,
|
|
1020
|
+
"./node_modules/greatLib/package.json",
|
|
1021
|
+
greatLibPackageJson,
|
|
1022
|
+
);
|
|
937
1023
|
const aaaPackageJson = {
|
|
938
1024
|
name: "a",
|
|
939
1025
|
peerDependencies: {
|
|
@@ -959,16 +1045,16 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
959
1045
|
await check({});
|
|
960
1046
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
961
1047
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
962
|
-
`[2] Package ${testPackageJson.name} dependency on greatLib '${testPackageJson.dependencies.greatLib}' does not satisfy inherited peer dependencies.\n\t`
|
|
963
|
-
`Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}'
|
|
1048
|
+
`[2] Package ${testPackageJson.name} dependency on greatLib '${testPackageJson.dependencies.greatLib}' does not satisfy inherited peer dependencies.\n\t`
|
|
1049
|
+
+ `Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}'.`,
|
|
964
1050
|
);
|
|
965
1051
|
addErrorSpy.mockReset();
|
|
966
1052
|
|
|
967
1053
|
await check({ enforceForDevDependencies: true });
|
|
968
1054
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
969
1055
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
970
|
-
`[2] Package ${testPackageJson.name} dependency on greatLib '${testPackageJson.dependencies.greatLib}' does not satisfy inherited peer dependencies.\n\t`
|
|
971
|
-
`Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatLib}'
|
|
1056
|
+
`[2] Package ${testPackageJson.name} dependency on greatLib '${testPackageJson.dependencies.greatLib}' does not satisfy inherited peer dependencies.\n\t`
|
|
1057
|
+
+ `Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatLib}'.`,
|
|
972
1058
|
);
|
|
973
1059
|
addErrorSpy.mockReset();
|
|
974
1060
|
});
|
|
@@ -986,7 +1072,11 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
986
1072
|
ccc: "0.0.1",
|
|
987
1073
|
},
|
|
988
1074
|
} as const;
|
|
989
|
-
const readTestPackageJson = addPackageJson(
|
|
1075
|
+
const readTestPackageJson = addPackageJson(
|
|
1076
|
+
host,
|
|
1077
|
+
"./package.json",
|
|
1078
|
+
testPackageJson,
|
|
1079
|
+
);
|
|
990
1080
|
|
|
991
1081
|
const aaaPackageJson = {
|
|
992
1082
|
name: "aaa",
|
|
@@ -1013,10 +1103,10 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1013
1103
|
await check({});
|
|
1014
1104
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
1015
1105
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
1016
|
-
`[3] Package ${testPackageJson.name} is missing required greatLib dependency.\n\t`
|
|
1017
|
-
`Dependencies [${aaaPackageJson.name}, ${bbbPackageJson.name}] require `
|
|
1018
|
-
`['${aaaPackageJson.peerDependencies.greatLib}', '${bbbPackageJson.peerDependencies.greatLib}'] `
|
|
1019
|
-
`respectively, resolving to '^16.2'
|
|
1106
|
+
`[3] Package ${testPackageJson.name} is missing required greatLib dependency.\n\t`
|
|
1107
|
+
+ `Dependencies [${aaaPackageJson.name}, ${bbbPackageJson.name}] require `
|
|
1108
|
+
+ `['${aaaPackageJson.peerDependencies.greatLib}', '${bbbPackageJson.peerDependencies.greatLib}'] `
|
|
1109
|
+
+ `respectively, resolving to '^16.2'.`,
|
|
1020
1110
|
);
|
|
1021
1111
|
expect(readTestPackageJson().peerDependencies!.greatLib).toEqual("^16.2");
|
|
1022
1112
|
addErrorSpy.mockReset();
|
|
@@ -1024,8 +1114,8 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1024
1114
|
await check({ enforceForDevDependencies: true });
|
|
1025
1115
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
1026
1116
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
1027
|
-
`[3] Package ${testPackageJson.name} is missing required greatestLib dependency.\n\t`
|
|
1028
|
-
`Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatestLib}'
|
|
1117
|
+
`[3] Package ${testPackageJson.name} is missing required greatestLib dependency.\n\t`
|
|
1118
|
+
+ `Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatestLib}'.`,
|
|
1029
1119
|
);
|
|
1030
1120
|
addErrorSpy.mockReset();
|
|
1031
1121
|
});
|
|
@@ -1046,7 +1136,11 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1046
1136
|
ccc: "0.0.1",
|
|
1047
1137
|
},
|
|
1048
1138
|
} as const;
|
|
1049
|
-
const readTestPackageJson = addPackageJson(
|
|
1139
|
+
const readTestPackageJson = addPackageJson(
|
|
1140
|
+
host,
|
|
1141
|
+
"./package.json",
|
|
1142
|
+
testPackageJson,
|
|
1143
|
+
);
|
|
1050
1144
|
|
|
1051
1145
|
const aaaPackageJson = {
|
|
1052
1146
|
name: "aaa",
|
|
@@ -1073,17 +1167,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1073
1167
|
await check({});
|
|
1074
1168
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
1075
1169
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
1076
|
-
`[4] Package ${testPackageJson.name} peer dependency on greatLib '${testPackageJson.peerDependencies.greatLib}' is not strict enough.\n\t`
|
|
1077
|
-
`Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}'
|
|
1170
|
+
`[4] Package ${testPackageJson.name} peer dependency on greatLib '${testPackageJson.peerDependencies.greatLib}' is not strict enough.\n\t`
|
|
1171
|
+
+ `Dependency ${bbbPackageJson.name} requires '${bbbPackageJson.peerDependencies.greatLib}'.`,
|
|
1172
|
+
);
|
|
1173
|
+
expect(readTestPackageJson().peerDependencies!.greatLib).toEqual(
|
|
1174
|
+
bbbPackageJson.peerDependencies.greatLib,
|
|
1078
1175
|
);
|
|
1079
|
-
expect(readTestPackageJson().peerDependencies!.greatLib).toEqual(bbbPackageJson.peerDependencies.greatLib);
|
|
1080
1176
|
addErrorSpy.mockReset();
|
|
1081
1177
|
|
|
1082
1178
|
await check({ enforceForDevDependencies: true });
|
|
1083
1179
|
expect(addErrorSpy).toHaveBeenCalledTimes(1);
|
|
1084
1180
|
expect(addErrorSpy.mock.calls[0][0].message).toEqual(
|
|
1085
|
-
`[4] Package ${testPackageJson.name} peer dependency on greatLib '${bbbPackageJson.peerDependencies.greatLib}' is not strict enough.\n\t`
|
|
1086
|
-
`Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatLib}'
|
|
1181
|
+
`[4] Package ${testPackageJson.name} peer dependency on greatLib '${bbbPackageJson.peerDependencies.greatLib}' is not strict enough.\n\t`
|
|
1182
|
+
+ `Dependency ${cccPackageJson.name} requires '${cccPackageJson.peerDependencies.greatLib}'.`,
|
|
1087
1183
|
);
|
|
1088
1184
|
addErrorSpy.mockReset();
|
|
1089
1185
|
});
|
|
@@ -1108,11 +1204,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1108
1204
|
const startHerePackageJson = {
|
|
1109
1205
|
name: "startHere",
|
|
1110
1206
|
};
|
|
1111
|
-
addPackageJson(
|
|
1207
|
+
addPackageJson(
|
|
1208
|
+
host,
|
|
1209
|
+
"./node_modules/startHere/package.json",
|
|
1210
|
+
startHerePackageJson,
|
|
1211
|
+
);
|
|
1112
1212
|
const greatLibPackageJson = {
|
|
1113
1213
|
name: "greatLib",
|
|
1114
1214
|
};
|
|
1115
|
-
addPackageJson(
|
|
1215
|
+
addPackageJson(
|
|
1216
|
+
host,
|
|
1217
|
+
"./node_modules/greatLib/package.json",
|
|
1218
|
+
greatLibPackageJson,
|
|
1219
|
+
);
|
|
1116
1220
|
const aaaPackageJson = {
|
|
1117
1221
|
name: "a",
|
|
1118
1222
|
peerDependencies: {
|
|
@@ -1154,11 +1258,19 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1154
1258
|
const startHerePackageJson = {
|
|
1155
1259
|
name: "startHere",
|
|
1156
1260
|
};
|
|
1157
|
-
addPackageJson(
|
|
1261
|
+
addPackageJson(
|
|
1262
|
+
host,
|
|
1263
|
+
"./node_modules/startHere/package.json",
|
|
1264
|
+
startHerePackageJson,
|
|
1265
|
+
);
|
|
1158
1266
|
const greatLibPackageJson = {
|
|
1159
1267
|
name: "greatLib",
|
|
1160
1268
|
};
|
|
1161
|
-
addPackageJson(
|
|
1269
|
+
addPackageJson(
|
|
1270
|
+
host,
|
|
1271
|
+
"./node_modules/greatLib/package.json",
|
|
1272
|
+
greatLibPackageJson,
|
|
1273
|
+
);
|
|
1162
1274
|
const aaaPackageJson = {
|
|
1163
1275
|
name: "aaa",
|
|
1164
1276
|
peerDependencies: {
|
|
@@ -1178,7 +1290,10 @@ describe("mustSatisfyPeerDependencies", () => {
|
|
|
1178
1290
|
expect(addErrorSpy).toHaveBeenCalledTimes(0);
|
|
1179
1291
|
addErrorSpy.mockReset();
|
|
1180
1292
|
|
|
1181
|
-
await check({
|
|
1293
|
+
await check({
|
|
1294
|
+
dependencyBlacklist: ["greatLib"],
|
|
1295
|
+
dependencyWhitelist: ["greatLib"],
|
|
1296
|
+
});
|
|
1182
1297
|
expect(addErrorSpy).toHaveBeenCalledTimes(0);
|
|
1183
1298
|
addErrorSpy.mockReset();
|
|
1184
1299
|
|
|
@@ -9,10 +9,10 @@ import { SimpleHost } from "@monorepolint/utils";
|
|
|
9
9
|
import { writeFileSync } from "fs";
|
|
10
10
|
import * as path from "path";
|
|
11
11
|
import * as tmp from "tmp";
|
|
12
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
12
13
|
import { nestedWorkspaces } from "../nestedWorkspaces.js";
|
|
13
14
|
import { makeDirectoryRecursively } from "../util/makeDirectory.js";
|
|
14
15
|
import { jsonToString } from "./utils.js";
|
|
15
|
-
import { describe, expect, it, beforeEach, afterEach, vi } from "vitest";
|
|
16
16
|
|
|
17
17
|
const EMPTY_PACKAGE = jsonToString({});
|
|
18
18
|
|
|
@@ -66,7 +66,7 @@ describe("nestedWorkspaces", () => {
|
|
|
66
66
|
verbose: false,
|
|
67
67
|
silent: true,
|
|
68
68
|
},
|
|
69
|
-
host
|
|
69
|
+
host,
|
|
70
70
|
);
|
|
71
71
|
|
|
72
72
|
async function checkAndSpy() {
|
|
@@ -112,7 +112,8 @@ describe("nestedWorkspaces", () => {
|
|
|
112
112
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
113
113
|
expect(spy).toHaveBeenCalledWith({
|
|
114
114
|
file: packageJsonPath,
|
|
115
|
-
message:
|
|
115
|
+
message:
|
|
116
|
+
"The \"workspace\" field is missing, even though there are workspaces in the repository.",
|
|
116
117
|
});
|
|
117
118
|
});
|
|
118
119
|
|
|
@@ -127,7 +128,10 @@ describe("nestedWorkspaces", () => {
|
|
|
127
128
|
|
|
128
129
|
it("checks fail when two level packages with one level workspaces field", async () => {
|
|
129
130
|
const { addFile, checkAndSpy } = makeWorkspace();
|
|
130
|
-
const packageJsonPath = addFile(
|
|
131
|
+
const packageJsonPath = addFile(
|
|
132
|
+
"./package.json",
|
|
133
|
+
PACKAGE_ROOT_WITH_PACKAGES_STAR,
|
|
134
|
+
);
|
|
131
135
|
addFile("./packages/star/package.json", EMPTY_PACKAGE);
|
|
132
136
|
addFile("./packages/deep/star/package.json", EMPTY_PACKAGE);
|
|
133
137
|
|
|
@@ -135,9 +139,8 @@ describe("nestedWorkspaces", () => {
|
|
|
135
139
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
136
140
|
expect(spy).toHaveBeenCalledWith({
|
|
137
141
|
file: packageJsonPath,
|
|
138
|
-
message:
|
|
139
|
-
|
|
140
|
-
'You may be able to use a glob to avoid listing each workspace individually, e.g. "packages/nested-workspace/*".',
|
|
142
|
+
message: "The \"workspace\" field is missing one or more values: packages/deep/star. "
|
|
143
|
+
+ "You may be able to use a glob to avoid listing each workspace individually, e.g. \"packages/nested-workspace/*\".",
|
|
141
144
|
});
|
|
142
145
|
});
|
|
143
146
|
|