@sprucelabs/spruce-cli 15.4.0 → 15.4.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [15.4.1](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v15.4.0...v15.4.1) (2022-05-02)
7
+
8
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
9
+
10
+
11
+
12
+
13
+
6
14
  # [15.4.0](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v15.3.0...v15.4.0) (2022-05-02)
7
15
 
8
16
 
@@ -5,6 +5,7 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
5
5
  protected static canSelectAbstractTestBasedOnEventEmitter(): Promise<void>;
6
6
  protected static installingAFeatureRemovesLabelFromName(): Promise<void>;
7
7
  protected static selectingUninstalledTestInstallsTheFeature(): Promise<void>;
8
+ protected static relativePathsAddDotSlash(): void;
8
9
  private static buildAndAssertTestFailsAsExpected;
9
10
  private static installCopyTestFilesSelectLocalAbstractTest;
10
11
  private static installAndCopyTestFiles;
@@ -27,13 +27,11 @@ var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
27
27
 
28
28
  var _test = require("@sprucelabs/test");
29
29
 
30
- var _CommandService = _interopRequireDefault(require("../../../services/CommandService"));
31
-
32
30
  var _AbstractTestTest2 = _interopRequireDefault(require("../../../tests/AbstractTestTest"));
33
31
 
34
32
  var _test2 = _interopRequireDefault(require("../../../tests/utilities/test.utility"));
35
33
 
36
- var _dec, _dec2, _dec3, _dec4, _dec5, _class;
34
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _class;
37
35
 
38
36
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
39
37
 
@@ -53,7 +51,7 @@ var featuresWithRegisteredTests = [{
53
51
  featureCode: 'view',
54
52
  className: 'AbstractViewControllerTest'
55
53
  }];
56
- var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(), _dec3 = (0, _test.test)(), _dec4 = (0, _test.test)(), _dec5 = (0, _test.test)(), (_class = /*#__PURE__*/function (_AbstractTestTest) {
54
+ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(), _dec3 = (0, _test.test)(), _dec4 = (0, _test.test)(), _dec5 = (0, _test.test)(), _dec6 = (0, _test.test)(), (_class = /*#__PURE__*/function (_AbstractTestTest) {
57
55
  (0, _inherits2["default"])(SelectingAnAbstractTestClassTest, _AbstractTestTest);
58
56
 
59
57
  var _super = _createSuper(SelectingAnAbstractTestClassTest);
@@ -255,10 +253,7 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
255
253
  while (1) {
256
254
  switch (_context6.prev = _context6.next) {
257
255
  case 0:
258
- _CommandService["default"].fakeCommand(new RegExp(/npm[\s\S]*?install [\s\S]*?/gi), {
259
- code: 0
260
- });
261
-
256
+ this.commandFaker.fakeInstall();
262
257
  _context6.next = 3;
263
258
  return this.installTests();
264
259
 
@@ -358,10 +353,7 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
358
353
  while (1) {
359
354
  switch (_context8.prev = _context8.next) {
360
355
  case 0:
361
- _CommandService["default"].fakeCommand(new RegExp(/npm[\s\S]*?install [\s\S]*?/gi), {
362
- code: 0
363
- });
364
-
356
+ this.commandFaker.fakeInstall();
365
357
  _iterator2 = _createForOfIteratorHelper(featuresWithRegisteredTests);
366
358
  _context8.prev = 2;
367
359
  _loop2 = /*#__PURE__*/_regenerator["default"].mark(function _loop2() {
@@ -458,7 +450,7 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
458
450
  return _context8.stop();
459
451
  }
460
452
  }
461
- }, _callee6, null, [[2, 11, 14, 17]]);
453
+ }, _callee6, this, [[2, 11, 14, 17]]);
462
454
  }));
463
455
 
464
456
  function selectingUninstalledTestInstallsTheFeature() {
@@ -467,6 +459,20 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
467
459
 
468
460
  return selectingUninstalledTestInstallsTheFeature;
469
461
  }()
462
+ }, {
463
+ key: "relativePathsAddDotSlash",
464
+ value: function relativePathsAddDotSlash() {
465
+ var action = this.Action('test', 'create'); //@ts-ignore
466
+
467
+ var actual = action.buildParentClassFromCandidate({
468
+ label: 'test',
469
+ name: 'AbstractTest',
470
+ path: this.resolvePath('test/AbstractTest'),
471
+ isDefaultExport: false
472
+ }, this.resolvePath('test'));
473
+
474
+ _test.assert.isEqual(actual.importPath, './AbstractTest');
475
+ }
470
476
  }, {
471
477
  key: "buildAndAssertTestFailsAsExpected",
472
478
  value: function () {
@@ -690,6 +696,6 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
690
696
  }()
691
697
  }]);
692
698
  return SelectingAnAbstractTestClassTest;
