@neurodevs/meta-node 0.18.6 → 0.19.1

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.
@@ -35,7 +35,7 @@ export default class AbstractPackageTest extends AbstractModuleTest {
35
35
  command: string;
36
36
  }[];
37
37
  protected static readonly originalKeybindingsFile: string;
38
- protected static setFakeSnippetsFile(): void;
39
38
  protected static setFakeKeybindingsFile(): void;
40
39
  protected static setFakeMetaNodeVersion(): void;
40
+ protected static setFakeSnippetsFile(): void;
41
41
  }
@@ -43,9 +43,6 @@ export default class AbstractPackageTest extends AbstractModuleTest {
43
43
  };
44
44
  static originalKeybindings = [this.originalKeybinding];
45
45
  static originalKeybindingsFile = JSON.stringify(this.originalKeybindings, null, 4);
46
- static setFakeSnippetsFile() {
47
- setFakeReadFileResult(this.snippetsPath, this.originalSnippetsFile);
48
- }
49
46
  static setFakeKeybindingsFile() {
50
47
  setFakeReadFileResult(this.keybindingsPath, this.originalKeybindingsFile);
51
48
  }
@@ -55,5 +52,8 @@ export default class AbstractPackageTest extends AbstractModuleTest {
55
52
  });
56
53
  setFakeReadFileResult(path.join(this.fakeGlobalRoot, 'node_modules', '@neurodevs', 'meta-node', 'package.json'), JSON.stringify({ version: this.metaNodeVersion }));
57
54
  }
55
+ static setFakeSnippetsFile() {
56
+ setFakeReadFileResult(this.snippetsPath, this.originalSnippetsFile);
57
+ }
58
58
  }
59
59
  //# sourceMappingURL=AbstractPackageTest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EACH,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,2BAA2B,CAAA;AAClC,OAAO,kBAAkB,MAAM,qBAAqB,CAAA;AAEpD,OAAO,aAAa,MAAM,+BAA+B,CAAA;AAGzD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,kBAAkB;IACrD,MAAM,CAAU,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAChD,MAAM,CAAU,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAC/C,MAAM,CAAU,UAAU,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,CAAA;IACvE,MAAM,CAAU,cAAc,GAAG,OAAO,CAAA,CAAC,iDAAiD;IAE1F,MAAM,CAAU,gBAAgB,GAAG,iBAAiB,CAAA;IACpD,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAClD,MAAM,CAAU,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAEnD,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;IAC5B,CAAC;IAES,MAAM,CAAC,mBAAmB,CAAC,OAA8B;QAC/D,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,UAAU;YACrB,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,YAAY,EAAE,EAAE;YAChB,eAAe,EAAE,EAAE;YACnB,GAAG,OAAO;SACb,CAAA;IACL,CAAC;IAES,MAAM,CAAC,SAAS,CAAC,KAAa;QACpC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC5C,CAAC;IAES,MAAM,CAAU,SAAS,GAAG,aAAa,CAC/C,yCAAyC,CAC5C,CAAA;IAES,MAAM,KAAK,YAAY;QAC7B,OAAO,GAAG,IAAI,CAAC,SAAS,gCAAgC,CAAA;IAC5D,CAAC;IAES,MAAM,CAAU,eAAe,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;IAE7D,MAAM,CAAU,gBAAgB,GAAG;QACzC,GAAG,IAAI,CAAC,eAAe;KAC1B,CAAA;IAES,MAAM,CAAU,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAC3D,IAAI,CAAC,gBAAgB,EACrB,IAAI,EACJ,CAAC,CACJ,CAAA;IAES,MAAM,KAAK,eAAe;QAChC,OAAO,GAAG,IAAI,CAAC,SAAS,mBAAmB,CAAA;IAC/C,CAAC;IAES,MAAM,CAAU,kBAAkB,GAAG;QAC3C,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;QACtB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;KAC7B,CAAA;IAES,MAAM,CAAU,mBAAmB,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAE/D,MAAM,CAAU,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAC9D,IAAI,CAAC,mBAAmB,EACxB,IAAI,EACJ,CAAC,CACJ,CAAA;IAES,MAAM,CAAC,mBAAmB;QAChC,qBAAqB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACvE,CAAC;IAES,MAAM,CAAC,sBAAsB;QACnC,qBAAqB,CACjB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,uBAAuB,CAC/B,CAAA;IACL,CAAC;IAES,MAAM,CAAC,sBAAsB;QACnC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,cAAc;SACH,CAAC,CAAA;QAE7B,qBAAqB,CACjB,IAAI,CAAC,IAAI,CACL,IAAI,CAAC,cAAc,EACnB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,cAAc,CACjB,EACD,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CACpD,CAAA;IACL,CAAC"}
