@monorepolint/rules 0.5.0-alpha.10 → 0.5.0-alpha.106

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 (156) hide show
  1. package/.turbo/turbo-clean.log +4 -0
  2. package/.turbo/turbo-compile-typescript.log +4 -0
  3. package/.turbo/turbo-lint.log +110 -0
  4. package/.turbo/turbo-test.log +638 -0
  5. package/.turbo/turbo-transpile-typescript.log +14 -0
  6. package/build/js/index.js +1417 -0
  7. package/build/js/index.js.map +1 -0
  8. package/build/tsconfig.tsbuildinfo +1 -0
  9. package/{lib/__tests__/utils.d.ts → build/types/__tests__/alphabeticalScripts.spec.d.ts} +2 -2
  10. package/build/types/__tests__/alphabeticalScripts.spec.d.ts.map +1 -0
  11. package/build/types/__tests__/bannedDependencies.spec.d.ts +2 -0
  12. package/build/types/__tests__/bannedDependencies.spec.d.ts.map +1 -0
  13. package/build/types/__tests__/consistentDependencies.spec.d.ts.map +1 -0
  14. package/build/types/__tests__/consistentVersions.spec.d.ts +8 -0
  15. package/build/types/__tests__/consistentVersions.spec.d.ts.map +1 -0
  16. package/build/types/__tests__/fileContents.spec.d.ts +8 -0
  17. package/build/types/__tests__/fileContents.spec.d.ts.map +1 -0
  18. package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts +8 -0
  19. package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts.map +1 -0
  20. package/build/types/__tests__/nestedWorkspaces.spec.d.ts +2 -0
  21. package/build/types/__tests__/nestedWorkspaces.spec.d.ts.map +1 -0
  22. package/build/types/__tests__/packageEntry.spec.d.ts.map +1 -0
  23. package/build/types/__tests__/packageOrder.spec.d.ts.map +1 -0
  24. package/build/types/__tests__/packageScript.spec.d.ts.map +1 -0
  25. package/build/types/__tests__/requireDependency.spec.d.ts +2 -0
  26. package/build/types/__tests__/requireDependency.spec.d.ts.map +1 -0
  27. package/build/types/__tests__/utils.d.ts +81 -0
  28. package/build/types/__tests__/utils.d.ts.map +1 -0
  29. package/build/types/alphabeticalDependencies.d.ts +9 -0
  30. package/build/types/alphabeticalDependencies.d.ts.map +1 -0
  31. package/build/types/alphabeticalScripts.d.ts +9 -0
  32. package/build/types/alphabeticalScripts.d.ts.map +1 -0
  33. package/build/types/bannedDependencies.d.ts +66 -0
  34. package/build/types/bannedDependencies.d.ts.map +1 -0
  35. package/build/types/consistentDependencies.d.ts +18 -0
  36. package/build/types/consistentDependencies.d.ts.map +1 -0
  37. package/build/types/consistentVersions.d.ts +21 -0
  38. package/build/types/consistentVersions.d.ts.map +1 -0
  39. package/build/types/fileContents.d.ts +39 -0
  40. package/build/types/fileContents.d.ts.map +1 -0
  41. package/build/types/index.d.ts +20 -0
  42. package/build/types/index.d.ts.map +1 -0
  43. package/build/types/mustSatisfyPeerDependencies.d.ts +427 -0
  44. package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -0
  45. package/build/types/nestedWorkspaces.d.ts +10 -0
  46. package/build/types/nestedWorkspaces.d.ts.map +1 -0
  47. package/build/types/packageEntry.d.ts +54 -0
  48. package/build/types/packageEntry.d.ts.map +1 -0
  49. package/build/types/packageOrder.d.ts +13 -0
  50. package/build/types/packageOrder.d.ts.map +1 -0
  51. package/build/types/packageScript.d.ts +37 -0
  52. package/build/types/packageScript.d.ts.map +1 -0
  53. package/build/types/public/util.d.ts +2 -0
  54. package/build/types/public/util.d.ts.map +1 -0
  55. package/build/types/requireDependency.d.ts +35 -0
  56. package/build/types/requireDependency.d.ts.map +1 -0
  57. package/build/types/standardTsconfig.d.ts +53 -0
  58. package/build/types/standardTsconfig.d.ts.map +1 -0
  59. package/build/types/util/checkAlpha.d.ts +10 -0
  60. package/build/types/util/checkAlpha.d.ts.map +1 -0
  61. package/build/types/util/makeDirectory.d.ts +8 -0
  62. package/build/types/util/makeDirectory.d.ts.map +1 -0
  63. package/build/types/util/makeRule.d.ts +13 -0
  64. package/build/types/util/makeRule.d.ts.map +1 -0
  65. package/build/types/util/packageDependencyGraphService.d.ts +37 -0
  66. package/build/types/util/packageDependencyGraphService.d.ts.map +1 -0
  67. package/package.json +45 -20
  68. package/src/__tests__/alphabeticalScripts.spec.ts +76 -0
  69. package/src/__tests__/bannedDependencies.spec.ts +189 -0
  70. package/src/__tests__/consistentDependencies.spec.ts +42 -28
  71. package/src/__tests__/consistentVersions.spec.ts +224 -0
  72. package/src/__tests__/fileContents.spec.ts +79 -0
  73. package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +1189 -0
  74. package/src/__tests__/nestedWorkspaces.spec.ts +153 -0
  75. package/src/__tests__/packageEntry.spec.ts +127 -49
  76. package/src/__tests__/packageOrder.spec.ts +68 -53
  77. package/src/__tests__/packageScript.spec.ts +124 -98
  78. package/src/__tests__/requireDependency.spec.ts +152 -0
  79. package/src/__tests__/utils.ts +115 -11
  80. package/src/alphabeticalDependencies.ts +6 -50
  81. package/src/alphabeticalScripts.ts +19 -0
  82. package/src/bannedDependencies.ts +134 -45
  83. package/src/consistentDependencies.ts +39 -16
  84. package/src/consistentVersions.ts +141 -0
  85. package/src/fileContents.ts +39 -35
  86. package/src/index.ts +13 -8
  87. package/src/mustSatisfyPeerDependencies.ts +744 -0
  88. package/src/nestedWorkspaces.ts +60 -0
  89. package/src/packageEntry.ts +71 -27
  90. package/src/packageOrder.ts +15 -12
  91. package/src/packageScript.ts +14 -18
  92. package/src/public/util.ts +1 -0
  93. package/src/requireDependency.ts +71 -0
  94. package/src/standardTsconfig.ts +49 -26
  95. package/src/util/checkAlpha.ts +59 -0
  96. package/src/util/makeDirectory.ts +24 -0
  97. package/src/util/makeRule.ts +29 -0
  98. package/src/util/packageDependencyGraphService.ts +114 -0
  99. package/tsconfig.json +10 -2
  100. package/lib/__tests__/consistentDependencies.spec.d.ts.map +0 -1
  101. package/lib/__tests__/consistentDependencies.spec.js +0 -108
  102. package/lib/__tests__/consistentDependencies.spec.js.map +0 -1
  103. package/lib/__tests__/packageEntry.spec.d.ts.map +0 -1
  104. package/lib/__tests__/packageEntry.spec.js +0 -99
  105. package/lib/__tests__/packageEntry.spec.js.map +0 -1
  106. package/lib/__tests__/packageOrder.spec.d.ts.map +0 -1
  107. package/lib/__tests__/packageOrder.spec.js +0 -115
  108. package/lib/__tests__/packageOrder.spec.js.map +0 -1
  109. package/lib/__tests__/packageScript.spec.d.ts.map +0 -1
  110. package/lib/__tests__/packageScript.spec.js +0 -172
  111. package/lib/__tests__/packageScript.spec.js.map +0 -1
  112. package/lib/__tests__/utils.d.ts.map +0 -1
  113. package/lib/__tests__/utils.js +0 -23
  114. package/lib/__tests__/utils.js.map +0 -1
  115. package/lib/alphabeticalDependencies.d.ts +0 -10
  116. package/lib/alphabeticalDependencies.d.ts.map +0 -1
  117. package/lib/alphabeticalDependencies.js +0 -56
  118. package/lib/alphabeticalDependencies.js.map +0 -1
  119. package/lib/bannedDependencies.d.ts +0 -15
  120. package/lib/bannedDependencies.d.ts.map +0 -1
  121. package/lib/bannedDependencies.js +0 -57
  122. package/lib/bannedDependencies.js.map +0 -1
  123. package/lib/consistentDependencies.d.ts +0 -10
  124. package/lib/consistentDependencies.d.ts.map +0 -1
  125. package/lib/consistentDependencies.js +0 -57
  126. package/lib/consistentDependencies.js.map +0 -1
  127. package/lib/fileContents.d.ts +0 -25
  128. package/lib/fileContents.d.ts.map +0 -1
  129. package/lib/fileContents.js +0 -77
  130. package/lib/fileContents.js.map +0 -1
  131. package/lib/index.d.ts +0 -15
  132. package/lib/index.d.ts.map +0 -1
  133. package/lib/index.js +0 -25
  134. package/lib/index.js.map +0 -1
  135. package/lib/packageEntry.d.ts +0 -16
  136. package/lib/packageEntry.d.ts.map +0 -1
  137. package/lib/packageEntry.js +0 -40
  138. package/lib/packageEntry.js.map +0 -1
  139. package/lib/packageOrder.d.ts +0 -12
  140. package/lib/packageOrder.d.ts.map +0 -1
  141. package/lib/packageOrder.js +0 -103
  142. package/lib/packageOrder.js.map +0 -1
  143. package/lib/packageScript.d.ts +0 -25
  144. package/lib/packageScript.d.ts.map +0 -1
  145. package/lib/packageScript.js +0 -89
  146. package/lib/packageScript.js.map +0 -1
  147. package/lib/standardTsconfig.d.ts +0 -33
  148. package/lib/standardTsconfig.d.ts.map +0 -1
  149. package/lib/standardTsconfig.js +0 -98
  150. package/lib/standardTsconfig.js.map +0 -1
  151. package/tsconfig.tsbuildinfo +0 -2439
  152. /package/{lib → build/types}/__tests__/consistentDependencies.spec.d.ts +0 -0
  153. /package/{lib → build/types}/__tests__/packageEntry.spec.d.ts +0 -0
  154. /package/{lib → build/types}/__tests__/packageOrder.spec.d.ts +0 -0
  155. /package/{lib → build/types}/__tests__/packageScript.spec.d.ts +0 -0
  156. /package/{jest.config.js → jest.config.cjs} +0 -0
