@monorepolint/rules 0.5.0-alpha.1 → 0.5.0-alpha.103
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 +4 -0
- package/.turbo/turbo-compile-typescript.log +4 -0
- package/.turbo/turbo-lint.log +107 -0
- package/.turbo/turbo-test.log +631 -0
- package/.turbo/turbo-transpile-typescript.log +18 -0
- package/build/js/index.cjs +1491 -0
- package/build/js/index.cjs.map +1 -0
- package/build/js/index.js +1433 -0
- package/build/js/index.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/{lib/__tests__/utils.d.ts → build/types/__tests__/alphabeticalScripts.spec.d.ts} +2 -2
- package/build/types/__tests__/alphabeticalScripts.spec.d.ts.map +1 -0
- package/build/types/__tests__/bannedDependencies.spec.d.ts +2 -0
- package/build/types/__tests__/bannedDependencies.spec.d.ts.map +1 -0
- package/build/types/__tests__/consistentDependencies.spec.d.ts +2 -0
- package/build/types/__tests__/consistentDependencies.spec.d.ts.map +1 -0
- package/build/types/__tests__/consistentVersions.spec.d.ts +8 -0
- package/build/types/__tests__/consistentVersions.spec.d.ts.map +1 -0
- package/build/types/__tests__/fileContents.spec.d.ts +8 -0
- package/build/types/__tests__/fileContents.spec.d.ts.map +1 -0
- package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts +8 -0
- package/build/types/__tests__/mustSatisfyPeerDependencies.spec.d.ts.map +1 -0
- package/build/types/__tests__/nestedWorkspaces.spec.d.ts +2 -0
- package/build/types/__tests__/nestedWorkspaces.spec.d.ts.map +1 -0
- package/build/types/__tests__/packageEntry.spec.d.ts +8 -0
- package/build/types/__tests__/packageEntry.spec.d.ts.map +1 -0
- package/{lib → build/types}/__tests__/packageOrder.spec.d.ts +0 -0
- package/build/types/__tests__/packageOrder.spec.d.ts.map +1 -0
- package/{lib → build/types}/__tests__/packageScript.spec.d.ts +0 -0
- package/build/types/__tests__/packageScript.spec.d.ts.map +1 -0
- package/build/types/__tests__/requireDependency.spec.d.ts +2 -0
- package/build/types/__tests__/requireDependency.spec.d.ts.map +1 -0
- package/build/types/__tests__/utils.d.ts +81 -0
- package/build/types/__tests__/utils.d.ts.map +1 -0
- package/build/types/alphabeticalDependencies.d.ts +23 -0
- package/build/types/alphabeticalDependencies.d.ts.map +1 -0
- package/build/types/alphabeticalScripts.d.ts +23 -0
- package/build/types/alphabeticalScripts.d.ts.map +1 -0
- package/build/types/bannedDependencies.d.ts +134 -0
- package/build/types/bannedDependencies.d.ts.map +1 -0
- package/build/types/consistentDependencies.d.ts +38 -0
- package/build/types/consistentDependencies.d.ts.map +1 -0
- package/build/types/consistentVersions.d.ts +47 -0
- package/build/types/consistentVersions.d.ts.map +1 -0
- package/build/types/fileContents.d.ts +111 -0
- package/build/types/fileContents.d.ts.map +1 -0
- package/build/types/index.d.ts +20 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/mustSatisfyPeerDependencies.d.ts +721 -0
- package/build/types/mustSatisfyPeerDependencies.d.ts.map +1 -0
- package/build/types/nestedWorkspaces.d.ts +24 -0
- package/build/types/nestedWorkspaces.d.ts.map +1 -0
- package/build/types/packageEntry.d.ts +115 -0
- package/build/types/packageEntry.d.ts.map +1 -0
- package/build/types/packageOrder.d.ts +33 -0
- package/build/types/packageOrder.d.ts.map +1 -0
- package/build/types/packageScript.d.ts +89 -0
- package/build/types/packageScript.d.ts.map +1 -0
- package/build/types/requireDependency.d.ts +99 -0
- package/build/types/requireDependency.d.ts.map +1 -0
- package/build/types/standardTsconfig.d.ts +113 -0
- package/build/types/standardTsconfig.d.ts.map +1 -0
- package/build/types/util/checkAlpha.d.ts +10 -0
- package/build/types/util/checkAlpha.d.ts.map +1 -0
- package/build/types/util/createNewRuleConversion.d.ts +30 -0
- package/build/types/util/createNewRuleConversion.d.ts.map +1 -0
- package/build/types/util/makeDirectory.d.ts +8 -0
- package/build/types/util/makeDirectory.d.ts.map +1 -0
- package/build/types/util/packageDependencyGraphService.d.ts +37 -0
- package/build/types/util/packageDependencyGraphService.d.ts.map +1 -0
- package/{jest.config.js → jest.config.cjs} +0 -0
- package/package.json +39 -18
- package/src/__tests__/alphabeticalScripts.spec.ts +76 -0
- package/src/__tests__/bannedDependencies.spec.ts +191 -0
- package/src/__tests__/consistentDependencies.spec.ts +142 -0
- package/src/__tests__/consistentVersions.spec.ts +224 -0
- package/src/__tests__/fileContents.spec.ts +75 -0
- package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +1189 -0
- package/src/__tests__/nestedWorkspaces.spec.ts +153 -0
- package/src/__tests__/packageEntry.spec.ts +201 -0
- package/src/__tests__/packageOrder.spec.ts +48 -40
- package/src/__tests__/packageScript.spec.ts +149 -65
- package/src/__tests__/requireDependency.spec.ts +152 -0
- package/src/__tests__/utils.ts +115 -11
- package/src/alphabeticalDependencies.ts +6 -48
- package/src/alphabeticalScripts.ts +21 -0
- package/src/bannedDependencies.ts +135 -44
- package/src/consistentDependencies.ts +38 -14
- package/src/consistentVersions.ts +142 -0
- package/src/fileContents.ts +35 -30
- package/src/index.ts +13 -8
- package/src/mustSatisfyPeerDependencies.ts +748 -0
- package/src/nestedWorkspaces.ts +61 -0
- package/src/packageEntry.ts +72 -23
- package/src/packageOrder.ts +15 -10
- package/src/packageScript.ts +60 -13
- package/src/requireDependency.ts +71 -0
- package/src/standardTsconfig.ts +50 -21
- package/src/util/checkAlpha.ts +59 -0
- package/src/util/createNewRuleConversion.ts +38 -0
- package/src/util/makeDirectory.ts +24 -0
- package/src/util/packageDependencyGraphService.ts +114 -0
- package/tsconfig.json +10 -2
- package/lib/__tests__/packageOrder.spec.d.ts.map +0 -1
- package/lib/__tests__/packageOrder.spec.js +0 -114
- package/lib/__tests__/packageOrder.spec.js.map +0 -1
- package/lib/__tests__/packageScript.spec.d.ts.map +0 -1
- package/lib/__tests__/packageScript.spec.js +0 -108
- package/lib/__tests__/packageScript.spec.js.map +0 -1
- package/lib/__tests__/utils.d.ts.map +0 -1
- package/lib/__tests__/utils.js +0 -23
- package/lib/__tests__/utils.js.map +0 -1
- package/lib/alphabeticalDependencies.d.ts +0 -10
- package/lib/alphabeticalDependencies.d.ts.map +0 -1
- package/lib/alphabeticalDependencies.js +0 -56
- package/lib/alphabeticalDependencies.js.map +0 -1
- package/lib/bannedDependencies.d.ts +0 -15
- package/lib/bannedDependencies.d.ts.map +0 -1
- package/lib/bannedDependencies.js +0 -57
- package/lib/bannedDependencies.js.map +0 -1
- package/lib/consistentDependencies.d.ts +0 -10
- package/lib/consistentDependencies.d.ts.map +0 -1
- package/lib/consistentDependencies.js +0 -57
- package/lib/consistentDependencies.js.map +0 -1
- package/lib/fileContents.d.ts +0 -25
- package/lib/fileContents.d.ts.map +0 -1
- package/lib/fileContents.js +0 -77
- package/lib/fileContents.js.map +0 -1
- package/lib/index.d.ts +0 -15
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -25
- package/lib/index.js.map +0 -1
- package/lib/packageEntry.d.ts +0 -16
- package/lib/packageEntry.d.ts.map +0 -1
- package/lib/packageEntry.js +0 -38
- package/lib/packageEntry.js.map +0 -1
- package/lib/packageOrder.d.ts +0 -12
- package/lib/packageOrder.d.ts.map +0 -1
- package/lib/packageOrder.js +0 -102
- package/lib/packageOrder.js.map +0 -1
- package/lib/packageScript.d.ts +0 -17
- package/lib/packageScript.d.ts.map +0 -1
- package/lib/packageScript.js +0 -51
- package/lib/packageScript.js.map +0 -1
- package/lib/standardTsconfig.d.ts +0 -29
- package/lib/standardTsconfig.d.ts.map +0 -1
- package/lib/standardTsconfig.js +0 -96
- package/lib/standardTsconfig.js.map +0 -1
- package/tsconfig.tsbuildinfo +0 -2181
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
import { existsSync, mkdirSync } from "fs";
|
|
9
|
+
import * as path from "path";
|
|
10
|
+
|
|
11
|
+
export function makeDirectoryRecursively(directoryPath: string) {
|
|
12
|
+
// node < 10 doesn't support mkdirSync w/ recursive: true
|
|
13
|
+
// so we manually do it instead
|
|
14
|
+
const dirSegments = directoryPath.split(path.sep);
|
|
15
|
+
for (let i = 0; i < dirSegments.length; i++) {
|
|
16
|
+
if (dirSegments[i].length > 0) {
|
|
17
|
+
// we skip the empty segment
|
|
18
|
+
const curDirPath = dirSegments.slice(0, i + 1).join(path.sep);
|
|
19
|
+
if (!existsSync(curDirPath)) {
|
|
20
|
+
mkdirSync(curDirPath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright 2019 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Host, PackageJson } from "@monorepolint/utils";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
import resolvePackagePath from "resolve-package-path";
|
|
8
|
+
|
|
9
|
+
/** Interface for a node in a package dependency graph. */
|
|
10
|
+
export interface IPackageDependencyGraphNode {
|
|
11
|
+
packageJson: PackageJson;
|
|
12
|
+
dependencies: Map<string, IPackageDependencyGraphNode>;
|
|
13
|
+
paths: {
|
|
14
|
+
packageJsonPath: string;
|
|
15
|
+
rootDirectory: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Service abstraction for constructing and traversing package dependency graphs. */
|
|
20
|
+
export interface IPackageDependencyGraphService {
|
|
21
|
+
/** Construct a graph of package dependencies. */
|
|
22
|
+
buildDependencyGraph(packageJsonPath: string, host: Host, maxDepth?: number): IPackageDependencyGraphNode;
|
|
23
|
+
|
|
24
|
+
/** Traverse a package dependency graph. */
|
|
25
|
+
traverse(
|
|
26
|
+
root: IPackageDependencyGraphNode,
|
|
27
|
+
opts?: {
|
|
28
|
+
/** Traverse each unique path to a given package (potentially slow). */
|
|
29
|
+
traverseAllPaths?: boolean;
|
|
30
|
+
}
|
|
31
|
+
): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Default implementation of the package dependency graph service. */
|
|
35
|
+
export class PackageDependencyGraphService implements IPackageDependencyGraphService {
|
|
36
|
+
/** Construct a graph of package dependencies and return the root node. */
|
|
37
|
+
public buildDependencyGraph(
|
|
38
|
+
startPackageJsonPath: string,
|
|
39
|
+
host: Host,
|
|
40
|
+
maxDepth?: number
|
|
41
|
+
): IPackageDependencyGraphNode {
|
|
42
|
+
const nodes = new Map<string, IPackageDependencyGraphNode>();
|
|
43
|
+
const visit = (packageJsonPath: string, currentDepth: number): IPackageDependencyGraphNode => {
|
|
44
|
+
if (nodes.has(packageJsonPath)) {
|
|
45
|
+
return nodes.get(packageJsonPath)!;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const packageJson: PackageJson = host.readJson(packageJsonPath);
|
|
49
|
+
const node: IPackageDependencyGraphNode = {
|
|
50
|
+
packageJson,
|
|
51
|
+
dependencies: new Map<string, IPackageDependencyGraphNode>(),
|
|
52
|
+
paths: {
|
|
53
|
+
packageJsonPath,
|
|
54
|
+
rootDirectory: path.dirname(packageJsonPath),
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// It's important that we register the node before visiting its dependencies to avoid cycles
|
|
59
|
+
nodes.set(packageJsonPath, node);
|
|
60
|
+
|
|
61
|
+
const nextDepth = currentDepth + 1;
|
|
62
|
+
if (maxDepth == null || nextDepth <= maxDepth) {
|
|
63
|
+
const dependencies = packageJson.dependencies != null ? Object.keys(packageJson.dependencies) : [];
|
|
64
|
+
for (const dependency of dependencies) {
|
|
65
|
+
const dependencyPackageJsonPath = resolvePackagePath(dependency, node.paths.rootDirectory);
|
|
66
|
+
if (dependencyPackageJsonPath == null) {
|
|
67
|
+
throw new Error(`Could not resolve ${dependency} from ${node.paths.rootDirectory}`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
node.dependencies.set(dependency, visit(dependencyPackageJsonPath, nextDepth));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return node;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
return visit(startPackageJsonPath, 0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Traverse a package dependency graph with an iterator. */
|
|
81
|
+
public *traverse(
|
|
82
|
+
root: IPackageDependencyGraphNode,
|
|
83
|
+
opts = { traverseAllPaths: false }
|
|
84
|
+
): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {
|
|
85
|
+
const visited = new Set<IPackageDependencyGraphNode>();
|
|
86
|
+
|
|
87
|
+
function* visit(
|
|
88
|
+
node: IPackageDependencyGraphNode,
|
|
89
|
+
importPath: IPackageDependencyGraphNode[] = []
|
|
90
|
+
): IterableIterator<IPackageDependencyGraphNode & { importPath: IPackageDependencyGraphNode[] }> {
|
|
91
|
+
// Don't visit a package more than once unless explicitly asked to traverse all paths
|
|
92
|
+
if (!opts.traverseAllPaths && visited.has(node)) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Break cycles when traversing all paths
|
|
97
|
+
if (importPath.indexOf(node) !== -1) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Visit the node
|
|
102
|
+
visited.add(node);
|
|
103
|
+
importPath = [...importPath, node];
|
|
104
|
+
yield { ...node, importPath };
|
|
105
|
+
|
|
106
|
+
// Recursively visit the node's dependencies
|
|
107
|
+
for (const dependency of node.dependencies.values()) {
|
|
108
|
+
yield* visit(dependency, importPath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
yield* visit(root);
|
|
113
|
+
}
|
|
114
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"extends": "../../tsconfig.base.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"outDir": "./
|
|
5
|
-
"rootDir": "./src"
|
|
4
|
+
"outDir": "./build/js",
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"declarationDir": "./build/types",
|
|
7
|
+
"tsBuildInfoFile": "./build/tsconfig.tsbuildinfo"
|
|
6
8
|
},
|
|
9
|
+
"include": [
|
|
10
|
+
"src"
|
|
11
|
+
],
|
|
7
12
|
"references": [
|
|
13
|
+
{
|
|
14
|
+
"path": "../config"
|
|
15
|
+
},
|
|
8
16
|
{
|
|
9
17
|
"path": "../core"
|
|
10
18
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageOrder.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/packageOrder.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright 2019 Palantir Technologies, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
// tslint:disable:no-console
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
// done first since this also mocks 'fs'
|
|
12
|
-
const mockFiles = utils_1.createMockFiles();
|
|
13
|
-
const core_1 = require("@monorepolint/core");
|
|
14
|
-
const packageOrder_1 = require("../packageOrder");
|
|
15
|
-
const PACKAGE_UNORDERED = JSON.stringify({
|
|
16
|
-
scripts: {},
|
|
17
|
-
dependencies: {},
|
|
18
|
-
version: {},
|
|
19
|
-
name: "package",
|
|
20
|
-
}, undefined, 2) + "\n";
|
|
21
|
-
const PACKAGE_UNORDERED_UNKOWN_KEYS = JSON.stringify({
|
|
22
|
-
butter: false,
|
|
23
|
-
apple: false,
|
|
24
|
-
scripts: {},
|
|
25
|
-
dependencies: {},
|
|
26
|
-
version: {},
|
|
27
|
-
name: "package-unknown-keys",
|
|
28
|
-
}, undefined, 2) + "\n";
|
|
29
|
-
const orderArray = ["name", "version", "scripts", "dependencies"];
|
|
30
|
-
// tslint:disable-next-line: variable-name
|
|
31
|
-
const orderFunction = (_context) => (a, b) => {
|
|
32
|
-
return b.length - a.length || a.localeCompare(b);
|
|
33
|
-
};
|
|
34
|
-
const PACKAGE_ORDERED = JSON.stringify({
|
|
35
|
-
name: "package",
|
|
36
|
-
version: {},
|
|
37
|
-
scripts: {},
|
|
38
|
-
dependencies: {},
|
|
39
|
-
}, undefined, 2) + "\n";
|
|
40
|
-
const PACKAGE_ORDERED_BY_LENGTH = JSON.stringify({
|
|
41
|
-
dependencies: {},
|
|
42
|
-
scripts: {},
|
|
43
|
-
version: {},
|
|
44
|
-
name: "package",
|
|
45
|
-
}, undefined, 2) + "\n";
|
|
46
|
-
const PACKAGE_ORDERED_UNKOWN_KEYS = JSON.stringify({
|
|
47
|
-
name: "package-unknown-keys",
|
|
48
|
-
version: {},
|
|
49
|
-
scripts: {},
|
|
50
|
-
dependencies: {},
|
|
51
|
-
apple: false,
|
|
52
|
-
butter: false,
|
|
53
|
-
}, undefined, 2) + "\n";
|
|
54
|
-
describe("expectPackageOrder", () => {
|
|
55
|
-
afterEach(() => {
|
|
56
|
-
mockFiles.clear();
|
|
57
|
-
});
|
|
58
|
-
describe("fix: true", () => {
|
|
59
|
-
const context = new core_1.PackageContext(".", {
|
|
60
|
-
rules: [],
|
|
61
|
-
fix: true,
|
|
62
|
-
verbose: false,
|
|
63
|
-
});
|
|
64
|
-
const spy = jest.spyOn(context, "addError");
|
|
65
|
-
afterEach(() => {
|
|
66
|
-
spy.mockClear();
|
|
67
|
-
});
|
|
68
|
-
it("fixes order for expected keys", () => {
|
|
69
|
-
mockFiles.set("package.json", PACKAGE_UNORDERED);
|
|
70
|
-
packageOrder_1.packageOrder.check(context, {
|
|
71
|
-
order: orderArray,
|
|
72
|
-
});
|
|
73
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
74
|
-
const failure = spy.mock.calls[0][0];
|
|
75
|
-
expect(failure.file).toBe("package.json");
|
|
76
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
77
|
-
expect(failure.message).toBe("Incorrect order of fields in package.json");
|
|
78
|
-
expect(mockFiles.get("package.json")).toEqual(PACKAGE_ORDERED);
|
|
79
|
-
});
|
|
80
|
-
it("fixes order for unexpected keys", () => {
|
|
81
|
-
mockFiles.set("package.json", PACKAGE_UNORDERED_UNKOWN_KEYS);
|
|
82
|
-
packageOrder_1.packageOrder.check(context, {
|
|
83
|
-
order: orderArray,
|
|
84
|
-
});
|
|
85
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
86
|
-
const failure = spy.mock.calls[0][0];
|
|
87
|
-
expect(failure.file).toBe("package.json");
|
|
88
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
89
|
-
expect(failure.message).toBe("Incorrect order of fields in package.json");
|
|
90
|
-
expect(mockFiles.get("package.json")).toEqual(PACKAGE_ORDERED_UNKOWN_KEYS);
|
|
91
|
-
});
|
|
92
|
-
it("fixes order using function", () => {
|
|
93
|
-
mockFiles.set("package.json", PACKAGE_UNORDERED);
|
|
94
|
-
packageOrder_1.packageOrder.check(context, {
|
|
95
|
-
order: orderFunction,
|
|
96
|
-
});
|
|
97
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
98
|
-
const failure = spy.mock.calls[0][0];
|
|
99
|
-
expect(failure.file).toBe("package.json");
|
|
100
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
101
|
-
expect(failure.message).toBe("Incorrect order of fields in package.json");
|
|
102
|
-
expect(mockFiles.get("package.json")).toEqual(PACKAGE_ORDERED_BY_LENGTH);
|
|
103
|
-
});
|
|
104
|
-
it("does nothing if already order", () => {
|
|
105
|
-
mockFiles.set("package.json", PACKAGE_ORDERED_UNKOWN_KEYS);
|
|
106
|
-
packageOrder_1.packageOrder.check(context, {
|
|
107
|
-
order: orderArray,
|
|
108
|
-
});
|
|
109
|
-
expect(spy).not.toHaveBeenCalled();
|
|
110
|
-
expect(mockFiles.get("package.json")).toEqual(PACKAGE_ORDERED_UNKOWN_KEYS);
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=packageOrder.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageOrder.spec.js","sourceRoot":"","sources":["../../src/__tests__/packageOrder.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageScript.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/packageScript.spec.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright 2019 Palantir Technologies, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
// tslint:disable:no-console
|
|
10
|
-
const utils_1 = require("./utils");
|
|
11
|
-
// done first since this also mocks 'fs'
|
|
12
|
-
const mockFiles = utils_1.createMockFiles();
|
|
13
|
-
const core_1 = require("@monorepolint/core");
|
|
14
|
-
const packageScript_1 = require("../packageScript");
|
|
15
|
-
const PACKAGE_WITHOUT_SCRIPTS = JSON.stringify({
|
|
16
|
-
name: "package-without-scripts",
|
|
17
|
-
}, undefined, 2) + "\n";
|
|
18
|
-
const MISSING_SCRIPT_NAME = "missing";
|
|
19
|
-
const MISSING_SCRIPT_VALUE = "missing value";
|
|
20
|
-
const SCRIPT_NAME = "exists";
|
|
21
|
-
const SCRIPT_VALUE = "exists value";
|
|
22
|
-
const PACKAGE_WITH_SCRIPTS = JSON.stringify({
|
|
23
|
-
name: "package-with-scripts",
|
|
24
|
-
scripts: {
|
|
25
|
-
[SCRIPT_NAME]: SCRIPT_VALUE,
|
|
26
|
-
},
|
|
27
|
-
}, undefined, 2) + "\n";
|
|
28
|
-
describe("expectPackageScript", () => {
|
|
29
|
-
afterEach(() => {
|
|
30
|
-
mockFiles.clear();
|
|
31
|
-
});
|
|
32
|
-
describe("fix: false", () => {
|
|
33
|
-
const context = new core_1.PackageContext(".", {
|
|
34
|
-
rules: [],
|
|
35
|
-
fix: false,
|
|
36
|
-
verbose: false,
|
|
37
|
-
});
|
|
38
|
-
const spy = jest.spyOn(context, "addError");
|
|
39
|
-
afterEach(() => {
|
|
40
|
-
spy.mockClear();
|
|
41
|
-
});
|
|
42
|
-
it("handles an empty script section", () => {
|
|
43
|
-
mockFiles.set("package.json", PACKAGE_WITHOUT_SCRIPTS);
|
|
44
|
-
packageScript_1.packageScript.check(context, {
|
|
45
|
-
scripts: {
|
|
46
|
-
foo: "bar",
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
50
|
-
const failure = spy.mock.calls[0][0];
|
|
51
|
-
expect(failure.file).toBe("package.json");
|
|
52
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
53
|
-
expect(failure.message).toBe("No scripts block in package.json");
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe("fix: true", () => {
|
|
57
|
-
const context = new core_1.PackageContext(".", {
|
|
58
|
-
rules: [],
|
|
59
|
-
fix: true,
|
|
60
|
-
verbose: false,
|
|
61
|
-
});
|
|
62
|
-
const spy = jest.spyOn(context, "addError");
|
|
63
|
-
afterEach(() => {
|
|
64
|
-
spy.mockClear();
|
|
65
|
-
});
|
|
66
|
-
it("fixes an empty script section", () => {
|
|
67
|
-
mockFiles.set("package.json", PACKAGE_WITHOUT_SCRIPTS);
|
|
68
|
-
packageScript_1.packageScript.check(context, {
|
|
69
|
-
scripts: {
|
|
70
|
-
foo: "bar",
|
|
71
|
-
},
|
|
72
|
-
});
|
|
73
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
74
|
-
const failure = spy.mock.calls[0][0];
|
|
75
|
-
expect(failure.file).toBe("package.json");
|
|
76
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
77
|
-
expect(failure.message).toBe("No scripts block in package.json");
|
|
78
|
-
expect(JSON.parse(mockFiles.get("package.json")).scripts).toEqual({});
|
|
79
|
-
});
|
|
80
|
-
it("adds a script", () => {
|
|
81
|
-
mockFiles.set("package.json", PACKAGE_WITH_SCRIPTS);
|
|
82
|
-
packageScript_1.packageScript.check(context, {
|
|
83
|
-
scripts: {
|
|
84
|
-
[MISSING_SCRIPT_NAME]: MISSING_SCRIPT_VALUE,
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
88
|
-
const failure = spy.mock.calls[0][0];
|
|
89
|
-
expect(failure.file).toBe("package.json");
|
|
90
|
-
expect(failure.fixer).not.toBeUndefined();
|
|
91
|
-
expect(failure.message).toBe(`Expected standardized script entry for '${MISSING_SCRIPT_NAME}'`);
|
|
92
|
-
expect(JSON.parse(mockFiles.get("package.json")).scripts[MISSING_SCRIPT_NAME]).toEqual(MISSING_SCRIPT_VALUE);
|
|
93
|
-
});
|
|
94
|
-
it("does nothing if the value exists", () => {
|
|
95
|
-
mockFiles.set("package.json", PACKAGE_WITH_SCRIPTS);
|
|
96
|
-
packageScript_1.packageScript.check(context, {
|
|
97
|
-
scripts: {
|
|
98
|
-
[SCRIPT_NAME]: SCRIPT_VALUE,
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
expect(spy).not.toHaveBeenCalled();
|
|
102
|
-
expect(JSON.parse(mockFiles.get("package.json")).scripts).toEqual({
|
|
103
|
-
[SCRIPT_NAME]: SCRIPT_VALUE,
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
108
|
-
//# sourceMappingURL=packageScript.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"packageScript.spec.js","sourceRoot":"","sources":["../../src/__tests__/packageScript.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/__tests__/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,eAAe,wBAe9B"}
|
package/lib/__tests__/utils.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright 2019 Palantir Technologies, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
function createMockFiles() {
|
|
10
|
-
const mockFiles = new Map();
|
|
11
|
-
jest.mock("fs", () => ({
|
|
12
|
-
writeFileSync: function writeFileSync(filePath, contents) {
|
|
13
|
-
mockFiles.set(filePath, contents);
|
|
14
|
-
},
|
|
15
|
-
// tslint:disable-next-line: variable-name
|
|
16
|
-
readFileSync: function readFileSync(filePath, _contentType) {
|
|
17
|
-
return mockFiles.get(filePath);
|
|
18
|
-
},
|
|
19
|
-
}));
|
|
20
|
-
return mockFiles;
|
|
21
|
-
}
|
|
22
|
-
exports.createMockFiles = createMockFiles;
|
|
23
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/__tests__/utils.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,SAAgB,eAAe;IAC7B,MAAM,SAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEjD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrB,aAAa,EAAE,SAAS,aAAa,CAAC,QAAgB,EAAE,QAAgB;YACtE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,0CAA0C;QAC1C,YAAY,EAAE,SAAS,YAAY,CAAC,QAAgB,EAAE,YAAoB;YACxE,OAAO,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,OAAO,SAAS,CAAC;AACnB,CAAC;AAfD,0CAeC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
-
import { RuleModule } from "@monorepolint/core";
|
|
8
|
-
import * as r from "runtypes";
|
|
9
|
-
export declare const alphabeticalDependencies: RuleModule<r.Literal<undefined>>;
|
|
10
|
-
//# sourceMappingURL=alphabeticalDependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alphabeticalDependencies.d.ts","sourceRoot":"","sources":["../src/alphabeticalDependencies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAI9B,eAAO,MAAM,wBAAwB,kCAON,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright 2019 Palantir Technologies, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const tslib_1 = require("tslib");
|
|
10
|
-
const utils_1 = require("@monorepolint/utils");
|
|
11
|
-
const jest_diff_1 = tslib_1.__importDefault(require("jest-diff"));
|
|
12
|
-
const r = tslib_1.__importStar(require("runtypes"));
|
|
13
|
-
const Options = r.Undefined;
|
|
14
|
-
exports.alphabeticalDependencies = {
|
|
15
|
-
check: function expectAlphabeticalDependencies(context) {
|
|
16
|
-
checkAlpha(context, "dependencies");
|
|
17
|
-
checkAlpha(context, "devDependencies");
|
|
18
|
-
checkAlpha(context, "peerDependencies");
|
|
19
|
-
},
|
|
20
|
-
optionsRuntype: Options,
|
|
21
|
-
};
|
|
22
|
-
function checkAlpha(context, block) {
|
|
23
|
-
const packageJson = context.getPackageJson();
|
|
24
|
-
const packagePath = context.getPackageJsonPath();
|
|
25
|
-
const dependencies = packageJson[block];
|
|
26
|
-
if (dependencies === undefined) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
const actualOrder = Object.keys(dependencies);
|
|
30
|
-
const expectedOrder = actualOrder.slice().sort(); // sort mutates, so we need to copy the previous result
|
|
31
|
-
if (!arrayOrderCompare(actualOrder, expectedOrder)) {
|
|
32
|
-
context.addError({
|
|
33
|
-
file: packagePath,
|
|
34
|
-
message: `Incorrect order of ${block} in package.json`,
|
|
35
|
-
longMessage: jest_diff_1.default(expectedOrder, actualOrder, { expand: true }),
|
|
36
|
-
fixer: () => {
|
|
37
|
-
const expectedDependencies = {};
|
|
38
|
-
expectedOrder.forEach(dep => {
|
|
39
|
-
expectedDependencies[dep] = dependencies[dep];
|
|
40
|
-
});
|
|
41
|
-
const newPackageJson = { ...packageJson };
|
|
42
|
-
newPackageJson[block] = expectedDependencies;
|
|
43
|
-
utils_1.writeJson(packagePath, newPackageJson);
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function arrayOrderCompare(a, b) {
|
|
49
|
-
for (let index = 0; index < a.length; index++) {
|
|
50
|
-
if (a[index] !== b[index]) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return true;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=alphabeticalDependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"alphabeticalDependencies.js","sourceRoot":"","sources":["../src/alphabeticalDependencies.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,+CAAgD;AAChD,kEAA6B;AAC7B,oDAA8B;AAE9B,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC;AAEf,QAAA,wBAAwB,GAAG;IACtC,KAAK,EAAE,SAAS,8BAA8B,CAAC,OAAgB;QAC7D,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACpC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACvC,UAAU,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IACD,cAAc,EAAE,OAAO;CACM,CAAC;AAEhC,SAAS,UAAU,CAAC,OAAgB,EAAE,KAA8D;IAClG,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAEjD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,OAAO;KACR;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,uDAAuD;IAEzG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE;QAClD,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,sBAAsB,KAAK,kBAAkB;YACtD,WAAW,EAAE,mBAAI,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/D,KAAK,EAAE,GAAG,EAAE;gBACV,MAAM,oBAAoB,GAA2B,EAAE,CAAC;gBAExD,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC1B,oBAAoB,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAChD,CAAC,CAAC,CAAC;gBAEH,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,iBAAiB,CAAC,CAAwB,EAAE,CAAwB;IAC3E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
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
|
-
import { RuleModule } from "@monorepolint/core";
|
|
8
|
-
import * as r from "runtypes";
|
|
9
|
-
declare const Options: r.Record<{
|
|
10
|
-
bannedDependencies: r.Array<r.String, false>;
|
|
11
|
-
}, false>;
|
|
12
|
-
declare type Options = r.Static<typeof Options>;
|
|
13
|
-
export declare const bannedDependencies: RuleModule<typeof Options>;
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=bannedDependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bannedDependencies.d.ts","sourceRoot":"","sources":["../src/bannedDependencies.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIzD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,QAAA,MAAM,OAAO;;SAEX,CAAC;AAEH,aAAK,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC,CAAC;AAExC,eAAO,MAAM,kBAAkB,EAAE,UAAU,CAAC,OAAO,OAAO,CAUzD,CAAC"}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright 2019 Palantir Technologies, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Licensed under the MIT license. See LICENSE file in the project root for details.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
const tslib_1 = require("tslib");
|
|
10
|
-
const utils_1 = require("@monorepolint/utils");
|
|
11
|
-
const jest_diff_1 = tslib_1.__importDefault(require("jest-diff"));
|
|
12
|
-
const minimatch_1 = tslib_1.__importDefault(require("minimatch"));
|
|
13
|
-
const r = tslib_1.__importStar(require("runtypes"));
|
|
14
|
-
const Options = r.Record({
|
|
15
|
-
bannedDependencies: r.Array(r.String),
|
|
16
|
-
});
|
|
17
|
-
exports.bannedDependencies = {
|
|
18
|
-
check: function expectAllowedDependencies(context, opts) {
|
|
19
|
-
// tslint:disable-next-line:no-shadowed-variable
|
|
20
|
-
const { bannedDependencies } = opts;
|
|
21
|
-
checkBanned(context, bannedDependencies, "dependencies");
|
|
22
|
-
checkBanned(context, bannedDependencies, "devDependencies");
|
|
23
|
-
checkBanned(context, bannedDependencies, "peerDependencies");
|
|
24
|
-
},
|
|
25
|
-
optionsRuntype: Options,
|
|
26
|
-
};
|
|
27
|
-
function checkBanned(context,
|
|
28
|
-
// tslint:disable-next-line:no-shadowed-variable
|
|
29
|
-
bannedDependencies, block) {
|
|
30
|
-
const packageJson = context.getPackageJson();
|
|
31
|
-
const packagePath = context.getPackageJsonPath();
|
|
32
|
-
const dependencies = packageJson[block];
|
|
33
|
-
if (dependencies === undefined) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const expectedDependencies = {};
|
|
37
|
-
for (const dependency of Object.keys(dependencies)) {
|
|
38
|
-
for (const bannedDependency of bannedDependencies) {
|
|
39
|
-
if (!minimatch_1.default(dependency, bannedDependency)) {
|
|
40
|
-
expectedDependencies[dependency] = dependencies[dependency];
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (Object.keys(expectedDependencies).length !== Object.keys(dependencies).length) {
|
|
45
|
-
context.addError({
|
|
46
|
-
file: packagePath,
|
|
47
|
-
message: `Banned depdendencies in ${block} in package.json`,
|
|
48
|
-
longMessage: jest_diff_1.default(expectedDependencies, dependencies, { expand: true }),
|
|
49
|
-
fixer: () => {
|
|
50
|
-
const newPackageJson = { ...packageJson };
|
|
51
|
-
newPackageJson[block] = expectedDependencies;
|
|
52
|
-
utils_1.writeJson(packagePath, newPackageJson);
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=bannedDependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bannedDependencies.js","sourceRoot":"","sources":["../src/bannedDependencies.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,+CAAgD;AAChD,kEAA6B;AAC7B,kEAAkC;AAClC,oDAA8B;AAE9B,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IACvB,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;CACtC,CAAC,CAAC;AAIU,QAAA,kBAAkB,GAA+B;IAC5D,KAAK,EAAE,SAAS,yBAAyB,CAAC,OAAgB,EAAE,IAAa;QACvE,gDAAgD;QAChD,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC;QAEpC,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;QACzD,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;QAC5D,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IACD,cAAc,EAAE,OAAO;CACxB,CAAC;AAEF,SAAS,WAAW,CAClB,OAAgB;AAChB,gDAAgD;AAChD,kBAAyC,EACzC,KAA8D;IAE9D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAEjD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,YAAY,KAAK,SAAS,EAAE;QAC9B,OAAO;KACR;IAED,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IAExD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QAClD,KAAK,MAAM,gBAAgB,IAAI,kBAAkB,EAAE;YACjD,IAAI,CAAC,mBAAS,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;gBAC5C,oBAAoB,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;aAC7D;SACF;KACF;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE;QACjF,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,2BAA2B,KAAK,kBAAkB;YAC3D,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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
-
import { RuleModule } from "@monorepolint/core";
|
|
8
|
-
import * as r from "runtypes";
|
|
9
|
-
export declare const consistentDependencies: RuleModule<r.Literal<undefined>>;
|
|
10
|
-
//# sourceMappingURL=consistentDependencies.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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;AAK9B,eAAO,MAAM,sBAAsB,kCAOJ,CAAC"}
|