1
+ {"version":3,"file":"AbstractPackageTest.js","sourceRoot":"","sources":["../../src/__tests__/AbstractPackageTest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import AbstractPackageTest from '../AbstractPackageTest.js';
2
+ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
3
+ private static instance;
4
+ private static readonly workspacePath;
5
+ private static readonly repoName1;
6
+ private static readonly repoName2;
7
+ private static readonly repoPaths;
8
+ protected static beforeEach(): Promise<void>;
9
+ protected static createsInstance(): Promise<void>;
10
+ protected static checksTypesForAllNpmReposInWorkspacePath(): Promise<void>;
11
+ protected static catchesExitCodeIfThereAreTypeErrors(): Promise<void>;
12
+ private static setFakeReadDir;
13
+ private static setFakeExec;
14
+ private static NpmWorkspaceTypeChecker;
15
+ }
@@ -0,0 +1,69 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { exec as execSync } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ import { callsToExec, fakeExec, fakeReadDir, resetCallsToExec, resetCallsToReadDir, setExecThrowsFor, setFakeReadDirResult, } from '@neurodevs/fake-node-core';
10
+ import { test, assert } from '@neurodevs/node-tdd';
11
+ const exec = promisify(execSync);
12
+ import NpmWorkspaceTypeChecker from '../../impl/NpmWorkspaceTypeChecker.js';
13
+ import AbstractPackageTest from '../AbstractPackageTest.js';
14
+ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
15
+ static instance;
16
+ static workspacePath = this.generateId();
17
+ static repoName1 = this.generateId();
18
+ static repoName2 = this.generateId();
19
+ static repoPaths = [
20
+ `${this.workspacePath}/${this.repoName1}`,
21
+ `${this.workspacePath}/${this.repoName2}`,
22
+ ];
23
+ static async beforeEach() {
24
+ await super.beforeEach();
25
+ this.setFakeReadDir();
26
+ this.setFakeExec();
27
+ this.instance = this.NpmWorkspaceTypeChecker();
28
+ }
29
+ static async createsInstance() {
30
+ assert.isTruthy(this.instance, 'Failed to create instance!');
31
+ }
32
+ static async checksTypesForAllNpmReposInWorkspacePath() {
33
+ await this.instance.run();
34
+ const calls = callsToExec.filter((call) => call.command === 'npx tsc --noEmit' &&
35
+ (call.options?.cwd === this.repoPaths[0] ||
36
+ call.options?.cwd === this.repoPaths[1]));
37
+ assert.isEqual(calls.length, 2, 'Failed to check types for first repo!');
38
+ }
39
+ static async catchesExitCodeIfThereAreTypeErrors() {
40
+ setExecThrowsFor('npx tsc --noEmit');
41
+ await this.instance.run();
42
+ }
43
+ static setFakeReadDir() {
44
+ NpmWorkspaceTypeChecker.readDir =
45
+ fakeReadDir;
46
+ resetCallsToReadDir();
47
+ setFakeReadDirResult(this.workspacePath, [
48
+ this.repoName1,
49
+ this.repoName2,
50
+ ]);
51
+ }
52
+ static setFakeExec() {
53
+ NpmWorkspaceTypeChecker.exec = fakeExec;
54
+ resetCallsToExec();
55
+ }
56
+ static NpmWorkspaceTypeChecker() {
57
+ return NpmWorkspaceTypeChecker.Create(this.workspacePath);
58
+ }
59
+ }
60
+ __decorate([
61
+ test()
62
+ ], NpmWorkspaceTypeCheckerTest, "createsInstance", null);
63
+ __decorate([
64
+ test()
65
+ ], NpmWorkspaceTypeCheckerTest, "checksTypesForAllNpmReposInWorkspacePath", null);
66
+ __decorate([
67
+ test()
68
+ ], NpmWorkspaceTypeCheckerTest, "catchesExitCodeIfThereAreTypeErrors", null);
69
+ //# sourceMappingURL=NpmWorkspaceTypeChecker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NpmWorkspaceTypeChecker.test.js","sourceRoot":"","sources":["../../../src/__tests__/impl/NpmWorkspaceTypeChecker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { exec as execSync } from 'node:child_process';
2
+ import { readdir } from 'node:fs/promises';
3
+ export default class NpmWorkspaceTypeChecker implements WorkspaceTypeChecker {
4
+ static Class?: WorkspaceTypeCheckerConstructor;
5
+ static readDir: typeof readdir;
6
+ static exec: typeof execSync.__promisify__;
7
+ private workspacePath;
8
+ protected constructor(workspacePath: string);
9
+ static Create(workspacePath: string): WorkspaceTypeChecker;
10
+ run(): Promise<void>;
11
+ private get readDir();
12
+ private get exec();
13
+ }
14
+ export interface WorkspaceTypeChecker {
15
+ run(): Promise<void>;
16
+ }
17
+ export type WorkspaceTypeCheckerConstructor = new (workspacePath: string) => WorkspaceTypeChecker;
@@ -0,0 +1,36 @@
1
+ import { exec as execSync } from 'node:child_process';
2
+ import { readdir } from 'node:fs/promises';
3
+ import { promisify } from 'node:util';
4
+ export default class NpmWorkspaceTypeChecker {
5
+ static Class;
6
+ static readDir = readdir;
7
+ static exec = promisify(execSync);
8
+ workspacePath;
9
+ constructor(workspacePath) {
10
+ this.workspacePath = workspacePath;
11
+ }
12
+ static Create(workspacePath) {
13
+ return new (this.Class ?? this)(workspacePath);
14
+ }
15
+ async run() {
16
+ console.info('Starting type checking...\n');
17
+ const repoNames = await this.readDir(this.workspacePath);
18
+ for (const repoName of repoNames) {
19
+ const fullRepoPath = `${this.workspacePath}/${repoName}`;
20
+ console.info(`Checking types for ${fullRepoPath}...`);
21
+ try {
22
+ await this.exec('npx tsc --noEmit', { cwd: fullRepoPath });
23
+ }
24
+ catch {
25
+ console.error(`Type errors found in ${fullRepoPath}!`);
26
+ }
27
+ }
28
+ }
29
+ get readDir() {
30
+ return NpmWorkspaceTypeChecker.readDir;
31
+ }
32
+ get exec() {
33
+ return NpmWorkspaceTypeChecker.exec;
34
+ }
35
+ }
36
+ //# sourceMappingURL=NpmWorkspaceTypeChecker.js.map
@@ -0,0 +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"}
package/build/index.d.ts CHANGED
@@ -38,3 +38,7 @@ export { default as TypescriptClassSnippetSuite } from './impl/TypescriptClassSn
38
38
  export * from './impl/TypescriptClassSnippetSuite.js';
