@monorepolint/rules 0.6.0-alpha.1 → 0.6.0-alpha.3

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.
Files changed (87) hide show
  1. package/.turbo/turbo-clean.log +1 -1
  2. package/.turbo/turbo-compile-typescript.log +1 -1
  3. package/.turbo/turbo-lint.log +1 -1
  4. package/.turbo/turbo-test.log +272 -667
  5. package/.turbo/turbo-transpile-typescript.log +5 -5
  6. package/CHANGELOG.md +42 -0
  7. package/build/js/index.js +411 -263
  8. package/build/js/index.js.map +1 -1
  9. package/build/tsconfig.tsbuildinfo +1 -1
  10. package/build/types/__tests__/utils.d.ts +4 -10
  11. package/build/types/__tests__/utils.d.ts.map +1 -1
  12. package/build/types/bannedDependencies.d.ts.map +1 -1
  13. package/build/types/fileContents.d.ts +1 -1
  14. package/build/types/fileContents.d.ts.map +1 -1
  15. package/build/types/index.d.ts +3 -3
  16. package/build/types/index.d.ts.map +1 -1
  17. package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -1
  18. package/build/types/nestedWorkspaces.d.ts.map +1 -1
  19. package/build/types/packageEntry.d.ts.map +1 -1
  20. package/build/types/packageOrder.d.ts.map +1 -1
  21. package/build/types/packageScript.d.ts.map +1 -1
  22. package/build/types/requireDependency.d.ts +12 -12
  23. package/build/types/requireDependency.d.ts.map +1 -1
  24. package/build/types/standardTsconfig.d.ts.map +1 -1
  25. package/build/types/util/checkAlpha.d.ts.map +1 -1
  26. package/build/types/util/createRuleFactory.d.ts.map +1 -1
  27. package/build/types/util/packageDependencyGraphService.d.ts.map +1 -1
  28. package/coverage/base.css +224 -0
  29. package/coverage/block-navigation.js +87 -0
  30. package/coverage/clover.xml +1887 -0
  31. package/coverage/coverage-final.json +19 -0
  32. package/coverage/favicon.png +0 -0
  33. package/coverage/index.html +131 -0
  34. package/coverage/prettify.css +1 -0
  35. package/coverage/prettify.js +2 -0
  36. package/coverage/sort-arrow-sprite.png +0 -0
  37. package/coverage/sorter.js +196 -0
  38. package/coverage/src/alphabeticalDependencies.ts.html +142 -0
  39. package/coverage/src/alphabeticalScripts.ts.html +136 -0
  40. package/coverage/src/bannedDependencies.ts.html +610 -0
  41. package/coverage/src/consistentDependencies.ts.html +394 -0
  42. package/coverage/src/consistentVersions.ts.html +619 -0
  43. package/coverage/src/fileContents.ts.html +409 -0
  44. package/coverage/src/index.html +311 -0
  45. package/coverage/src/index.ts.html +169 -0
  46. package/coverage/src/mustSatisfyPeerDependencies.ts.html +2605 -0
  47. package/coverage/src/nestedWorkspaces.ts.html +304 -0
  48. package/coverage/src/packageEntry.ts.html +376 -0
  49. package/coverage/src/packageOrder.ts.html +472 -0
  50. package/coverage/src/packageScript.ts.html +436 -0
  51. package/coverage/src/requireDependency.ts.html +349 -0
  52. package/coverage/src/standardTsconfig.ts.html +553 -0
  53. package/coverage/src/util/checkAlpha.ts.html +271 -0
  54. package/coverage/src/util/createRuleFactory.ts.html +196 -0
  55. package/coverage/src/util/index.html +161 -0
  56. package/coverage/src/util/makeDirectory.ts.html +157 -0
  57. package/coverage/src/util/packageDependencyGraphService.ts.html +508 -0
  58. package/package.json +15 -20
  59. package/src/__tests__/alphabeticalScripts.spec.ts +13 -5
  60. package/src/__tests__/bannedDependencies.spec.ts +47 -18
  61. package/src/__tests__/consistentDependencies.spec.ts +12 -6
  62. package/src/__tests__/consistentVersions.spec.ts +74 -20
  63. package/src/__tests__/fileContents.spec.ts +11 -7
  64. package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +193 -78
  65. package/src/__tests__/nestedWorkspaces.spec.ts +12 -8
  66. package/src/__tests__/packageEntry.spec.ts +55 -49
  67. package/src/__tests__/packageOrder.spec.ts +78 -72
  68. package/src/__tests__/packageScript.spec.ts +27 -13
  69. package/src/__tests__/requireDependency.spec.ts +13 -7
  70. package/src/__tests__/utils.ts +18 -9
  71. package/src/bannedDependencies.ts +32 -15
  72. package/src/consistentDependencies.ts +22 -9
  73. package/src/consistentVersions.ts +84 -47
  74. package/src/fileContents.ts +24 -10
  75. package/src/index.ts +3 -3
  76. package/src/mustSatisfyPeerDependencies.ts +162 -66
  77. package/src/nestedWorkspaces.ts +23 -10
  78. package/src/packageEntry.ts +18 -11
  79. package/src/packageOrder.ts +9 -3
  80. package/src/packageScript.ts +37 -19
  81. package/src/requireDependency.ts +28 -11
  82. package/src/standardTsconfig.ts +32 -10
  83. package/src/util/checkAlpha.ts +5 -2
  84. package/src/util/createRuleFactory.ts +6 -2
  85. package/src/util/packageDependencyGraphService.ts +41 -14
  86. package/vitest.config.mjs +17 -0
  87. package/jest.config.cjs +0 -4
