@monorepolint/rules 0.5.0-alpha.9 → 0.5.0-alpha.95
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/lib/__tests__/alphabeticalScripts.spec.d.ts +8 -0
- package/lib/__tests__/alphabeticalScripts.spec.d.ts.map +1 -0
- package/lib/__tests__/alphabeticalScripts.spec.js +61 -0
- package/lib/__tests__/alphabeticalScripts.spec.js.map +1 -0
- package/lib/__tests__/bannedDependencies.spec.d.ts +2 -0
- package/lib/__tests__/bannedDependencies.spec.d.ts.map +1 -0
- package/lib/__tests__/bannedDependencies.spec.js +161 -0
- package/lib/__tests__/bannedDependencies.spec.js.map +1 -0
- package/lib/__tests__/consistentDependencies.spec.js +30 -23
- package/lib/__tests__/consistentDependencies.spec.js.map +1 -1
- package/lib/__tests__/consistentVersions.spec.d.ts +8 -0
- package/lib/__tests__/consistentVersions.spec.d.ts.map +1 -0
- package/lib/__tests__/consistentVersions.spec.js +183 -0
- package/lib/__tests__/consistentVersions.spec.js.map +1 -0
- package/lib/__tests__/fileContents.spec.d.ts +8 -0
- package/lib/__tests__/fileContents.spec.d.ts.map +1 -0
- package/lib/__tests__/fileContents.spec.js +59 -0
- package/lib/__tests__/fileContents.spec.js.map +1 -0
- package/lib/__tests__/mustSatisfyPeerDependencies.spec.d.ts +8 -0
- package/lib/__tests__/mustSatisfyPeerDependencies.spec.d.ts.map +1 -0
- package/lib/__tests__/mustSatisfyPeerDependencies.spec.js +1063 -0
- package/lib/__tests__/mustSatisfyPeerDependencies.spec.js.map +1 -0
- package/lib/__tests__/nestedWorkspaces.spec.d.ts +2 -0
- package/lib/__tests__/nestedWorkspaces.spec.d.ts.map +1 -0
- package/lib/__tests__/nestedWorkspaces.spec.js +124 -0
- package/lib/__tests__/nestedWorkspaces.spec.js.map +1 -0
- package/lib/__tests__/packageEntry.spec.js +72 -27
- package/lib/__tests__/packageEntry.spec.js.map +1 -1
- package/lib/__tests__/packageOrder.spec.js +34 -33
- package/lib/__tests__/packageOrder.spec.js.map +1 -1
- package/lib/__tests__/packageScript.spec.js +50 -51
- package/lib/__tests__/packageScript.spec.js.map +1 -1
- package/lib/__tests__/requireDependency.spec.d.ts +2 -0
- package/lib/__tests__/requireDependency.spec.d.ts.map +1 -0
- package/lib/__tests__/requireDependency.spec.js +123 -0
- package/lib/__tests__/requireDependency.spec.js.map +1 -0
- package/lib/__tests__/utils.d.ts +69 -1
- package/lib/__tests__/utils.d.ts.map +1 -1
- package/lib/__tests__/utils.js +72 -12
- package/lib/__tests__/utils.js.map +1 -1
- package/lib/alphabeticalDependencies.d.ts +3 -1
- package/lib/alphabeticalDependencies.d.ts.map +1 -1
- package/lib/alphabeticalDependencies.js +5 -39
- package/lib/alphabeticalDependencies.js.map +1 -1
- package/lib/alphabeticalScripts.d.ts +12 -0
- package/lib/alphabeticalScripts.d.ts.map +1 -0
- package/lib/alphabeticalScripts.js +20 -0
- package/lib/alphabeticalScripts.js.map +1 -0
- package/lib/bannedDependencies.d.ts +23 -5
- package/lib/bannedDependencies.d.ts.map +1 -1
- package/lib/bannedDependencies.js +110 -36
- package/lib/bannedDependencies.js.map +1 -1
- package/lib/consistentDependencies.d.ts +8 -1
- package/lib/consistentDependencies.d.ts.map +1 -1
- package/lib/consistentDependencies.js +30 -12
- package/lib/consistentDependencies.js.map +1 -1
- package/lib/consistentVersions.d.ts +14 -0
- package/lib/consistentVersions.d.ts.map +1 -0
- package/lib/consistentVersions.js +94 -0
- package/lib/consistentVersions.js.map +1 -0
- package/lib/fileContents.d.ts +8 -8
- package/lib/fileContents.d.ts.map +1 -1
- package/lib/fileContents.js +32 -27
- package/lib/fileContents.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19 -8
- package/lib/index.js.map +1 -1
- package/lib/mustSatisfyPeerDependencies.d.ts +240 -0
- package/lib/mustSatisfyPeerDependencies.d.ts.map +1 -0
- package/lib/mustSatisfyPeerDependencies.js +636 -0
- package/lib/mustSatisfyPeerDependencies.js.map +1 -0
- package/lib/nestedWorkspaces.d.ts +13 -0
- package/lib/nestedWorkspaces.d.ts.map +1 -0
- package/lib/nestedWorkspaces.js +50 -0
- package/lib/nestedWorkspaces.js.map +1 -0
- package/lib/packageEntry.d.ts +15 -6
- package/lib/packageEntry.d.ts.map +1 -1
- package/lib/packageEntry.js +53 -18
- package/lib/packageEntry.js.map +1 -1
- package/lib/packageOrder.d.ts +3 -3
- package/lib/packageOrder.d.ts.map +1 -1
- package/lib/packageOrder.js +8 -7
- package/lib/packageOrder.js.map +1 -1
- package/lib/packageScript.d.ts +10 -10
- package/lib/packageScript.js +6 -5
- package/lib/packageScript.js.map +1 -1
- package/lib/requireDependency.d.ts +15 -0
- package/lib/requireDependency.d.ts.map +1 -0
- package/lib/requireDependency.js +65 -0
- package/lib/requireDependency.js.map +1 -0
- package/lib/standardTsconfig.d.ts +20 -8
- package/lib/standardTsconfig.d.ts.map +1 -1
- package/lib/standardTsconfig.js +36 -18
- package/lib/standardTsconfig.js.map +1 -1
- package/lib/util/checkAlpha.d.ts +10 -0
- package/lib/util/checkAlpha.d.ts.map +1 -0
- package/lib/util/checkAlpha.js +51 -0
- package/lib/util/checkAlpha.js.map +1 -0
- package/lib/util/makeDirectory.d.ts +8 -0
- package/lib/util/makeDirectory.d.ts.map +1 -0
- package/lib/util/makeDirectory.js +28 -0
- package/lib/util/makeDirectory.js.map +1 -0
- package/lib/util/packageDependencyGraphService.d.ts +37 -0
- package/lib/util/packageDependencyGraphService.d.ts.map +1 -0
- package/lib/util/packageDependencyGraphService.js +70 -0
- package/lib/util/packageDependencyGraphService.js.map +1 -0
- package/package.json +18 -15
- package/src/__tests__/alphabeticalScripts.spec.ts +75 -0
- package/src/__tests__/bannedDependencies.spec.ts +191 -0
- package/src/__tests__/consistentDependencies.spec.ts +39 -26
- package/src/__tests__/consistentVersions.spec.ts +223 -0
- package/src/__tests__/fileContents.spec.ts +74 -0
- package/src/__tests__/mustSatisfyPeerDependencies.spec.ts +1188 -0
- package/src/__tests__/nestedWorkspaces.spec.ts +152 -0
- package/src/__tests__/packageEntry.spec.ts +98 -31
- package/src/__tests__/packageOrder.spec.ts +46 -40
- package/src/__tests__/packageScript.spec.ts +62 -54
- package/src/__tests__/requireDependency.spec.ts +151 -0
- package/src/__tests__/utils.ts +113 -11
- package/src/alphabeticalDependencies.ts +3 -47
- package/src/alphabeticalScripts.ts +19 -0
- package/src/bannedDependencies.ts +133 -43
- package/src/consistentDependencies.ts +34 -12
- package/src/consistentVersions.ts +140 -0
- package/src/fileContents.ts +31 -27
- package/src/index.ts +5 -0
- package/src/mustSatisfyPeerDependencies.ts +739 -0
- package/src/nestedWorkspaces.ts +59 -0
- package/src/packageEntry.ts +67 -24
- package/src/packageOrder.ts +6 -6
- package/src/packageScript.ts +3 -3
- package/src/requireDependency.ts +69 -0
- package/src/standardTsconfig.ts +40 -18
- package/src/util/checkAlpha.ts +59 -0
- package/src/util/makeDirectory.ts +24 -0
- package/src/util/packageDependencyGraphService.ts +114 -0
- package/tsconfig.tsbuildinfo +1 -2439
package/lib/standardTsconfig.js
CHANGED
|
@@ -6,19 +6,22 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.standardTsconfig = void 0;
|
|
9
10
|
const tslib_1 = require("tslib");
|
|
10
11
|
const utils_1 = require("@monorepolint/utils");
|
|
11
|
-
const fs_1 = require("fs");
|
|
12
12
|
const jest_diff_1 = tslib_1.__importDefault(require("jest-diff"));
|
|
13
|
-
const minimatch_1 = tslib_1.__importDefault(require("minimatch"));
|
|
14
13
|
const path = tslib_1.__importStar(require("path"));
|
|
15
14
|
const r = tslib_1.__importStar(require("runtypes"));
|
|
15
|
+
const DEFAULT_TSCONFIG_FILENAME = "tsconfig.json";
|
|
16
16
|
const Options = r
|
|
17
17
|
.Partial({
|
|
18
|
+
file: r.String,
|
|
18
19
|
generator: r.Function,
|
|
20
|
+
tsconfigReferenceFile: r.String,
|
|
19
21
|
template: r.Record({}).Or(r.String),
|
|
20
22
|
templateFile: r.String,
|
|
21
23
|
excludedReferences: r.Array(r.String).Or(r.Undefined),
|
|
24
|
+
additionalReferences: r.Array(r.String).Or(r.Undefined),
|
|
22
25
|
})
|
|
23
26
|
.withConstraint(({ generator, template, templateFile }) => {
|
|
24
27
|
let count = 0;
|
|
@@ -35,10 +38,14 @@ const Options = r
|
|
|
35
38
|
});
|
|
36
39
|
exports.standardTsconfig = {
|
|
37
40
|
check: function expectStandardTsconfig(context, opts) {
|
|
38
|
-
|
|
41
|
+
var _a;
|
|
42
|
+
const tsconfigFileName = (_a = opts.file) !== null && _a !== void 0 ? _a : DEFAULT_TSCONFIG_FILENAME;
|
|
43
|
+
const fullPath = path.resolve(context.packageDir, tsconfigFileName);
|
|
39
44
|
const generator = getGenerator(context, opts);
|
|
40
45
|
const expectedContent = generator(context);
|
|
41
|
-
const actualContent =
|
|
46
|
+
const actualContent = context.host.exists(fullPath)
|
|
47
|
+
? context.host.readFile(fullPath, { encoding: "utf-8" })
|
|
48
|
+
: undefined;
|
|
42
49
|
if (expectedContent === undefined) {
|
|
43
50
|
context.addWarning({
|
|
44
51
|
file: fullPath,
|
|
@@ -50,9 +57,11 @@ exports.standardTsconfig = {
|
|
|
50
57
|
context.addError({
|
|
51
58
|
file: fullPath,
|
|
52
59
|
message: "Expect file contents to match",
|
|
53
|
-
longMessage: jest_diff_1.default(expectedContent, actualContent, { expand: true }),
|
|
60
|
+
longMessage: (0, jest_diff_1.default)(expectedContent, actualContent, { expand: true }),
|
|
54
61
|
fixer: () => {
|
|
55
|
-
|
|
62
|
+
context.host.writeFile(fullPath, expectedContent, {
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
});
|
|
56
65
|
},
|
|
57
66
|
});
|
|
58
67
|
}
|
|
@@ -66,32 +75,41 @@ function getGenerator(context, opts) {
|
|
|
66
75
|
else if (opts.templateFile) {
|
|
67
76
|
const { packageDir: workspacePackageDir } = context.getWorkspaceContext();
|
|
68
77
|
const fullPath = path.resolve(workspacePackageDir, opts.templateFile);
|
|
69
|
-
const template = JSON.parse(
|
|
70
|
-
return makeGenerator(template, opts.excludedReferences);
|
|
78
|
+
const template = JSON.parse(context.host.readFile(fullPath, { encoding: "utf-8" }));
|
|
79
|
+
return makeGenerator(template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);
|
|
71
80
|
}
|
|
72
81
|
else if (opts.template) {
|
|
73
|
-
return makeGenerator(opts.template, opts.excludedReferences);
|
|
82
|
+
return makeGenerator(opts.template, opts.excludedReferences, opts.additionalReferences, opts.tsconfigReferenceFile);
|
|
74
83
|
}
|
|
75
84
|
else {
|
|
76
85
|
throw new Error("Unable to make generator");
|
|
77
86
|
}
|
|
78
87
|
}
|
|
79
|
-
function makeGenerator(template, excludedReferences
|
|
88
|
+
function makeGenerator(template, excludedReferences, additionalReferences, tsconfigReferenceFile) {
|
|
80
89
|
return function generator(context) {
|
|
81
90
|
template = {
|
|
82
91
|
...template,
|
|
83
92
|
references: [],
|
|
84
93
|
}; // make a copy and ensure we have a references array
|
|
85
|
-
const nameToDirectory =
|
|
94
|
+
const nameToDirectory = context.getWorkspaceContext().getPackageNameToDir();
|
|
86
95
|
const packageJson = context.getPackageJson();
|
|
87
96
|
const deps = [...Object.keys(packageJson.dependencies || {}), ...Object.keys(packageJson.devDependencies || {})];
|
|
88
|
-
deps
|
|
89
|
-
|
|
90
|
-
.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
97
|
+
for (const dep of deps) {
|
|
98
|
+
const packageDir = nameToDirectory.get(dep);
|
|
99
|
+
if (packageDir !== undefined && (excludedReferences === undefined || (0, utils_1.matchesAnyGlob)(dep, excludedReferences))) {
|
|
100
|
+
const absoluteReferencePath = tsconfigReferenceFile !== undefined ? path.join(packageDir, tsconfigReferenceFile) : packageDir;
|
|
101
|
+
template.references.push({
|
|
102
|
+
path: path.relative(context.packageDir, absoluteReferencePath),
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (additionalReferences) {
|
|
107
|
+
for (const additionalReference of additionalReferences) {
|
|
108
|
+
template.references.push({
|
|
109
|
+
path: additionalReference,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
95
113
|
return JSON.stringify(template, undefined, 2) + "\n";
|
|
96
114
|
};
|
|
97
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standardTsconfig.js","sourceRoot":"","sources":["../src/standardTsconfig.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"standardTsconfig.js","sourceRoot":"","sources":["../src/standardTsconfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
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 { Context } from "@monorepolint/core";
|
|
8
|
+
export declare function checkAlpha(context: Context, block: "dependencies" | "devDependencies" | "peerDependencies" | "scripts"): void;
|
|
9
|
+
export declare function createIncorrectOrderErrorMessage(block: string, packageName: string): string;
|
|
10
|
+
//# sourceMappingURL=checkAlpha.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkAlpha.d.ts","sourceRoot":"","sources":["../../src/util/checkAlpha.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,cAAc,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,SAAS,QAgC3E;AAYD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,UAElF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
exports.createIncorrectOrderErrorMessage = exports.checkAlpha = void 0;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const jest_diff_1 = tslib_1.__importDefault(require("jest-diff"));
|
|
12
|
+
function checkAlpha(context, block) {
|
|
13
|
+
const packageJson = context.getPackageJson();
|
|
14
|
+
const packagePath = context.getPackageJsonPath();
|
|
15
|
+
const blockToSort = packageJson[block];
|
|
16
|
+
if (blockToSort === undefined) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const actualOrder = Object.keys(blockToSort);
|
|
20
|
+
const expectedOrder = actualOrder.slice().sort(); // sort mutates, so we need to copy the previous result
|
|
21
|
+
if (!arrayOrderCompare(actualOrder, expectedOrder)) {
|
|
22
|
+
context.addError({
|
|
23
|
+
file: packagePath,
|
|
24
|
+
message: createIncorrectOrderErrorMessage(block, packageJson.name),
|
|
25
|
+
longMessage: (0, jest_diff_1.default)(expectedOrder, actualOrder, { expand: true }),
|
|
26
|
+
fixer: () => {
|
|
27
|
+
const expectedDependencies = {};
|
|
28
|
+
expectedOrder.forEach((dep) => {
|
|
29
|
+
expectedDependencies[dep] = blockToSort[dep];
|
|
30
|
+
});
|
|
31
|
+
const newPackageJson = { ...packageJson };
|
|
32
|
+
newPackageJson[block] = expectedDependencies;
|
|
33
|
+
context.host.writeJson(packagePath, newPackageJson);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.checkAlpha = checkAlpha;
|
|
39
|
+
function arrayOrderCompare(a, b) {
|
|
40
|
+
for (let index = 0; index < a.length; index++) {
|
|
41
|
+
if (a[index] !== b[index]) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
function createIncorrectOrderErrorMessage(block, packageName) {
|
|
48
|
+
return `Incorrect order of ${block} in ${packageName}'s package.json`;
|
|
49
|
+
}
|
|
50
|
+
exports.createIncorrectOrderErrorMessage = createIncorrectOrderErrorMessage;
|
|
51
|
+
//# sourceMappingURL=checkAlpha.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkAlpha.js","sourceRoot":"","sources":["../../src/util/checkAlpha.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAGH,kEAA6B;AAE7B,SAAgB,UAAU,CACxB,OAAgB,EAChB,KAA0E;IAE1E,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAEjD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEvC,IAAI,WAAW,KAAK,SAAS,EAAE;QAC7B,OAAO;KACR;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,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,gCAAgC,CAAC,KAAK,EAAE,WAAW,CAAC,IAAK,CAAC;YACnE,WAAW,EAAE,IAAA,mBAAI,EAAC,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,CAAC,GAAG,EAAE,EAAE;oBAC5B,oBAAoB,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;gBAC1C,cAAc,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACtD,CAAC;SACF,CAAC,CAAC;KACJ;AACH,CAAC;AAlCD,gCAkCC;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;AAED,SAAgB,gCAAgC,CAAC,KAAa,EAAE,WAAmB;IACjF,OAAO,sBAAsB,KAAK,OAAO,WAAW,iBAAiB,CAAC;AACxE,CAAC;AAFD,4EAEC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
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
|
+
export declare function makeDirectoryRecursively(directoryPath: string): void;
|
|
8
|
+
//# sourceMappingURL=makeDirectory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeDirectory.d.ts","sourceRoot":"","sources":["../../src/util/makeDirectory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,QAa7D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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
|
+
exports.makeDirectoryRecursively = void 0;
|
|
10
|
+
const tslib_1 = require("tslib");
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
const path = tslib_1.__importStar(require("path"));
|
|
13
|
+
function makeDirectoryRecursively(directoryPath) {
|
|
14
|
+
// node < 10 doesn't support mkdirSync w/ recursive: true
|
|
15
|
+
// so we manually do it instead
|
|
16
|
+
const dirSegments = directoryPath.split(path.sep);
|
|
17
|
+
for (let i = 0; i < dirSegments.length; i++) {
|
|
18
|
+
if (dirSegments[i].length > 0) {
|
|
19
|
+
// we skip the empty segment
|
|
20
|
+
const curDirPath = dirSegments.slice(0, i + 1).join(path.sep);
|
|
21
|
+
if (!(0, fs_1.existsSync)(curDirPath)) {
|
|
22
|
+
(0, fs_1.mkdirSync)(curDirPath);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.makeDirectoryRecursively = makeDirectoryRecursively;
|
|
28
|
+
//# sourceMappingURL=makeDirectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeDirectory.js","sourceRoot":"","sources":["../../src/util/makeDirectory.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;AAEH,2BAA2C;AAC3C,mDAA6B;AAE7B,SAAgB,wBAAwB,CAAC,aAAqB;IAC5D,yDAAyD;IACzD,+BAA+B;IAC/B,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7B,4BAA4B;YAC5B,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE;gBAC3B,IAAA,cAAS,EAAC,UAAU,CAAC,CAAC;aACvB;SACF;KACF;AACH,CAAC;AAbD,4DAaC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license Copyright 2019 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { Host, PackageJson } from "@monorepolint/utils";
|
|
5
|
+
/** Interface for a node in a package dependency graph. */
|
|
6
|
+
export interface IPackageDependencyGraphNode {
|
|
7
|
+
packageJson: PackageJson;
|
|
8
|
+
dependencies: Map<string, IPackageDependencyGraphNode>;
|
|
9
|
+
paths: {
|
|
10
|
+
packageJsonPath: string;
|
|
11
|
+
rootDirectory: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Service abstraction for constructing and traversing package dependency graphs. */
|
|
15
|
+
export interface IPackageDependencyGraphService {
|
|
16
|
+
/** Construct a graph of package dependencies. */
|
|
17
|
+
buildDependencyGraph(packageJsonPath: string, host: Host, maxDepth?: number): IPackageDependencyGraphNode;
|
|
18
|
+
/** Traverse a package dependency graph. */
|
|
19
|
+
traverse(root: IPackageDependencyGraphNode, opts?: {
|
|
20
|
+
/** Traverse each unique path to a given package (potentially slow). */
|
|
21
|
+
traverseAllPaths?: boolean;
|
|
22
|
+
}): IterableIterator<IPackageDependencyGraphNode & {
|
|
23
|
+
importPath: IPackageDependencyGraphNode[];
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
/** Default implementation of the package dependency graph service. */
|
|
27
|
+
export declare class PackageDependencyGraphService implements IPackageDependencyGraphService {
|
|
28
|
+
/** Construct a graph of package dependencies and return the root node. */
|
|
29
|
+
buildDependencyGraph(startPackageJsonPath: string, host: Host, maxDepth?: number): IPackageDependencyGraphNode;
|
|
30
|
+
/** Traverse a package dependency graph with an iterator. */
|
|
31
|
+
traverse(root: IPackageDependencyGraphNode, opts?: {
|
|
32
|
+
traverseAllPaths: boolean;
|
|
33
|
+
}): IterableIterator<IPackageDependencyGraphNode & {
|
|
34
|
+
importPath: IPackageDependencyGraphNode[];
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=packageDependencyGraphService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageDependencyGraphService.d.ts","sourceRoot":"","sources":["../../src/util/packageDependencyGraphService.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIxD,0DAA0D;AAC1D,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACvD,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,qFAAqF;AACrF,MAAM,WAAW,8BAA8B;IAC7C,iDAAiD;IACjD,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,2BAA2B,CAAC;IAE1G,2CAA2C;IAC3C,QAAQ,CACN,IAAI,EAAE,2BAA2B,EACjC,IAAI,CAAC,EAAE;QACL,uEAAuE;QACvE,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,gBAAgB,CAAC,2BAA2B,GAAG;QAAE,UAAU,EAAE,2BAA2B,EAAE,CAAA;KAAE,CAAC,CAAC;CAClG;AAED,sEAAsE;AACtE,qBAAa,6BAA8B,YAAW,8BAA8B;IAClF,0EAA0E;IACnE,oBAAoB,CACzB,oBAAoB,EAAE,MAAM,EAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,CAAC,EAAE,MAAM,GAChB,2BAA2B;IAuC9B,4DAA4D;IACpD,QAAQ,CACd,IAAI,EAAE,2BAA2B,EACjC,IAAI;;KAA8B,GACjC,gBAAgB,CAAC,2BAA2B,GAAG;QAAE,UAAU,EAAE,2BAA2B,EAAE,CAAA;KAAE,CAAC;CA8BjG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license Copyright 2019 Palantir Technologies, Inc. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PackageDependencyGraphService = void 0;
|
|
7
|
+
const tslib_1 = require("tslib");
|
|
8
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
9
|
+
const resolve_package_path_1 = tslib_1.__importDefault(require("resolve-package-path"));
|
|
10
|
+
/** Default implementation of the package dependency graph service. */
|
|
11
|
+
class PackageDependencyGraphService {
|
|
12
|
+
/** Construct a graph of package dependencies and return the root node. */
|
|
13
|
+
buildDependencyGraph(startPackageJsonPath, host, maxDepth) {
|
|
14
|
+
const nodes = new Map();
|
|
15
|
+
const visit = (packageJsonPath, currentDepth) => {
|
|
16
|
+
if (nodes.has(packageJsonPath)) {
|
|
17
|
+
return nodes.get(packageJsonPath);
|
|
18
|
+
}
|
|
19
|
+
const packageJson = host.readJson(packageJsonPath);
|
|
20
|
+
const node = {
|
|
21
|
+
packageJson,
|
|
22
|
+
dependencies: new Map(),
|
|
23
|
+
paths: {
|
|
24
|
+
packageJsonPath,
|
|
25
|
+
rootDirectory: path_1.default.dirname(packageJsonPath),
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
// It's important that we register the node before visiting its dependencies to avoid cycles
|
|
29
|
+
nodes.set(packageJsonPath, node);
|
|
30
|
+
const nextDepth = currentDepth + 1;
|
|
31
|
+
if (maxDepth == null || nextDepth <= maxDepth) {
|
|
32
|
+
const dependencies = packageJson.dependencies != null ? Object.keys(packageJson.dependencies) : [];
|
|
33
|
+
for (const dependency of dependencies) {
|
|
34
|
+
const dependencyPackageJsonPath = (0, resolve_package_path_1.default)(dependency, node.paths.rootDirectory);
|
|
35
|
+
if (dependencyPackageJsonPath == null) {
|
|
36
|
+
throw new Error(`Could not resolve ${dependency} from ${node.paths.rootDirectory}`);
|
|
37
|
+
}
|
|
38
|
+
node.dependencies.set(dependency, visit(dependencyPackageJsonPath, nextDepth));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return node;
|
|
42
|
+
};
|
|
43
|
+
return visit(startPackageJsonPath, 0);
|
|
44
|
+
}
|
|
45
|
+
/** Traverse a package dependency graph with an iterator. */
|
|
46
|
+
*traverse(root, opts = { traverseAllPaths: false }) {
|
|
47
|
+
const visited = new Set();
|
|
48
|
+
function* visit(node, importPath = []) {
|
|
49
|
+
// Don't visit a package more than once unless explicitly asked to traverse all paths
|
|
50
|
+
if (!opts.traverseAllPaths && visited.has(node)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Break cycles when traversing all paths
|
|
54
|
+
if (importPath.indexOf(node) !== -1) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Visit the node
|
|
58
|
+
visited.add(node);
|
|
59
|
+
importPath = [...importPath, node];
|
|
60
|
+
yield { ...node, importPath };
|
|
61
|
+
// Recursively visit the node's dependencies
|
|
62
|
+
for (const dependency of node.dependencies.values()) {
|
|
63
|
+
yield* visit(dependency, importPath);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
yield* visit(root);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.PackageDependencyGraphService = PackageDependencyGraphService;
|
|
70
|
+
//# sourceMappingURL=packageDependencyGraphService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageDependencyGraphService.js","sourceRoot":"","sources":["../../src/util/packageDependencyGraphService.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.
|
|
3
|
+
"version": "0.5.0-alpha.95+2af8792",
|
|
4
4
|
"author": "Eric L Anderson (https://github.com/ericanderson)",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Mac Lockard (https://github.com/maclockard)"
|
|
@@ -10,29 +10,32 @@
|
|
|
10
10
|
"main": "lib/index.js",
|
|
11
11
|
"typings": "lib/index.d.ts",
|
|
12
12
|
"scripts": {
|
|
13
|
-
"clean": "rm -rf build lib node_modules *.tgz",
|
|
13
|
+
"clean": "rm -rf build lib node_modules *.tgz tsconfig.tsbuildinfo",
|
|
14
14
|
"compile:typescript": "../../node_modules/.bin/tsc",
|
|
15
|
-
"jest:watch": "../../node_modules/.bin/jest --config ../../jest.config.js --watch",
|
|
16
15
|
"jest": "../../node_modules/.bin/jest --config ../../jest.config.js",
|
|
16
|
+
"jest:watch": "../../node_modules/.bin/jest --watch",
|
|
17
17
|
"lint:typescript": "../../node_modules/.bin/tslint --config ../../tslint.json --project .",
|
|
18
|
-
"test
|
|
19
|
-
"test": "../../node_modules/.bin/jest --colors --passWithNoTests"
|
|
18
|
+
"test": "../../node_modules/.bin/jest --colors --passWithNoTests",
|
|
19
|
+
"test:watch": "../../node_modules/.bin/jest --colors --passWithNoTests --watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@monorepolint/core": "^0.5.0-alpha.
|
|
23
|
-
"@monorepolint/utils": "^0.5.0-alpha.
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
22
|
+
"@monorepolint/core": "^0.5.0-alpha.95+2af8792",
|
|
23
|
+
"@monorepolint/utils": "^0.5.0-alpha.95+2af8792",
|
|
24
|
+
"globby": "^11.0.1",
|
|
25
|
+
"jest-diff": "^26.0.1",
|
|
26
|
+
"resolve-package-path": "^3.1.0",
|
|
27
|
+
"runtypes": "^6.5.1",
|
|
28
|
+
"semver": "^7.3.2",
|
|
29
|
+
"tslib": "^2.3.1"
|
|
27
30
|
},
|
|
28
31
|
"devDependencies": {
|
|
29
|
-
"@types/jest-diff": "^
|
|
30
|
-
"@types/
|
|
31
|
-
"@types/tmp": "^0.
|
|
32
|
-
"tmp": "^0.1
|
|
32
|
+
"@types/jest-diff": "^24.3.0",
|
|
33
|
+
"@types/semver": "^7.2.0",
|
|
34
|
+
"@types/tmp": "^0.2.0",
|
|
35
|
+
"tmp": "^0.2.1"
|
|
33
36
|
},
|
|
34
37
|
"publishConfig": {
|
|
35
38
|
"access": "public"
|
|
36
39
|
},
|
|
37
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "2af87920f7f0788e5be9bb4629021e3db8e68a45"
|
|
38
41
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { AddErrorSpy, createTestingWorkspace, HOST_FACTORIES, jsonToString, TestingWorkspace } from "./utils";
|
|
10
|
+
import { Context, Failure } from "@monorepolint/core";
|
|
11
|
+
import { alphabeticalScripts } from "../alphabeticalScripts";
|
|
12
|
+
import { createIncorrectOrderErrorMessage } from "../util/checkAlpha";
|
|
13
|
+
|
|
14
|
+
const PACKAGE_SCRIPTS_SORTED = jsonToString({
|
|
15
|
+
name: "foo-lib",
|
|
16
|
+
scripts: {
|
|
17
|
+
a: "a-",
|
|
18
|
+
b: "b-",
|
|
19
|
+
c: "c-",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const PACKAGE_SCRIPTS_UNSORTED = jsonToString({
|
|
24
|
+
name: "foo-lib",
|
|
25
|
+
scripts: {
|
|
26
|
+
c: "c-",
|
|
27
|
+
a: "a-",
|
|
28
|
+
b: "b-",
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
describe.each(HOST_FACTORIES)("alphabeticalScripts ($name)", (hostFactory) => {
|
|
33
|
+
describe("fix: true", () => {
|
|
34
|
+
let workspace: TestingWorkspace;
|
|
35
|
+
let spy: AddErrorSpy;
|
|
36
|
+
let context: Context;
|
|
37
|
+
|
|
38
|
+
beforeEach(async () => {
|
|
39
|
+
workspace = await createTestingWorkspace({
|
|
40
|
+
fixFlag: true,
|
|
41
|
+
host: hostFactory.make(),
|
|
42
|
+
});
|
|
43
|
+
context = workspace.context; // minimizing delta
|
|
44
|
+
|
|
45
|
+
spy = jest.spyOn(workspace.context, "addError");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("fixes unsorted scripts", () => {
|
|
49
|
+
workspace.writeFile("package.json", PACKAGE_SCRIPTS_UNSORTED);
|
|
50
|
+
|
|
51
|
+
alphabeticalScripts.check(context, undefined);
|
|
52
|
+
|
|
53
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
54
|
+
|
|
55
|
+
const failure: Failure = spy.mock.calls[0][0];
|
|
56
|
+
expect(failure).toMatchObject(
|
|
57
|
+
workspace.failureMatcher({
|
|
58
|
+
file: "package.json",
|
|
59
|
+
hasFixer: true,
|
|
60
|
+
message: createIncorrectOrderErrorMessage("scripts", "foo-lib"),
|
|
61
|
+
})
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
expect(workspace.readFile("package.json")).toEqual(PACKAGE_SCRIPTS_SORTED);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("does nothing if already sorted", () => {
|
|
68
|
+
workspace.writeFile("package.json", PACKAGE_SCRIPTS_SORTED);
|
|
69
|
+
|
|
70
|
+
alphabeticalScripts.check(context, undefined);
|
|
71
|
+
|
|
72
|
+
expect(spy).toHaveBeenCalledTimes(0);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|