693
- }(_AbstractTestTest2["default"]), ((0, _applyDecoratedDescriptor2["default"])(_class, "asksForYouToSelectABaseClass", [_dec], Object.getOwnPropertyDescriptor(_class, "asksForYouToSelectABaseClass"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "canSelectAbstractClassWhileSelectingSubDir", [_dec2], Object.getOwnPropertyDescriptor(_class, "canSelectAbstractClassWhileSelectingSubDir"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "canSelectAbstractTestBasedOnEventEmitter", [_dec3], Object.getOwnPropertyDescriptor(_class, "canSelectAbstractTestBasedOnEventEmitter"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "installingAFeatureRemovesLabelFromName", [_dec4], Object.getOwnPropertyDescriptor(_class, "installingAFeatureRemovesLabelFromName"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "selectingUninstalledTestInstallsTheFeature", [_dec5], Object.getOwnPropertyDescriptor(_class, "selectingUninstalledTestInstallsTheFeature"), _class)), _class));
699
+ }(_AbstractTestTest2["default"]), ((0, _applyDecoratedDescriptor2["default"])(_class, "asksForYouToSelectABaseClass", [_dec], Object.getOwnPropertyDescriptor(_class, "asksForYouToSelectABaseClass"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "canSelectAbstractClassWhileSelectingSubDir", [_dec2], Object.getOwnPropertyDescriptor(_class, "canSelectAbstractClassWhileSelectingSubDir"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "canSelectAbstractTestBasedOnEventEmitter", [_dec3], Object.getOwnPropertyDescriptor(_class, "canSelectAbstractTestBasedOnEventEmitter"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "installingAFeatureRemovesLabelFromName", [_dec4], Object.getOwnPropertyDescriptor(_class, "installingAFeatureRemovesLabelFromName"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "selectingUninstalledTestInstallsTheFeature", [_dec5], Object.getOwnPropertyDescriptor(_class, "selectingUninstalledTestInstallsTheFeature"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "relativePathsAddDotSlash", [_dec6], Object.getOwnPropertyDescriptor(_class, "relativePathsAddDotSlash"), _class)), _class));
694
700
  exports["default"] = SelectingAnAbstractTestClassTest;
695
701
  //# sourceMappingURL=SelectingAnAbstractTestClass.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectingAnAbstractTestClass.test.js","names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installCopyTestFilesSelectLocalAbstractTest","promise","results","testUtil","assertFileByNameInGeneratedFiles","files","buildAndAssertTestFailsAsExpected","testDir","resolvePath","diskUtil","createDir","installAndCopyTestFiles","invokeCreateActionAndWaitForInput","ui","sendInput","waitForInput","selectOptionBasedOnLabel","installTests","cli","on","abstractClasses","name","label","executeCreateUntilAbstractClassSelection","choices","assert","doesInclude","isFalsy","errors","match","contents","readFile","CommandService","fakeCommand","RegExp","code","testFeature","getFeatureInstaller","getFeature","feat","install","features","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","value","isTrue","Service","build","doesThrowAsync","execute","expected","copyTestFiles","source","resolveTestPath","destination","copyDir","last","getLastInvocation","options","Action","type","nameReadable","nameCamel","AbstractTestTest"],"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"sourcesContent":["import { SelectChoice } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { FeatureCode } from '../../../features/features.types'\nimport CommandService from '../../../services/CommandService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nconst expectedAbstractTests = [\n\t'AbstractSpruceTest (default)',\n\t'AbstractStoreTest (requires install)',\n\t'AbstractViewControllerTest (requires install)',\n\t'AbstractSpruceFixtureTest',\n\t'AbstractTest',\n\t'AbstractTest2',\n\t'AbstractBananaTestDifferentThanFileName',\n]\n\nconst featuresWithRegisteredTests: {\n\tfeatureCode: FeatureCode\n\tclassName: string\n}[] = [\n\t{ featureCode: 'store', className: 'AbstractStoreTest' },\n\t{ featureCode: 'view', className: 'AbstractViewControllerTest' },\n]\n\nexport default class SelectingAnAbstractTestClassTest extends AbstractTestTest {\n\t@test()\n\tprotected static async asksForYouToSelectABaseClass() {\n\t\tconst { promise } = await this.installCopyTestFilesSelectLocalAbstractTest()\n\n\t\tconst results = await promise\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractClassWhileSelectingSubDir() {\n\t\tconst testDir = this.resolvePath('src', '__tests__', 'behavioral', 'taco')\n\t\tdiskUtil.createDir(testDir)\n\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tawait this.ui.sendInput('taco')\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\tawait promise\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractTestBasedOnEventEmitter() {\n\t\tconst cli = await this.installTests()\n\t\tvoid cli.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass',\n\t\t\t\t\t\tlabel: 'TestClass',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass2',\n\t\t\t\t\t\tlabel: 'TestClass2',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass',\n\t\t})\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass2',\n\t\t})\n\n\t\tthis.selectOptionBasedOnLabel('TestClass2')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { TestClass2 } from '@sprucelabs/another-lib'\"\n\t\t)\n\n\t\tassert.doesInclude(contents, 'extends TestClass2')\n\t}\n\n\t@test()\n\tprotected static async installingAFeatureRemovesLabelFromName() {\n\t\tCommandService.fakeCommand(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tawait this.installTests()\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tawait this.getFeatureInstaller().install({\n\t\t\t\tfeatures: [\n\t\t\t\t\t{\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tcode: feat.featureCode,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\t\tassert.isTruthy(\n\t\t\t\tcandidates.find(({ name }) => {\n\t\t\t\t\treturn name === feat.className\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t}\n\n\t@test()\n\tprotected static async selectingUninstalledTestInstallsTheFeature() {\n\t\tCommandService.fakeCommand(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tthis.cwd = diskUtil.createRandomTempDir()\n\t\t\tawait this.installTests()\n\n\t\t\tconst { choices, promise } =\n\t\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\t\tconst match = choices.find((c: any) => c.label.includes(feat.className))\n\n\t\t\tassert.isTruthy(match)\n\n\t\t\tlet isInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isFalse(isInstalled)\n\n\t\t\tawait this.ui.sendInput(match?.value)\n\n\t\t\tawait promise\n\n\t\t\tisInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isTrue(isInstalled)\n\t\t}\n\t}\n\n\tprivate static async buildAndAssertTestFailsAsExpected() {\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n\n\tprivate static async installCopyTestFilesSelectLocalAbstractTest() {\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tfor (const expected of expectedAbstractTests) {\n\t\t\tassert.doesInclude(choices, { label: expected })\n\t\t}\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\treturn { promise }\n\t}\n\n\tprivate static async installAndCopyTestFiles() {\n\t\tawait this.installTests()\n\t\tawait this.copyTestFiles()\n\t}\n\n\tprivate static async copyTestFiles() {\n\t\tconst source = this.resolveTestPath('abstract_tests')\n\t\tconst destination = this.resolvePath('src')\n\n\t\tawait diskUtil.copyDir(source, destination)\n\t}\n\n\tprivate static async executeCreateUntilAbstractClassSelection() {\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tconst { choices } = last.options.options ?? {}\n\n\t\treturn { promise, choices } as {\n\t\t\tpromise: Promise<any>\n\t\t\tchoices: SelectChoice[]\n\t\t}\n\t}\n\n\tprivate static async invokeCreateActionAndWaitForInput() {\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\t\treturn { promise }\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectingAnAbstractTestClass.test.js","names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installCopyTestFilesSelectLocalAbstractTest","promise","results","testUtil","assertFileByNameInGeneratedFiles","files","buildAndAssertTestFailsAsExpected","testDir","resolvePath","diskUtil","createDir","installAndCopyTestFiles","invokeCreateActionAndWaitForInput","ui","sendInput","waitForInput","selectOptionBasedOnLabel","installTests","cli","on","abstractClasses","name","label","executeCreateUntilAbstractClassSelection","choices","assert","doesInclude","isFalsy","errors","match","contents","readFile","commandFaker","fakeInstall","testFeature","getFeatureInstaller","getFeature","feat","install","features","code","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","value","isTrue","action","Action","actual","buildParentClassFromCandidate","path","isDefaultExport","isEqual","importPath","Service","build","doesThrowAsync","execute","expected","copyTestFiles","source","resolveTestPath","destination","copyDir","last","getLastInvocation","options","type","nameReadable","nameCamel","AbstractTestTest"],"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"sourcesContent":["import { SelectChoice } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { FeatureCode } from '../../../features/features.types'\nimport CreateAction from '../../../features/test/actions/CreateAction'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nconst expectedAbstractTests = [\n\t'AbstractSpruceTest (default)',\n\t'AbstractStoreTest (requires install)',\n\t'AbstractViewControllerTest (requires install)',\n\t'AbstractSpruceFixtureTest',\n\t'AbstractTest',\n\t'AbstractTest2',\n\t'AbstractBananaTestDifferentThanFileName',\n]\n\nconst featuresWithRegisteredTests: {\n\tfeatureCode: FeatureCode\n\tclassName: string\n}[] = [\n\t{ featureCode: 'store', className: 'AbstractStoreTest' },\n\t{ featureCode: 'view', className: 'AbstractViewControllerTest' },\n]\n\nexport default class SelectingAnAbstractTestClassTest extends AbstractTestTest {\n\t@test()\n\tprotected static async asksForYouToSelectABaseClass() {\n\t\tconst { promise } = await this.installCopyTestFilesSelectLocalAbstractTest()\n\n\t\tconst results = await promise\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractClassWhileSelectingSubDir() {\n\t\tconst testDir = this.resolvePath('src', '__tests__', 'behavioral', 'taco')\n\t\tdiskUtil.createDir(testDir)\n\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tawait this.ui.sendInput('taco')\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\tawait promise\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractTestBasedOnEventEmitter() {\n\t\tconst cli = await this.installTests()\n\t\tvoid cli.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass',\n\t\t\t\t\t\tlabel: 'TestClass',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass2',\n\t\t\t\t\t\tlabel: 'TestClass2',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass',\n\t\t})\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass2',\n\t\t})\n\n\t\tthis.selectOptionBasedOnLabel('TestClass2')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { TestClass2 } from '@sprucelabs/another-lib'\"\n\t\t)\n\n\t\tassert.doesInclude(contents, 'extends TestClass2')\n\t}\n\n\t@test()\n\tprotected static async installingAFeatureRemovesLabelFromName() {\n\t\tthis.commandFaker.fakeInstall()\n\n\t\tawait this.installTests()\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tawait this.getFeatureInstaller().install({\n\t\t\t\tfeatures: [\n\t\t\t\t\t{\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tcode: feat.featureCode,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\t\tassert.isTruthy(\n\t\t\t\tcandidates.find(({ name }) => {\n\t\t\t\t\treturn name === feat.className\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t}\n\n\t@test()\n\tprotected static async selectingUninstalledTestInstallsTheFeature() {\n\t\tthis.commandFaker.fakeInstall()\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tthis.cwd = diskUtil.createRandomTempDir()\n\t\t\tawait this.installTests()\n\n\t\t\tconst { choices, promise } =\n\t\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\t\tconst match = choices.find((c: any) => c.label.includes(feat.className))\n\n\t\t\tassert.isTruthy(match)\n\n\t\t\tlet isInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isFalse(isInstalled)\n\n\t\t\tawait this.ui.sendInput(match?.value)\n\n\t\t\tawait promise\n\n\t\t\tisInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isTrue(isInstalled)\n\t\t}\n\t}\n\n\t@test()\n\tprotected static relativePathsAddDotSlash() {\n\t\tconst action = this.Action('test', 'create') as CreateAction\n\n\t\t//@ts-ignore\n\t\tconst actual = action.buildParentClassFromCandidate(\n\t\t\t{\n\t\t\t\tlabel: 'test',\n\t\t\t\tname: 'AbstractTest',\n\t\t\t\tpath: this.resolvePath('test/AbstractTest'),\n\t\t\t\tisDefaultExport: false,\n\t\t\t},\n\t\t\tthis.resolvePath('test')\n\t\t)\n\n\t\tassert.isEqual(actual.importPath, './AbstractTest')\n\t}\n\n\tprivate static async buildAndAssertTestFailsAsExpected() {\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n\n\tprivate static async installCopyTestFilesSelectLocalAbstractTest() {\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tfor (const expected of expectedAbstractTests) {\n\t\t\tassert.doesInclude(choices, { label: expected })\n\t\t}\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\treturn { promise }\n\t}\n\n\tprivate static async installAndCopyTestFiles() {\n\t\tawait this.installTests()\n\t\tawait this.copyTestFiles()\n\t}\n\n\tprivate static async copyTestFiles() {\n\t\tconst source = this.resolveTestPath('abstract_tests')\n\t\tconst destination = this.resolvePath('src')\n\n\t\tawait diskUtil.copyDir(source, destination)\n\t}\n\n\tprivate static async executeCreateUntilAbstractClassSelection() {\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tconst { choices } = last.options.options ?? {}\n\n\t\treturn { promise, choices } as {\n\t\t\tpromise: Promise<any>\n\t\t\tchoices: SelectChoice[]\n\t\t}\n\t}\n\n\tprivate static async invokeCreateActionAndWaitForInput() {\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\t\treturn { promise }\n\t}\n}\n"],"mappings":"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"}
@@ -380,7 +380,7 @@ var EventWriter = /*#__PURE__*/function (_AbstractWriter) {
380
380
 
381
381
  var schemaTypesFile = _path["default"].join(schemaTypesLookupDir, _spruceSkillUtils.DEFAULT_SCHEMA_TYPES_FILENAME);
382
382
 
383
- var relativeTypesFile = _path["default"].relative(_path["default"].dirname(resolvedDestination), schemaTypesFile);
383
+ var relativeTypesFile = _spruceSkillUtils.diskUtil.resolveRelativePath(_path["default"].dirname(resolvedDestination), schemaTypesFile);
384
384
 
385
385
  relativeTypesFile = relativeTypesFile.replace(_path["default"].extname(relativeTypesFile), '');
386
386
  return relativeTypesFile;
@@ -1 +1 @@
1
- {"version":3,"file":"EventWriter.js","names":["CONTRACT_FILE_NAME","EventWriter","destinationDir","options","eventContractTemplateItems","shouldImportCoreEvents","generated","item","push","writeContract","eventContractTemplateItem","writeCombinedEvents","templateItems","Promise","all","lint","schemaTemplateItems","destinationFile","diskUtil","resolvePath","namespaceCamel","generateEventContractFileName","eventsContractContents","templates","eventContract","writeFileIfChangedMixinResults","Object","keys","eventSignatures","results","cwd","doesHashSprucePathExist","path","resolveHashSprucePath","doesFileExist","contents","combinedEventsContract","schemaTypesLookupDir","fullyQualifiedEventName","event","eventNameUtil","split","resolvedDestination","eventDiskUtil","resolveListenerPath","relativeTypesFile","resolveSchemaTypesFile","namespace","eventNamespace","listenerContents","listener","schemaTypesFile","destination","listeners","version","nameKebab","nameCamel","nameReadable","isGlobal","templateMethod","name","action","description","context","files","file","resolveEventPath","fileName","eventName","writeFile","pathUtil","join","DEFAULT_SCHEMA_TYPES_FILENAME","relative","dirname","replace","extname","AbstractWriter"],"sources":["../../../../src/features/event/writers/EventWriter.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { SchemaTemplateItem } from '@sprucelabs/schema'\nimport { eventDiskUtil, eventNameUtil } from '@sprucelabs/spruce-event-utils'\nimport {\n\tdiskUtil,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventListenerOptions,\n\tListenerTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nconst CONTRACT_FILE_NAME = `events.contract.ts`\nexport default class EventWriter extends AbstractWriter {\n\tpublic async writeContracts(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tshouldImportCoreEvents?: boolean\n\t\t\tskillEventContractTypesFile: string\n\t\t\teventBuilderFile: string\n\t\t}\n\t) {\n\t\tconst { eventContractTemplateItems, shouldImportCoreEvents = true } =\n\t\t\toptions\n\n\t\tconst generated: Promise<GeneratedFile>[] = []\n\n\t\tfor (const item of eventContractTemplateItems) {\n\t\t\tgenerated.push(\n\t\t\t\tthis.writeContract({\n\t\t\t\t\t...options,\n\t\t\t\t\tdestinationDir,\n\t\t\t\t\teventContractTemplateItem: item,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tgenerated.push(\n\t\t\tthis.writeCombinedEvents({\n\t\t\t\t...options,\n\t\t\t\tshouldImportCoreEvents,\n\t\t\t\tdestinationDir,\n\t\t\t\ttemplateItems: eventContractTemplateItems,\n\t\t\t})\n\t\t)\n\n\t\tconst all = await Promise.all(generated)\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn all\n\t}\n\n\tprivate async writeContract(options: {\n\t\tdestinationDir: string\n\t\teventContractTemplateItem: EventContractTemplateItem\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\teventBuilderFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir, eventContractTemplateItem, schemaTemplateItems } =\n\t\t\toptions\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\teventContractTemplateItem.namespaceCamel,\n\t\t\tgenerateEventContractFileName(eventContractTemplateItem)\n\t\t)\n\n\t\tconst eventsContractContents = this.templates.eventContract({\n\t\t\t...options,\n\t\t\t...eventContractTemplateItem,\n\t\t\tschemaTemplateItems,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\teventsContractContents,\n\t\t\t`The event contract for ${\n\t\t\t\tObject.keys(eventContractTemplateItem.eventSignatures)[0]\n\t\t\t}`\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic hasCombinedContractBeenWritten(cwd: string) {\n\t\tif (diskUtil.doesHashSprucePathExist(cwd)) {\n\t\t\tconst path = diskUtil.resolveHashSprucePath(\n\t\t\t\tcwd,\n\t\t\t\t'events',\n\t\t\t\tCONTRACT_FILE_NAME\n\t\t\t)\n\n\t\t\treturn diskUtil.doesFileExist(path)\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate async writeCombinedEvents(options: {\n\t\tdestinationDir: string\n\t\ttemplateItems: EventContractTemplateItem[]\n\t\tshouldImportCoreEvents?: boolean\n\t\tskillEventContractTypesFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir } = options\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\tCONTRACT_FILE_NAME\n\t\t)\n\n\t\tconst contents = this.templates.combinedEventsContract(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\tcontents,\n\t\t\t'All event contracts combined to a single export.'\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic async writeListener(\n\t\tdestinationDir: string,\n\t\toptions: Omit<EventListenerOptions, 'schemaTypesFile'> & {\n\t\t\tschemaTypesLookupDir: string\n\t\t}\n\t) {\n\t\tconst { schemaTypesLookupDir, fullyQualifiedEventName } = options\n\n\t\tconst event = eventNameUtil.split(fullyQualifiedEventName)\n\t\tconst resolvedDestination = eventDiskUtil.resolveListenerPath(\n\t\t\tdestinationDir,\n\t\t\tevent as any\n\t\t)\n\n\t\tconst relativeTypesFile = this.resolveSchemaTypesFile({\n\t\t\tnamespace: event.eventNamespace,\n\t\t\tschemaTypesLookupDir,\n\t\t\tresolvedDestination,\n\t\t})\n\n\t\tconst listenerContents = this.templates.listener({\n\t\t\t...options,\n\t\t\tschemaTypesFile: relativeTypesFile,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tlistenerContents,\n\t\t\t`Listener for ${fullyQualifiedEventName}.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeListenerMap(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tlisteners: ListenerTemplateItem[]\n\t\t}\n\t) {\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'listeners.ts')\n\t\tconst contents = this.templates.listeners({ listeners: options.listeners })\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'All your listeners imported to one place for your skill to use when booting!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic async writeEvent(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tnameCamel: string\n\t\t\tnameKebab: string\n\t\t\tversion: string\n\t\t\tnameReadable: string\n\t\t\tisGlobal?: boolean\n\t\t}\n\t) {\n\t\tconst {\n\t\t\tversion,\n\t\t\tnameKebab,\n\t\t\tnameCamel,\n\t\t\tnameReadable,\n\t\t\tisGlobal = false,\n\t\t} = options\n\n\t\tconst templates: ({\n\t\t\tcontext?: any\n\t\t\ttemplateMethod:\n\t\t\t\t| 'eventEmitPayload'\n\t\t\t\t| 'eventEmitTarget'\n\t\t\t\t| 'eventResponsePayload'\n\t\t\t\t| 'permissionContractBuilder'\n\t\t\t\t| 'eventOptions'\n\t\t} & Omit<GeneratedFile, 'path'>)[] = [\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitPayload',\n\t\t\t\tname: 'emitPayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The payload that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitTarget',\n\t\t\t\tname: 'emitTarget.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The target that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventResponsePayload',\n\t\t\t\tname: 'responsePayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'The payload that every listener will need to respond with. Delete this file for events that are fire and forget.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'emitPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Permissions someone else will need to emit your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Emit',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'listenPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'Permissions someone else will need to listen to your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Listen',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventOptions',\n\t\t\t\tname: 'event.options.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Extra options that can be set for your event',\n\t\t\t\tcontext: {\n\t\t\t\t\tisGlobal,\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\tconst files: GeneratedFile[] = []\n\n\t\tfor (const file of templates) {\n\t\t\tconst destination = eventDiskUtil.resolveEventPath(destinationDir, {\n\t\t\t\tfileName: file.name as any,\n\t\t\t\teventName: nameKebab,\n\t\t\t\tversion,\n\t\t\t})\n\n\t\t\tconst contents = this.templates[file.templateMethod]({\n\t\t\t\tnameCamel,\n\t\t\t\tnameReadable,\n\t\t\t\tversion,\n\t\t\t\t...file.context,\n\t\t\t})\n\n\t\t\tdiskUtil.writeFile(destination, contents)\n\n\t\t\tfiles.push({\n\t\t\t\t...file,\n\t\t\t\tpath: destination,\n\t\t\t})\n\t\t}\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn files\n\t}\n\n\tprivate resolveSchemaTypesFile(options: {\n\t\tnamespace?: string\n\t\tschemaTypesLookupDir: string\n\t\tresolvedDestination: string\n\t}) {\n\t\tconst { schemaTypesLookupDir, resolvedDestination, namespace } = options\n\n\t\tif (!namespace) {\n\t\t\treturn '@sprucelabs/mercury-types'\n\t\t}\n\n\t\tconst schemaTypesFile = pathUtil.join(\n\t\t\tschemaTypesLookupDir,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet relativeTypesFile = pathUtil.relative(\n\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\tschemaTypesFile\n\t\t)\n\n\t\trelativeTypesFile = relativeTypesFile.replace(\n\t\t\tpathUtil.extname(relativeTypesFile),\n\t\t\t''\n\t\t)\n\n\t\treturn relativeTypesFile\n\t}\n}\n\nexport function generateEventContractFileName(options: {\n\tnameCamel: string\n\tversion: string\n}): string {\n\treturn `${options.nameCamel}.${options.version}.contract.ts`\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EventWriter.js","names":["CONTRACT_FILE_NAME","EventWriter","destinationDir","options","eventContractTemplateItems","shouldImportCoreEvents","generated","item","push","writeContract","eventContractTemplateItem","writeCombinedEvents","templateItems","Promise","all","lint","schemaTemplateItems","destinationFile","diskUtil","resolvePath","namespaceCamel","generateEventContractFileName","eventsContractContents","templates","eventContract","writeFileIfChangedMixinResults","Object","keys","eventSignatures","results","cwd","doesHashSprucePathExist","path","resolveHashSprucePath","doesFileExist","contents","combinedEventsContract","schemaTypesLookupDir","fullyQualifiedEventName","event","eventNameUtil","split","resolvedDestination","eventDiskUtil","resolveListenerPath","relativeTypesFile","resolveSchemaTypesFile","namespace","eventNamespace","listenerContents","listener","schemaTypesFile","destination","listeners","version","nameKebab","nameCamel","nameReadable","isGlobal","templateMethod","name","action","description","context","files","file","resolveEventPath","fileName","eventName","writeFile","pathUtil","join","DEFAULT_SCHEMA_TYPES_FILENAME","resolveRelativePath","dirname","replace","extname","AbstractWriter"],"sources":["../../../../src/features/event/writers/EventWriter.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { SchemaTemplateItem } from '@sprucelabs/schema'\nimport { eventDiskUtil, eventNameUtil } from '@sprucelabs/spruce-event-utils'\nimport {\n\tdiskUtil,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tEventContractTemplateItem,\n\tEventListenerOptions,\n\tListenerTemplateItem,\n} from '@sprucelabs/spruce-templates'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nconst CONTRACT_FILE_NAME = `events.contract.ts`\nexport default class EventWriter extends AbstractWriter {\n\tpublic async writeContracts(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\teventContractTemplateItems: EventContractTemplateItem[]\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tshouldImportCoreEvents?: boolean\n\t\t\tskillEventContractTypesFile: string\n\t\t\teventBuilderFile: string\n\t\t}\n\t) {\n\t\tconst { eventContractTemplateItems, shouldImportCoreEvents = true } =\n\t\t\toptions\n\n\t\tconst generated: Promise<GeneratedFile>[] = []\n\n\t\tfor (const item of eventContractTemplateItems) {\n\t\t\tgenerated.push(\n\t\t\t\tthis.writeContract({\n\t\t\t\t\t...options,\n\t\t\t\t\tdestinationDir,\n\t\t\t\t\teventContractTemplateItem: item,\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\n\t\tgenerated.push(\n\t\t\tthis.writeCombinedEvents({\n\t\t\t\t...options,\n\t\t\t\tshouldImportCoreEvents,\n\t\t\t\tdestinationDir,\n\t\t\t\ttemplateItems: eventContractTemplateItems,\n\t\t\t})\n\t\t)\n\n\t\tconst all = await Promise.all(generated)\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn all\n\t}\n\n\tprivate async writeContract(options: {\n\t\tdestinationDir: string\n\t\teventContractTemplateItem: EventContractTemplateItem\n\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\teventBuilderFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir, eventContractTemplateItem, schemaTemplateItems } =\n\t\t\toptions\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\teventContractTemplateItem.namespaceCamel,\n\t\t\tgenerateEventContractFileName(eventContractTemplateItem)\n\t\t)\n\n\t\tconst eventsContractContents = this.templates.eventContract({\n\t\t\t...options,\n\t\t\t...eventContractTemplateItem,\n\t\t\tschemaTemplateItems,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\teventsContractContents,\n\t\t\t`The event contract for ${\n\t\t\t\tObject.keys(eventContractTemplateItem.eventSignatures)[0]\n\t\t\t}`\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic hasCombinedContractBeenWritten(cwd: string) {\n\t\tif (diskUtil.doesHashSprucePathExist(cwd)) {\n\t\t\tconst path = diskUtil.resolveHashSprucePath(\n\t\t\t\tcwd,\n\t\t\t\t'events',\n\t\t\t\tCONTRACT_FILE_NAME\n\t\t\t)\n\n\t\t\treturn diskUtil.doesFileExist(path)\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate async writeCombinedEvents(options: {\n\t\tdestinationDir: string\n\t\ttemplateItems: EventContractTemplateItem[]\n\t\tshouldImportCoreEvents?: boolean\n\t\tskillEventContractTypesFile: string\n\t}): Promise<GeneratedFile> {\n\t\tconst { destinationDir } = options\n\n\t\tconst destinationFile = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\tCONTRACT_FILE_NAME\n\t\t)\n\n\t\tconst contents = this.templates.combinedEventsContract(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestinationFile,\n\t\t\tcontents,\n\t\t\t'All event contracts combined to a single export.'\n\t\t)\n\n\t\treturn results[0]\n\t}\n\n\tpublic async writeListener(\n\t\tdestinationDir: string,\n\t\toptions: Omit<EventListenerOptions, 'schemaTypesFile'> & {\n\t\t\tschemaTypesLookupDir: string\n\t\t}\n\t) {\n\t\tconst { schemaTypesLookupDir, fullyQualifiedEventName } = options\n\n\t\tconst event = eventNameUtil.split(fullyQualifiedEventName)\n\t\tconst resolvedDestination = eventDiskUtil.resolveListenerPath(\n\t\t\tdestinationDir,\n\t\t\tevent as any\n\t\t)\n\n\t\tconst relativeTypesFile = this.resolveSchemaTypesFile({\n\t\t\tnamespace: event.eventNamespace,\n\t\t\tschemaTypesLookupDir,\n\t\t\tresolvedDestination,\n\t\t})\n\n\t\tconst listenerContents = this.templates.listener({\n\t\t\t...options,\n\t\t\tschemaTypesFile: relativeTypesFile,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tlistenerContents,\n\t\t\t`Listener for ${fullyQualifiedEventName}.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeListenerMap(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tlisteners: ListenerTemplateItem[]\n\t\t}\n\t) {\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'listeners.ts')\n\t\tconst contents = this.templates.listeners({ listeners: options.listeners })\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'All your listeners imported to one place for your skill to use when booting!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic async writeEvent(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tnameCamel: string\n\t\t\tnameKebab: string\n\t\t\tversion: string\n\t\t\tnameReadable: string\n\t\t\tisGlobal?: boolean\n\t\t}\n\t) {\n\t\tconst {\n\t\t\tversion,\n\t\t\tnameKebab,\n\t\t\tnameCamel,\n\t\t\tnameReadable,\n\t\t\tisGlobal = false,\n\t\t} = options\n\n\t\tconst templates: ({\n\t\t\tcontext?: any\n\t\t\ttemplateMethod:\n\t\t\t\t| 'eventEmitPayload'\n\t\t\t\t| 'eventEmitTarget'\n\t\t\t\t| 'eventResponsePayload'\n\t\t\t\t| 'permissionContractBuilder'\n\t\t\t\t| 'eventOptions'\n\t\t} & Omit<GeneratedFile, 'path'>)[] = [\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitPayload',\n\t\t\t\tname: 'emitPayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The payload that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventEmitTarget',\n\t\t\t\tname: 'emitTarget.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'The target that will be sent when you emit this event.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventResponsePayload',\n\t\t\t\tname: 'responsePayload.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'The payload that every listener will need to respond with. Delete this file for events that are fire and forget.',\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'emitPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Permissions someone else will need to emit your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Emit',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'permissionContractBuilder',\n\t\t\t\tname: 'listenPermissions.builder.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription:\n\t\t\t\t\t'Permissions someone else will need to listen to your event.',\n\t\t\t\tcontext: {\n\t\t\t\t\tnameCamel: nameCamel + 'Listen',\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\ttemplateMethod: 'eventOptions',\n\t\t\t\tname: 'event.options.ts',\n\t\t\t\taction: 'generated',\n\t\t\t\tdescription: 'Extra options that can be set for your event',\n\t\t\t\tcontext: {\n\t\t\t\t\tisGlobal,\n\t\t\t\t},\n\t\t\t},\n\t\t]\n\n\t\tconst files: GeneratedFile[] = []\n\n\t\tfor (const file of templates) {\n\t\t\tconst destination = eventDiskUtil.resolveEventPath(destinationDir, {\n\t\t\t\tfileName: file.name as any,\n\t\t\t\teventName: nameKebab,\n\t\t\t\tversion,\n\t\t\t})\n\n\t\t\tconst contents = this.templates[file.templateMethod]({\n\t\t\t\tnameCamel,\n\t\t\t\tnameReadable,\n\t\t\t\tversion,\n\t\t\t\t...file.context,\n\t\t\t})\n\n\t\t\tdiskUtil.writeFile(destination, contents)\n\n\t\t\tfiles.push({\n\t\t\t\t...file,\n\t\t\t\tpath: destination,\n\t\t\t})\n\t\t}\n\n\t\tawait this.lint(destinationDir)\n\n\t\treturn files\n\t}\n\n\tprivate resolveSchemaTypesFile(options: {\n\t\tnamespace?: string\n\t\tschemaTypesLookupDir: string\n\t\tresolvedDestination: string\n\t}) {\n\t\tconst { schemaTypesLookupDir, resolvedDestination, namespace } = options\n\n\t\tif (!namespace) {\n\t\t\treturn '@sprucelabs/mercury-types'\n\t\t}\n\n\t\tconst schemaTypesFile = pathUtil.join(\n\t\t\tschemaTypesLookupDir,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet relativeTypesFile = diskUtil.resolveRelativePath(\n\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\tschemaTypesFile\n\t\t)\n\n\t\trelativeTypesFile = relativeTypesFile.replace(\n\t\t\tpathUtil.extname(relativeTypesFile),\n\t\t\t''\n\t\t)\n\n\t\treturn relativeTypesFile\n\t}\n}\n\nexport function generateEventContractFileName(options: {\n\tnameCamel: string\n\tversion: string\n}): string {\n\treturn `${options.nameCamel}.${options.version}.contract.ts`\n}\n"],"mappings":"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"}
@@ -359,7 +359,7 @@ var SchemaWriter = /*#__PURE__*/function (_AbstractWriter) {
359
359
  destination: destinationDir,
360
360
  schema: options.schema
361
361
  });
362
- typesFile = options.typesFile ? _path["default"].relative(_path["default"].dirname(resolvedDestination), options.typesFile) : undefined;
362
+ typesFile = options.typesFile ? _spruceSkillUtils.diskUtil.resolveRelativePath(_path["default"].dirname(resolvedDestination), options.typesFile) : undefined;
363
363
 
364
364
  if (typesFile) {
365
365
  typesFile = typesFile.replace(_path["default"].extname(typesFile), '');
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaWriter.js","names":["SchemaWriter","filename","templateFuncName","description","destinationDir","options","ui","startLoading","nameCamel","resolvedBuilderDestination","shouldEnableVersioning","pathUtil","resolve","versionUtil","resolveNewLatestPath","version","LATEST_HANDLEBARS","diskUtil","doesFileExist","SpruceError","code","schemaId","destination","builderContent","templates","schemaBuilder","writeFileIfChangedMixinResults","results","lint","fieldTemplateItems","fieldTemplates","fileAndFunc","resolvedDestination","path","join","contents","destinationDirOrFilename","schemaTemplateItems","valueTypes","typesTemplate","resolvedTypesDestination","resolveFilenameWithFallback","DEFAULT_SCHEMA_TYPES_FILENAME","localItems","filter","i","importFrom","length","schemaTypesContents","schemasTypes","globalSchemaNamespace","writeAllSchemas","dirname","typesFile","allSchemaResults","push","item","writeSchema","schemaResults","registerBuiltSchemas","schemaDiskUtil","resolvePath","schema","relative","undefined","replace","extname","schemaContents","schemaFile","shouldImportCoreSchemas","id","cwd","resolveHashSprucePath","pluginContents","schemaPlugin","AbstractWriter"],"sources":["../../../../src/features/schema/writers/SchemaWriter.ts"],"sourcesContent":["import path from 'path'\nimport pathUtil from 'path'\nimport { FieldTemplateItem, SchemaTemplateItem } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tLATEST_HANDLEBARS,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tSchemaBuilderTemplateItem,\n\tValueTypes,\n} from '@sprucelabs/spruce-templates'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter, { WriteResults } from '../../../writers/AbstractWriter'\nimport schemaDiskUtil from '../utilities/schemaDisk.utility'\n\ninterface WriteFieldTypesOptions {\n\tfieldTemplateItems: FieldTemplateItem[]\n}\n\n// eslint-disable-next-line no-redeclare\nexport interface GenerateSchemaTypesOptions {\n\tfieldTemplateItems: FieldTemplateItem[]\n\tschemaTemplateItems: SchemaTemplateItem[]\n\tvalueTypes: ValueTypes\n\tglobalSchemaNamespace?: string\n\ttypesTemplate?: string\n\tregisterBuiltSchemas?: boolean\n\tshouldImportCoreSchemas: boolean\n}\n\nexport default class SchemaWriter extends AbstractWriter {\n\tprivate readonly fieldTemplates: {\n\t\tfilename: string\n\t\ttemplateFuncName: 'fieldsTypes' | 'fieldClassMap'\n\t\tdescription: string\n\t}[] = [\n\t\t{\n\t\t\tfilename: 'fields.types.ts',\n\t\t\ttemplateFuncName: 'fieldsTypes',\n\t\t\tdescription:\n\t\t\t\t'All the interfaces generated for every type of schema field (text, number, address, etc).',\n\t\t},\n\t\t{\n\t\t\tfilename: 'fieldClassMap.ts',\n\t\t\ttemplateFuncName: 'fieldClassMap',\n\t\t\tdescription:\n\t\t\t\t'An object that is injected into the FieldFactory and ensures 3rd party fields are integrated.',\n\t\t},\n\t]\n\n\tpublic async writeBuilder(\n\t\tdestinationDir: string,\n\t\toptions: SchemaBuilderTemplateItem & {\n\t\t\tshouldEnableVersioning?: boolean\n\t\t\tversion?: string\n\t\t}\n\t): Promise<WriteResults> {\n\t\tthis.ui.startLoading('Writing builder...')\n\n\t\tconst filename = `${options.nameCamel}.builder.ts`\n\n\t\tconst resolvedBuilderDestination =\n\t\t\toptions.shouldEnableVersioning === false\n\t\t\t\t? pathUtil.resolve(destinationDir, filename)\n\t\t\t\t: versionUtil.resolveNewLatestPath(\n\t\t\t\t\t\tdestinationDir,\n\t\t\t\t\t\toptions.version ?? LATEST_HANDLEBARS,\n\t\t\t\t\t\tfilename\n\t\t\t\t )\n\n\t\tif (diskUtil.doesFileExist(resolvedBuilderDestination)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SCHEMA_EXISTS',\n\t\t\t\tschemaId: options.nameCamel,\n\t\t\t\tdestination: destinationDir,\n\t\t\t})\n\t\t}\n\n\t\tconst builderContent = this.templates.schemaBuilder(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedBuilderDestination,\n\t\t\tbuilderContent,\n\t\t\t'The source of truth for building your schemas and their types. Run spruce sync.errors when you change this.'\n\t\t)\n\n\t\tawait this.lint(resolvedBuilderDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeFieldTypes(\n\t\tdestinationDir: string,\n\t\toptions: WriteFieldTypesOptions\n\t): Promise<WriteResults> {\n\t\tthis.ui.startLoading('Checking schema field types...')\n\n\t\tconst { fieldTemplateItems } = options\n\n\t\tlet results: WriteResults = []\n\n\t\tfor (const fileAndFunc of this.fieldTemplates) {\n\t\t\tconst { filename, templateFuncName, description } = fileAndFunc\n\n\t\t\tconst resolvedDestination = path.join(destinationDir, 'fields', filename)\n\n\t\t\tconst contents = this.templates[templateFuncName]({\n\t\t\t\tfieldTemplateItems,\n\t\t\t})\n\n\t\t\tresults = await this.writeFileIfChangedMixinResults(\n\t\t\t\tresolvedDestination,\n\t\t\t\tcontents,\n\t\t\t\tdescription,\n\t\t\t\tresults\n\t\t\t)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tpublic async writeSchemasAndTypes(\n\t\tdestinationDirOrFilename: string,\n\t\toptions: GenerateSchemaTypesOptions\n\t): Promise<WriteResults> {\n\t\tconst {\n\t\t\tfieldTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\tvalueTypes,\n\t\t\ttypesTemplate,\n\t\t} = options\n\n\t\tconst resolvedTypesDestination = this.resolveFilenameWithFallback(\n\t\t\tdestinationDirOrFilename,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet results: WriteResults = []\n\t\tthis.ui.startLoading('Generating schema types...')\n\n\t\tconst localItems = schemaTemplateItems.filter((i) => !i.importFrom)\n\n\t\tif (localItems.length > 0) {\n\t\t\tconst schemaTypesContents = this.templates.schemasTypes({\n\t\t\t\tschemaTemplateItems: localItems,\n\t\t\t\tfieldTemplateItems,\n\t\t\t\tvalueTypes,\n\t\t\t\tglobalSchemaNamespace: options.globalSchemaNamespace,\n\t\t\t\ttypesTemplate,\n\t\t\t})\n\n\t\t\tresults = await this.writeFileIfChangedMixinResults(\n\t\t\t\tresolvedTypesDestination,\n\t\t\t\tschemaTypesContents,\n\t\t\t\t'Namespace for accessing all your schemas. Type `SpruceSchemas` in your IDE to get started. ⚡️'\n\t\t\t)\n\n\t\t\tawait this.lint(resolvedTypesDestination)\n\t\t}\n\n\t\tthis.ui.startLoading(\n\t\t\t`Checking ${schemaTemplateItems.length} schemas for changes...`\n\t\t)\n\n\t\tconst allSchemaResults = await this.writeAllSchemas(\n\t\t\tpathUtil.dirname(resolvedTypesDestination),\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\ttypesFile: resolvedTypesDestination,\n\t\t\t}\n\t\t)\n\n\t\tresults.push(...allSchemaResults)\n\n\t\treturn results\n\t}\n\n\tprivate async writeAllSchemas(\n\t\tdestinationDir: string,\n\t\toptions: GenerateSchemaTypesOptions & { typesFile?: string }\n\t): Promise<WriteResults> {\n\t\tconst results: WriteResults = []\n\n\t\tfor (const item of options.schemaTemplateItems) {\n\t\t\tconst schemaResults = await this.writeSchema(destinationDir, {\n\t\t\t\t...options,\n\t\t\t\t...item,\n\t\t\t})\n\t\t\tresults.push(...schemaResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tpublic async writeSchema(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tfieldTemplateItems: FieldTemplateItem[]\n\t\t\tvalueTypes: ValueTypes\n\t\t\ttypesFile?: string\n\t\t\tregisterBuiltSchemas?: boolean\n\t\t\tshouldImportCoreSchemas: boolean\n\t\t} & SchemaTemplateItem\n\t) {\n\t\tconst {\n\t\t\tschemaTemplateItems,\n\t\t\tfieldTemplateItems,\n\t\t\tvalueTypes,\n\t\t\tregisterBuiltSchemas = true,\n\t\t\t...item\n\t\t} = options\n\n\t\tconst resolvedDestination = schemaDiskUtil.resolvePath({\n\t\t\tdestination: destinationDir,\n\t\t\tschema: options.schema,\n\t\t})\n\n\t\tlet typesFile = options.typesFile\n\t\t\t? pathUtil.relative(\n\t\t\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\t\t\toptions.typesFile\n\t\t\t )\n\t\t\t: undefined\n\n\t\tif (typesFile) {\n\t\t\ttypesFile = typesFile.replace(pathUtil.extname(typesFile), '')\n\t\t}\n\n\t\tconst schemaContents = this.templates.schema({\n\t\t\t...item,\n\t\t\tregisterBuiltSchemas,\n\t\t\tschemaTemplateItems,\n\t\t\tfieldTemplateItems,\n\t\t\tvalueTypes,\n\t\t\ttypesFile,\n\t\t\tschemaFile:\n\t\t\t\titem.importFrom && options.shouldImportCoreSchemas\n\t\t\t\t\t? `schema/imported.schema.ts.hbs`\n\t\t\t\t\t: undefined,\n\t\t})\n\n\t\treturn this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tschemaContents,\n\t\t\t`${\n\t\t\t\titem.schema.description ? `${item.schema.description} ` : ''\n\t\t\t}This is the schema generated by ${\n\t\t\t\titem.id\n\t\t\t}.builder.ts. AUTOGENERATED. DO NOT EDIT.`\n\t\t)\n\t}\n\n\tpublic async writeValueTypes(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tfieldTemplateItems: FieldTemplateItem[]\n\t\t\tglobalSchemaNamespace?: string\n\t\t}\n\t): Promise<WriteResults> {\n\t\tconst contents = this.templates.valueTypes(options)\n\t\tconst destination = pathUtil.join(destinationDir, 'tmp', 'valueType.tmp.ts')\n\n\t\treturn this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'For constructing what goes to the right of the : after each property in the interface.'\n\t\t)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'schema.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.schemaPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Enable schema support in your skill.'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaWriter.js","names":["SchemaWriter","filename","templateFuncName","description","destinationDir","options","ui","startLoading","nameCamel","resolvedBuilderDestination","shouldEnableVersioning","pathUtil","resolve","versionUtil","resolveNewLatestPath","version","LATEST_HANDLEBARS","diskUtil","doesFileExist","SpruceError","code","schemaId","destination","builderContent","templates","schemaBuilder","writeFileIfChangedMixinResults","results","lint","fieldTemplateItems","fieldTemplates","fileAndFunc","resolvedDestination","path","join","contents","destinationDirOrFilename","schemaTemplateItems","valueTypes","typesTemplate","resolvedTypesDestination","resolveFilenameWithFallback","DEFAULT_SCHEMA_TYPES_FILENAME","localItems","filter","i","importFrom","length","schemaTypesContents","schemasTypes","globalSchemaNamespace","writeAllSchemas","dirname","typesFile","allSchemaResults","push","item","writeSchema","schemaResults","registerBuiltSchemas","schemaDiskUtil","resolvePath","schema","resolveRelativePath","undefined","replace","extname","schemaContents","schemaFile","shouldImportCoreSchemas","id","cwd","resolveHashSprucePath","pluginContents","schemaPlugin","AbstractWriter"],"sources":["../../../../src/features/schema/writers/SchemaWriter.ts"],"sourcesContent":["import path from 'path'\nimport pathUtil from 'path'\nimport { FieldTemplateItem, SchemaTemplateItem } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tLATEST_HANDLEBARS,\n\tDEFAULT_SCHEMA_TYPES_FILENAME,\n} from '@sprucelabs/spruce-skill-utils'\nimport {\n\tSchemaBuilderTemplateItem,\n\tValueTypes,\n} from '@sprucelabs/spruce-templates'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter, { WriteResults } from '../../../writers/AbstractWriter'\nimport schemaDiskUtil from '../utilities/schemaDisk.utility'\n\ninterface WriteFieldTypesOptions {\n\tfieldTemplateItems: FieldTemplateItem[]\n}\n\n// eslint-disable-next-line no-redeclare\nexport interface GenerateSchemaTypesOptions {\n\tfieldTemplateItems: FieldTemplateItem[]\n\tschemaTemplateItems: SchemaTemplateItem[]\n\tvalueTypes: ValueTypes\n\tglobalSchemaNamespace?: string\n\ttypesTemplate?: string\n\tregisterBuiltSchemas?: boolean\n\tshouldImportCoreSchemas: boolean\n}\n\nexport default class SchemaWriter extends AbstractWriter {\n\tprivate readonly fieldTemplates: {\n\t\tfilename: string\n\t\ttemplateFuncName: 'fieldsTypes' | 'fieldClassMap'\n\t\tdescription: string\n\t}[] = [\n\t\t{\n\t\t\tfilename: 'fields.types.ts',\n\t\t\ttemplateFuncName: 'fieldsTypes',\n\t\t\tdescription:\n\t\t\t\t'All the interfaces generated for every type of schema field (text, number, address, etc).',\n\t\t},\n\t\t{\n\t\t\tfilename: 'fieldClassMap.ts',\n\t\t\ttemplateFuncName: 'fieldClassMap',\n\t\t\tdescription:\n\t\t\t\t'An object that is injected into the FieldFactory and ensures 3rd party fields are integrated.',\n\t\t},\n\t]\n\n\tpublic async writeBuilder(\n\t\tdestinationDir: string,\n\t\toptions: SchemaBuilderTemplateItem & {\n\t\t\tshouldEnableVersioning?: boolean\n\t\t\tversion?: string\n\t\t}\n\t): Promise<WriteResults> {\n\t\tthis.ui.startLoading('Writing builder...')\n\n\t\tconst filename = `${options.nameCamel}.builder.ts`\n\n\t\tconst resolvedBuilderDestination =\n\t\t\toptions.shouldEnableVersioning === false\n\t\t\t\t? pathUtil.resolve(destinationDir, filename)\n\t\t\t\t: versionUtil.resolveNewLatestPath(\n\t\t\t\t\t\tdestinationDir,\n\t\t\t\t\t\toptions.version ?? LATEST_HANDLEBARS,\n\t\t\t\t\t\tfilename\n\t\t\t\t )\n\n\t\tif (diskUtil.doesFileExist(resolvedBuilderDestination)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SCHEMA_EXISTS',\n\t\t\t\tschemaId: options.nameCamel,\n\t\t\t\tdestination: destinationDir,\n\t\t\t})\n\t\t}\n\n\t\tconst builderContent = this.templates.schemaBuilder(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedBuilderDestination,\n\t\t\tbuilderContent,\n\t\t\t'The source of truth for building your schemas and their types. Run spruce sync.errors when you change this.'\n\t\t)\n\n\t\tawait this.lint(resolvedBuilderDestination)\n\n\t\treturn results\n\t}\n\n\tpublic async writeFieldTypes(\n\t\tdestinationDir: string,\n\t\toptions: WriteFieldTypesOptions\n\t): Promise<WriteResults> {\n\t\tthis.ui.startLoading('Checking schema field types...')\n\n\t\tconst { fieldTemplateItems } = options\n\n\t\tlet results: WriteResults = []\n\n\t\tfor (const fileAndFunc of this.fieldTemplates) {\n\t\t\tconst { filename, templateFuncName, description } = fileAndFunc\n\n\t\t\tconst resolvedDestination = path.join(destinationDir, 'fields', filename)\n\n\t\t\tconst contents = this.templates[templateFuncName]({\n\t\t\t\tfieldTemplateItems,\n\t\t\t})\n\n\t\t\tresults = await this.writeFileIfChangedMixinResults(\n\t\t\t\tresolvedDestination,\n\t\t\t\tcontents,\n\t\t\t\tdescription,\n\t\t\t\tresults\n\t\t\t)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tpublic async writeSchemasAndTypes(\n\t\tdestinationDirOrFilename: string,\n\t\toptions: GenerateSchemaTypesOptions\n\t): Promise<WriteResults> {\n\t\tconst {\n\t\t\tfieldTemplateItems,\n\t\t\tschemaTemplateItems,\n\t\t\tvalueTypes,\n\t\t\ttypesTemplate,\n\t\t} = options\n\n\t\tconst resolvedTypesDestination = this.resolveFilenameWithFallback(\n\t\t\tdestinationDirOrFilename,\n\t\t\tDEFAULT_SCHEMA_TYPES_FILENAME\n\t\t)\n\n\t\tlet results: WriteResults = []\n\t\tthis.ui.startLoading('Generating schema types...')\n\n\t\tconst localItems = schemaTemplateItems.filter((i) => !i.importFrom)\n\n\t\tif (localItems.length > 0) {\n\t\t\tconst schemaTypesContents = this.templates.schemasTypes({\n\t\t\t\tschemaTemplateItems: localItems,\n\t\t\t\tfieldTemplateItems,\n\t\t\t\tvalueTypes,\n\t\t\t\tglobalSchemaNamespace: options.globalSchemaNamespace,\n\t\t\t\ttypesTemplate,\n\t\t\t})\n\n\t\t\tresults = await this.writeFileIfChangedMixinResults(\n\t\t\t\tresolvedTypesDestination,\n\t\t\t\tschemaTypesContents,\n\t\t\t\t'Namespace for accessing all your schemas. Type `SpruceSchemas` in your IDE to get started. ⚡️'\n\t\t\t)\n\n\t\t\tawait this.lint(resolvedTypesDestination)\n\t\t}\n\n\t\tthis.ui.startLoading(\n\t\t\t`Checking ${schemaTemplateItems.length} schemas for changes...`\n\t\t)\n\n\t\tconst allSchemaResults = await this.writeAllSchemas(\n\t\t\tpathUtil.dirname(resolvedTypesDestination),\n\t\t\t{\n\t\t\t\t...options,\n\t\t\t\ttypesFile: resolvedTypesDestination,\n\t\t\t}\n\t\t)\n\n\t\tresults.push(...allSchemaResults)\n\n\t\treturn results\n\t}\n\n\tprivate async writeAllSchemas(\n\t\tdestinationDir: string,\n\t\toptions: GenerateSchemaTypesOptions & { typesFile?: string }\n\t): Promise<WriteResults> {\n\t\tconst results: WriteResults = []\n\n\t\tfor (const item of options.schemaTemplateItems) {\n\t\t\tconst schemaResults = await this.writeSchema(destinationDir, {\n\t\t\t\t...options,\n\t\t\t\t...item,\n\t\t\t})\n\t\t\tresults.push(...schemaResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tpublic async writeSchema(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tfieldTemplateItems: FieldTemplateItem[]\n\t\t\tvalueTypes: ValueTypes\n\t\t\ttypesFile?: string\n\t\t\tregisterBuiltSchemas?: boolean\n\t\t\tshouldImportCoreSchemas: boolean\n\t\t} & SchemaTemplateItem\n\t) {\n\t\tconst {\n\t\t\tschemaTemplateItems,\n\t\t\tfieldTemplateItems,\n\t\t\tvalueTypes,\n\t\t\tregisterBuiltSchemas = true,\n\t\t\t...item\n\t\t} = options\n\n\t\tconst resolvedDestination = schemaDiskUtil.resolvePath({\n\t\t\tdestination: destinationDir,\n\t\t\tschema: options.schema,\n\t\t})\n\n\t\tlet typesFile = options.typesFile\n\t\t\t? diskUtil.resolveRelativePath(\n\t\t\t\t\tpathUtil.dirname(resolvedDestination),\n\t\t\t\t\toptions.typesFile\n\t\t\t )\n\t\t\t: undefined\n\n\t\tif (typesFile) {\n\t\t\ttypesFile = typesFile.replace(pathUtil.extname(typesFile), '')\n\t\t}\n\n\t\tconst schemaContents = this.templates.schema({\n\t\t\t...item,\n\t\t\tregisterBuiltSchemas,\n\t\t\tschemaTemplateItems,\n\t\t\tfieldTemplateItems,\n\t\t\tvalueTypes,\n\t\t\ttypesFile,\n\t\t\tschemaFile:\n\t\t\t\titem.importFrom && options.shouldImportCoreSchemas\n\t\t\t\t\t? `schema/imported.schema.ts.hbs`\n\t\t\t\t\t: undefined,\n\t\t})\n\n\t\treturn this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\tschemaContents,\n\t\t\t`${\n\t\t\t\titem.schema.description ? `${item.schema.description} ` : ''\n\t\t\t}This is the schema generated by ${\n\t\t\t\titem.id\n\t\t\t}.builder.ts. AUTOGENERATED. DO NOT EDIT.`\n\t\t)\n\t}\n\n\tpublic async writeValueTypes(\n\t\tdestinationDir: string,\n\t\toptions: {\n\t\t\tschemaTemplateItems: SchemaTemplateItem[]\n\t\t\tfieldTemplateItems: FieldTemplateItem[]\n\t\t\tglobalSchemaNamespace?: string\n\t\t}\n\t): Promise<WriteResults> {\n\t\tconst contents = this.templates.valueTypes(options)\n\t\tconst destination = pathUtil.join(destinationDir, 'tmp', 'valueType.tmp.ts')\n\n\t\treturn this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'For constructing what goes to the right of the : after each property in the interface.'\n\t\t)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'schema.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.schemaPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Enable schema support in your skill.'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
@@ -320,7 +320,7 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
320
320
  name: match.name,
321
321
  label: match.label,
322
322
  isDefaultExport: match.isDefaultExport,
323
- importPath: (_match$import = match["import"]) !== null && _match$import !== void 0 ? _match$import : _path["default"].relative(resolvedDestination, //@ts-ignore
323
+ importPath: (_match$import = match["import"]) !== null && _match$import !== void 0 ? _match$import : _spruceSkillUtils.diskUtil.resolveRelativePath(resolvedDestination, //@ts-ignore
324
324
  match.path.replace(_path["default"].extname(match.path), ''))
325
325
  };
326
326
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CreateAction.js","names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","stopLoading","buildParentClassCandidates","candidates","doesDirExist","promptForSubDir","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","pathUtil","relative","path","replace","extname","AbstractAction"],"sources":["../../../../src/features/test/actions/CreateAction.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tpathUtil.relative(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CreateAction.js","names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","stopLoading","buildParentClassCandidates","candidates","doesDirExist","promptForSubDir","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","resolveRelativePath","path","replace","pathUtil","extname","AbstractAction"],"sources":["../../../../src/features/test/actions/CreateAction.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tdiskUtil.resolveRelativePath(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"mappings":"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"}
@@ -25,8 +25,6 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
25
25
 
26
26
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
27
 
28
- var _path = _interopRequireDefault(require("path"));
29
-
30
28
  var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
31
29
 
32
30
  var _SpruceError = _interopRequireDefault(require("../../../errors/SpruceError"));
@@ -107,7 +105,7 @@ var ViewWriter = /*#__PURE__*/function (_AbstractWriter) {
107
105
  value: function removeFileExtensionsFromTemplateItems(vcTemplateItems, destinationDir) {
108
106
  return vcTemplateItems.map(function (i) {
109
107
  return _objectSpread(_objectSpread({}, i), {}, {
110
- path: _path["default"].relative(destinationDir, i.path).replace('.ts', '')
108
+ path: _spruceSkillUtils.diskUtil.resolveRelativePath(destinationDir, i.path).replace('.ts', '')
111
109
  });
112
110
  });
113
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ViewWriter.js","names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","pathUtil","relative","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: pathUtil.relative(destinationDir, i.path).replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ViewWriter.js","names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","resolveRelativePath","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: diskUtil\n\t\t\t\t.resolveRelativePath(destinationDir, i.path)\n\t\t\t\t.replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  declare type Command = RegExp | string;
2
2
  export default class CommandFaker {
3
- fakeRebuild(code?: number): void;
4
3
  fakeCommand(command: Command, code?: number): void;
4
+ fakeRebuild(code?: number): void;
5
5
  fakeCleanBuild(code?: number): void;
6
6
  fakeBuild(code?: number): void;
7
+ fakeInstall(code?: number): void;
7
8
  }
8
9
  export {};
@@ -19,13 +19,6 @@ var CommandFaker = /*#__PURE__*/function () {
19
19
  }
20
20
 
21
21
  (0, _createClass2["default"])(CommandFaker, [{
22
- key: "fakeRebuild",
23
- value: function fakeRebuild() {
24
- var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
25
- var command = new RegExp(/yarn rebuild/gi);
26
- this.fakeCommand(command, code);
27
- }
28
- }, {
29
22
  key: "fakeCommand",
30
23
  value: function fakeCommand(command) {
31
24
  var code = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
@@ -34,6 +27,13 @@ var CommandFaker = /*#__PURE__*/function () {
34
27
  code: code
35
28
  });
36
29
  }
30
+ }, {
31
+ key: "fakeRebuild",
32
+ value: function fakeRebuild() {
33
+ var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
34
+ var command = new RegExp(/yarn rebuild/gi);
35
+ this.fakeCommand(command, code);
36
+ }
37
37
  }, {
38
38
  key: "fakeCleanBuild",
39
39
  value: function fakeCleanBuild() {
@@ -46,6 +46,12 @@ var CommandFaker = /*#__PURE__*/function () {
46
46
  var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
47
47
  this.fakeCommand('yarn build.dev', code);
48
48
  }
49
+ }, {
50
+ key: "fakeInstall",
51
+ value: function fakeInstall() {
52
+ var code = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
53
+ this.fakeCommand(/[\s\S]*?install/gi, code);
54
+ }
49
55
  }]);
50
56
  return CommandFaker;
51
57
  }();
@@ -1 +1 @@
1
- {"version":3,"file":"CommandFaker.js","names":["CommandFaker","code","command","RegExp","fakeCommand","CommandService"],"sources":["../../src/tests/CommandFaker.ts"],"sourcesContent":["import CommandService from '../services/CommandService'\n\ntype Command = RegExp | string\n\nexport default class CommandFaker {\n\tpublic fakeRebuild(code = 0) {\n\t\tconst command = new RegExp(/yarn rebuild/gis)\n\t\tthis.fakeCommand(command, code)\n\t}\n\n\tpublic fakeCommand(command: Command, code = 0) {\n\t\tCommandService.fakeCommand(command, {\n\t\t\tcode,\n\t\t})\n\t}\n\n\tpublic fakeCleanBuild(code = 0) {\n\t\tthis.fakeCommand('yarn clean.build', code)\n\t}\n\n\tpublic fakeBuild(code = 0) {\n\t\tthis.fakeCommand('yarn build.dev', code)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;IAIqBA,Y;;;;;;;WACpB,uBAA6B;MAAA,IAAVC,IAAU,uEAAH,CAAG;MAC5B,IAAMC,OAAO,GAAG,IAAIC,MAAJ,CAAW,gBAAX,CAAhB;MACA,KAAKC,WAAL,CAAiBF,OAAjB,EAA0BD,IAA1B;IACA;;;WAED,qBAAmBC,OAAnB,EAA+C;MAAA,IAAVD,IAAU,uEAAH,CAAG;;MAC9CI,2BAAeD,WAAf,CAA2BF,OAA3B,EAAoC;QACnCD,IAAI,EAAJA;MADmC,CAApC;IAGA;;;WAED,0BAAgC;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC/B,KAAKG,WAAL,CAAiB,kBAAjB,EAAqCH,IAArC;IACA;;;WAED,qBAA2B;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC1B,KAAKG,WAAL,CAAiB,gBAAjB,EAAmCH,IAAnC;IACA"}
1
+ {"version":3,"file":"CommandFaker.js","names":["CommandFaker","command","code","CommandService","fakeCommand","RegExp"],"sources":["../../src/tests/CommandFaker.ts"],"sourcesContent":["import CommandService from '../services/CommandService'\n\ntype Command = RegExp | string\n\nexport default class CommandFaker {\n\tpublic fakeCommand(command: Command, code = 0) {\n\t\tCommandService.fakeCommand(command, {\n\t\t\tcode,\n\t\t})\n\t}\n\n\tpublic fakeRebuild(code = 0) {\n\t\tconst command = new RegExp(/yarn rebuild/gis)\n\t\tthis.fakeCommand(command, code)\n\t}\n\n\tpublic fakeCleanBuild(code = 0) {\n\t\tthis.fakeCommand('yarn clean.build', code)\n\t}\n\n\tpublic fakeBuild(code = 0) {\n\t\tthis.fakeCommand('yarn build.dev', code)\n\t}\n\n\tpublic fakeInstall(code = 0) {\n\t\tthis.fakeCommand(/.*?install/gis, code)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;;IAIqBA,Y;;;;;;;WACpB,qBAAmBC,OAAnB,EAA+C;MAAA,IAAVC,IAAU,uEAAH,CAAG;;MAC9CC,2BAAeC,WAAf,CAA2BH,OAA3B,EAAoC;QACnCC,IAAI,EAAJA;MADmC,CAApC;IAGA;;;WAED,uBAA6B;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC5B,IAAMD,OAAO,GAAG,IAAII,MAAJ,CAAW,gBAAX,CAAhB;MACA,KAAKD,WAAL,CAAiBH,OAAjB,EAA0BC,IAA1B;IACA;;;WAED,0BAAgC;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC/B,KAAKE,WAAL,CAAiB,kBAAjB,EAAqCF,IAArC;IACA;;;WAED,qBAA2B;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC1B,KAAKE,WAAL,CAAiB,gBAAjB,EAAmCF,IAAnC;IACA;;;WAED,uBAA6B;MAAA,IAAVA,IAAU,uEAAH,CAAG;MAC5B,KAAKE,WAAL,CAAiB,mBAAjB,EAAkCF,IAAlC;IACA"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  },
20
20
  "license": "MIT",
21
- "version": "15.4.0",
21
+ "version": "15.4.1",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -77,18 +77,18 @@
77
77
  "@babel/runtime": "^7.17.9",
78
78
  "@jest/reporters": "^28.0.3",
79
79
  "@sprucelabs/error": "^5.0.448",
80
- "@sprucelabs/heartwood-view-controllers": "^70.15.35",
80
+ "@sprucelabs/heartwood-view-controllers": "^70.15.38",
81
81
  "@sprucelabs/jest-json-reporter": "^6.0.371",
82
- "@sprucelabs/mercury-client": "^22.2.84",
83
- "@sprucelabs/mercury-event-emitter": "^22.2.84",
84
- "@sprucelabs/mercury-types": "^27.0.251",
82
+ "@sprucelabs/mercury-client": "^22.2.86",
83
+ "@sprucelabs/mercury-event-emitter": "^22.2.86",
84
+ "@sprucelabs/mercury-types": "^27.0.252",
85
85
  "@sprucelabs/schema": "^27.1.66",
86
- "@sprucelabs/spruce-core-schemas": "^25.0.106",
87
- "@sprucelabs/spruce-event-plugin": "^30.4.39",
88
- "@sprucelabs/spruce-event-utils": "^19.1.111",
89
- "@sprucelabs/spruce-skill-booter": "^30.4.39",
90
- "@sprucelabs/spruce-skill-utils": "^25.0.106",
91
- "@sprucelabs/spruce-templates": "^15.4.0",
86
+ "@sprucelabs/spruce-core-schemas": "^25.0.107",
87
+ "@sprucelabs/spruce-event-plugin": "^30.4.41",
88
+ "@sprucelabs/spruce-event-utils": "^19.1.113",
89
+ "@sprucelabs/spruce-skill-booter": "^30.4.41",
90
+ "@sprucelabs/spruce-skill-utils": "^25.1.0",
91
+ "@sprucelabs/spruce-templates": "^15.4.1",
92
92
  "@typescript-eslint/eslint-plugin": "^5.17.0",
93
93
  "@typescript-eslint/parser": "^5.17.0",
94
94
  "cfonts": "^2.10.1",
@@ -96,7 +96,7 @@
96
96
  "chokidar": "^3.5.3",
97
97
  "cli-table3": "^0.6.2",
98
98
  "commander": "7.2.0",
99
- "core-js": "^3.22.3",
99
+ "core-js": "^3.22.4",
100
100
  "emphasize": "4.2.0",
101
101
  "fs-extra": "^10.1.0",
102
102
  "gifwrap": "^0.10.1",
@@ -119,14 +119,14 @@
119
119
  "uuid": "^8.3.2"
120
120
  },
121
121
  "devDependencies": {
122
- "@sprucelabs/data-stores": "^9.0.118",
122
+ "@sprucelabs/data-stores": "^9.0.121",
123
123
  "@sprucelabs/jest-sheets-reporter": "^1.3.43",
124
- "@sprucelabs/mercury-core-events": "^3.2.34",
124
+ "@sprucelabs/mercury-core-events": "^3.2.36",
125
125
  "@sprucelabs/resolve-path-aliases": "^1.1.35",
126
- "@sprucelabs/spruce-conversation-plugin": "^30.4.39",
127
- "@sprucelabs/spruce-deploy-plugin": "^30.4.39",
128
- "@sprucelabs/spruce-store-plugin": "^30.4.39",
129
- "@sprucelabs/spruce-test-fixtures": "^30.4.39",
126
+ "@sprucelabs/spruce-conversation-plugin": "^30.4.41",
127
+ "@sprucelabs/spruce-deploy-plugin": "^30.4.41",
128
+ "@sprucelabs/spruce-store-plugin": "^30.4.41",
129
+ "@sprucelabs/spruce-test-fixtures": "^30.4.41",
130
130
  "@sprucelabs/test": "^7.7.309",
131
131
  "@sprucelabs/test-utils": "^3.0.536",
132
132
  "@types/blessed": "^0.1.19",
@@ -165,7 +165,7 @@
165
165
  "ts-jest": "^27.1.4",
166
166
  "ts-node": "^10.7.0",
167
167
  "tsc-watch": "^5.0.3",
168
- "tsconfig-paths": "^3.14.1",
168
+ "tsconfig-paths": "^4.0.0",
169
169
  "typescript": "^4.6.4"
170
170
  },
171
171
  "testSkillCache": {
@@ -597,5 +597,5 @@
597
597
  "terminal-kit"
598
598
  ]
599
599
  },
600
- "gitHead": "54fcd462c680b30429b7fe4952aaade2962ae9e7"
600
+ "gitHead": "926bdf965fc379cccc504fe6aa987c0948675c68"
601
601
  }
@@ -2,7 +2,7 @@ import { SelectChoice } from '@sprucelabs/schema'
2
2
  import { diskUtil } from '@sprucelabs/spruce-skill-utils'
3
3
  import { test, assert } from '@sprucelabs/test'
4
4
  import { FeatureCode } from '../../../features/features.types'
5
- import CommandService from '../../../services/CommandService'
5
+ import CreateAction from '../../../features/test/actions/CreateAction'
6
6
  import AbstractTestTest from '../../../tests/AbstractTestTest'
7
7
  import testUtil from '../../../tests/utilities/test.utility'
8
8
 
@@ -113,9 +113,7 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
113
113
 
114
114
  @test()
115
115
  protected static async installingAFeatureRemovesLabelFromName() {
116
- CommandService.fakeCommand(new RegExp(/npm.*?install .*?/gis), {
117
- code: 0,
118
- })
116
+ this.commandFaker.fakeInstall()
119
117
 
120
118
  await this.installTests()
121
119
 
@@ -143,9 +141,7 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
143
141
 
144
142
  @test()
145
143
  protected static async selectingUninstalledTestInstallsTheFeature() {
146
- CommandService.fakeCommand(new RegExp(/npm.*?install .*?/gis), {
147
- code: 0,
148
- })
144
+ this.commandFaker.fakeInstall()
149
145
 
150
146
  for (const feat of featuresWithRegisteredTests) {
151
147
  this.cwd = diskUtil.createRandomTempDir()
@@ -174,6 +170,24 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
174
170
  }
175
171
  }
176
172
 
173
+ @test()
174
+ protected static relativePathsAddDotSlash() {
175
+ const action = this.Action('test', 'create') as CreateAction
176
+
177
+ //@ts-ignore
178
+ const actual = action.buildParentClassFromCandidate(
179
+ {
180
+ label: 'test',
181
+ name: 'AbstractTest',
182
+ path: this.resolvePath('test/AbstractTest'),
183
+ isDefaultExport: false,
184
+ },
185
+ this.resolvePath('test')
186
+ )
187
+
188
+ assert.isEqual(actual.importPath, './AbstractTest')
189
+ }
190
+
177
191
  private static async buildAndAssertTestFailsAsExpected() {
178
192
  await this.Service('build').build()
179
193
 
@@ -301,7 +301,7 @@ export default class EventWriter extends AbstractWriter {
301
301
  DEFAULT_SCHEMA_TYPES_FILENAME
302
302
  )
303
303
 
304
- let relativeTypesFile = pathUtil.relative(
304
+ let relativeTypesFile = diskUtil.resolveRelativePath(
305
305
  pathUtil.dirname(resolvedDestination),
306
306
  schemaTypesFile
307
307
  )
@@ -219,7 +219,7 @@ export default class SchemaWriter extends AbstractWriter {
219
219
  })
220
220
 
221
221
  let typesFile = options.typesFile
222
- ? pathUtil.relative(
222
+ ? diskUtil.resolveRelativePath(
223
223
  pathUtil.dirname(resolvedDestination),
224
224
  options.typesFile
225
225
  )
@@ -171,7 +171,7 @@ export default class CreateAction extends AbstractAction<OptionsSchema> {
171
171
  isDefaultExport: match.isDefaultExport,
172
172
  importPath:
173
173
  match.import ??
174
- pathUtil.relative(
174
+ diskUtil.resolveRelativePath(
175
175
  resolvedDestination,
176
176
  //@ts-ignore
177
177
  match.path.replace(pathUtil.extname(match.path), '')
@@ -1,4 +1,3 @@
1
- import pathUtil from 'path'
2
1
  import { diskUtil } from '@sprucelabs/spruce-skill-utils'
3
2
  import {
4
3
  VcTemplateItem,
@@ -61,7 +60,9 @@ export default class ViewWriter extends AbstractWriter {
61
60
  ): VcTemplateItem[] {
62
61
  return vcTemplateItems.map((i) => ({
63
62
  ...i,
64
- path: pathUtil.relative(destinationDir, i.path).replace('.ts', ''),
63
+ path: diskUtil
64
+ .resolveRelativePath(destinationDir, i.path)
65
+ .replace('.ts', ''),
65
66
  }))
66
67
  }
67
68
 
@@ -3,17 +3,17 @@ import CommandService from '../services/CommandService'
3
3
  type Command = RegExp | string
4
4
 
5
5
  export default class CommandFaker {
6
- public fakeRebuild(code = 0) {
7
- const command = new RegExp(/yarn rebuild/gis)
8
- this.fakeCommand(command, code)
9
- }
10
-
11
6
  public fakeCommand(command: Command, code = 0) {
12
7
  CommandService.fakeCommand(command, {
13
8
  code,
14
9
  })
15
10
  }
16
11
 
12
+ public fakeRebuild(code = 0) {
13
+ const command = new RegExp(/yarn rebuild/gis)
14
+ this.fakeCommand(command, code)
15
+ }
16
+
17
17
  public fakeCleanBuild(code = 0) {
18
18
  this.fakeCommand('yarn clean.build', code)
19
19
  }
@@ -21,4 +21,8 @@ export default class CommandFaker {
21
21
  public fakeBuild(code = 0) {
22
22
  this.fakeCommand('yarn build.dev', code)
23
23
  }
24
+
25
+ public fakeInstall(code = 0) {
26
+ this.fakeCommand(/.*?install/gis, code)
27
+ }
24
28
  }