@neurodevs/meta-node 0.5.0 → 0.6.0

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.
Files changed (34) hide show
  1. package/build/__tests__/modules/ImplAutomodule.test.d.ts +11 -2
  2. package/build/__tests__/modules/ImplAutomodule.test.js +72 -2
  3. package/build/__tests__/modules/ImplAutomodule.test.js.map +1 -1
  4. package/build/__tests__/modules/PackageAutodocumenter.test.d.ts +7 -0
  5. package/build/__tests__/modules/PackageAutodocumenter.test.js +63 -0
  6. package/build/__tests__/modules/PackageAutodocumenter.test.js.map +1 -0
  7. package/build/index.d.ts +6 -0
  8. package/build/index.js +11 -1
  9. package/build/index.js.map +1 -1
  10. package/build/modules/ImplAutomodule.d.ts +15 -1
  11. package/build/modules/ImplAutomodule.js +64 -3
  12. package/build/modules/ImplAutomodule.js.map +1 -1
  13. package/build/modules/PackageAutodocumenter.d.ts +8 -0
  14. package/build/modules/PackageAutodocumenter.js +10 -0
  15. package/build/modules/PackageAutodocumenter.js.map +1 -0
  16. package/build/scripts/runAutomodule.js +3 -2
  17. package/build/scripts/runAutomodule.js.map +1 -1
  18. package/build/testDoubles/Autodocumenter/FakeAutodocumenter.d.ts +6 -0
  19. package/build/testDoubles/Autodocumenter/FakeAutodocumenter.js +13 -0
  20. package/build/testDoubles/Autodocumenter/FakeAutodocumenter.js.map +1 -0
  21. package/build/testDoubles/fs/fakeReadFile.d.ts +5 -0
  22. package/build/testDoubles/fs/fakeReadFile.js +20 -0
  23. package/build/testDoubles/fs/fakeReadFile.js.map +1 -0
  24. package/build/testDoubles/fs/fakeWriteFile.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/__tests__/modules/ImplAutomodule.test.ts +93 -3
  27. package/src/__tests__/modules/PackageAutodocumenter.test.ts +23 -0
  28. package/src/index.ts +11 -0
  29. package/src/modules/ImplAutomodule.ts +87 -6
  30. package/src/modules/PackageAutodocumenter.ts +13 -0
  31. package/src/scripts/runAutomodule.ts +4 -2
  32. package/src/testDoubles/Autodocumenter/FakeAutodocumenter.ts +13 -0
  33. package/src/testDoubles/fs/fakeReadFile.ts +18 -0
  34. package/src/testDoubles/fs/fakeWriteFile.ts +4 -1
@@ -5,16 +5,25 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
5
5
  protected static createsInstance(): Promise<void>;
6
6
  protected static runThrowsIfTestSaveDirMissing(): Promise<void>;
7
7
  protected static runThrowsIfModuleSaveDirMissing(): Promise<void>;
8
+ protected static runThrowsIfFakeSaveDirMissing(): Promise<void>;
8
9
  protected static createsTestFileAsExpected(): Promise<void>;
9
10
  protected static createsModuleFileAsExpected(): Promise<void>;
11
+ protected static createsFakeFileAsExpected(): Promise<void>;
12
+ protected static updatesIndexFileExports(): Promise<void>;
10
13
  private static run;
11
14
  private static setFakePathExists;
15
+ private static setFakeReadFile;
12
16
  private static setFakeWriteFile;
13
- private static readonly testSaveDir;
14
- private static readonly moduleSaveDir;
15
17
  private static readonly interfaceName;
16
18
  private static readonly implName;
19
+ private static readonly testSaveDir;
20
+ private static readonly moduleSaveDir;
21
+ private static readonly fakeSaveDir;
17
22
  private static get testFilePattern();
18
23
  private static get moduleFilePattern();
24
+ private static get fakeFilePattern();
25
+ private static readonly indexFilePath;
26
+ private static readonly originalIndexFile;
27
+ private static get indexFilePattern();
19
28
  private static ImplAutomodule;
20
29
  }
@@ -45,11 +45,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
45
45
  const test_utils_1 = __importStar(require("@sprucelabs/test-utils"));
46
46
  const ImplAutomodule_1 = __importDefault(require("../../modules/ImplAutomodule"));
47
47
  const fakePathExists_1 = __importStar(require("../../testDoubles/fs/fakePathExists"));
48
+ const fakeReadFile_1 = __importStar(require("../../testDoubles/fs/fakeReadFile"));
48
49
  const fakeWriteFile_1 = __importStar(require("../../testDoubles/fs/fakeWriteFile"));