@@ -0,0 +1,224 @@
1
+ /*!
2
+ * Copyright 2020 Palantir Technologies, Inc.
3
+ *
4
+ * Licensed under the MIT license. See LICENSE file in the project root for details.
5
+ *
6
+ */
7
+
8
+ import { WorkspaceContextImpl } from "@monorepolint/core";
9
+ import { Host, PackageJson, SimpleHost } from "@monorepolint/utils";
10
+ import * as path from "path";
11
+ import * as tmp from "tmp";
12
+ import { consistentVersions, Options } from "../consistentVersions.js";
13
+ import { makeDirectoryRecursively } from "../util/makeDirectory.js";
14
+ import { describe, expect, it, beforeEach, afterEach, jest } from "@jest/globals";
15
+
16
+ describe("consistentVersions", () => {
17
+ tmp.setGracefulCleanup();
18
+
19
+ let cleanupJobs: Array<() => void> = [];
20
+ let cwd: string | undefined;
21
+
22
+ beforeEach(() => {
23
+ const dir = tmp.dirSync({ unsafeCleanup: true });
24
+ cleanupJobs.push(() => dir.removeCallback());
25
+ cwd = dir.name;
26
+
27
+ const spy = jest.spyOn(process, "cwd");
28
+ spy.mockReturnValue(cwd);
29
+ });
30
+
31
+ afterEach(() => {
32
+ for (const cleanupJob of cleanupJobs) {
33
+ cleanupJob();
34
+ }
35
+ cleanupJobs = [];
36
+ });
37
+
38
+ function makeWorkspace(fix = false) {
39
+ const host: Host = new SimpleHost();
40
+ const workspaceContext = new WorkspaceContextImpl(
41
+ cwd!,
42
+ {
43
+ rules: [],
44
+ fix,
45
+ verbose: false,
46
+ silent: true,
47
+ },
48
+ host
49
+ );
50
+ const addErrorSpy = jest.spyOn(workspaceContext, "addError");
51
+
52
+ function check(options: Options = { matchDependencyVersions: {} }) {
53
+ consistentVersions({ options }).check(workspaceContext);
54
+ }
55
+
56
+ return { addErrorSpy, check, host };
57
+ }
58
+
59
+ function addPackageJson(host: Host, filePath: string, packageJson: PackageJson) {
60
+ const dirPath = path.resolve(cwd!, path.dirname(filePath));
61
+ const resolvedFilePath = path.resolve(cwd!, filePath);
62
+
63
+ makeDirectoryRecursively(dirPath);
64
+ host.writeJson(resolvedFilePath, packageJson);
65
+ return (): PackageJson => {
66
+ return host.readJson(resolvedFilePath);
67
+ };
68
+ }
69
+
70
+ describe("standard tests", () => {
71
+ let testPackageJson: PackageJson;
72
+
73
+ beforeEach(() => {
74
+ testPackageJson = {
75
+ name: "test",
76
+ dependencies: {
77
+ greatLib: "^15",
78
+ both: "1",
79
+ },
80
+ peerDependencies: {
81
+ whatever: "15",
82
+ },
83
+ devDependencies: {
84
+ else: "27.2.1",
85
+ both: "1",
86
+ },
87
+ };
88
+ });
89
+
90
+ it("Does nothing when arguments are empty", async () => {
91
+ const { addErrorSpy, check, host } = makeWorkspace();
92
+ addPackageJson(host, "./package.json", testPackageJson);
93
+
94
+ check();
95
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
96
+ check({ matchDependencyVersions: {} });
97
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
98
+ });
99
+
100
+ it("Fixes packages that have an incorrect dependency version", async () => {
101
+ const { addErrorSpy, check, host } = makeWorkspace(true);
102
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
103
+
104
+ const requiredGreatLibVersion = "1.2.3";
105
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
106
+ check({
107
+ matchDependencyVersions: { both: testPackageJson.dependencies!.both, greatLib: requiredGreatLibVersion },
108
+ });
109
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
110
+ expect(readTestPackageJson().dependencies!.greatLib).toEqual(requiredGreatLibVersion);
111
+ });
112
+
113
+ it("Ignores packages that have a correct dependency version", async () => {
114
+ const { addErrorSpy, check, host } = makeWorkspace();
115
+ addPackageJson(host, "./package.json", testPackageJson);
116
+
117
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
118
+ check({
119
+ matchDependencyVersions: {
120
+ both: testPackageJson.dependencies!.both,
121
+ greatLib: testPackageJson.dependencies!.greatLib,
122
+ },
123
+ });
124
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
125
+ });
126
+
127
+ it("Fixes packages that have an incorrect devDependency version", async () => {
128
+ const { addErrorSpy, check, host } = makeWorkspace(true);
129
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
130
+
131
+ const requiredElseLibVersion = "1.2.3";
132
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
133
+ check({ matchDependencyVersions: { both: testPackageJson.dependencies!.both, else: requiredElseLibVersion } });
134
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
135
+ expect(readTestPackageJson().devDependencies!.else).toEqual(requiredElseLibVersion);
136
+ });
137
+
138
+ it("Ignores packages that have a correct devDependency version", async () => {
139
+ const { addErrorSpy, check, host } = makeWorkspace();
140
+ addPackageJson(host, "./package.json", testPackageJson);
141
+
142
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
143
+ check({
144
+ matchDependencyVersions: {
145
+ both: testPackageJson.dependencies!.both,
146
+ greatLib: testPackageJson.dependencies!.greatLib,
147
+ },
148
+ });
149
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
150
+ });
151
+
152
+ it("Fixes packages that have an incorrect dependency and devDependency versions", async () => {
153
+ const { addErrorSpy, check, host } = makeWorkspace(true);
154
+ const readTestPackageJson = addPackageJson(host, "./package.json", testPackageJson);
155
+
156
+ const requiredBothVersion = "1.2.3";
157
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
158
+ check({ matchDependencyVersions: { both: requiredBothVersion } });
159
+ expect(addErrorSpy).toHaveBeenCalledTimes(2);
160
+ expect(readTestPackageJson().dependencies!.both).toEqual(requiredBothVersion);
161
+ expect(readTestPackageJson().devDependencies!.both).toEqual(requiredBothVersion);
162
+ });
163
+ });
164
+
165
+ describe("Multiple accepted versions tests", () => {
166
+ let testPackageJson: PackageJson;
167
+
168
+ beforeEach(() => {
169
+ testPackageJson = {
170
+ name: "test",
171
+ dependencies: {
172
+ greatLib: "^15",
173
+ both: "1",
174
+ },
175
+ peerDependencies: {
176
+ whatever: "15",
177
+ },
178
+ devDependencies: {
179
+ else: "27.2.1",
180
+ both: "1",
181
+ },
182
+ };
183
+ });
184
+
185
+ it("Accepts a match when multiple versions are configured", async () => {
186
+ const { addErrorSpy, check, host } = makeWorkspace();
187
+ addPackageJson(host, "./package.json", testPackageJson);
188
+
189
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
190
+ check({ matchDependencyVersions: { greatLib: [testPackageJson.dependencies!.greatLib] } });
191
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
192
+ check({ matchDependencyVersions: { greatLib: ["1", "2", testPackageJson.dependencies!.greatLib] } });
193
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
194
+ check({ matchDependencyVersions: { greatLib: ["1", "2", testPackageJson.dependencies!.greatLib, "99", "100"] } });
195
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
196
+ check({ matchDependencyVersions: { greatLib: [testPackageJson.dependencies!.greatLib, "99", "100"] } });
197
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
198
+ });
199
+
200
+ it("Errors when version does not match", async () => {
201
+ const { addErrorSpy, check, host } = makeWorkspace();
202
+ addPackageJson(host, "./package.json", testPackageJson);
203
+
204
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
205
+ check({ matchDependencyVersions: { greatLib: ["1", "2"] } });
206
+ expect(addErrorSpy).toHaveBeenCalledTimes(1);
207
+ addErrorSpy.mockReset();
208
+
209
+ expect(addErrorSpy).toHaveBeenCalledTimes(0);
210
+ check({ matchDependencyVersions: { both: ["99", "100"] } });
211
+ expect(addErrorSpy).toHaveBeenCalledTimes(2);
212
+ expect(addErrorSpy.mock.calls[0][0].message).toEqual(
213
+ `Expected dependency on both to match one of '["99","100"]', got '${
214
+ testPackageJson.dependencies!.both
215
+ }' instead.`
216
+ );
217
+ expect(addErrorSpy.mock.calls[1][0].message).toEqual(
218
+ `Expected devDependency on both to match one of '["99","100"]', got '${
219
+ testPackageJson.devDependencies!.both
220
+ }' instead.`
221
+ );
222
+ });
223
+ });
224
+ });
@@ -0,0 +1,79 @@
1
+ /*!
2
+ * Copyright 2019 Palantir Technologies, Inc.
3
+ *
4
+ * Licensed under the MIT license. See LICENSE file in the project root for details.
5
+ *
6
+ */
7
+
8
+ // tslint:disable:no-console
9
+ import { createTestingWorkspace, HOST_FACTORIES, TestingWorkspace } from "./utils.js";
10
+ import { AddErrorOptions, Failure } from "@monorepolint/config";
11
+ import { fileContents } from "../fileContents.js";
12
+ import { describe, expect, it, beforeEach, jest } from "@jest/globals";
13
+
14
+ const EXPECTED_FOO_FILE = "hello world";
15
+
16
+ describe.each(HOST_FACTORIES)("fileContents ($name)", (hostFactory) => {
17
+ describe("fix: true", () => {
18
+ let workspace: TestingWorkspace;
19
+ let spy: jest.SpiedFunction<(opts: AddErrorOptions) => void>;
20
+
21
+ beforeEach(async () => {
22
+ workspace = await createTestingWorkspace({
23
+ fixFlag: true,
24
+ host: hostFactory.make(),
25
+ });
26
+ workspace.writeFile("shared/foo-template.txt", EXPECTED_FOO_FILE);
27
+
28
+ spy = jest.spyOn(workspace.context, "addError");
29
+ });
30
+
31
+ it("fixes missing file", () => {
32
+ fileContents({
33
+ options: {
34
+ file: "foo.txt",
35
+ templateFile: "shared/foo-template.txt",
36
+ generator: undefined,
37
+ template: undefined,
38
+ },
39
+ }).check(workspace.context);
40
+
41
+ expect(spy).toHaveBeenCalledTimes(1);
42
+
43
+ const failure: Failure = spy.mock.calls[0][0];
44
+ expect(failure).toMatchObject(
45
+ workspace.failureMatcher({
46
+ file: "foo.txt",
47
+ hasFixer: true,
48
+ message: "Expect file contents to match",
49
+ })
50
+ );
51
+
52
+ expect(workspace.readFile("foo.txt")).toEqual(EXPECTED_FOO_FILE);
53
+ });
54
+
55
+ it("fixes missing nested file", () => {
56
+ fileContents({
57
+ options: {
58
+ file: "nested/foo.txt",
59
+ templateFile: "shared/foo-template.txt",
60
+ generator: undefined,
61
+ template: undefined,
62
+ },
63
+ }).check(workspace.context);
64
+
65
+ expect(spy).toHaveBeenCalledTimes(1);
66
+
67
+ const failure: Failure = spy.mock.calls[0][0];
68
+ expect(failure).toMatchObject(
69
+ workspace.failureMatcher({
70
+ file: "nested/foo.txt",
71
+ hasFixer: true,
72
+ message: "Expect file contents to match",
73
+ })
74
+ );
75
+
76
+ expect(workspace.readFile("nested/foo.txt")).toEqual(EXPECTED_FOO_FILE);
77
+ });
78
+ });
79
+ });