@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.
@@ -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 for first repo!');
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
- this.repoName1,
49
- this.repoName2,
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":"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"}
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
- const fullRepoPath = `${this.workspacePath}/${repoName}`;
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;QAExD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,aAAa,IAAI,QAAQ,EAAE,CAAA;YACxD,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
+ {"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;IACM,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/meta-node",
3
- "version": "0.19.1",
3
+ "version": "0.19.3",
4
4
  "description": "Meta-layer utilities for maintaining Node.js package ecosystems.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -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 for first repo!')
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
- this.repoName1,
78
- this.repoName2,
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
- const fullRepoPath = `${this.workspacePath}/${repoName}`
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
  }