49
50
  class ImplAutomoduleTest extends test_utils_1.default {
50
51
  static async beforeEach() {
51
52
  await super.beforeEach();
52
53
  this.setFakePathExists();
54
+ this.setFakeReadFile();
53
55
  this.setFakeWriteFile();
54
56
  this.instance = this.ImplAutomodule();
55
57
  }
@@ -66,6 +68,11 @@ class ImplAutomoduleTest extends test_utils_1.default {
66
68
  const err = await test_utils_1.assert.doesThrowAsync(async () => await this.run());
67
69
  test_utils_1.assert.isEqual(err.message, `moduleSaveDir does not exist: ${this.moduleSaveDir}!`, 'Did not receive the expected error!');
68
70
  }
71
+ static async runThrowsIfFakeSaveDirMissing() {
72
+ (0, fakePathExists_1.setPathShouldExist)(this.fakeSaveDir, false);
73
+ const err = await test_utils_1.assert.doesThrowAsync(async () => await this.run());
74
+ test_utils_1.assert.isEqual(err.message, `fakeSaveDir does not exist: ${this.fakeSaveDir}!`, 'Did not receive the expected error!');
75
+ }
69
76
  static async createsTestFileAsExpected() {
70
77
  await this.run();
71
78
  test_utils_1.assert.isEqualDeep(fakeWriteFile_1.callsToWriteFile[0], {
@@ -80,6 +87,20 @@ class ImplAutomoduleTest extends test_utils_1.default {
80
87
  data: this.moduleFilePattern,
81
88
  }, 'Did not write expected module file!');
82
89
  }
90
+ static async createsFakeFileAsExpected() {
91
+ await this.run();
92
+ test_utils_1.assert.isEqualDeep(fakeWriteFile_1.callsToWriteFile[2], {
93
+ file: `${this.fakeSaveDir}/Fake${this.interfaceName}.ts`,
94
+ data: this.fakeFilePattern,
95
+ }, 'Did not write expected fake file!');
96
+ }
97
+ static async updatesIndexFileExports() {
98
+ await this.run();
99
+ test_utils_1.assert.isEqualDeep(fakeWriteFile_1.callsToWriteFile[3], {
100
+ file: this.indexFilePath,
101
+ data: this.indexFilePattern,
102
+ }, 'Did not update index file as expected!');
103
+ }
83
104
  static async run() {
84
105
  return await this.instance.run();
85
106
  }
@@ -87,6 +108,12 @@ class ImplAutomoduleTest extends test_utils_1.default {
87
108
  ImplAutomodule_1.default.pathExists = fakePathExists_1.default;
88
109
  (0, fakePathExists_1.setPathShouldExist)(this.testSaveDir, true);
89
110
  (0, fakePathExists_1.setPathShouldExist)(this.moduleSaveDir, true);
111
+ (0, fakePathExists_1.setPathShouldExist)(this.fakeSaveDir, true);
112
+ (0, fakePathExists_1.setPathShouldExist)(this.indexFilePath, true);
113
+ }
114
+ static setFakeReadFile() {
115
+ ImplAutomodule_1.default.readFile = fakeReadFile_1.default;
116
+ (0, fakeReadFile_1.resetCallsToReadFile)();
90
117
  }
91
118
  static setFakeWriteFile() {
92
119
  ImplAutomodule_1.default.writeFile = fakeWriteFile_1.default;
@@ -134,19 +161,53 @@ class ImplAutomoduleTest extends test_utils_1.default {
134
161
  export type ${this.interfaceName}Constructor = new () => ${this.interfaceName}
135
162
  `;
136
163
  }
164
+ static get fakeFilePattern() {
165
+ return `
166
+ import { ${this.interfaceName} } from '../../modules/${this.implName}'
167
+
168
+ export default class Fake${this.interfaceName} implements ${this.interfaceName} {
169
+ public static numCallsToConstructor = 0
170
+
171
+ public constructor() {
172
+ Fake${this.interfaceName}.numCallsToConstructor++
173
+ }
174
+
175
+ public static resetTestDouble() {
176
+ Fake${this.interfaceName}.numCallsToConstructor = 0
177
+ }
178
+ }
179
+ `;
180
+ }
181
+ static get indexFilePattern() {
182
+ return `
183
+ ${this.originalIndexFile}
184
+
185
+ // ${this.interfaceName}
186
+
187
+ export { default as ${this.implName} } from './modules/${this.implName}'
188
+ export * from './modules/${this.implName}'
189
+
190
+ export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
191
+ export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
192
+ `;
193
+ }
137
194
  static ImplAutomodule() {
138
195
  return ImplAutomodule_1.default.Create({
139
196
  testSaveDir: this.testSaveDir,
140
197
  moduleSaveDir: this.moduleSaveDir,
198
+ fakeSaveDir: this.fakeSaveDir,
141
199
  interfaceName: this.interfaceName,
142
200
  implName: this.implName,
143
201
  });
144
202
  }
145
203
  }
146
- ImplAutomoduleTest.testSaveDir = (0, test_utils_1.generateId)();
147
- ImplAutomoduleTest.moduleSaveDir = (0, test_utils_1.generateId)();
148
204
  ImplAutomoduleTest.interfaceName = (0, test_utils_1.generateId)();
149
205
  ImplAutomoduleTest.implName = (0, test_utils_1.generateId)();
206
+ ImplAutomoduleTest.testSaveDir = (0, test_utils_1.generateId)();
207
+ ImplAutomoduleTest.moduleSaveDir = (0, test_utils_1.generateId)();
208
+ ImplAutomoduleTest.fakeSaveDir = (0, test_utils_1.generateId)();
209
+ ImplAutomoduleTest.indexFilePath = './src/index.ts';
210
+ ImplAutomoduleTest.originalIndexFile = fakeReadFile_1.fakeReadFileResult;
150
211
  exports.default = ImplAutomoduleTest;
151
212
  __decorate([
152
213
  (0, test_utils_1.test)()
@@ -157,10 +218,19 @@ __decorate([
157
218
  __decorate([
158
219
  (0, test_utils_1.test)()
159
220
  ], ImplAutomoduleTest, "runThrowsIfModuleSaveDirMissing", null);
221
+ __decorate([
222
+ (0, test_utils_1.test)()
223
+ ], ImplAutomoduleTest, "runThrowsIfFakeSaveDirMissing", null);
160
224
  __decorate([
161
225
  (0, test_utils_1.test)()
162
226
  ], ImplAutomoduleTest, "createsTestFileAsExpected", null);
163
227
  __decorate([
164
228
  (0, test_utils_1.test)()
165
229
  ], ImplAutomoduleTest, "createsModuleFileAsExpected", null);
230
+ __decorate([
231
+ (0, test_utils_1.test)()
232
+ ], ImplAutomoduleTest, "createsFakeFileAsExpected", null);
233
+ __decorate([
234
+ (0, test_utils_1.test)()
235
+ ], ImplAutomoduleTest, "updatesIndexFileExports", null);
166
236
  //# sourceMappingURL=ImplAutomodule.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImplAutomodule.test.js","sourceRoot":"","sources":["../../../src/__tests__/modules/ImplAutomodule.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qEAI+B;AAC/B,kFAAyE;AACzE,sFAE4C;AAC5C,oFAG2C;AAE3C,MAAqB,kBAAmB,SAAQ,oBAAkB;IAGpD,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAA;QAEvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAA;IACzC,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,mBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,6BAA6B;QAChD,IAAA,mCAAkB,EAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAE3C,MAAM,GAAG,GAAG,MAAM,mBAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAErE,mBAAM,CAAC,OAAO,CACV,GAAG,CAAC,OAAO,EACX,+BAA+B,IAAI,CAAC,WAAW,GAAG,EAClD,qCAAqC,CACxC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,+BAA+B;QAClD,IAAA,mCAAkB,EAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;QAE7C,MAAM,GAAG,GAAG,MAAM,mBAAM,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAErE,mBAAM,CAAC,OAAO,CACV,GAAG,CAAC,OAAO,EACX,iCAAiC,IAAI,CAAC,aAAa,GAAG,EACtD,qCAAqC,CACxC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,yBAAyB;QAC5C,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;QAEhB,mBAAM,CAAC,WAAW,CACd,gCAAgB,CAAC,CAAC,CAAC,EACnB;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,UAAU;YACpD,IAAI,EAAE,IAAI,CAAC,eAAe;SAC7B,EACD,mCAAmC,CACtC,CAAA;IACL,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,2BAA2B;QAC9C,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;QAEhB,mBAAM,CAAC,WAAW,CACd,gCAAgB,CAAC,CAAC,CAAC,EACnB;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,KAAK;YACjD,IAAI,EAAE,IAAI,CAAC,iBAAiB;SAC/B,EACD,qCAAqC,CACxC,CAAA;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,GAAG;QACpB,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IACpC,CAAC;IAEO,MAAM,CAAC,iBAAiB;QAC5B,wBAAc,CAAC,UAAU,GAAG,wBAAc,CAAA;QAE1C,IAAA,mCAAkB,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;QAC1C,IAAA,mCAAkB,EAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAChD,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC3B,wBAAc,CAAC,SAAS,GAAG,uBAAiC,CAAA;QAC5D,IAAA,qCAAqB,GAAE,CAAA;IAC3B,CAAC;IAOO,MAAM,KAAK,eAAe;QAC9B,OAAO;;qBAEM,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,aAAa,0BAA0B,IAAI,CAAC,QAAQ;;mCAE/D,IAAI,CAAC,QAAQ;2CACL,IAAI,CAAC,aAAa;;;;;2CAKlB,IAAI,CAAC,QAAQ;;;;;;;;iCAQvB,IAAI,CAAC,QAAQ;6BACjB,IAAI,CAAC,QAAQ;;;SAGjC,CAAA;IACL,CAAC;IAEO,MAAM,KAAK,iBAAiB;QAChC,OAAO;mCACoB,IAAI,CAAC,QAAQ,eAAe,IAAI,CAAC,aAAa;wCACzC,IAAI,CAAC,aAAa;;;;;;;;;+BAS3B,IAAI,CAAC,aAAa;;0BAEvB,IAAI,CAAC,aAAa,2BAA2B,IAAI,CAAC,aAAa;SAChF,CAAA;IACL,CAAC;IAEO,MAAM,CAAC,cAAc;QACzB,OAAO,wBAAc,CAAC,MAAM,CAAC;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAA;IACN,CAAC;;AAxDuB,8BAAW,GAAG,IAAA,uBAAU,GAAE,CAAA;AAC1B,gCAAa,GAAG,IAAA,uBAAU,GAAE,CAAA;AAC5B,gCAAa,GAAG,IAAA,uBAAU,GAAE,CAAA;AAC5B,2BAAQ,GAAG,IAAA,uBAAU,GAAE,CAAA;kBA1F9B,kBAAkB;AAaZ;IADtB,IAAA,iBAAI,GAAE;+CAGN;AAGsB;IADtB,IAAA,iBAAI,GAAE;6DAWN;AAGsB;IADtB,IAAA,iBAAI,GAAE;+DAWN;AAGsB;IADtB,IAAA,iBAAI,GAAE;yDAYN;AAGsB;IADtB,IAAA,iBAAI,GAAE;2DAYN"}
1
+ {"version":3,"file":"ImplAutomodule.test.js","sourceRoot":"","sources":["../../../src/__tests__/modules/ImplAutomodule.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import AbstractSpruceTest from '@sprucelabs/test-utils';
2
+ export default class PackageAutodocumenterTest extends AbstractSpruceTest {
3
+ private static instance;
4
+ protected static beforeEach(): Promise<void>;
5
+ protected static createsInstance(): Promise<void>;
6
+ private static PackageAutodocumenter;
7
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ const test_utils_1 = __importStar(require("@sprucelabs/test-utils"));
46
+ const PackageAutodocumenter_1 = __importDefault(require("../../modules/PackageAutodocumenter"));
47
+ class PackageAutodocumenterTest extends test_utils_1.default {
48
+ static async beforeEach() {
49
+ await super.beforeEach();
50
+ this.instance = this.PackageAutodocumenter();
51
+ }
52
+ static async createsInstance() {
53
+ test_utils_1.assert.isTruthy(this.instance, 'Failed to create instance!');
54
+ }
55
+ static PackageAutodocumenter() {
56
+ return PackageAutodocumenter_1.default.Create();
57
+ }
58
+ }
59
+ exports.default = PackageAutodocumenterTest;
60
+ __decorate([
61
+ (0, test_utils_1.test)()
62
+ ], PackageAutodocumenterTest, "createsInstance", null);
63
+ //# sourceMappingURL=PackageAutodocumenter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageAutodocumenter.test.js","sourceRoot":"","sources":["../../../src/__tests__/modules/PackageAutodocumenter.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAAyE;AACzE,gGAE4C;AAE5C,MAAqB,yBAA0B,SAAQ,oBAAkB;IAG3D,MAAM,CAAC,KAAK,CAAC,UAAU;QAC7B,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QAExB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;IAChD,CAAC;IAGsB,AAAb,MAAM,CAAC,KAAK,CAAC,eAAe;QAClC,mBAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAEO,MAAM,CAAC,qBAAqB;QAChC,OAAO,+BAAqB,CAAC,MAAM,EAAE,CAAA;IACzC,CAAC;CACJ;AAjBD,4CAiBC;AAP0B;IADtB,IAAA,iBAAI,GAAE;sDAGN"}
package/build/index.d.ts CHANGED
@@ -2,6 +2,10 @@ export { default as GitAutocloner } from './modules/GitAutocloner';
2
2
  export * from './modules/GitAutocloner';
3
3
  export { default as FakeAutocloner } from './testDoubles/Autocloner/FakeAutocloner';
4
4
  export * from './testDoubles/Autocloner/FakeAutocloner';
5
+ export { default as PackageAutodocumenter } from './modules/PackageAutodocumenter';
6
+ export * from './modules/PackageAutodocumenter';
7
+ export { default as FakeAutodocumenter } from './testDoubles/Autodocumenter/FakeAutodocumenter';
8
+ export * from './testDoubles/Autodocumenter/FakeAutodocumenter';
5
9
  export { default as ImplAutomodule } from './modules/ImplAutomodule';
6
10
  export * from './modules/ImplAutomodule';
7
11
  export { default as FakeAutomodule } from './testDoubles/Automodule/FakeAutomodule';
@@ -12,5 +16,7 @@ export { default as FakeAutopackage } from './testDoubles/Autopackage/FakeAutopa
12
16
  export * from './testDoubles/Autopackage/FakeAutopackage';
13
17
  export { default as fakePathExists } from './testDoubles/fs/fakePathExists';
14
18
  export * from './testDoubles/fs/fakePathExists';
19
+ export { default as fakeReadFile } from './testDoubles/fs/fakeReadFile';
20
+ export * from './testDoubles/fs/fakeReadFile';
15
21
  export { default as fakeWriteFile } from './testDoubles/fs/fakeWriteFile';
16
22
  export * from './testDoubles/fs/fakeWriteFile';
package/build/index.js CHANGED
@@ -18,13 +18,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
18
18
  return (mod && mod.__esModule) ? mod : { "default": mod };
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.fakeWriteFile = exports.fakePathExists = exports.FakeAutopackage = exports.NpmAutopackage = exports.FakeAutomodule = exports.ImplAutomodule = exports.FakeAutocloner = exports.GitAutocloner = void 0;
21
+ exports.fakeWriteFile = exports.fakeReadFile = exports.fakePathExists = exports.FakeAutopackage = exports.NpmAutopackage = exports.FakeAutomodule = exports.ImplAutomodule = exports.FakeAutodocumenter = exports.PackageAutodocumenter = exports.FakeAutocloner = exports.GitAutocloner = void 0;
22
22
  var GitAutocloner_1 = require("./modules/GitAutocloner");
23
23
  Object.defineProperty(exports, "GitAutocloner", { enumerable: true, get: function () { return __importDefault(GitAutocloner_1).default; } });
24
24
  __exportStar(require("./modules/GitAutocloner"), exports);
25
25
  var FakeAutocloner_1 = require("./testDoubles/Autocloner/FakeAutocloner");
26
26
  Object.defineProperty(exports, "FakeAutocloner", { enumerable: true, get: function () { return __importDefault(FakeAutocloner_1).default; } });
27
27
  __exportStar(require("./testDoubles/Autocloner/FakeAutocloner"), exports);
28
+ // Autodocumenter
29
+ var PackageAutodocumenter_1 = require("./modules/PackageAutodocumenter");
30
+ Object.defineProperty(exports, "PackageAutodocumenter", { enumerable: true, get: function () { return __importDefault(PackageAutodocumenter_1).default; } });
31
+ __exportStar(require("./modules/PackageAutodocumenter"), exports);
32
+ var FakeAutodocumenter_1 = require("./testDoubles/Autodocumenter/FakeAutodocumenter");
33
+ Object.defineProperty(exports, "FakeAutodocumenter", { enumerable: true, get: function () { return __importDefault(FakeAutodocumenter_1).default; } });
34
+ __exportStar(require("./testDoubles/Autodocumenter/FakeAutodocumenter"), exports);
28
35
  // Automodule
29
36
  var ImplAutomodule_1 = require("./modules/ImplAutomodule");
30
37
  Object.defineProperty(exports, "ImplAutomodule", { enumerable: true, get: function () { return __importDefault(ImplAutomodule_1).default; } });
@@ -43,6 +50,9 @@ __exportStar(require("./testDoubles/Autopackage/FakeAutopackage"), exports);
43
50
  var fakePathExists_1 = require("./testDoubles/fs/fakePathExists");
44
51
  Object.defineProperty(exports, "fakePathExists", { enumerable: true, get: function () { return __importDefault(fakePathExists_1).default; } });
45
52
  __exportStar(require("./testDoubles/fs/fakePathExists"), exports);
53
+ var fakeReadFile_1 = require("./testDoubles/fs/fakeReadFile");
54
+ Object.defineProperty(exports, "fakeReadFile", { enumerable: true, get: function () { return __importDefault(fakeReadFile_1).default; } });
55
+ __exportStar(require("./testDoubles/fs/fakeReadFile"), exports);
46
56
  var fakeWriteFile_1 = require("./testDoubles/fs/fakeWriteFile");
47
57
  Object.defineProperty(exports, "fakeWriteFile", { enumerable: true, get: function () { return __importDefault(fakeWriteFile_1).default; } });
48
58
  __exportStar(require("./testDoubles/fs/fakeWriteFile"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,aAAa;;;;;;;;;;;;;;;;;;;;AAEb,yDAAkE;AAAzD,+HAAA,OAAO,OAAiB;AACjC,0DAAuC;AAEvC,0EAAmF;AAA1E,iIAAA,OAAO,OAAkB;AAClC,0EAAuD;AAEvD,aAAa;AAEb,2DAAoE;AAA3D,iIAAA,OAAO,OAAkB;AAClC,2DAAwC;AAExC,0EAAmF;AAA1E,iIAAA,OAAO,OAAkB;AAClC,0EAAuD;AAEvD,cAAc;AAEd,2DAAoE;AAA3D,iIAAA,OAAO,OAAkB;AAClC,2DAAwC;AAExC,6EAAsF;AAA7E,mIAAA,OAAO,OAAmB;AACnC,4EAAyD;AAEzD,KAAK;AAEL,kEAA2E;AAAlE,iIAAA,OAAO,OAAkB;AAClC,kEAA+C;AAE/C,gEAAyE;AAAhE,+HAAA,OAAO,OAAiB;AACjC,iEAA8C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,aAAa;;;;;;;;;;;;;;;;;;;;AAEb,yDAAkE;AAAzD,+HAAA,OAAO,OAAiB;AACjC,0DAAuC;AAEvC,0EAAmF;AAA1E,iIAAA,OAAO,OAAkB;AAClC,0EAAuD;AAEvD,iBAAiB;AAEjB,yEAAkF;AAAzE,+IAAA,OAAO,OAAyB;AACzC,kEAA+C;AAE/C,sFAA+F;AAAtF,yIAAA,OAAO,OAAsB;AACtC,kFAA+D;AAE/D,aAAa;AAEb,2DAAoE;AAA3D,iIAAA,OAAO,OAAkB;AAClC,2DAAwC;AAExC,0EAAmF;AAA1E,iIAAA,OAAO,OAAkB;AAClC,0EAAuD;AAEvD,cAAc;AAEd,2DAAoE;AAA3D,iIAAA,OAAO,OAAkB;AAClC,2DAAwC;AAExC,6EAAsF;AAA7E,mIAAA,OAAO,OAAmB;AACnC,4EAAyD;AAEzD,KAAK;AAEL,kEAA2E;AAAlE,iIAAA,OAAO,OAAkB;AAClC,kEAA+C;AAE/C,8DAAuE;AAA9D,6HAAA,OAAO,OAAgB;AAChC,gEAA6C;AAE7C,gEAAyE;AAAhE,+HAAA,OAAO,OAAiB;AACjC,iEAA8C"}
@@ -1,26 +1,39 @@
1
- import { writeFile } from 'fs/promises';
1
+ import { readFile, writeFile } from 'fs/promises';
2
2
  import pathExists from './pathExists';
3
3
  export default class ImplAutomodule implements Automodule {
4
4
  static Class?: AutomoduleConstructor;
5
5
  static pathExists: typeof pathExists;
6
+ static readFile: typeof readFile;
6
7
  static writeFile: typeof writeFile;
7
8
  private testSaveDir;
8
9
  private moduleSaveDir;
10
+ private fakeSaveDir;
9
11
  private interfaceName;
10
12
  private implName;
13
+ private originalIndexFile;
11
14
  protected constructor(options: AutomoduleOptions);
12
15
  static Create(options: AutomoduleOptions): Automodule;
13
16
  run(): Promise<void>;
14
17
  private throwIfTestDirDoesNotExist;
15
18
  private throwIfModuleDirDoesNotExist;
19
+ private throwIfFakeDirDoesNotExist;
20
+ private throw;
16
21
  private createTestFile;
17
22
  private get testFileName();
18
23
  private createModuleFile;
19
24
  private get moduleFileName();
25
+ private createFakeFile;
26
+ private get fakeFileName();
27
+ private updateIndexFileExports;
28
+ private loadOriginalIndexFile;
29
+ private readonly indexFilePath;
20
30
  private get pathExists();
31
+ private get readFile();
21
32
  private get writeFile();
22
33
  private get testFilePattern();
23
34
  private get moduleFilePattern();
35
+ private get fakeFilePattern();
36
+ private get indexFilePattern();
24
37
  }
25
38
  export interface Automodule {
26
39
  run(): Promise<void>;
@@ -29,6 +42,7 @@ export type AutomoduleConstructor = new (options: AutomoduleOptions) => Automodu
29
42
  export interface AutomoduleOptions {
30
43
  testSaveDir: string;
31
44
  moduleSaveDir: string;
45
+ fakeSaveDir: string;
32
46
  interfaceName: string;
33
47
  implName: string;
34
48
  }
@@ -8,9 +8,11 @@ const path_1 = __importDefault(require("path"));
8
8
  const pathExists_1 = __importDefault(require("./pathExists"));
9
9
  class ImplAutomodule {
10
10
  constructor(options) {
11
- const { testSaveDir, moduleSaveDir, interfaceName, implName } = options;
11
+ this.indexFilePath = './src/index.ts';
12
+ const { testSaveDir, moduleSaveDir, fakeSaveDir, interfaceName, implName, } = options;
12
13
  this.testSaveDir = testSaveDir;
13
14
  this.moduleSaveDir = moduleSaveDir;
15
+ this.fakeSaveDir = fakeSaveDir;
14
16
  this.interfaceName = interfaceName;
15
17
  this.implName = implName;
16
18
  }
@@ -20,21 +22,33 @@ class ImplAutomodule {
20
22
  async run() {
21
23
  await this.throwIfTestDirDoesNotExist();
22
24
  await this.throwIfModuleDirDoesNotExist();
25
+ await this.throwIfFakeDirDoesNotExist();
23
26
  await this.createTestFile();
24
27
  await this.createModuleFile();
28
+ await this.createFakeFile();
29
+ await this.updateIndexFileExports();
25
30
  }
26
31
  async throwIfTestDirDoesNotExist() {
27
32
  const testDirExists = await this.pathExists(this.testSaveDir);
28
33
  if (!testDirExists) {
29
- throw new Error(`testSaveDir does not exist: ${this.testSaveDir}!`);
34
+ this.throw(`testSaveDir does not exist: ${this.testSaveDir}!`);
30
35
  }
31
36
  }
32
37
  async throwIfModuleDirDoesNotExist() {
33
38
  const moduleDirExists = await this.pathExists(this.moduleSaveDir);
34
39
  if (!moduleDirExists) {
35
- throw new Error(`moduleSaveDir does not exist: ${this.moduleSaveDir}!`);
40
+ this.throw(`moduleSaveDir does not exist: ${this.moduleSaveDir}!`);
36
41
  }
37
42
  }
43
+ async throwIfFakeDirDoesNotExist() {
44
+ const fakeDirExists = await this.pathExists(this.fakeSaveDir);
45
+ if (!fakeDirExists) {
46
+ this.throw(`fakeSaveDir does not exist: ${this.fakeSaveDir}!`);
47
+ }
48
+ }
49
+ throw(err) {
50
+ throw new Error(err);
51
+ }
38
52
  async createTestFile() {
39
53
  await this.writeFile(this.testFileName, this.testFilePattern);
40
54
  }
@@ -47,9 +61,25 @@ class ImplAutomodule {
47
61
  get moduleFileName() {
48
62
  return path_1.default.join(this.moduleSaveDir, `${this.implName}.ts`);
49
63
  }
64
+ async createFakeFile() {
65
+ await this.writeFile(this.fakeFileName, this.fakeFilePattern);
66
+ }
67
+ get fakeFileName() {
68
+ return path_1.default.join(this.fakeSaveDir, `Fake${this.interfaceName}.ts`);
69
+ }
70
+ async updateIndexFileExports() {
71
+ this.originalIndexFile = await this.loadOriginalIndexFile();
72
+ await this.writeFile(this.indexFilePath, this.indexFilePattern);
73
+ }
74
+ async loadOriginalIndexFile() {
75
+ return await this.readFile(this.indexFilePath, 'utf-8');
76
+ }
50
77
  get pathExists() {
51
78
  return ImplAutomodule.pathExists;
52
79
  }
80
+ get readFile() {
81
+ return ImplAutomodule.readFile;
82
+ }
53
83
  get writeFile() {
54
84
  return ImplAutomodule.writeFile;
55
85
  }
@@ -95,8 +125,39 @@ class ImplAutomodule {
95
125
  export type ${this.interfaceName}Constructor = new () => ${this.interfaceName}
96
126
  `;
97
127
  }
128
+ get fakeFilePattern() {
129
+ return `
130
+ import { ${this.interfaceName} } from '../../modules/${this.implName}'
131
+
132
+ export default class Fake${this.interfaceName} implements ${this.interfaceName} {
133
+ public static numCallsToConstructor = 0
134
+
135
+ public constructor() {
136
+ Fake${this.interfaceName}.numCallsToConstructor++
137
+ }
138
+
139
+ public static resetTestDouble() {
140
+ Fake${this.interfaceName}.numCallsToConstructor = 0
141
+ }
142
+ }
143
+ `;
144
+ }
145
+ get indexFilePattern() {
146
+ return `
147
+ ${this.originalIndexFile}
148
+
149
+ // ${this.interfaceName}
150
+
151
+ export { default as ${this.implName} } from './modules/${this.implName}'
152
+ export * from './modules/${this.implName}'
153
+
154
+ export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
155
+ export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
156
+ `;
157
+ }
98
158
  }
99
159
  ImplAutomodule.pathExists = pathExists_1.default;
160
+ ImplAutomodule.readFile = promises_1.readFile;
100
161
  ImplAutomodule.writeFile = promises_1.writeFile;
101
162
  exports.default = ImplAutomodule;
102
163
  //# sourceMappingURL=ImplAutomodule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImplAutomodule.js","sourceRoot":"","sources":["../../src/modules/ImplAutomodule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImplAutomodule.js","sourceRoot":"","sources":["../../src/modules/ImplAutomodule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export default class PackageAutodocumenter implements Autodocumenter {
2
+ static Class?: AutodocumenterConstructor;
3
+ protected constructor();
4
+ static Create(): PackageAutodocumenter;
5
+ }
6
+ export interface Autodocumenter {
7
+ }
8
+ export type AutodocumenterConstructor = new () => Autodocumenter;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class PackageAutodocumenter {
4
+ constructor() { }
5
+ static Create() {
6
+ return new (this.Class ?? this)();
7
+ }
8
+ }
9
+ exports.default = PackageAutodocumenter;
10
+ //# sourceMappingURL=PackageAutodocumenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageAutodocumenter.js","sourceRoot":"","sources":["../../src/modules/PackageAutodocumenter.ts"],"names":[],"mappings":";;AAAA,MAAqB,qBAAqB;IAGtC,gBAAyB,CAAC;IAEnB,MAAM,CAAC,MAAM;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAA;IACrC,CAAC;CACJ;AARD,wCAQC"}
@@ -9,8 +9,9 @@ async function main() {
9
9
  const instance = ImplAutomodule_1.default.Create({
10
10
  testSaveDir: '/Users/ericthecurious/dev/meta-node/src/__tests__/modules',
11
11
  moduleSaveDir: '/Users/ericthecurious/dev/meta-node/src/modules',
12
- interfaceName: 'Autocomponent',
13
- implName: 'ReactAutocomponent',
12
+ fakeSaveDir: '/Users/ericthecurious/dev/meta-node/src/testDoubles/Autodocumenter',
13
+ interfaceName: 'Autodocumenter',
14
+ implName: 'PackageAutodocumenter',
14
15
  });
15
16
  await instance.run();
16
17
  console.log('Finished running automodule!\n');
@@ -1 +1 @@
1
- {"version":3,"file":"runAutomodule.js","sourceRoot":"","sources":["../../src/scripts/runAutomodule.ts"],"names":[],"mappings":";;;;;AAAA,+EAAsD;AAEtD,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,wBAAc,CAAC,MAAM,CAAC;QACnC,WAAW,EACP,2DAA2D;QAC/D,aAAa,EAAE,iDAAiD;QAChE,aAAa,EAAE,eAAe;QAC9B,QAAQ,EAAE,oBAAoB;KACjC,CAAC,CAAA;IAEF,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAA;IAEpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"runAutomodule.js","sourceRoot":"","sources":["../../src/scripts/runAutomodule.ts"],"names":[],"mappings":";;;;;AAAA,+EAAsD;AAEtD,KAAK,UAAU,IAAI;IACf,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;IAEtC,MAAM,QAAQ,GAAG,wBAAc,CAAC,MAAM,CAAC;QACnC,WAAW,EACP,2DAA2D;QAC/D,aAAa,EAAE,iDAAiD;QAChE,WAAW,EACP,oEAAoE;QACxE,aAAa,EAAE,gBAAgB;QAC/B,QAAQ,EAAE,uBAAuB;KACpC,CAAC,CAAA;IAEF,MAAM,QAAQ,CAAC,GAAG,EAAE,CAAA;IAEpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;AACjD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Autodocumenter } from '../../modules/PackageAutodocumenter';
2
+ export default class FakeAutodocumenter implements Autodocumenter {
3
+ static numCallsToConstructor: number;
4
+ constructor();
5
+ static resetTestDouble(): void;
6
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class FakeAutodocumenter {
4
+ constructor() {
5
+ FakeAutodocumenter.numCallsToConstructor++;
6
+ }
7
+ static resetTestDouble() {
8
+ FakeAutodocumenter.numCallsToConstructor = 0;
9
+ }
10
+ }
11
+ FakeAutodocumenter.numCallsToConstructor = 0;
12
+ exports.default = FakeAutodocumenter;
13
+ //# sourceMappingURL=FakeAutodocumenter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FakeAutodocumenter.js","sourceRoot":"","sources":["../../../src/testDoubles/Autodocumenter/FakeAutodocumenter.ts"],"names":[],"mappings":";;AAEA,MAAqB,kBAAkB;IAGnC;QACI,kBAAkB,CAAC,qBAAqB,EAAE,CAAA;IAC9C,CAAC;IAEM,MAAM,CAAC,eAAe;QACzB,kBAAkB,CAAC,qBAAqB,GAAG,CAAC,CAAA;IAChD,CAAC;;AARa,wCAAqB,GAAG,CAAC,CAAA;kBADtB,kBAAkB"}
@@ -0,0 +1,5 @@
1
+ export declare let callsToReadFile: string[];
2
+ export declare function resetCallsToReadFile(): void;
3
+ export declare let fakeReadFileResult: string;
4
+ export declare function setFakeReadFileResult(result: string): void;
5
+ export default function fakeReadFile(file: string): Promise<string>;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fakeReadFileResult = exports.callsToReadFile = void 0;
4
+ exports.resetCallsToReadFile = resetCallsToReadFile;
5
+ exports.setFakeReadFileResult = setFakeReadFileResult;
6
+ exports.default = fakeReadFile;
7
+ const test_utils_1 = require("@sprucelabs/test-utils");
8
+ exports.callsToReadFile = [];
9
+ function resetCallsToReadFile() {
10
+ exports.callsToReadFile = [];
11
+ }
12
+ exports.fakeReadFileResult = (0, test_utils_1.generateId)();
13
+ function setFakeReadFileResult(result) {
14
+ exports.fakeReadFileResult = result;
15
+ }
16
+ async function fakeReadFile(file) {
17
+ exports.callsToReadFile.push(file);
18
+ return exports.fakeReadFileResult;
19
+ }
20
+ //# sourceMappingURL=fakeReadFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fakeReadFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeReadFile.ts"],"names":[],"mappings":";;;AAIA,oDAEC;AAID,sDAEC;AAED,+BAGC;AAjBD,uDAAmD;AAExC,QAAA,eAAe,GAAa,EAAE,CAAA;AAEzC,SAAgB,oBAAoB;IAChC,uBAAe,GAAG,EAAE,CAAA;AACxB,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,uBAAU,GAAE,CAAA;AAE5C,SAAgB,qBAAqB,CAAC,MAAc;IAChD,0BAAkB,GAAG,MAAM,CAAA;AAC/B,CAAC;AAEc,KAAK,UAAU,YAAY,CAAC,IAAY;IACnD,uBAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,0BAAkB,CAAA;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fakeWriteFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeWriteFile.ts"],"names":[],"mappings":";;;AAEA,sDAEC;AAED,gCAEC;AARU,QAAA,gBAAgB,GAAqC,EAAE,CAAA;AAElE,SAAgB,qBAAqB;IACjC,wBAAgB,GAAG,EAAE,CAAA;AACzB,CAAC;AAEc,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY;IAClE,wBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC"}
1
+ {"version":3,"file":"fakeWriteFile.js","sourceRoot":"","sources":["../../../src/testDoubles/fs/fakeWriteFile.ts"],"names":[],"mappings":";;;AAKA,sDAEC;AAED,gCAEC;AAXU,QAAA,gBAAgB,GAGrB,EAAE,CAAA;AAER,SAAgB,qBAAqB;IACjC,wBAAgB,GAAG,EAAE,CAAA;AACzB,CAAC;AAEc,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY;IAClE,wBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neurodevs/meta-node",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Meta-layer utilities for maintaining Node.js package ecosystems.",
5
5
  "keywords": [
6
6
  "nodejs",
@@ -1,4 +1,4 @@
1
- import { writeFile } from 'fs/promises'
1
+ import { readFile, writeFile } from 'fs/promises'
2
2
  import AbstractSpruceTest, {
3
3
  test,
4
4
  assert,
@@ -8,6 +8,10 @@ import ImplAutomodule, { Automodule } from '../../modules/ImplAutomodule'
8
8
  import fakePathExists, {
9
9
  setPathShouldExist,
10
10
  } from '../../testDoubles/fs/fakePathExists'
11
+ import fakeReadFile, {
12
+ fakeReadFileResult,
13
+ resetCallsToReadFile,
14
+ } from '../../testDoubles/fs/fakeReadFile'
11
15
  import fakeWriteFile, {
12
16
  callsToWriteFile,
13
17
  resetCallsToWriteFile,
@@ -20,6 +24,7 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
20
24
  await super.beforeEach()
21
25
 
22
26
  this.setFakePathExists()
27
+ this.setFakeReadFile()
23
28
  this.setFakeWriteFile()
24
29
 
25
30
  this.instance = this.ImplAutomodule()
@@ -56,6 +61,19 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
56
61
  )
57
62
  }
58
63
 
64
+ @test()
65
+ protected static async runThrowsIfFakeSaveDirMissing() {
66
+ setPathShouldExist(this.fakeSaveDir, false)
67
+
68
+ const err = await assert.doesThrowAsync(async () => await this.run())
69
+
70
+ assert.isEqual(
71
+ err.message,
72
+ `fakeSaveDir does not exist: ${this.fakeSaveDir}!`,
73
+ 'Did not receive the expected error!'
74
+ )
75
+ }
76
+
59
77
  @test()
60
78
  protected static async createsTestFileAsExpected() {
61
79
  await this.run()
@@ -84,6 +102,34 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
84
102
  )
85
103
  }
86
104
 
105
+ @test()
106
+ protected static async createsFakeFileAsExpected() {
107
+ await this.run()
108
+
109
+ assert.isEqualDeep(
110
+ callsToWriteFile[2],
111
+ {
112
+ file: `${this.fakeSaveDir}/Fake${this.interfaceName}.ts`,
113
+ data: this.fakeFilePattern,
114
+ },
115
+ 'Did not write expected fake file!'
116
+ )
117
+ }
118
+
119
+ @test()
120
+ protected static async updatesIndexFileExports() {
121
+ await this.run()
122
+
123
+ assert.isEqualDeep(
124
+ callsToWriteFile[3],
125
+ {
126
+ file: this.indexFilePath,
127
+ data: this.indexFilePattern,
128
+ },
129
+ 'Did not update index file as expected!'
130
+ )
131
+ }
132
+
87
133
  private static async run() {
88
134
  return await this.instance.run()
89
135
  }
@@ -93,17 +139,25 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
93
139
 
94
140
  setPathShouldExist(this.testSaveDir, true)
95
141
  setPathShouldExist(this.moduleSaveDir, true)
142
+ setPathShouldExist(this.fakeSaveDir, true)
143
+ setPathShouldExist(this.indexFilePath, true)
144
+ }
145
+
146
+ private static setFakeReadFile() {
147
+ ImplAutomodule.readFile = fakeReadFile as unknown as typeof readFile
148
+ resetCallsToReadFile()
96
149
  }
97
150
 
98
151
  private static setFakeWriteFile() {
99
152
  ImplAutomodule.writeFile = fakeWriteFile as typeof writeFile
100
153
  resetCallsToWriteFile()
101
154
  }
155
+ private static readonly interfaceName = generateId()
156
+ private static readonly implName = generateId()
102
157
 
103
158
  private static readonly testSaveDir = generateId()
104
159
  private static readonly moduleSaveDir = generateId()
105
- private static readonly interfaceName = generateId()
106
- private static readonly implName = generateId()
160
+ private static readonly fakeSaveDir = generateId()
107
161
 
108
162
  private static get testFilePattern() {
109
163
  return `
@@ -149,10 +203,46 @@ export default class ImplAutomoduleTest extends AbstractSpruceTest {
149
203
  `
150
204
  }
151
205
 
206
+ private static get fakeFilePattern() {
207
+ return `
208
+ import { ${this.interfaceName} } from '../../modules/${this.implName}'
209
+
210
+ export default class Fake${this.interfaceName} implements ${this.interfaceName} {
211
+ public static numCallsToConstructor = 0
212
+
213
+ public constructor() {
214
+ Fake${this.interfaceName}.numCallsToConstructor++
215
+ }
216
+
217
+ public static resetTestDouble() {
218
+ Fake${this.interfaceName}.numCallsToConstructor = 0
219
+ }
220
+ }
221
+ `
222
+ }
223
+
224
+ private static readonly indexFilePath = './src/index.ts'
225
+ private static readonly originalIndexFile = fakeReadFileResult
226
+
227
+ private static get indexFilePattern() {
228
+ return `
229
+ ${this.originalIndexFile}
230
+
231
+ // ${this.interfaceName}
232
+
233
+ export { default as ${this.implName} } from './modules/${this.implName}'
234
+ export * from './modules/${this.implName}'
235
+
236
+ export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
237
+ export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
238
+ `
239
+ }
240
+
152
241
  private static ImplAutomodule() {
153
242
  return ImplAutomodule.Create({
154
243
  testSaveDir: this.testSaveDir,
155
244
  moduleSaveDir: this.moduleSaveDir,
245
+ fakeSaveDir: this.fakeSaveDir,
156
246
  interfaceName: this.interfaceName,
157
247
  implName: this.implName,
158
248
  })
@@ -0,0 +1,23 @@
1
+ import AbstractSpruceTest, { test, assert } from '@sprucelabs/test-utils'
2
+ import PackageAutodocumenter, {
3
+ Autodocumenter,
4
+ } from '../../modules/PackageAutodocumenter'
5
+
6
+ export default class PackageAutodocumenterTest extends AbstractSpruceTest {
7
+ private static instance: Autodocumenter
8
+
9
+ protected static async beforeEach() {
10
+ await super.beforeEach()
11
+
12
+ this.instance = this.PackageAutodocumenter()
13
+ }
14
+
15
+ @test()
16
+ protected static async createsInstance() {
17
+ assert.isTruthy(this.instance, 'Failed to create instance!')
18
+ }
19
+
20
+ private static PackageAutodocumenter() {
21
+ return PackageAutodocumenter.Create()
22
+ }
23
+ }
package/src/index.ts CHANGED
@@ -6,6 +6,14 @@ export * from './modules/GitAutocloner'
6
6
  export { default as FakeAutocloner } from './testDoubles/Autocloner/FakeAutocloner'
7
7
  export * from './testDoubles/Autocloner/FakeAutocloner'
8
8
 
9
+ // Autodocumenter
10
+
11
+ export { default as PackageAutodocumenter } from './modules/PackageAutodocumenter'
12
+ export * from './modules/PackageAutodocumenter'
13
+
14
+ export { default as FakeAutodocumenter } from './testDoubles/Autodocumenter/FakeAutodocumenter'
15
+ export * from './testDoubles/Autodocumenter/FakeAutodocumenter'
16
+
9
17
  // Automodule
10
18
 
11
19
  export { default as ImplAutomodule } from './modules/ImplAutomodule'
@@ -27,5 +35,8 @@ export * from './testDoubles/Autopackage/FakeAutopackage'
27
35
  export { default as fakePathExists } from './testDoubles/fs/fakePathExists'
28
36
  export * from './testDoubles/fs/fakePathExists'
29
37
 
38
+ export { default as fakeReadFile } from './testDoubles/fs/fakeReadFile'
39
+ export * from './testDoubles/fs/fakeReadFile'
40
+
30
41
  export { default as fakeWriteFile } from './testDoubles/fs/fakeWriteFile'
31
42
  export * from './testDoubles/fs/fakeWriteFile'
@@ -1,22 +1,33 @@
1
- import { writeFile } from 'fs/promises'
1
+ import { readFile, writeFile } from 'fs/promises'
2
2
  import path from 'path'
3
3
  import pathExists from './pathExists'
4
4
 
5
5
  export default class ImplAutomodule implements Automodule {
6
6
  public static Class?: AutomoduleConstructor
7
7
  public static pathExists = pathExists
8
+ public static readFile = readFile
8
9
  public static writeFile = writeFile
9
10
 
10
11
  private testSaveDir: string
11
12
  private moduleSaveDir: string
13
+ private fakeSaveDir: string
12
14
  private interfaceName: string
13
15
  private implName: string
14
16
 
17
+ private originalIndexFile!: string
18
+
15
19
  protected constructor(options: AutomoduleOptions) {
16
- const { testSaveDir, moduleSaveDir, interfaceName, implName } = options
20
+ const {
21
+ testSaveDir,
22
+ moduleSaveDir,
23
+ fakeSaveDir,
24
+ interfaceName,
25
+ implName,
26
+ } = options
17
27
 
18
28
  this.testSaveDir = testSaveDir
19
29
  this.moduleSaveDir = moduleSaveDir
30
+ this.fakeSaveDir = fakeSaveDir
20
31
  this.interfaceName = interfaceName
21
32
  this.implName = implName
22
33
  }
@@ -28,16 +39,20 @@ export default class ImplAutomodule implements Automodule {
28
39
  public async run() {
29
40
  await this.throwIfTestDirDoesNotExist()
30
41
  await this.throwIfModuleDirDoesNotExist()
42
+ await this.throwIfFakeDirDoesNotExist()
31
43
 
32
44
  await this.createTestFile()
33
45
  await this.createModuleFile()
46
+ await this.createFakeFile()
47
+
48
+ await this.updateIndexFileExports()
34
49
  }
35
50
 
36
51
  private async throwIfTestDirDoesNotExist() {
37
52
  const testDirExists = await this.pathExists(this.testSaveDir)
38
53
 
39
54
  if (!testDirExists) {
40
- throw new Error(`testSaveDir does not exist: ${this.testSaveDir}!`)
55
+ this.throw(`testSaveDir does not exist: ${this.testSaveDir}!`)
41
56
  }
42
57
  }
43
58
 
@@ -45,12 +60,22 @@ export default class ImplAutomodule implements Automodule {
45
60
  const moduleDirExists = await this.pathExists(this.moduleSaveDir)
46
61
 
47
62
  if (!moduleDirExists) {
48
- throw new Error(
49
- `moduleSaveDir does not exist: ${this.moduleSaveDir}!`
50
- )
63
+ this.throw(`moduleSaveDir does not exist: ${this.moduleSaveDir}!`)
51
64
  }
52
65
  }
53
66
 
67
+ private async throwIfFakeDirDoesNotExist() {
68
+ const fakeDirExists = await this.pathExists(this.fakeSaveDir)
69
+
70
+ if (!fakeDirExists) {
71
+ this.throw(`fakeSaveDir does not exist: ${this.fakeSaveDir}!`)
72
+ }
73
+ }
74
+
75
+ private throw(err: string) {
76
+ throw new Error(err)
77
+ }
78
+
54
79
  private async createTestFile() {
55
80
  await this.writeFile(this.testFileName, this.testFilePattern)
56
81
  }
@@ -67,10 +92,33 @@ export default class ImplAutomodule implements Automodule {
67
92
  return path.join(this.moduleSaveDir, `${this.implName}.ts`)
68
93
  }
69
94
 
95
+ private async createFakeFile() {
96
+ await this.writeFile(this.fakeFileName, this.fakeFilePattern)
97
+ }
98
+
99
+ private get fakeFileName() {
100
+ return path.join(this.fakeSaveDir, `Fake${this.interfaceName}.ts`)
101
+ }
102
+
103
+ private async updateIndexFileExports() {
104
+ this.originalIndexFile = await this.loadOriginalIndexFile()
105
+ await this.writeFile(this.indexFilePath, this.indexFilePattern)
106
+ }
107
+
108
+ private async loadOriginalIndexFile() {
109
+ return await this.readFile(this.indexFilePath, 'utf-8')
110
+ }
111
+
112
+ private readonly indexFilePath = './src/index.ts'
113
+
70
114
  private get pathExists() {
71
115
  return ImplAutomodule.pathExists
72
116
  }
73
117
 
118
+ private get readFile() {
119
+ return ImplAutomodule.readFile
120
+ }
121
+
74
122
  private get writeFile() {
75
123
  return ImplAutomodule.writeFile
76
124
  }
@@ -118,6 +166,38 @@ export default class ImplAutomodule implements Automodule {
118
166
  export type ${this.interfaceName}Constructor = new () => ${this.interfaceName}
119
167
  `
120
168
  }
169
+
170
+ private get fakeFilePattern() {
171
+ return `
172
+ import { ${this.interfaceName} } from '../../modules/${this.implName}'
173
+
174
+ export default class Fake${this.interfaceName} implements ${this.interfaceName} {
175
+ public static numCallsToConstructor = 0
176
+
177
+ public constructor() {
178
+ Fake${this.interfaceName}.numCallsToConstructor++
179
+ }
180
+
181
+ public static resetTestDouble() {
182
+ Fake${this.interfaceName}.numCallsToConstructor = 0
183
+ }
184
+ }
185
+ `
186
+ }
187
+
188
+ private get indexFilePattern() {
189
+ return `
190
+ ${this.originalIndexFile}
191
+
192
+ // ${this.interfaceName}
193
+
194
+ export { default as ${this.implName} } from './modules/${this.implName}'
195
+ export * from './modules/${this.implName}'
196
+
197
+ export { default as Fake${this.interfaceName} } from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
198
+ export * from './testDoubles/${this.interfaceName}/Fake${this.interfaceName}'
199
+ `
200
+ }
121
201
  }
122
202
 
123
203
  export interface Automodule {
@@ -131,6 +211,7 @@ export type AutomoduleConstructor = new (
131
211
  export interface AutomoduleOptions {
132
212
  testSaveDir: string
133
213
  moduleSaveDir: string
214
+ fakeSaveDir: string
134
215
  interfaceName: string
135
216
  implName: string
136
217
  }
@@ -0,0 +1,13 @@
1
+ export default class PackageAutodocumenter implements Autodocumenter {
2
+ public static Class?: AutodocumenterConstructor
3
+
4
+ protected constructor() {}
5
+
6
+ public static Create() {
7
+ return new (this.Class ?? this)()
8
+ }
9
+ }
10
+
11
+ export interface Autodocumenter {}
12
+
13
+ export type AutodocumenterConstructor = new () => Autodocumenter
@@ -7,8 +7,10 @@ async function main() {
7
7
  testSaveDir:
8
8
  '/Users/ericthecurious/dev/meta-node/src/__tests__/modules',
9
9
  moduleSaveDir: '/Users/ericthecurious/dev/meta-node/src/modules',
10
- interfaceName: 'Autocomponent',
11
- implName: 'ReactAutocomponent',
10
+ fakeSaveDir:
11
+ '/Users/ericthecurious/dev/meta-node/src/testDoubles/Autodocumenter',
12
+ interfaceName: 'Autodocumenter',
13
+ implName: 'PackageAutodocumenter',
12
14
  })
13
15
 
14
16
  await instance.run()
@@ -0,0 +1,13 @@
1
+ import { Autodocumenter } from '../../modules/PackageAutodocumenter'
2
+
3
+ export default class FakeAutodocumenter implements Autodocumenter {
4
+ public static numCallsToConstructor = 0
5
+
6
+ public constructor() {
7
+ FakeAutodocumenter.numCallsToConstructor++
8
+ }
9
+
10
+ public static resetTestDouble() {
11
+ FakeAutodocumenter.numCallsToConstructor = 0
12
+ }
13
+ }
@@ -0,0 +1,18 @@
1
+ import { generateId } from '@sprucelabs/test-utils'
2
+
3
+ export let callsToReadFile: string[] = []
4
+
5
+ export function resetCallsToReadFile() {
6
+ callsToReadFile = []
7
+ }
8
+
9
+ export let fakeReadFileResult = generateId()
10
+
11
+ export function setFakeReadFileResult(result: string) {
12
+ fakeReadFileResult = result
13
+ }
14
+
15
+ export default async function fakeReadFile(file: string) {
16
+ callsToReadFile.push(file)
17
+ return fakeReadFileResult
18
+ }
@@ -1,4 +1,7 @@
1
- export let callsToWriteFile: { file: string; data: string }[] = []
1
+ export let callsToWriteFile: {
2
+ file: string
3
+ data: string
4
+ }[] = []
2
5
 
3
6
  export function resetCallsToWriteFile() {
4
7
  callsToWriteFile = []