@monorepolint/rules 0.5.0-alpha.67 → 0.5.0-alpha.68

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.
@@ -60,10 +60,10 @@ describe("consistentDependencies", () => {
60
60
  verbose: false,
61
61
  silent: true,
62
62
  });
63
- function checkAndSpy(q) {
63
+ function checkAndSpy(q, opts) {
64
64
  const context = workspaceContext.createChildContext(path.resolve(dir.name, q));
65
65
  const addErrorSpy = jest.spyOn(context, "addError");
66
- consistentDependencies_1.consistentDependencies.check(context, undefined);
66
+ consistentDependencies_1.consistentDependencies.check(context, opts);
67
67
  return { context, addErrorSpy };
68
68
  }
69
69
  function addFile(filePath, content) {
@@ -103,5 +103,12 @@ describe("consistentDependencies", () => {
103
103
  const contents = readFile("./packages/wrong/package.json");
104
104
  expect(contents).toEqual(PACKAGE_CHILD_WITH_RIGHT_VERSION);
105
105
  });
106
+ it("ignores ignored dependencies", () => {
107
+ const { addFile, checkAndSpy } = makeWorkspace({ fix: false });
108
+ addFile("./package.json", PACKAGE_ROOT);
109
+ addFile("./packages/wrong/package.json", PACKAGE_CHILD_WITH_WRONG_VERSION);
110
+ const ignored = checkAndSpy("./packages/wrong", { ignoredDependencies: ["foo"] });
111
+ expect(ignored.addErrorSpy).toHaveBeenCalledTimes(0);
112
+ });
106
113
  });
107
114
  //# sourceMappingURL=consistentDependencies.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consistentDependencies.spec.js","sourceRoot":"","sources":["../../src/__tests__/consistentDependencies.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"consistentDependencies.spec.js","sourceRoot":"","sources":["../../src/__tests__/consistentDependencies.spec.ts"],"names":[],"mappings":"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"}
@@ -6,5 +6,12 @@
6
6
  */
7
7
  import { RuleModule } from "@monorepolint/core";
8
8
  import * as r from "runtypes";
9
- export declare const consistentDependencies: RuleModule<r.Literal<undefined>>;
9
+ declare const Options: r.Union2<r.Record<{
10
+ ignoredDependencies: r.Union2<r.Array<r.String, false>, r.Literal<undefined>>;
11
+ }, false>, r.Literal<undefined>>;
12
+ export declare type Options = r.Static<typeof Options>;
13
+ export declare const consistentDependencies: RuleModule<r.Union2<r.Record<{
14
+ ignoredDependencies: r.Union2<r.Array<r.String, false>, r.Literal<undefined>>;
15
+ }, false>, r.Literal<undefined>>>;
16
+ export {};
10
17
  //# sourceMappingURL=consistentDependencies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consistentDependencies.d.ts","sourceRoot":"","sources":["../src/consistentDependencies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAO9B,eAAO,MAAM,sBAAsB,kCAOJ,CAAC"}