39
39
  export { default as FakeSnippetSuite } from './testDoubles/SnippetSuite/FakeSnippetSuite.js';
40
40
  export * from './testDoubles/SnippetSuite/FakeSnippetSuite.js';
41
+ export { default as NpmWorkspaceTypeChecker } from './impl/NpmWorkspaceTypeChecker.js';
42
+ export * from './impl/NpmWorkspaceTypeChecker.js';
43
+ export { default as FakeWorkspaceTypeChecker } from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js';
44
+ export * from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js';
package/build/index.js CHANGED
@@ -47,4 +47,9 @@ export { default as TypescriptClassSnippetSuite } from './impl/TypescriptClassSn
47
47
  export * from './impl/TypescriptClassSnippetSuite.js';
48
48
  export { default as FakeSnippetSuite } from './testDoubles/SnippetSuite/FakeSnippetSuite.js';
49
49
  export * from './testDoubles/SnippetSuite/FakeSnippetSuite.js';
50
+ // WorkspaceTypeChecker
51
+ export { default as NpmWorkspaceTypeChecker } from './impl/NpmWorkspaceTypeChecker.js';
52
+ export * from './impl/NpmWorkspaceTypeChecker.js';
53
+ export { default as FakeWorkspaceTypeChecker } from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js';
54
+ export * from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js';
50
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,iBAAiB;AAEjB,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAClF,cAAc,iCAAiC,CAAA;AAE/C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oDAAoD,CAAA;AAClG,cAAc,oDAAoD,CAAA;AAElE,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC5E,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAChE,cAAc,wBAAwB,CAAA;AAEtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,yBAAyB;AAEzB,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC1F,cAAc,qCAAqC,CAAA;AAEnD,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oEAAoE,CAAA;AAC1H,cAAc,oEAAoE,CAAA;AAElF,oBAAoB;AAEpB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,gCAAgC,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,mBAAmB;AAEnB,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACpF,cAAc,kCAAkC,CAAA;AAEhD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wDAAwD,CAAA;AACxG,cAAc,wDAAwD,CAAA;AAEtE,eAAe;AAEf,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,uCAAuC,CAAA;AAC9F,cAAc,uCAAuC,CAAA;AAErD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAC5F,cAAc,gDAAgD,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAClE,cAAc,yBAAyB,CAAA;AAEvC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,iBAAiB;AAEjB,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAClF,cAAc,iCAAiC,CAAA;AAE/C,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oDAAoD,CAAA;AAClG,cAAc,oDAAoD,CAAA;AAElE,aAAa;AAEb,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC5E,cAAc,8BAA8B,CAAA;AAE5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAChE,cAAc,wBAAwB,CAAA;AAEtC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,4CAA4C,CAAA;AACtF,cAAc,4CAA4C,CAAA;AAE1D,cAAc;AAEd,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACpE,cAAc,0BAA0B,CAAA;AAExC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,8CAA8C,CAAA;AACzF,cAAc,8CAA8C,CAAA;AAE5D,yBAAyB;AAEzB,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC1F,cAAc,qCAAqC,CAAA;AAEnD,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,oEAAoE,CAAA;AAC1H,cAAc,oEAAoE,CAAA;AAElF,oBAAoB;AAEpB,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;AAChF,cAAc,gCAAgC,CAAA;AAE9C,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,0DAA0D,CAAA;AAC3G,cAAc,0DAA0D,CAAA;AAExE,mBAAmB;AAEnB,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACpF,cAAc,kCAAkC,CAAA;AAEhD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wDAAwD,CAAA;AACxG,cAAc,wDAAwD,CAAA;AAEtE,eAAe;AAEf,OAAO,EAAE,OAAO,IAAI,2BAA2B,EAAE,MAAM,uCAAuC,CAAA;AAC9F,cAAc,uCAAuC,CAAA;AAErD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gDAAgD,CAAA;AAC5F,cAAc,gDAAgD,CAAA;AAE9D,uBAAuB;AAEvB,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AACtF,cAAc,mCAAmC,CAAA;AAEjD,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,gEAAgE,CAAA;AACpH,cAAc,gEAAgE,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { WorkspaceTypeChecker } from '../../impl/NpmWorkspaceTypeChecker.js';
2
+ export default class FakeWorkspaceTypeChecker implements WorkspaceTypeChecker {
3
+ static callsToConstructor: (string | undefined)[];
4
+ static numCallsToRun: number;
5
+ constructor(workspacePath?: string);
6
+ run(): Promise<void>;
7
+ static resetTestDouble(): void;
8
+ }
@@ -0,0 +1,15 @@
1
+ export default class FakeWorkspaceTypeChecker {
2
+ static callsToConstructor = [];
3
+ static numCallsToRun = 0;
4
+ constructor(workspacePath) {
5
+ FakeWorkspaceTypeChecker.callsToConstructor.push(workspacePath);
6
+ }
7
+ async run() {
8
+ FakeWorkspaceTypeChecker.numCallsToRun += 1;
9
+ }
10
+ static resetTestDouble() {
11
+ FakeWorkspaceTypeChecker.callsToConstructor = [];
12
+ FakeWorkspaceTypeChecker.numCallsToRun = 0;
13
+ }
14
+ }
15
+ //# sourceMappingURL=FakeWorkspaceTypeChecker.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/meta-node",
3
- "version": "0.18.6",
3
+ "version": "0.19.1",
4
4
  "description": "Meta-layer utilities for maintaining Node.js package ecosystems.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -74,10 +74,6 @@ export default class AbstractPackageTest extends AbstractModuleTest {
