@neurodevs/meta-node 0.19.1 → 0.19.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/__tests__/impl/NpmWorkspaceTypeChecker.test.d.ts +4 -0
- package/build/__tests__/impl/NpmWorkspaceTypeChecker.test.js +33 -6
- package/build/__tests__/impl/NpmWorkspaceTypeChecker.test.js.map +1 -1
- package/build/impl/NpmWorkspaceTypeChecker.js +11 -2
- package/build/impl/NpmWorkspaceTypeChecker.js.map +1 -1
- package/build/testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/impl/NpmWorkspaceTypeChecker.test.ts +53 -5
- package/src/impl/NpmWorkspaceTypeChecker.ts +15 -2
- package/src/testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.ts +1 -0
|
@@ -4,11 +4,15 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
4
4
|
private static readonly workspacePath;
|
|
5
5
|
private static readonly repoName1;
|
|
6
6
|
private static readonly repoName2;
|
|
7
|
+
private static readonly fakeDir1;
|
|
8
|
+
private static readonly fakeDir2;
|
|
7
9
|
private static readonly repoPaths;
|
|
8
10
|
protected static beforeEach(): Promise<void>;
|
|
9
11
|
protected static createsInstance(): Promise<void>;
|
|
10
12
|
protected static checksTypesForAllNpmReposInWorkspacePath(): Promise<void>;
|
|
11
13
|
protected static catchesExitCodeIfThereAreTypeErrors(): Promise<void>;
|
|
14
|
+
protected static onlyChecksInDirsWithPackageJson(): Promise<void>;
|
|
15
|
+
protected static onlyChecksDirsForPackageJson(): Promise<void>;
|
|
12
16
|
private static setFakeReadDir;
|
|
13
17
|
private static setFakeExec;
|
|
14
18
|
private static NpmWorkspaceTypeChecker;
|
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { exec as execSync } from 'node:child_process';
|
|
8
8
|
import { promisify } from 'node:util';
|
|
9
|
-
import { callsToExec, fakeExec, fakeReadDir, resetCallsToExec, resetCallsToReadDir, setExecThrowsFor, setFakeReadDirResult, } from '@neurodevs/fake-node-core';
|
|
9
|
+
import { callsToExec, callsToReadDir, createFakeDir, createFakeFile, fakeExec, fakeReadDir, resetCallsToExec, resetCallsToReadDir, setExecThrowsFor, setFakeReadDirResult, } from '@neurodevs/fake-node-core';
|
|
10
10
|
import { test, assert } from '@neurodevs/node-tdd';
|
|
11
11
|
const exec = promisify(execSync);
|
|
12
12
|
import NpmWorkspaceTypeChecker from '../../impl/NpmWorkspaceTypeChecker.js';
|
|
@@ -16,6 +16,12 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
16
16
|
static workspacePath = this.generateId();
|
|
17
17
|
static repoName1 = this.generateId();
|
|
18
18
|
static repoName2 = this.generateId();
|
|
19
|
+
static fakeDir1 = createFakeDir({
|
|
20
|
+
name: this.repoName1,
|
|
21
|
+
});
|
|
22
|
+
static fakeDir2 = createFakeDir({
|
|
23
|
+
name: this.repoName2,
|
|
24
|
+
});
|
|
19
25
|
static repoPaths = [
|
|
20
26
|
`${this.workspacePath}/${this.repoName1}`,
|
|
21
27
|
`${this.workspacePath}/${this.repoName2}`,
|
|
@@ -34,20 +40,35 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
34
40
|
const calls = callsToExec.filter((call) => call.command === 'npx tsc --noEmit' &&
|
|
35
41
|
(call.options?.cwd === this.repoPaths[0] ||
|
|
36
42
|
call.options?.cwd === this.repoPaths[1]));
|
|
37
|
-
assert.isEqual(calls.length, 2, 'Failed to check types
|
|
43
|
+
assert.isEqual(calls.length, 2, 'Failed to check types!');
|
|
38
44
|
}
|
|
39
45
|
static async catchesExitCodeIfThereAreTypeErrors() {
|
|
40
46
|
setExecThrowsFor('npx tsc --noEmit');
|
|
41
47
|
await this.instance.run();
|
|
42
48
|
}
|
|
49
|
+
static async onlyChecksInDirsWithPackageJson() {
|
|
50
|
+
setFakeReadDirResult(this.repoPaths[0], []);
|
|
51
|
+
await this.instance.run();
|
|
52
|
+
const calls = callsToExec.filter((call) => call.command === 'npx tsc --noEmit');
|
|
53
|
+
assert.isEqual(calls.length, 1, 'Checked types in repo without package.json!');
|
|
54
|
+
}
|
|
55
|
+
static async onlyChecksDirsForPackageJson() {
|
|
56
|
+
const filename = this.generateId();
|
|
57
|
+
const fakeFile = createFakeFile({
|
|
58
|
+
name: filename,
|
|
59
|
+
parentPath: this.workspacePath,
|
|
60
|
+
});
|
|
61
|
+
setFakeReadDirResult(this.workspacePath, [fakeFile]);
|
|
62
|
+
await this.instance.run();
|
|
63
|
+
assert.isEqual(callsToReadDir.length, 1, 'Checked types in non-directory!');
|
|
64
|
+
}
|
|
43
65
|
static setFakeReadDir() {
|
|
44
66
|
NpmWorkspaceTypeChecker.readDir =
|
|
45
67
|
fakeReadDir;
|
|
46
68
|
resetCallsToReadDir();
|
|
47
|
-
setFakeReadDirResult(this.workspacePath, [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
]);
|
|
69
|
+
setFakeReadDirResult(this.workspacePath, [this.fakeDir1, this.fakeDir2]);
|
|
70
|
+
setFakeReadDirResult(this.repoPaths[0], ['package.json']);
|
|
71
|
+
setFakeReadDirResult(this.repoPaths[1], ['package.json']);
|
|
51
72
|
}
|
|
52
73
|
static setFakeExec() {
|
|
53
74
|
NpmWorkspaceTypeChecker.exec = fakeExec;
|
|
@@ -66,4 +87,10 @@ __decorate([
|
|
|
66
87
|
__decorate([
|
|
67
88
|
test()
|
|
68
89
|
], NpmWorkspaceTypeCheckerTest, "catchesExitCodeIfThereAreTypeErrors", null);
|
|
90
|
+
__decorate([
|
|
91
|
+
test()
|
|
92
|
+
], NpmWorkspaceTypeCheckerTest, "onlyChecksInDirsWithPackageJson", null);
|
|
93
|
+
__decorate([
|
|
94
|
+
test()
|
|
95
|
+
], NpmWorkspaceTypeCheckerTest, "onlyChecksDirsForPackageJson", null);
|
|
69
96
|
//# sourceMappingURL=NpmWorkspaceTypeChecker.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmWorkspaceTypeChecker.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmWorkspaceTypeChecker.test.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EACH,WAAW,EACX,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACvB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAElD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEhC,OAAO,uBAEN,MAAM,uCAAuC,CAAA;AAC9C,OAAO,mBAAmB,MAAM,2BAA2B,CAAA;AAE3D,MAAM,CAAC,OAAO,OAAO,2BAA4B,SAAQ,mBAAmB;IAChE,MAAM,CAAC,QAAQ,CAAsB;IAErC,MAAM,CAAU,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAEjD,MAAM,CAAU,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAC7C,MAAM,CAAU,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAE7C,MAAM,CAAU,SAAS,GAAG;QAChC,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;QACzC,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;KAC5C,CAAA;IAES,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,CAAC,WAAW,EAAE,CAAA;QAElB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAA;IAClD,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,wCAAwC;QAC3D,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QAEzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAC5B,CAAC,IAAI,EAAE,EAAE,CACL,IAAI,CAAC,OAAO,KAAK,kBAAkB;YACnC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACpC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CACnD,CAAA;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"NpmWorkspaceTypeChecker.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmWorkspaceTypeChecker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,9 +14,18 @@ export default class NpmWorkspaceTypeChecker {
|
|
|
14
14
|
}
|
|
15
15
|
async run() {
|
|
16
16
|
console.info('Starting type checking...\n');
|
|
17
|
-
const repoNames = await this.readDir(this.workspacePath
|
|
17
|
+
const repoNames = await this.readDir(this.workspacePath, {
|
|
18
|
+
withFileTypes: true,
|
|
19
|
+
});
|
|
18
20
|
for (const repoName of repoNames) {
|
|
19
|
-
|
|
21
|
+
if (!repoName.isDirectory()) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const fullRepoPath = `${this.workspacePath}/${repoName.name}`;
|
|
25
|
+
const repoContents = await this.readDir(fullRepoPath);
|
|
26
|
+
if (!repoContents.includes('package.json')) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
20
29
|
console.info(`Checking types for ${fullRepoPath}...`);
|
|
21
30
|
try {
|
|
22
31
|
await this.exec('npx tsc --noEmit', { cwd: fullRepoPath });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NpmWorkspaceTypeChecker.js","sourceRoot":"","sources":["../../src/impl/NpmWorkspaceTypeChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACjC,MAAM,CAAC,KAAK,CAAkC;IAC9C,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAEhC,aAAa,CAAQ;IAE7B,YAAsB,aAAqB;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACtC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,aAAqB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"NpmWorkspaceTypeChecker.js","sourceRoot":"","sources":["../../src/impl/NpmWorkspaceTypeChecker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,CAAC,OAAO,OAAO,uBAAuB;IACjC,MAAM,CAAC,KAAK,CAAkC;IAC9C,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAEhC,aAAa,CAAQ;IAE7B,YAAsB,aAAqB;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACtC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,aAAqB;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;IAClD,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE;YACrD,aAAa,EAAE,IAAI;SACtB,CAAC,CAAA;QAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC1B,SAAQ;YACZ,CAAC;YAED,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAA;YAE7D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAErD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACzC,SAAQ;YACZ,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,sBAAsB,YAAY,KAAK,CAAC,CAAA;YAErD,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAA;YAC9D,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,CAAC,KAAK,CAAC,wBAAwB,YAAY,GAAG,CAAC,CAAA;YAC1D,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAY,OAAO;QACf,OAAO,uBAAuB,CAAC,OAAO,CAAA;IAC1C,CAAC;IACD,IAAY,IAAI;QACZ,OAAO,uBAAuB,CAAC,IAAI,CAAA;IACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeWorkspaceTypeChecker.js","sourceRoot":"","sources":["../../../src/testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAClC,MAAM,CAAC,kBAAkB,GAA2B,EAAE,CAAA;IACtD,MAAM,CAAC,aAAa,GAAG,CAAC,CAAA;IAE/B,YAAmB,aAAsB;QACrC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnE,CAAC;
|
|
1
|
+
{"version":3,"file":"FakeWorkspaceTypeChecker.js","sourceRoot":"","sources":["../../../src/testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,wBAAwB;IAClC,MAAM,CAAC,kBAAkB,GAA2B,EAAE,CAAA;IACtD,MAAM,CAAC,aAAa,GAAG,CAAC,CAAA;IAE/B,YAAmB,aAAsB;QACrC,wBAAwB,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACnE,CAAC;IAEM,KAAK,CAAC,GAAG;QACZ,wBAAwB,CAAC,aAAa,IAAI,CAAC,CAAA;IAC/C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,wBAAwB,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAChD,wBAAwB,CAAC,aAAa,GAAG,CAAC,CAAA;IAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -4,6 +4,9 @@ import { promisify } from 'node:util'
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
callsToExec,
|
|
7
|
+
callsToReadDir,
|
|
8
|
+
createFakeDir,
|
|
9
|
+
createFakeFile,
|
|
7
10
|
fakeExec,
|
|
8
11
|
fakeReadDir,
|
|
9
12
|
resetCallsToExec,
|
|
@@ -28,6 +31,14 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
28
31
|
private static readonly repoName1 = this.generateId()
|
|
29
32
|
private static readonly repoName2 = this.generateId()
|
|
30
33
|
|
|
34
|
+
private static readonly fakeDir1 = createFakeDir({
|
|
35
|
+
name: this.repoName1,
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
private static readonly fakeDir2 = createFakeDir({
|
|
39
|
+
name: this.repoName2,
|
|
40
|
+
})
|
|
41
|
+
|
|
31
42
|
private static readonly repoPaths = [
|
|
32
43
|
`${this.workspacePath}/${this.repoName1}`,
|
|
33
44
|
`${this.workspacePath}/${this.repoName2}`,
|
|
@@ -58,7 +69,7 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
58
69
|
call.options?.cwd === this.repoPaths[1])
|
|
59
70
|
)
|
|
60
71
|
|
|
61
|
-
assert.isEqual(calls.length, 2, 'Failed to check types
|
|
72
|
+
assert.isEqual(calls.length, 2, 'Failed to check types!')
|
|
62
73
|
}
|
|
63
74
|
|
|
64
75
|
@test()
|
|
@@ -68,15 +79,52 @@ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
|
|
|
68
79
|
await this.instance.run()
|
|
69
80
|
}
|
|
70
81
|
|
|
82
|
+
@test()
|
|
83
|
+
protected static async onlyChecksInDirsWithPackageJson() {
|
|
84
|
+
setFakeReadDirResult(this.repoPaths[0], [])
|
|
85
|
+
|
|
86
|
+
await this.instance.run()
|
|
87
|
+
|
|
88
|
+
const calls = callsToExec.filter(
|
|
89
|
+
(call) => call.command === 'npx tsc --noEmit'
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
assert.isEqual(
|
|
93
|
+
calls.length,
|
|
94
|
+
1,
|
|
95
|
+
'Checked types in repo without package.json!'
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@test()
|
|
100
|
+
protected static async onlyChecksDirsForPackageJson() {
|
|
101
|
+
const filename = this.generateId()
|
|
102
|
+
|
|
103
|
+
const fakeFile = createFakeFile({
|
|
104
|
+
name: filename,
|
|
105
|
+
parentPath: this.workspacePath,
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
setFakeReadDirResult(this.workspacePath, [fakeFile])
|
|
109
|
+
|
|
110
|
+
await this.instance.run()
|
|
111
|
+
|
|
112
|
+
assert.isEqual(
|
|
113
|
+
callsToReadDir.length,
|
|
114
|
+
1,
|
|
115
|
+
'Checked types in non-directory!'
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
71
119
|
private static setFakeReadDir() {
|
|
72
120
|
NpmWorkspaceTypeChecker.readDir =
|
|
73
121
|
fakeReadDir as unknown as typeof readdir
|
|
74
122
|
resetCallsToReadDir()
|
|
75
123
|
|
|
76
|
-
setFakeReadDirResult(this.workspacePath, [
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
])
|
|
124
|
+
setFakeReadDirResult(this.workspacePath, [this.fakeDir1, this.fakeDir2])
|
|
125
|
+
|
|
126
|
+
setFakeReadDirResult(this.repoPaths[0], ['package.json'])
|
|
127
|
+
setFakeReadDirResult(this.repoPaths[1], ['package.json'])
|
|
80
128
|
}
|
|
81
129
|
|
|
82
130
|
private static setFakeExec() {
|
|
@@ -19,10 +19,23 @@ export default class NpmWorkspaceTypeChecker implements WorkspaceTypeChecker {
|
|
|
19
19
|
|
|
20
20
|
public async run() {
|
|
21
21
|
console.info('Starting type checking...\n')
|
|
22
|
-
const repoNames = await this.readDir(this.workspacePath
|
|
22
|
+
const repoNames = await this.readDir(this.workspacePath, {
|
|
23
|
+
withFileTypes: true,
|
|
24
|
+
})
|
|
23
25
|
|
|
24
26
|
for (const repoName of repoNames) {
|
|
25
|
-
|
|
27
|
+
if (!repoName.isDirectory()) {
|
|
28
|
+
continue
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const fullRepoPath = `${this.workspacePath}/${repoName.name}`
|
|
32
|
+
|
|
33
|
+
const repoContents = await this.readDir(fullRepoPath)
|
|
34
|
+
|
|
35
|
+
if (!repoContents.includes('package.json')) {
|
|
36
|
+
continue
|
|
37
|
+
}
|
|
38
|
+
|
|
26
39
|
console.info(`Checking types for ${fullRepoPath}...`)
|
|
27
40
|
|
|
28
41
|
try {
|
|
@@ -7,6 +7,7 @@ export default class FakeWorkspaceTypeChecker implements WorkspaceTypeChecker {
|
|
|
7
7
|
public constructor(workspacePath?: string) {
|
|
8
8
|
FakeWorkspaceTypeChecker.callsToConstructor.push(workspacePath)
|
|
9
9
|
}
|
|
10
|
+
|
|
10
11
|
public async run() {
|
|
11
12
|
FakeWorkspaceTypeChecker.numCallsToRun += 1
|
|
12
13
|
}
|