1
+ {"version":3,"file":"consistentDependencies.d.ts","sourceRoot":"","sources":["../src/consistentDependencies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,QAAA,MAAM,OAAO;;gCAIK,CAAC;AACnB,oBAAY,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;AAI/C,eAAO,MAAM,sBAAsB;;iCAOJ,CAAC"}
@@ -11,28 +11,37 @@ const tslib_1 = require("tslib");
11
11
  const utils_1 = require("@monorepolint/utils");
12
12
  const jest_diff_1 = tslib_1.__importDefault(require("jest-diff"));
13
13
  const r = tslib_1.__importStar(require("runtypes"));
14
- const Options = r.Undefined;
14
+ const Options = r
15
+ .Record({
16
+ ignoredDependencies: r.Array(r.String).Or(r.Undefined),
17
+ })
18
+ .Or(r.Undefined);
15
19
  const skippedVersions = ["*", "latest"];
16
20
  exports.consistentDependencies = {
17
- check: function expectConsistentDependencies(context) {
18
- checkDeps(context, "dependencies");
19
- checkDeps(context, "devDependencies");
21
+ check: function expectConsistentDependencies(context, args) {
22
+ checkDeps(context, args, "dependencies");
23
+ checkDeps(context, args, "devDependencies");
20
24
  // we don't check peer deps since they can be more lenient
21
25
  },
22
26
  optionsRuntype: Options,
23
27
  };
24
- function checkDeps(context, block) {
28
+ function checkDeps(context, args, block) {
29
+ var _a;
25
30
  const packageJson = context.getPackageJson();
26
31
  const packagePath = context.getPackageJsonPath();
27
32
  const dependencies = packageJson[block];
28
33
  const workspacePackageJson = context.getWorkspaceContext().getPackageJson();
29
34
  const workspaceDependencies = workspacePackageJson[block];
30
- if (dependencies === undefined || workspaceDependencies === undefined) {
35
+ const ignoredDeps = (_a = args === null || args === void 0 ? void 0 : args.ignoredDependencies) !== null && _a !== void 0 ? _a : [];
36
+ const depsToCheck = workspaceDependencies == null || ignoredDeps.length === 0
37
+ ? workspaceDependencies
38
+ : omit(workspaceDependencies, ignoredDeps);
39
+ if (dependencies === undefined || depsToCheck === undefined) {
31
40
  return;
32
41
  }
33
42
  const expectedDependencies = {
34
43
  ...dependencies,
35
- ...filterKeys(workspaceDependencies, dependencies),
44
+ ...filterKeys(depsToCheck, dependencies),
36
45
  };
37
46
  if (JSON.stringify(dependencies) !== JSON.stringify(expectedDependencies)) {
38
47
  context.addError({
@@ -56,4 +65,12 @@ function filterKeys(ob, filterOb) {
56
65
  }
57
66
  return newOb;
58
67
  }
68
+ function omit(obj, keysToOmit) {
69
+ const newObj = {};
70
+ const filtered = Object.entries(obj).filter(([key]) => !keysToOmit.includes(key));
71
+ for (const [key, value] of filtered) {
72
+ newObj[key] = value;
73
+ }
74
+ return newObj;
75
+ }
59
76
  //# sourceMappingURL=consistentDependencies.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consistentDependencies.js","sourceRoot":"","sources":["../src/consistentDependencies.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAGH,+CAAgD;AAChD,kEAA6B;AAC7B,oDAA8B;AAE9B,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC;AAG5B,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAE3B,QAAA,sBAAsB,GAAG;IACpC,KAAK,EAAE,SAAS,4BAA4B,CAAC,OAAgB;QAC3D,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACnC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACtC,0DAA0D;IAC5D,CAAC;IACD,cAAc,EAAE,OAAO;CACM,CAAC;AAEhC,SAAS,SAAS,CAAC,OAAgB,EAAE,KAA8D;IACjG,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,cAAc,EAAE,CAAC;IAC5E,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE1D,IAAI,YAAY,KAAK,SAAS,IAAI,qBAAqB,KAAK,SAAS,EAAE;QACrE,OAAO;KACR;IAED,MAAM,oBAAoB,GAAG;QAC3B,GAAG,YAAY;QACf,GAAG,UAAU,CAAC,qBAAqB,EAAE,YAAY,CAAC;KACnD,CAAC;IAEF,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE;QACzE,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,gBAAgB,KAAK,4BAA4B;YAC1D,WAAW,EAAE,mBAAI,CAAC,oBAAoB,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YACvE,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;gBAC1C,cAAc,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC;gBAC7C,iBAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACzC,CAAC;SACF,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAA0B,EAAE,QAAgC;IAC9E,MAAM,KAAK,GAAwB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QACvC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1E,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;SACtB;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"consistentDependencies.js","sourceRoot":"","sources":["../src/consistentDependencies.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monorepolint/rules",
3
- "version": "0.5.0-alpha.67+11f3c02",
3
+ "version": "0.5.0-alpha.68+e583f01",
4
4
  "author": "Eric L Anderson (https://github.com/ericanderson)",
5
5
  "contributors": [
6
6
  "Mac Lockard (https://github.com/maclockard)"
@@ -19,8 +19,8 @@
19
19
  "test:watch": "../../node_modules/.bin/jest --colors --passWithNoTests --watch"
20
20
  },
21
21
  "dependencies": {
22
- "@monorepolint/core": "^0.5.0-alpha.67+11f3c02",
23
- "@monorepolint/utils": "^0.5.0-alpha.67+11f3c02",
22
+ "@monorepolint/core": "^0.5.0-alpha.68+e583f01",
23
+ "@monorepolint/utils": "^0.5.0-alpha.68+e583f01",
24
24
  "globby": "^11.0.1",
25
25
  "jest-diff": "^26.0.1",
26
26
  "minimatch": "^3.0.4",
@@ -38,5 +38,5 @@
38
38
  "publishConfig": {
39
39
  "access": "public"
40
40
  },
41
- "gitHead": "11f3c02a9ceda7837aa97c873e65ff3d3847e99d"
41
+ "gitHead": "e583f017ed7f145ee1c43af1af74a63bcda584f7"
42
42
  }
@@ -8,7 +8,7 @@ import { WorkspaceContext } from "@monorepolint/core";
8
8
  import { readFileSync, writeFileSync } from "fs";
9
9
  import * as path from "path";
10
10
  import * as tmp from "tmp";
11
- import { consistentDependencies } from "../consistentDependencies";
11
+ import { consistentDependencies, Options } from "../consistentDependencies";
12
12
  import { makeDirectoryRecursively } from "../util/makeDirectory";
13
13
  import { jsonToString } from "./utils";
14
14
 
@@ -68,10 +68,10 @@ describe("consistentDependencies", () => {
68
68
  silent: true,
69
69
  });
70
70
 
71
- function checkAndSpy(q: string) {
71
+ function checkAndSpy(q: string, opts?: Options) {
72
72
  const context = workspaceContext.createChildContext(path.resolve(dir.name, q));
73
73
  const addErrorSpy = jest.spyOn(context, "addError");
74
- consistentDependencies.check(context, undefined);
74
+ consistentDependencies.check(context, opts);
75
75
  return { context, addErrorSpy };
76
76
  }
77
77
 
@@ -124,4 +124,13 @@ describe("consistentDependencies", () => {
124
124
  const contents = readFile("./packages/wrong/package.json");
125
125
  expect(contents).toEqual(PACKAGE_CHILD_WITH_RIGHT_VERSION);
126
126
  });
127
+
128
+ it("ignores ignored dependencies", () => {
129
+ const { addFile, checkAndSpy } = makeWorkspace({ fix: false });
130
+ addFile("./package.json", PACKAGE_ROOT);
131
+ addFile("./packages/wrong/package.json", PACKAGE_CHILD_WITH_WRONG_VERSION);
132
+
133
+ const ignored = checkAndSpy("./packages/wrong", { ignoredDependencies: ["foo"] });
134
+ expect(ignored.addErrorSpy).toHaveBeenCalledTimes(0);
135
+ });
127
136
  });
@@ -10,21 +10,25 @@ import { writeJson } from "@monorepolint/utils";
10
10
  import diff from "jest-diff";
11
11
  import * as r from "runtypes";
12
12
 
13
- const Options = r.Undefined;
14
- type Options = r.Static<typeof Options>;
13
+ const Options = r
14
+ .Record({
15
+ ignoredDependencies: r.Array(r.String).Or(r.Undefined),
16
+ })
17
+ .Or(r.Undefined);
18
+ export type Options = r.Static<typeof Options>;
15
19
 
16
20
  const skippedVersions = ["*", "latest"];
17
21
 
18
22
  export const consistentDependencies = {
19
- check: function expectConsistentDependencies(context: Context) {
20
- checkDeps(context, "dependencies");
21
- checkDeps(context, "devDependencies");
23
+ check: function expectConsistentDependencies(context: Context, args: Options) {
24
+ checkDeps(context, args, "dependencies");
25
+ checkDeps(context, args, "devDependencies");
22
26
  // we don't check peer deps since they can be more lenient
23
27
  },
24
28
  optionsRuntype: Options,
25
29
  } as RuleModule<typeof Options>;
26
30
 
27
- function checkDeps(context: Context, block: "dependencies" | "devDependencies" | "peerDependencies") {
31
+ function checkDeps(context: Context, args: Options, block: "dependencies" | "devDependencies" | "peerDependencies") {
28
32
  const packageJson = context.getPackageJson();
29
33
  const packagePath = context.getPackageJsonPath();
30
34
  const dependencies = packageJson[block];
@@ -32,13 +36,19 @@ function checkDeps(context: Context, block: "dependencies" | "devDependencies" |
32
36
  const workspacePackageJson = context.getWorkspaceContext().getPackageJson();
33
37
  const workspaceDependencies = workspacePackageJson[block];
34
38
 
35
- if (dependencies === undefined || workspaceDependencies === undefined) {
39
+ const ignoredDeps = args?.ignoredDependencies ?? [];
40
+ const depsToCheck =
41
+ workspaceDependencies == null || ignoredDeps.length === 0
42
+ ? workspaceDependencies
43
+ : omit(workspaceDependencies, ignoredDeps);
44
+
45
+ if (dependencies === undefined || depsToCheck === undefined) {
36
46
  return;
37
47
  }
38
48
 
39
49
  const expectedDependencies = {
40
50
  ...dependencies,
41
- ...filterKeys(workspaceDependencies, dependencies),
51
+ ...filterKeys(depsToCheck, dependencies),
42
52
  };
43
53
 
44
54
  if (JSON.stringify(dependencies) !== JSON.stringify(expectedDependencies)) {
@@ -66,3 +76,14 @@ function filterKeys(ob: Record<string, string>, filterOb: Record<string, string>
66
76
 
67
77
  return newOb;
68
78
  }
79
+
80
+ function omit<T>(obj: Record<string, T>, keysToOmit: readonly string[]): Record<string, T> {
81
+ const newObj: Record<string, T> = {};
82
+
83
+ const filtered = Object.entries(obj).filter(([key]) => !keysToOmit.includes(key));
84
+ for (const [key, value] of filtered) {
85
+ newObj[key] = value;
86
+ }
87
+
88
+ return newObj;
89
+ }
@@ -430,8 +430,8 @@
430
430
  "affectsGlobalScope": false
431
431
  },
432
432
  "./src/consistentDependencies.ts": {
433
- "version": "2e537910cde439416b36734d497c74ea4686c2bddb3462ea164b02ebba3b440c",
434
- "signature": "48e2fcc72ed1229eb67ec81af848a9eb76fa2bc171e8b9b5f684630ff0b4ab18",
433
+ "version": "c4777d9dbc4e789b260e583446a01506a29a106e4f995f4050df5f59a247a475",
434
+ "signature": "6790e2eaf1f170d9ed03d0b197fedde5a461ea792472d512531c2019552aea33",
435
435
  "affectsGlobalScope": false
436
436
  },
437
437
  "../../node_modules/@types/node/globals.d.ts": {
@@ -1065,7 +1065,7 @@
1065
1065
  "affectsGlobalScope": false
1066
1066
  },
1067
1067
  "./src/__tests__/consistentDependencies.spec.ts": {
1068
- "version": "851afa9ddf62b8b57f516a9f7715d76987c3d66061406f0ae678eac8f12b6786",
1068
+ "version": "998aaca9ddc4374370cb505699938ce486ab9e5f72c9869e1f60b80f8aa464ff",
1069
1069
  "signature": "235c508ef6b2125cb89b9f514fb5e85528febba3301186273fa3deb546ed8500",
1070
1070
  "affectsGlobalScope": false
1071
1071
  },