@@ -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, jest } from "@jest/globals";
25
25
 
26
26
  const doesASatisfyB = (a: string, b: string) => {
27
27
  if (!isValidRange(a)) {
@@ -54,7 +54,7 @@ describe("mustSatisfyPeerDependencies", () => {
54
54
  cleanupJobs.push(() => dir.removeCallback());
55
55
  cwd = dir.name;
56
56
 
57
- const spy = jest.spyOn(process, "cwd");
57
+ const spy = vi.spyOn(process, "cwd");
58
58
  spy.mockReturnValue(cwd);
59
59
  });
60
60
 
@@ -75,9 +75,9 @@ describe("mustSatisfyPeerDependencies", () => {
75
75
  verbose: false,
76
76
  silent: true,
77
77
  },
78
- host
78
+ host,
79
79
  );
80
- const addErrorSpy = jest.spyOn(workspaceContext, "addError");
80
+ const addErrorSpy = vi.spyOn(workspaceContext, "addError");
81
81
 
82
82
  async function check(options: Options) {
83
83
  await mustSatisfyPeerDependencies({ options }).check(workspaceContext);
@@ -86,7 +86,11 @@ describe("mustSatisfyPeerDependencies", () => {
86
86
  return { addErrorSpy, check, host };
87
87
  }
88
88
 
89
- function addPackageJson(host: Host, filePath: string, packageJson: PackageJson) {
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)).toBeTruthy();
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(exactVersion);
690
+ expect(findIntersection(exactVersion, exactVersion)).toEqual(
691
+ exactVersion,
692
+ );
686
693
  const majorVersion1 = "^15";
687
- expect(findIntersection(majorVersion1, majorVersion1)).toEqual(majorVersion1);
694
+ expect(findIntersection(majorVersion1, majorVersion1)).toEqual(
695
+ majorVersion1,
696
+ );
688
697
  const majorVersion2 = "^15.2";
689
- expect(findIntersection(majorVersion2, majorVersion2)).toEqual(majorVersion2);
698
+ expect(findIntersection(majorVersion2, majorVersion2)).toEqual(
699
+ majorVersion2,
700
+ );
690
701
  const greaterOrEqualVersion = ">=1";
691
- expect(findIntersection(greaterOrEqualVersion, greaterOrEqualVersion)).toEqual(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(greaterOrEqualVersion);
712
- expect(findIntersection(anyVersion, greaterOrEqualVersion)).toEqual(greaterOrEqualVersion);
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(exactVersion);
724
- expect(findIntersection(greaterOrEqualVersion1, exactVersion)).toEqual(exactVersion);
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(exactVersion);
727
- expect(findIntersection(greaterOrEqualVersion2, exactVersion)).toEqual(exactVersion);
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)).toBeUndefined();
730
- expect(findIntersection(greaterOrEqualVersion3, exactVersion)).toBeUndefined();
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(majorVersion);
737
- expect(findIntersection(greaterOrEqualVersion1, majorVersion)).toEqual(majorVersion);
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(majorVersion);
740
- expect(findIntersection(greaterOrEqualVersion2, majorVersion)).toEqual(majorVersion);
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)).toBeUndefined();
743
- expect(findIntersection(greaterOrEqualVersion3, majorVersion)).toBeUndefined();
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("^15.2.3");
746
- expect(findIntersection(greaterOrEqualVersion4, majorVersion)).toEqual("^15.2.3");
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)).toEqual(greaterOrEqualVersion2);
753
- expect(findIntersection(greaterOrEqualVersion2, greaterOrEqualVersion1)).toEqual(greaterOrEqualVersion2);
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(exactVersion);
761
- expect(findIntersection(majorVersion1, exactVersion)).toEqual(exactVersion);
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(majorVersion2);
774
- expect(findIntersection(majorVersion2, majorVersion1)).toEqual(majorVersion2);
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(majorVersion2);
777
- expect(findIntersection(majorVersion2, majorVersion3)).toEqual(majorVersion2);
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(exactVersion);
787
- expect(findIntersection(unionVersion1, exactVersion)).toEqual(exactVersion);
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(exactVersion);
790
- expect(findIntersection(unionVersion2, exactVersion)).toEqual(exactVersion);
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(majorVersion);
800
- expect(findIntersection(unionVersion1, majorVersion)).toEqual(majorVersion);
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(majorVersion);
803
- expect(findIntersection(unionVersion2, majorVersion)).toEqual(majorVersion);
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("^15.2 || ^16");
813
- expect(findIntersection(unionVersion2, unionVersion1)).toEqual("^15.2 || ^16");
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("^15.2 || ^16.4");
816
- expect(findIntersection(unionVersion3, unionVersion1)).toEqual("^15.2 || ^16.4");
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(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
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(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
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(host, "./package.json", testPackageJson);
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(host, "./package.json", testPackageJson);
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(host, "./node_modules/startHere/package.json", startHerePackageJson);
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(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
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(host, "./node_modules/startHere/package.json", startHerePackageJson);
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(host, "./node_modules/greatLib/package.json", greatLibPackageJson);
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({ dependencyBlacklist: ["greatLib"], dependencyWhitelist: ["greatLib"] });
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, jest } from "@jest/globals";
16
16
 
17
17
  const EMPTY_PACKAGE = jsonToString({});
18
18
 
@@ -45,7 +45,7 @@ describe("nestedWorkspaces", () => {
45
45
  cleanupJobs.push(() => dir.removeCallback());
46
46
  cwd = dir.name;
47
47
 
48
- const spy = jest.spyOn(process, "cwd");
48
+ const spy = vi.spyOn(process, "cwd");
49
49
  spy.mockReturnValue(cwd);
50
50
  });
51
51
 
@@ -66,11 +66,11 @@ 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() {
73
- const addErrorSpy = jest.spyOn(workspaceContext, "addError");
73
+ const addErrorSpy = vi.spyOn(workspaceContext, "addError");
74
74
 
75
75
  await nestedWorkspaces({}).check(workspaceContext);
76
76
  return { addErrorSpy };
@@ -112,7 +112,8 @@ describe("nestedWorkspaces", () => {
112
112
  expect(spy).toHaveBeenCalledTimes(1);
113
113
  expect(spy).toHaveBeenCalledWith({
114
114
  file: packageJsonPath,
115
- message: 'The "workspace" field is missing, even though there are workspaces in the repository.',
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("./package.json", PACKAGE_ROOT_WITH_PACKAGES_STAR);
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
 
@@ -136,8 +140,8 @@ describe("nestedWorkspaces", () => {
136
140
  expect(spy).toHaveBeenCalledWith({
137
141
  file: packageJsonPath,
138
142
  message:
139
- 'The "workspace" field is missing one or more values: packages/deep/star. ' +
140
- 'You may be able to use a glob to avoid listing each workspace individually, e.g. "packages/nested-workspace/*".',
143
+ "The \"workspace\" field is missing one or more values: packages/deep/star. "
144
+ + "You may be able to use a glob to avoid listing each workspace individually, e.g. \"packages/nested-workspace/*\".",
141
145
  });
142
146
  });
143
147