74
74
  4
75
75
  )
76
76
 
77
- protected static setFakeSnippetsFile() {
78
- setFakeReadFileResult(this.snippetsPath, this.originalSnippetsFile)
79
- }
80
-
81
77
  protected static setFakeKeybindingsFile() {
82
78
  setFakeReadFileResult(
83
79
  this.keybindingsPath,
@@ -101,4 +97,8 @@ export default class AbstractPackageTest extends AbstractModuleTest {
101
97
  JSON.stringify({ version: this.metaNodeVersion })
102
98
  )
103
99
  }
100
+
101
+ protected static setFakeSnippetsFile() {
102
+ setFakeReadFileResult(this.snippetsPath, this.originalSnippetsFile)
103
+ }
104
104
  }
@@ -0,0 +1,90 @@
1
+ import { exec as execSync } from 'node:child_process'
2
+ import { readdir } from 'node:fs/promises'
3
+ import { promisify } from 'node:util'
4
+
5
+ import {
6
+ callsToExec,
7
+ fakeExec,
8
+ fakeReadDir,
9
+ resetCallsToExec,
10
+ resetCallsToReadDir,
11
+ setExecThrowsFor,
12
+ setFakeReadDirResult,
13
+ } from '@neurodevs/fake-node-core'
14
+ import { test, assert } from '@neurodevs/node-tdd'
15
+
16
+ const exec = promisify(execSync)
17
+
18
+ import NpmWorkspaceTypeChecker, {
19
+ WorkspaceTypeChecker,
20
+ } from '../../impl/NpmWorkspaceTypeChecker.js'
21
+ import AbstractPackageTest from '../AbstractPackageTest.js'
22
+
23
+ export default class NpmWorkspaceTypeCheckerTest extends AbstractPackageTest {
24
+ private static instance: WorkspaceTypeChecker
25
+
26
+ private static readonly workspacePath = this.generateId()
27
+
28
+ private static readonly repoName1 = this.generateId()
29
+ private static readonly repoName2 = this.generateId()
30
+
31
+ private static readonly repoPaths = [
32
+ `${this.workspacePath}/${this.repoName1}`,
33
+ `${this.workspacePath}/${this.repoName2}`,
34
+ ]
35
+
36
+ protected static async beforeEach() {
37
+ await super.beforeEach()
38
+
39
+ this.setFakeReadDir()
40
+ this.setFakeExec()
41
+
42
+ this.instance = this.NpmWorkspaceTypeChecker()
43
+ }
44
+
45
+ @test()
46
+ protected static async createsInstance() {
47
+ assert.isTruthy(this.instance, 'Failed to create instance!')
48
+ }
49
+
50
+ @test()
51
+ protected static async checksTypesForAllNpmReposInWorkspacePath() {
52
+ await this.instance.run()
53
+
54
+ const calls = callsToExec.filter(
55
+ (call) =>
56
+ call.command === 'npx tsc --noEmit' &&
57
+ (call.options?.cwd === this.repoPaths[0] ||
58
+ call.options?.cwd === this.repoPaths[1])
59
+ )
60
+
61
+ assert.isEqual(calls.length, 2, 'Failed to check types for first repo!')
62
+ }
63
+
64
+ @test()
65
+ protected static async catchesExitCodeIfThereAreTypeErrors() {
66
+ setExecThrowsFor('npx tsc --noEmit')
67
+
68
+ await this.instance.run()
69
+ }
70
+
71
+ private static setFakeReadDir() {
72
+ NpmWorkspaceTypeChecker.readDir =
73
+ fakeReadDir as unknown as typeof readdir
74
+ resetCallsToReadDir()
75
+
76
+ setFakeReadDirResult(this.workspacePath, [
77
+ this.repoName1,
78
+ this.repoName2,
79
+ ])
80
+ }
81
+
82
+ private static setFakeExec() {
83
+ NpmWorkspaceTypeChecker.exec = fakeExec as unknown as typeof exec
84
+ resetCallsToExec()
85
+ }
86
+
87
+ private static NpmWorkspaceTypeChecker() {
88
+ return NpmWorkspaceTypeChecker.Create(this.workspacePath)
89
+ }
90
+ }
@@ -0,0 +1,50 @@
1
+ import { exec as execSync } from 'node:child_process'
2
+ import { readdir } from 'node:fs/promises'
3
+ import { promisify } from 'node:util'
4
+
5
+ export default class NpmWorkspaceTypeChecker implements WorkspaceTypeChecker {
6
+ public static Class?: WorkspaceTypeCheckerConstructor
7
+ public static readDir = readdir
8
+ public static exec = promisify(execSync)
9
+
10
+ private workspacePath: string
11
+
12
+ protected constructor(workspacePath: string) {
13
+ this.workspacePath = workspacePath
14
+ }
15
+
16
+ public static Create(workspacePath: string) {
17
+ return new (this.Class ?? this)(workspacePath)
18
+ }
19
+
20
+ public async run() {
21
+ console.info('Starting type checking...\n')
22
+ const repoNames = await this.readDir(this.workspacePath)
23
+
24
+ for (const repoName of repoNames) {
25
+ const fullRepoPath = `${this.workspacePath}/${repoName}`
26
+ console.info(`Checking types for ${fullRepoPath}...`)
27
+
28
+ try {
29
+ await this.exec('npx tsc --noEmit', { cwd: fullRepoPath })
30
+ } catch {
31
+ console.error(`Type errors found in ${fullRepoPath}!`)
32
+ }
33
+ }
34
+ }
35
+
36
+ private get readDir() {
37
+ return NpmWorkspaceTypeChecker.readDir
38
+ }
39
+ private get exec() {
40
+ return NpmWorkspaceTypeChecker.exec
41
+ }
42
+ }
43
+
44
+ export interface WorkspaceTypeChecker {
45
+ run(): Promise<void>
46
+ }
47
+
48
+ export type WorkspaceTypeCheckerConstructor = new (
49
+ workspacePath: string
50
+ ) => WorkspaceTypeChecker
package/src/index.ts CHANGED
@@ -75,3 +75,11 @@ export * from './impl/TypescriptClassSnippetSuite.js'
75
75
 
76
76
  export { default as FakeSnippetSuite } from './testDoubles/SnippetSuite/FakeSnippetSuite.js'
77
77
  export * from './testDoubles/SnippetSuite/FakeSnippetSuite.js'
78
+
79
+ // WorkspaceTypeChecker
80
+
81
+ export { default as NpmWorkspaceTypeChecker } from './impl/NpmWorkspaceTypeChecker.js'
82
+ export * from './impl/NpmWorkspaceTypeChecker.js'
83
+
84
+ export { default as FakeWorkspaceTypeChecker } from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js'
85
+ export * from './testDoubles/WorkspaceTypeChecker/FakeWorkspaceTypeChecker.js'
@@ -0,0 +1,18 @@
1
+ import { WorkspaceTypeChecker } from '../../impl/NpmWorkspaceTypeChecker.js'
2
+
3
+ export default class FakeWorkspaceTypeChecker implements WorkspaceTypeChecker {
4
+ public static callsToConstructor: (string | undefined)[] = []
5
+ public static numCallsToRun = 0
6
+
7
+ public constructor(workspacePath?: string) {
8
+ FakeWorkspaceTypeChecker.callsToConstructor.push(workspacePath)
9
+ }
10
+ public async run() {
11
+ FakeWorkspaceTypeChecker.numCallsToRun += 1
12
+ }
13
+
14
+ public static resetTestDouble() {
15
+ FakeWorkspaceTypeChecker.callsToConstructor = []
16
+ FakeWorkspaceTypeChecker.numCallsToRun = 0
17
+ }
18
+ }