@sprucelabs/spruce-cli 14.26.18 → 14.28.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.
Files changed (118) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/build/.spruce/errors/errors.types.d.ts +19 -0
  3. package/build/.spruce/errors/options.types.d.ts +4 -1
  4. package/build/.spruce/errors/spruceCli/dependencyExists.schema.d.ts +3 -0
  5. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js +28 -0
  6. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -0
  7. package/build/__tests__/behavioral/AddingADependency.test.d.ts +6 -3
  8. package/build/__tests__/behavioral/AddingADependency.test.js +116 -44
  9. package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
  10. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js +2 -2
  11. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
  12. package/build/__tests__/behavioral/LoggingInAsASkill.test.js +4 -4
  13. package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
  14. package/build/__tests__/behavioral/ManagingDependencies.test.js +3 -3
  15. package/build/__tests__/behavioral/ManagingDependencies.test.js.map +1 -1
  16. package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js +1 -1
  17. package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
  18. package/build/__tests__/behavioral/SettingRemote.test.js +1 -1
  19. package/build/__tests__/behavioral/SettingRemote.test.js.map +1 -1
  20. package/build/__tests__/behavioral/SettingUpVscode.test.js +3 -3
  21. package/build/__tests__/behavioral/SettingUpVscode.test.js.map +1 -1
  22. package/build/__tests__/behavioral/TestingDataStores.test.js +2 -2
  23. package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
  24. package/build/__tests__/behavioral/UpgradingANodeModule.test.d.ts +1 -0
  25. package/build/__tests__/behavioral/UpgradingANodeModule.test.js +50 -3
  26. package/build/__tests__/behavioral/UpgradingANodeModule.test.js.map +1 -1
  27. package/build/__tests__/behavioral/events/CreatingAListener.test.js +2 -2
  28. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  29. package/build/__tests__/behavioral/events/CreatingAnEvent.test.d.ts +3 -2
  30. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js +156 -106
  31. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
  32. package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js +6 -9
  33. package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
  34. package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js +7 -4
  35. package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
  36. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js +7 -7
  37. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js.map +1 -1
  38. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js +2 -2
  39. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js.map +1 -1
  40. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +1 -1
  41. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  42. package/build/__tests__/behavioral/views/CreatingASkillView.test.js +3 -3
  43. package/build/__tests__/behavioral/views/CreatingASkillView.test.js.map +1 -1
  44. package/build/__tests__/behavioral/views/TestingViewControllers.test.js +2 -2
  45. package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
  46. package/build/__tests__/implementation/ActionExecuter2.test.js +3 -3
  47. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  48. package/build/errors/SpruceError.js +4 -0
  49. package/build/errors/SpruceError.js.map +1 -1
  50. package/build/errors/dependencyExists.builder.d.ts +11 -0
  51. package/build/errors/dependencyExists.builder.js +22 -0
  52. package/build/errors/dependencyExists.builder.js.map +1 -0
  53. package/build/features/AbstractAction.js +1 -1
  54. package/build/features/AbstractAction.js.map +1 -1
  55. package/build/features/dependencies/actions/AddAction.js +22 -15
  56. package/build/features/dependencies/actions/AddAction.js.map +1 -1
  57. package/build/features/event/actions/CreateAction.js +1 -1
  58. package/build/features/event/actions/CreateAction.js.map +1 -1
  59. package/build/features/node/NodeFeature.d.ts +1 -0
  60. package/build/features/node/NodeFeature.js +83 -64
  61. package/build/features/node/NodeFeature.js.map +1 -1
  62. package/build/features/node/actions/UpgradeAction.js +20 -9
  63. package/build/features/node/actions/UpgradeAction.js.map +1 -1
  64. package/build/features/node/writers/NodeWriter.d.ts +5 -2
  65. package/build/features/node/writers/NodeWriter.js +37 -22
  66. package/build/features/node/writers/NodeWriter.js.map +1 -1
  67. package/build/features/skill/updaters/Updater.js +3 -1
  68. package/build/features/skill/updaters/Updater.js.map +1 -1
  69. package/build/interfaces/SpyInterface.d.ts +1 -1
  70. package/build/interfaces/SpyInterface.js +2 -2
  71. package/build/interfaces/SpyInterface.js.map +1 -1
  72. package/build/services/DependencyService.d.ts +1 -0
  73. package/build/services/DependencyService.js +18 -0
  74. package/build/services/DependencyService.js.map +1 -1
  75. package/build/tests/AbstractCliTest.js +1 -1
  76. package/build/tests/AbstractCliTest.js.map +1 -1
  77. package/build/tests/utilities/uiAssert.utility.d.ts +7 -0
  78. package/build/tests/utilities/uiAssert.utility.js +85 -0
  79. package/build/tests/utilities/uiAssert.utility.js.map +1 -0
  80. package/build/writers/AbstractWriter.d.ts +10 -10
  81. package/build/writers/AbstractWriter.js.map +1 -1
  82. package/package.json +34 -32
  83. package/src/.spruce/errors/errors.types.ts +29 -0
  84. package/src/.spruce/errors/options.types.ts +4 -1
  85. package/src/.spruce/errors/spruceCli/dependencyExists.schema.ts +22 -0
  86. package/src/__tests__/behavioral/AddingADependency.test.ts +45 -8
  87. package/src/__tests__/behavioral/InstallingASkillAtAnOrg.test.ts +3 -3
  88. package/src/__tests__/behavioral/LoggingInAsASkill.test.ts +4 -4
  89. package/src/__tests__/behavioral/ManagingDependencies.test.ts +3 -3
  90. package/src/__tests__/behavioral/RememberingUpgradeSelections.test.ts +1 -1
  91. package/src/__tests__/behavioral/SettingRemote.test.ts +1 -1
  92. package/src/__tests__/behavioral/SettingUpVscode.test.ts +3 -3
  93. package/src/__tests__/behavioral/TestingDataStores.test.ts +2 -2
  94. package/src/__tests__/behavioral/UpgradingANodeModule.test.ts +24 -0
  95. package/src/__tests__/behavioral/events/CreatingAListener.test.ts +2 -2
  96. package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +44 -22
  97. package/src/__tests__/behavioral/events/KeepingEventsInSync2.test.ts +1 -1
  98. package/src/__tests__/behavioral/schemas/KeepingSchemasInSync.test.ts +2 -0
  99. package/src/__tests__/behavioral/skill/UpgradingASkill.test.ts +7 -7
  100. package/src/__tests__/behavioral/skill/UpgradingASkill3.test.ts +2 -2
  101. package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
  102. package/src/__tests__/behavioral/views/CreatingASkillView.test.ts +3 -3
  103. package/src/__tests__/behavioral/views/TestingViewControllers.test.ts +2 -2
  104. package/src/__tests__/implementation/ActionExecuter2.test.ts +3 -3
  105. package/src/errors/SpruceError.ts +4 -0
  106. package/src/errors/dependencyExists.builder.ts +12 -0
  107. package/src/features/AbstractAction.ts +1 -4
  108. package/src/features/dependencies/actions/AddAction.ts +12 -5
  109. package/src/features/event/actions/CreateAction.ts +4 -1
  110. package/src/features/node/NodeFeature.ts +31 -25
  111. package/src/features/node/actions/UpgradeAction.ts +8 -1
  112. package/src/features/node/writers/NodeWriter.ts +38 -23
  113. package/src/features/skill/updaters/Updater.ts +2 -1
  114. package/src/interfaces/SpyInterface.ts +1 -1
  115. package/src/services/DependencyService.ts +14 -0
  116. package/src/tests/AbstractCliTest.ts +1 -1
  117. package/src/tests/utilities/uiAssert.utility.ts +45 -0
  118. package/src/writers/AbstractWriter.ts +15 -10
@@ -496,7 +496,7 @@ var SelectingAnAbstractTestClassTest = (_dec = (0, _test.test)(), _dec2 = (0, _t
496
496
  return this.waitForInput();
497
497
 
498
498
  case 3:
499
- last = this.ui.lastInvocation();
499
+ last = this.ui.getLastInvocation();
500
500
  _ref3 = (_last$options$options = last.options.options) !== null && _last$options$options !== void 0 ? _last$options$options : {}, choices = _ref3.choices;
501
501
  return _context9.abrupt("return", {
502
502
  promise: promise,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installTests","copyTestFiles","executeCreateUntilAbstractClassSelection","choices","promise","expected","assert","doesInclude","label","selectOptionBasedOnLabel","results","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","execute","cli","on","abstractClasses","name","isFalsy","errors","match","contents","diskUtil","readFile","CommandService","setMockResponse","RegExp","code","testFeature","getFeatureInstaller","getFeature","feat","install","features","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","ui","sendInput","value","isTrue","source","resolveTestPath","destination","resolvePath","copyDir","Action","type","nameReadable","nameCamel","waitForInput","last","lastInvocation","options","AbstractTestTest"],"mappings":"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","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\tawait this.installTests()\n\t\tawait this.copyTestFiles()\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\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.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\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.setMockResponse(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 selectingUninistalledTestInstallsTheFeature() {\n\t\tCommandService.setMockResponse(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 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 = 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\n\t\tconst last = this.ui.lastInvocation()\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"],"file":"SelectingAnAbstractTestClass.test.js"}
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installTests","copyTestFiles","executeCreateUntilAbstractClassSelection","choices","promise","expected","assert","doesInclude","label","selectOptionBasedOnLabel","results","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","execute","cli","on","abstractClasses","name","isFalsy","errors","match","contents","diskUtil","readFile","CommandService","setMockResponse","RegExp","code","testFeature","getFeatureInstaller","getFeature","feat","install","features","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","ui","sendInput","value","isTrue","source","resolveTestPath","destination","resolvePath","copyDir","Action","type","nameReadable","nameCamel","waitForInput","last","getLastInvocation","options","AbstractTestTest"],"mappings":"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","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\tawait this.installTests()\n\t\tawait this.copyTestFiles()\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\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.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\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.setMockResponse(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 selectingUninistalledTestInstallsTheFeature() {\n\t\tCommandService.setMockResponse(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 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 = 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\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"],"file":"SelectingAnAbstractTestClass.test.js"}
@@ -102,7 +102,7 @@ var CreatingASkillViewTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(
102
102
  return this.waitForInput();
103
103
 
104
104
  case 3:
105
- last = this.ui.lastInvocation();
105
+ last = this.ui.getLastInvocation();
106
106
 
107
107
  _test.assert.isEqual(last.command, 'confirm');
108
108
 
@@ -268,7 +268,7 @@ var CreatingASkillViewTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(
268
268
  return this.waitForInput();
269
269
 
270
270
  case 3:
271
- last = this.ui.lastInvocation();
271
+ last = this.ui.getLastInvocation();
272
272
 
273
273
  _test.assert.isEqual(last.command, 'prompt');
274
274
 
@@ -325,7 +325,7 @@ var CreatingASkillViewTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(
325
325
  return this.waitForInput();
326
326
 
327
327
  case 3:
328
- last = this.ui.lastInvocation();
328
+ last = this.ui.getLastInvocation();
329
329
 
330
330
  _test.assert.isEqual(last.command, 'prompt');
331
331
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/behavioral/views/CreatingASkillView.test.ts"],"names":["CreatingASkillViewTest","action","Action","assert","isFunction","execute","viewType","waitForInput","last","ui","lastInvocation","isEqual","command","reset","isRoot","results","isFalsy","errors","rootSvc","testUtil","assertFileByNameInGeneratedFiles","files","doesInclude","Service","check","contents","diskUtil","readFile","isTruthy","errorAssertUtil","assertError","name","promise","sendInput","dashboardVc","nameReadable","options","choices","value","appointmentsCard","buildTestfile","idInterfaceName","code","testFile","resolvePath","writeFile","importAll","imported","svcModel","svcId","vcModel","vcId","viewsFile","resolveHashSprucePath","viewContents","trim","AbstractSkillTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { errorAssertUtil } from '@sprucelabs/test-utils'\nimport CreateAction from '../../../features/view/actions/CreateAction'\nimport AbstractSkillTest from '../../../tests/AbstractSkillTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class CreatingASkillViewTest extends AbstractSkillTest {\n\tprotected static skillCacheKey = 'views'\n\tprivate static action: CreateAction\n\tprivate static rootSvc: string\n\tpublic static appointmentsCard: string\n\tprivate static dashboardVc: string\n\n\tprotected static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.action = this.Action('view', 'create') as CreateAction\n\t}\n\n\t@test()\n\tprotected static hasCreateAction() {\n\t\tassert.isFunction(this.action.execute)\n\t}\n\n\t@test()\n\tprotected static async asksIfRootSkillViewIfNotYetCreated() {\n\t\tvoid this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.lastInvocation()\n\n\t\tassert.isEqual(last.command, 'confirm')\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async canCreateRootSkillView() {\n\t\tconst results = await this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t\tisRoot: true,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.rootSvc = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'Root.svc.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tassert.doesInclude(this.rootSvc, 'skillViewControllers')\n\t}\n\n\t@test()\n\tprotected static async generatesValidRootSkillView() {\n\t\tawait this.Service('typeChecker').check(this.rootSvc)\n\t}\n\n\t@test()\n\tprotected static async rootSkillViewExtendsAbstractSkillViewController() {\n\t\tconst contents = diskUtil.readFile(this.rootSvc)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'export default class RootSkillViewController extends AbstractSkillViewController'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async cantCreateTwoRootSvcs() {\n\t\tconst results = await this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t\tisRoot: true,\n\t\t})\n\n\t\tassert.isTruthy(results.errors)\n\n\t\terrorAssertUtil.assertError(results.errors?.[0], 'SKILL_VIEW_EXISTS', {\n\t\t\tname: 'Root',\n\t\t})\n\t}\n\n\t@test()\n\tprotected static async asksForNamesIfCreatingSkillViewNotRoot() {\n\t\tconst promise = this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tlet last = this.ui.lastInvocation()\n\n\t\tassert.isEqual(last.command, 'prompt')\n\n\t\tawait this.ui.sendInput('Dashboard')\n\t\tawait this.ui.sendInput('\\n')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.dashboardVc = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'Dashboard.svc.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tassert.doesInclude(this.dashboardVc, 'skillViewControllers')\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async asksForViewModelWhenCreatingSkillView() {\n\t\tconst promise = this.action.execute({\n\t\t\tviewType: 'view',\n\t\t\tnameReadable: 'Appointments card',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.lastInvocation()\n\n\t\tassert.isEqual(last.command, 'prompt')\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tvalue: 'Card',\n\t\t})\n\n\t\tawait this.ui.sendInput('Card')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.appointmentsCard = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'AppointmentsCard.vc.ts',\n\t\t\tresults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static skillViewExtendsAbstractViewControllerWithProperView() {\n\t\tconst contents = diskUtil.readFile(this.appointmentsCard)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'export default class AppointmentsCardViewController extends AbstractViewController<Card>'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async nicelyTypesRootSkillViewController() {\n\t\tconst contents = this.buildTestfile({\n\t\t\tidInterfaceName: 'SkillViewControllerId',\n\t\t\tcode: `\nconst root = vcFactory.Controller('testing-views.root', {})\nexport const svcModel = root.render()\nexport const svcId: SkillViewControllerId = 'testing-views.root'`,\n\t\t})\n\n\t\tconst testFile = this.resolvePath('src', 'test.ts')\n\t\tdiskUtil.writeFile(testFile, contents)\n\n\t\tconst imported = await this.Service('import').importAll(testFile)\n\n\t\tassert.isTruthy(imported.svcModel)\n\t\tassert.isTruthy(imported.svcId)\n\t}\n\n\t@test()\n\tprotected static async nicelyTypesViewController() {\n\t\tconst contents = this.buildTestfile({\n\t\t\tidInterfaceName: 'ViewControllerId',\n\t\t\tcode: `\n\t\tconst apptCard = vcFactory.Controller('testing-views.appointments-card', {})\n\t\texport const vcModel = apptCard.render()\n\t\texport const vcId: ViewControllerId = 'testing-views.appointments-card'`,\n\t\t})\n\n\t\tconst testFile = this.resolvePath('src', 'test.ts')\n\t\tdiskUtil.writeFile(testFile, contents)\n\n\t\tconst imported = await this.Service('import').importAll(testFile)\n\n\t\tassert.isTruthy(imported.vcModel)\n\t\tassert.isTruthy(imported.vcId)\n\t}\n\n\t@test()\n\tprotected static async typesViewControllerOptions() {\n\t\tconst viewsFile = this.resolveHashSprucePath('views', 'views.ts')\n\t\tconst viewContents = diskUtil.readFile(viewsFile)\n\n\t\tassert.doesInclude(viewContents, `interface ViewControllerOptionsMap`)\n\t\tassert.doesInclude(\n\t\t\tviewContents,\n\t\t\t`'testing-views.appointments-card': ConstructorParameters<typeof AppointmentsCardViewController>[0]`\n\t\t)\n\t}\n\n\tprivate static buildTestfile(options: {\n\t\tcode: string\n\t\tidInterfaceName: 'SkillViewControllerId' | 'ViewControllerId'\n\t}) {\n\t\tconst { code, idInterfaceName } = options\n\n\t\treturn (\n\t\t\t`\nimport ` +\n\t\t\t`'#spruce/views/views'\nimport {\n\tViewControllerFactory,\n\tAuthenticatorImpl,\n\tMockStorage,\n\t${idInterfaceName},\n} from '@sprucelabs/heartwood-view-controllers'\nimport { vcDiskUtil } from '@sprucelabs/spruce-test-fixtures'\n\nAuthenticatorImpl.setStorage(new MockStorage())\n\nconst vcFactory = ViewControllerFactory.Factory({\n\tcontrollerMap: vcDiskUtil.loadViewControllersAndBuildMap('testing-views', __dirname),\n\tconnectToApi: async () => {\n\t\treturn 'yes' as any\n\t},\n})\n${code}\n\t\t`.trim()\n\t\t)\n\t}\n}\n"],"file":"CreatingASkillView.test.js"}
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/views/CreatingASkillView.test.ts"],"names":["CreatingASkillViewTest","action","Action","assert","isFunction","execute","viewType","waitForInput","last","ui","getLastInvocation","isEqual","command","reset","isRoot","results","isFalsy","errors","rootSvc","testUtil","assertFileByNameInGeneratedFiles","files","doesInclude","Service","check","contents","diskUtil","readFile","isTruthy","errorAssertUtil","assertError","name","promise","sendInput","dashboardVc","nameReadable","options","choices","value","appointmentsCard","buildTestfile","idInterfaceName","code","testFile","resolvePath","writeFile","importAll","imported","svcModel","svcId","vcModel","vcId","viewsFile","resolveHashSprucePath","viewContents","trim","AbstractSkillTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { errorAssertUtil } from '@sprucelabs/test-utils'\nimport CreateAction from '../../../features/view/actions/CreateAction'\nimport AbstractSkillTest from '../../../tests/AbstractSkillTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class CreatingASkillViewTest extends AbstractSkillTest {\n\tprotected static skillCacheKey = 'views'\n\tprivate static action: CreateAction\n\tprivate static rootSvc: string\n\tpublic static appointmentsCard: string\n\tprivate static dashboardVc: string\n\n\tprotected static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.action = this.Action('view', 'create') as CreateAction\n\t}\n\n\t@test()\n\tprotected static hasCreateAction() {\n\t\tassert.isFunction(this.action.execute)\n\t}\n\n\t@test()\n\tprotected static async asksIfRootSkillViewIfNotYetCreated() {\n\t\tvoid this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\n\t\tassert.isEqual(last.command, 'confirm')\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async canCreateRootSkillView() {\n\t\tconst results = await this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t\tisRoot: true,\n\t\t})\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.rootSvc = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'Root.svc.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tassert.doesInclude(this.rootSvc, 'skillViewControllers')\n\t}\n\n\t@test()\n\tprotected static async generatesValidRootSkillView() {\n\t\tawait this.Service('typeChecker').check(this.rootSvc)\n\t}\n\n\t@test()\n\tprotected static async rootSkillViewExtendsAbstractSkillViewController() {\n\t\tconst contents = diskUtil.readFile(this.rootSvc)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'export default class RootSkillViewController extends AbstractSkillViewController'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async cantCreateTwoRootSvcs() {\n\t\tconst results = await this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t\tisRoot: true,\n\t\t})\n\n\t\tassert.isTruthy(results.errors)\n\n\t\terrorAssertUtil.assertError(results.errors?.[0], 'SKILL_VIEW_EXISTS', {\n\t\t\tname: 'Root',\n\t\t})\n\t}\n\n\t@test()\n\tprotected static async asksForNamesIfCreatingSkillViewNotRoot() {\n\t\tconst promise = this.action.execute({\n\t\t\tviewType: 'skillView',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tlet last = this.ui.getLastInvocation()\n\n\t\tassert.isEqual(last.command, 'prompt')\n\n\t\tawait this.ui.sendInput('Dashboard')\n\t\tawait this.ui.sendInput('\\n')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.dashboardVc = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'Dashboard.svc.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tassert.doesInclude(this.dashboardVc, 'skillViewControllers')\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async asksForViewModelWhenCreatingSkillView() {\n\t\tconst promise = this.action.execute({\n\t\t\tviewType: 'view',\n\t\t\tnameReadable: 'Appointments card',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\n\t\tassert.isEqual(last.command, 'prompt')\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tvalue: 'Card',\n\t\t})\n\n\t\tawait this.ui.sendInput('Card')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tthis.appointmentsCard = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'AppointmentsCard.vc.ts',\n\t\t\tresults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static skillViewExtendsAbstractViewControllerWithProperView() {\n\t\tconst contents = diskUtil.readFile(this.appointmentsCard)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'export default class AppointmentsCardViewController extends AbstractViewController<Card>'\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async nicelyTypesRootSkillViewController() {\n\t\tconst contents = this.buildTestfile({\n\t\t\tidInterfaceName: 'SkillViewControllerId',\n\t\t\tcode: `\nconst root = vcFactory.Controller('testing-views.root', {})\nexport const svcModel = root.render()\nexport const svcId: SkillViewControllerId = 'testing-views.root'`,\n\t\t})\n\n\t\tconst testFile = this.resolvePath('src', 'test.ts')\n\t\tdiskUtil.writeFile(testFile, contents)\n\n\t\tconst imported = await this.Service('import').importAll(testFile)\n\n\t\tassert.isTruthy(imported.svcModel)\n\t\tassert.isTruthy(imported.svcId)\n\t}\n\n\t@test()\n\tprotected static async nicelyTypesViewController() {\n\t\tconst contents = this.buildTestfile({\n\t\t\tidInterfaceName: 'ViewControllerId',\n\t\t\tcode: `\n\t\tconst apptCard = vcFactory.Controller('testing-views.appointments-card', {})\n\t\texport const vcModel = apptCard.render()\n\t\texport const vcId: ViewControllerId = 'testing-views.appointments-card'`,\n\t\t})\n\n\t\tconst testFile = this.resolvePath('src', 'test.ts')\n\t\tdiskUtil.writeFile(testFile, contents)\n\n\t\tconst imported = await this.Service('import').importAll(testFile)\n\n\t\tassert.isTruthy(imported.vcModel)\n\t\tassert.isTruthy(imported.vcId)\n\t}\n\n\t@test()\n\tprotected static async typesViewControllerOptions() {\n\t\tconst viewsFile = this.resolveHashSprucePath('views', 'views.ts')\n\t\tconst viewContents = diskUtil.readFile(viewsFile)\n\n\t\tassert.doesInclude(viewContents, `interface ViewControllerOptionsMap`)\n\t\tassert.doesInclude(\n\t\t\tviewContents,\n\t\t\t`'testing-views.appointments-card': ConstructorParameters<typeof AppointmentsCardViewController>[0]`\n\t\t)\n\t}\n\n\tprivate static buildTestfile(options: {\n\t\tcode: string\n\t\tidInterfaceName: 'SkillViewControllerId' | 'ViewControllerId'\n\t}) {\n\t\tconst { code, idInterfaceName } = options\n\n\t\treturn (\n\t\t\t`\nimport ` +\n\t\t\t`'#spruce/views/views'\nimport {\n\tViewControllerFactory,\n\tAuthenticatorImpl,\n\tMockStorage,\n\t${idInterfaceName},\n} from '@sprucelabs/heartwood-view-controllers'\nimport { vcDiskUtil } from '@sprucelabs/spruce-test-fixtures'\n\nAuthenticatorImpl.setStorage(new MockStorage())\n\nconst vcFactory = ViewControllerFactory.Factory({\n\tcontrollerMap: vcDiskUtil.loadViewControllersAndBuildMap('testing-views', __dirname),\n\tconnectToApi: async () => {\n\t\treturn 'yes' as any\n\t},\n})\n${code}\n\t\t`.trim()\n\t\t)\n\t}\n}\n"],"file":"CreatingASkillView.test.js"}
@@ -78,7 +78,7 @@ var TestingViewControllersTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.te
78
78
  return this.waitForInput();
79
79
 
80
80
  case 5:
81
- last = this.ui.lastInvocation();
81
+ last = this.ui.getLastInvocation();
82
82
 
83
83
  _test.assert.doesInclude(last.options.options.choices, {
84
84
  label: 'AbstractViewControllerTest (requires install)'
@@ -114,7 +114,7 @@ var TestingViewControllersTest = (_dec = (0, _test.test)(), _dec2 = (0, _test.te
114
114
  return this.waitForInput();
115
115
 
116
116
  case 3:
117
- last = this.ui.lastInvocation();
117
+ last = this.ui.getLastInvocation();
118
118
 
119
119
  _test.assert.doesInclude(last.options.options.choices, {
120
120
  label: 'AbstractViewControllerTest'
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/behavioral/views/TestingViewControllers.test.ts"],"names":["TestingViewControllersTest","viewFeature","cli","getFeature","isInstalled","executeCreate","waitForInput","last","ui","lastInvocation","assert","doesInclude","options","choices","label","reset","promise","selectOptionBasedOnLabel","results","isFalsy","errors","match","testUtil","assertFileByNameInGeneratedFiles","files","contents","diskUtil","readFile","Service","build","Action","execute","shouldReportWhileRunning","testResults","isArray","isLength","meta","testFiles","path","status","type","nameReadable","nameCamel","namePascal","AbstractSkillTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport AbstractSkillTest from '../../../tests/AbstractSkillTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class TestingViewControllersTest extends AbstractSkillTest {\n\tprotected static skillCacheKey = 'viewsWithTests'\n\n\t@test()\n\tprotected static async showsNotInstalled() {\n\t\tconst viewFeature = this.cli.getFeature('view')\n\t\tviewFeature.isInstalled = async () => false\n\n\t\tvoid this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.lastInvocation()\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tlabel: 'AbstractViewControllerTest (requires install)',\n\t\t})\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractTest() {\n\t\tvoid this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.lastInvocation()\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t})\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async testsRun() {\n\t\tconst promise = this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel('AbstractViewControllerTest')\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'RenderingRootViewController.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'RenderingRootViewControllerTest extends AbstractViewControllerTest'\n\t\t)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { AbstractViewControllerTest } from '@sprucelabs/spruce-view-plugin'\"\n\t\t)\n\n\t\tawait this.Service('build').build()\n\n\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\tshouldReportWhileRunning: false,\n\t\t})\n\n\t\tassert.isArray(testResults.errors)\n\t\tassert.isLength(testResults.errors, 1)\n\n\t\tassert.doesInclude(testResults.meta?.testResults.testFiles, {\n\t\t\tpath: 'behavioral/RenderingRootViewController.test.ts',\n\t\t\tstatus: 'failed',\n\t\t})\n\t}\n\n\tprivate static async executeCreate() {\n\t\treturn this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Rendering root view controller',\n\t\t\tnameCamel: 'renderingRootViewController',\n\t\t\tnamePascal: 'RenderingRootViewController',\n\t\t})\n\t}\n}\n"],"file":"TestingViewControllers.test.js"}
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/views/TestingViewControllers.test.ts"],"names":["TestingViewControllersTest","viewFeature","cli","getFeature","isInstalled","executeCreate","waitForInput","last","ui","getLastInvocation","assert","doesInclude","options","choices","label","reset","promise","selectOptionBasedOnLabel","results","isFalsy","errors","match","testUtil","assertFileByNameInGeneratedFiles","files","contents","diskUtil","readFile","Service","build","Action","execute","shouldReportWhileRunning","testResults","isArray","isLength","meta","testFiles","path","status","type","nameReadable","nameCamel","namePascal","AbstractSkillTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport AbstractSkillTest from '../../../tests/AbstractSkillTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class TestingViewControllersTest extends AbstractSkillTest {\n\tprotected static skillCacheKey = 'viewsWithTests'\n\n\t@test()\n\tprotected static async showsNotInstalled() {\n\t\tconst viewFeature = this.cli.getFeature('view')\n\t\tviewFeature.isInstalled = async () => false\n\n\t\tvoid this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tlabel: 'AbstractViewControllerTest (requires install)',\n\t\t})\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractTest() {\n\t\tvoid this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t})\n\n\t\tthis.ui.reset()\n\t}\n\n\t@test()\n\tprotected static async testsRun() {\n\t\tconst promise = this.executeCreate()\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel('AbstractViewControllerTest')\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'RenderingRootViewController.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t'RenderingRootViewControllerTest extends AbstractViewControllerTest'\n\t\t)\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { AbstractViewControllerTest } from '@sprucelabs/spruce-view-plugin'\"\n\t\t)\n\n\t\tawait this.Service('build').build()\n\n\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\tshouldReportWhileRunning: false,\n\t\t})\n\n\t\tassert.isArray(testResults.errors)\n\t\tassert.isLength(testResults.errors, 1)\n\n\t\tassert.doesInclude(testResults.meta?.testResults.testFiles, {\n\t\t\tpath: 'behavioral/RenderingRootViewController.test.ts',\n\t\t\tstatus: 'failed',\n\t\t})\n\t}\n\n\tprivate static async executeCreate() {\n\t\treturn this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Rendering root view controller',\n\t\t\tnameCamel: 'renderingRootViewController',\n\t\t\tnamePascal: 'RenderingRootViewController',\n\t\t})\n\t}\n}\n"],"file":"TestingViewControllers.test.js"}
@@ -215,7 +215,7 @@ var FeatureCommandExecuterContTest = (_dec = (0, _test.test)(), _dec2 = (0, _tes
215
215
  return this.waitForInput();
216
216
 
217
217
  case 10:
218
- _test.assert.doesNotInclude(this.ui.lastInvocation(), {
218
+ _test.assert.doesNotInclude(this.ui.getLastInvocation(), {
219
219
  command: 'prompt',
220
220
  options: {
221
221
  type: 'select'
@@ -317,7 +317,7 @@ var FeatureCommandExecuterContTest = (_dec = (0, _test.test)(), _dec2 = (0, _tes
317
317
 
318
318
  case 5:
319
319
  this.ui.reset();
320
- lastQuestion = this.ui.lastInvocation();
320
+ lastQuestion = this.ui.getLastInvocation();
321
321
 
322
322
  _test.assert.isEqual(lastQuestion.command, 'prompt');
323
323
 
@@ -469,7 +469,7 @@ var FeatureCommandExecuterContTest = (_dec = (0, _test.test)(), _dec2 = (0, _tes
469
469
 
470
470
  _test.assert.doesInclude(message, /1 optional/gi);
471
471
 
472
- _test.assert.doesInclude(this.ui.lastInvocation(), {
472
+ _test.assert.doesInclude(this.ui.getLastInvocation(), {
473
473
  command: 'prompt',
474
474
  options: {
475
475
  type: 'select',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/implementation/ActionExecuter2.test.ts"],"names":["FeatureCommandExecuterContTest","startBuildingNewErrorUntilOptionalDependencies","actionPromise","promise","finishBuildingUpToNamingNewError","results","assert","isTruthy","files","isFalsy","errors","pluginsDir","resolveHashSprucePath","isFalse","diskUtil","doesDirExist","testUtil","assertFileByNameInGeneratedFiles","setupMockCommands","executer","Action","shouldAutoHandleDependencies","emittedWillEvent","willEventCommand","emittedDidEvent","didEventCommand","willExecuteHitCount","didExecuteHitCount","emitter","getEmitter","on","payload","featuresUtil","generateCommand","featureCode","actionCode","meta","taco","isEqual","execute","waitForInput","ui","sendInput","doesNotInclude","lastInvocation","command","options","type","secondTimeResults","name","description","packagesInstalled","isAbove","length","reset","lastQuestion","doesInclude","label","FeatureFixture","installCachedFeatures","version","versionUtil","generateVersion","dirValue","skillFeatureAnswer","message","invocations","choices","value","CommandService","setMockResponse","RegExp","code","AbstractSchemaTest"],"mappings":"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","sourcesContent":["import { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport featuresUtil from '../../features/feature.utilities'\nimport {\n\tFeatureActionResponse,\n\tFeatureInstallResponse,\n} from '../../features/features.types'\nimport CommandService from '../../services/CommandService'\nimport AbstractSchemaTest from '../../tests/AbstractSchemaTest'\nimport testUtil from '../../tests/utilities/test.utility'\n\nexport default class FeatureCommandExecuterContTest extends AbstractSchemaTest {\n\t@test()\n\tprotected static async canSkipOptionalDependencies() {\n\t\tconst { promise: actionPromise } =\n\t\t\tawait this.startBuildingNewErrorUntilOptionalDependencies('skip')\n\n\t\tconst results = await this.finishBuildingUpToNamingNewError(actionPromise)\n\n\t\tassert.isTruthy(results.files)\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst pluginsDir = this.resolveHashSprucePath('features')\n\t\tassert.isFalse(diskUtil.doesDirExist(pluginsDir))\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'myNewError.schema.ts',\n\t\t\tresults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldEmitExecutionEvents() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('skill', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\n\t\tlet emittedWillEvent = false\n\t\tlet willEventCommand = ''\n\t\tlet emittedDidEvent = false\n\t\tlet didEventCommand = ''\n\t\tlet willExecuteHitCount = 0\n\t\tlet didExecuteHitCount = 0\n\n\t\tconst emitter = this.getEmitter()\n\n\t\tvoid emitter.on('feature.will-execute', (payload) => {\n\t\t\temittedWillEvent = true\n\t\t\twillExecuteHitCount++\n\n\t\t\twillEventCommand = featuresUtil.generateCommand(\n\t\t\t\tpayload.featureCode,\n\t\t\t\tpayload.actionCode\n\t\t\t)\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid emitter.on('feature.did-execute', (payload) => {\n\t\t\temittedDidEvent = true\n\t\t\tdidExecuteHitCount++\n\t\t\tdidEventCommand = featuresUtil.generateCommand(\n\t\t\t\tpayload.featureCode,\n\t\t\t\tpayload.actionCode\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tmeta: {\n\t\t\t\t\ttaco: 'bell',\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\n\t\tassert.isFalse(emittedWillEvent)\n\t\tassert.isFalse(emittedDidEvent)\n\t\tassert.isEqual(willExecuteHitCount, 0)\n\t\tassert.isEqual(didExecuteHitCount, 0)\n\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new skill')\n\t\tawait this.ui.sendInput('So great!')\n\n\t\tconst results = await promise\n\n\t\tassert.isEqual(results.meta?.taco, 'bell')\n\t\tassert.isEqual(willEventCommand, 'create.skill')\n\t\tassert.isEqual(didEventCommand, 'create.skill')\n\t\tassert.isEqual(willExecuteHitCount, 1)\n\t\tassert.isEqual(didExecuteHitCount, 1)\n\t}\n\n\t@test()\n\tprotected static async canPermanentlySkipOptionalDependencies() {\n\t\tconst { promise: actionPromise } =\n\t\t\tawait this.startBuildingNewErrorUntilOptionalDependencies('alwaysSkip')\n\n\t\tawait this.finishBuildingUpToNamingNewError(actionPromise)\n\n\t\tconst executer = this.Action('error', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tassert.doesNotInclude(this.ui.lastInvocation(), {\n\t\t\tcommand: 'prompt',\n\t\t\toptions: {\n\t\t\t\ttype: 'select',\n\t\t\t},\n\t\t})\n\n\t\tawait this.ui.sendInput('My second error')\n\t\tawait this.ui.sendInput('')\n\n\t\tconst secondTimeResults = await promise\n\n\t\tassert.isTruthy(secondTimeResults.files)\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'myNewError.schema.ts',\n\t\t\tsecondTimeResults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldReturnProperSummary() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('skill', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst results = await executer.execute({\n\t\t\tname: 'install summary test skill',\n\t\t\tdescription: 'go team!',\n\t\t})\n\n\t\tassert.isTruthy(results.files)\n\t\tassert.isTruthy(results.packagesInstalled)\n\n\t\tassert.isAbove(results.files.length, 0)\n\t\tassert.isAbove(results.packagesInstalled.length, 0)\n\t}\n\n\t@test()\n\tprotected static async shouldAskInstallDependentFeatures() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('schema', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tvoid executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tthis.ui.reset()\n\t\tconst lastQuestion = this.ui.lastInvocation()\n\n\t\tassert.isEqual(lastQuestion.command, 'prompt')\n\t\tassert.doesInclude(\n\t\t\tlastQuestion.options.label,\n\t\t\t/install the skill feature/gi\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldAddListenerWithoutBreakingOnSkill() {\n\t\tthis.setupMockCommands()\n\n\t\tawait this.FeatureFixture().installCachedFeatures('schemas')\n\n\t\tconst executer = this.Action('event', 'listen', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('skill')\n\t\tawait this.ui.sendInput('will-boot')\n\n\t\tconst results = await promise\n\n\t\tconst version = versionUtil.generateVersion().dirValue\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`will-boot.${version}.listener.ts`,\n\t\t\tresults.files\n\t\t)\n\t}\n\n\tprivate static async finishBuildingUpToNamingNewError(\n\t\tactionPromise: Promise<FeatureInstallResponse & FeatureActionResponse>\n\t) {\n\t\tawait this.ui.sendInput('')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new error')\n\t\tawait this.ui.sendInput('')\n\n\t\tconst results = await actionPromise\n\t\treturn results\n\t}\n\n\tprivate static async startBuildingNewErrorUntilOptionalDependencies(\n\t\tskillFeatureAnswer: 'skip' | 'yes' | 'alwaysSkip'\n\t) {\n\t\tconst executer = this.Action('error', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tconst message =\n\t\t\tthis.ui.invocations[this.ui.invocations.length - 2].options.message\n\t\tassert.isTruthy(message)\n\n\t\tassert.doesInclude(message, /2 required/gi)\n\t\tassert.doesInclude(message, /1 optional/gi)\n\n\t\tassert.doesInclude(this.ui.lastInvocation(), {\n\t\t\tcommand: 'prompt',\n\t\t\toptions: {\n\t\t\t\ttype: 'select',\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: 'yes',\n\t\t\t\t\t\t\tlabel: 'Yes',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'skip',\n\t\t\t\t\t\t\tlabel: 'Skip',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'alwaysSkip',\n\t\t\t\t\t\t\tlabel: 'Always skip',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tawait this.ui.sendInput(skillFeatureAnswer)\n\n\t\tawait this.ui.sendInput('y')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new module')\n\t\tawait this.ui.sendInput('it is for testing')\n\n\t\tawait this.waitForInput()\n\n\t\treturn { promise }\n\t}\n\n\tprivate static setupMockCommands() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\t}\n}\n"],"file":"ActionExecuter2.test.js"}
1
+ {"version":3,"sources":["../../../src/__tests__/implementation/ActionExecuter2.test.ts"],"names":["FeatureCommandExecuterContTest","startBuildingNewErrorUntilOptionalDependencies","actionPromise","promise","finishBuildingUpToNamingNewError","results","assert","isTruthy","files","isFalsy","errors","pluginsDir","resolveHashSprucePath","isFalse","diskUtil","doesDirExist","testUtil","assertFileByNameInGeneratedFiles","setupMockCommands","executer","Action","shouldAutoHandleDependencies","emittedWillEvent","willEventCommand","emittedDidEvent","didEventCommand","willExecuteHitCount","didExecuteHitCount","emitter","getEmitter","on","payload","featuresUtil","generateCommand","featureCode","actionCode","meta","taco","isEqual","execute","waitForInput","ui","sendInput","doesNotInclude","getLastInvocation","command","options","type","secondTimeResults","name","description","packagesInstalled","isAbove","length","reset","lastQuestion","doesInclude","label","FeatureFixture","installCachedFeatures","version","versionUtil","generateVersion","dirValue","skillFeatureAnswer","message","invocations","choices","value","CommandService","setMockResponse","RegExp","code","AbstractSchemaTest"],"mappings":"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","sourcesContent":["import { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport featuresUtil from '../../features/feature.utilities'\nimport {\n\tFeatureActionResponse,\n\tFeatureInstallResponse,\n} from '../../features/features.types'\nimport CommandService from '../../services/CommandService'\nimport AbstractSchemaTest from '../../tests/AbstractSchemaTest'\nimport testUtil from '../../tests/utilities/test.utility'\n\nexport default class FeatureCommandExecuterContTest extends AbstractSchemaTest {\n\t@test()\n\tprotected static async canSkipOptionalDependencies() {\n\t\tconst { promise: actionPromise } =\n\t\t\tawait this.startBuildingNewErrorUntilOptionalDependencies('skip')\n\n\t\tconst results = await this.finishBuildingUpToNamingNewError(actionPromise)\n\n\t\tassert.isTruthy(results.files)\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst pluginsDir = this.resolveHashSprucePath('features')\n\t\tassert.isFalse(diskUtil.doesDirExist(pluginsDir))\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'myNewError.schema.ts',\n\t\t\tresults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldEmitExecutionEvents() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('skill', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\n\t\tlet emittedWillEvent = false\n\t\tlet willEventCommand = ''\n\t\tlet emittedDidEvent = false\n\t\tlet didEventCommand = ''\n\t\tlet willExecuteHitCount = 0\n\t\tlet didExecuteHitCount = 0\n\n\t\tconst emitter = this.getEmitter()\n\n\t\tvoid emitter.on('feature.will-execute', (payload) => {\n\t\t\temittedWillEvent = true\n\t\t\twillExecuteHitCount++\n\n\t\t\twillEventCommand = featuresUtil.generateCommand(\n\t\t\t\tpayload.featureCode,\n\t\t\t\tpayload.actionCode\n\t\t\t)\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid emitter.on('feature.did-execute', (payload) => {\n\t\t\temittedDidEvent = true\n\t\t\tdidExecuteHitCount++\n\t\t\tdidEventCommand = featuresUtil.generateCommand(\n\t\t\t\tpayload.featureCode,\n\t\t\t\tpayload.actionCode\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tmeta: {\n\t\t\t\t\ttaco: 'bell',\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\n\t\tassert.isFalse(emittedWillEvent)\n\t\tassert.isFalse(emittedDidEvent)\n\t\tassert.isEqual(willExecuteHitCount, 0)\n\t\tassert.isEqual(didExecuteHitCount, 0)\n\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new skill')\n\t\tawait this.ui.sendInput('So great!')\n\n\t\tconst results = await promise\n\n\t\tassert.isEqual(results.meta?.taco, 'bell')\n\t\tassert.isEqual(willEventCommand, 'create.skill')\n\t\tassert.isEqual(didEventCommand, 'create.skill')\n\t\tassert.isEqual(willExecuteHitCount, 1)\n\t\tassert.isEqual(didExecuteHitCount, 1)\n\t}\n\n\t@test()\n\tprotected static async canPermanentlySkipOptionalDependencies() {\n\t\tconst { promise: actionPromise } =\n\t\t\tawait this.startBuildingNewErrorUntilOptionalDependencies('alwaysSkip')\n\n\t\tawait this.finishBuildingUpToNamingNewError(actionPromise)\n\n\t\tconst executer = this.Action('error', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tassert.doesNotInclude(this.ui.getLastInvocation(), {\n\t\t\tcommand: 'prompt',\n\t\t\toptions: {\n\t\t\t\ttype: 'select',\n\t\t\t},\n\t\t})\n\n\t\tawait this.ui.sendInput('My second error')\n\t\tawait this.ui.sendInput('')\n\n\t\tconst secondTimeResults = await promise\n\n\t\tassert.isTruthy(secondTimeResults.files)\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'myNewError.schema.ts',\n\t\t\tsecondTimeResults.files\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldReturnProperSummary() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('skill', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst results = await executer.execute({\n\t\t\tname: 'install summary test skill',\n\t\t\tdescription: 'go team!',\n\t\t})\n\n\t\tassert.isTruthy(results.files)\n\t\tassert.isTruthy(results.packagesInstalled)\n\n\t\tassert.isAbove(results.files.length, 0)\n\t\tassert.isAbove(results.packagesInstalled.length, 0)\n\t}\n\n\t@test()\n\tprotected static async shouldAskInstallDependentFeatures() {\n\t\tthis.setupMockCommands()\n\n\t\tconst executer = this.Action('schema', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tvoid executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tthis.ui.reset()\n\t\tconst lastQuestion = this.ui.getLastInvocation()\n\n\t\tassert.isEqual(lastQuestion.command, 'prompt')\n\t\tassert.doesInclude(\n\t\t\tlastQuestion.options.label,\n\t\t\t/install the skill feature/gi\n\t\t)\n\t}\n\n\t@test()\n\tprotected static async shouldAddListenerWithoutBreakingOnSkill() {\n\t\tthis.setupMockCommands()\n\n\t\tawait this.FeatureFixture().installCachedFeatures('schemas')\n\n\t\tconst executer = this.Action('event', 'listen', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('skill')\n\t\tawait this.ui.sendInput('will-boot')\n\n\t\tconst results = await promise\n\n\t\tconst version = versionUtil.generateVersion().dirValue\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t`will-boot.${version}.listener.ts`,\n\t\t\tresults.files\n\t\t)\n\t}\n\n\tprivate static async finishBuildingUpToNamingNewError(\n\t\tactionPromise: Promise<FeatureInstallResponse & FeatureActionResponse>\n\t) {\n\t\tawait this.ui.sendInput('')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new error')\n\t\tawait this.ui.sendInput('')\n\n\t\tconst results = await actionPromise\n\t\treturn results\n\t}\n\n\tprivate static async startBuildingNewErrorUntilOptionalDependencies(\n\t\tskillFeatureAnswer: 'skip' | 'yes' | 'alwaysSkip'\n\t) {\n\t\tconst executer = this.Action('error', 'create', {\n\t\t\tshouldAutoHandleDependencies: true,\n\t\t})\n\t\tconst promise = executer.execute({})\n\n\t\tawait this.waitForInput()\n\n\t\tconst message =\n\t\t\tthis.ui.invocations[this.ui.invocations.length - 2].options.message\n\t\tassert.isTruthy(message)\n\n\t\tassert.doesInclude(message, /2 required/gi)\n\t\tassert.doesInclude(message, /1 optional/gi)\n\n\t\tassert.doesInclude(this.ui.getLastInvocation(), {\n\t\t\tcommand: 'prompt',\n\t\t\toptions: {\n\t\t\t\ttype: 'select',\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: 'yes',\n\t\t\t\t\t\t\tlabel: 'Yes',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'skip',\n\t\t\t\t\t\t\tlabel: 'Skip',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: 'alwaysSkip',\n\t\t\t\t\t\t\tlabel: 'Always skip',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\n\t\tawait this.ui.sendInput(skillFeatureAnswer)\n\n\t\tawait this.ui.sendInput('y')\n\n\t\tawait this.waitForInput()\n\n\t\tawait this.ui.sendInput('My new module')\n\t\tawait this.ui.sendInput('it is for testing')\n\n\t\tawait this.waitForInput()\n\n\t\treturn { promise }\n\t}\n\n\tprivate static setupMockCommands() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\t}\n}\n"],"file":"ActionExecuter2.test.js"}
@@ -285,6 +285,10 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
285
285
  message = "A transport named '".concat(options.name, "' already exists!");
286
286
  break;
287
287
 
288
+ case 'DEPENDENCY_EXISTS':
289
+ message = "You already have ".concat(options.namespace, " as a dependency!");
290
+ break;
291
+
288
292
  default:
289
293
  message = (0, _get2["default"])((0, _getPrototypeOf2["default"])(SpruceError.prototype), "friendlyMessage", this).call(this);
290
294
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","originalError","stack","name","command","file","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = options.friendlyMessage ?? 'Oh shoot! 🤔'\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\n${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.name\n\t\t\t\t\t}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage =\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\t`Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\nOriginal error:${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.message\n\t\t\t\t\t}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fail already exists.'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = options.friendlyMessage ?? `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\treturn message\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
1
+ {"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","originalError","stack","name","command","file","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","namespace","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = options.friendlyMessage ?? 'Oh shoot! 🤔'\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\n${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.name\n\t\t\t\t\t}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage =\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\t`Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\nOriginal error:${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.message\n\t\t\t\t\t}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fail already exists.'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = options.friendlyMessage ?? `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPENDENCY_EXISTS':\n\t\t\t\tmessage = `You already have ${options.namespace} as a dependency!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\treturn message\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
@@ -0,0 +1,11 @@
1
+ declare const _default: {
2
+ id: string;
3
+ name: string;
4
+ fields: {
5
+ namespace: {
6
+ type: "text";
7
+ isRequired: true;
8
+ };
9
+ };
10
+ };
11
+ export default _default;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _schema = require("@sprucelabs/schema");
9
+
10
+ var _default = (0, _schema.buildErrorSchema)({
11
+ id: 'dependencyExists',
12
+ name: 'Dependency exists',
13
+ fields: {
14
+ namespace: {
15
+ type: 'text',
16
+ isRequired: true
17
+ }
18
+ }
19
+ });
20
+
21
+ exports["default"] = _default;
22
+ //# sourceMappingURL=dependencyExists.builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/errors/dependencyExists.builder.ts"],"names":["id","name","fields","namespace","type","isRequired"],"mappings":";;;;;;;AAAA;;eAEe,8BAAiB;AAC/BA,EAAAA,EAAE,EAAE,kBAD2B;AAE/BC,EAAAA,IAAI,EAAE,mBAFyB;AAG/BC,EAAAA,MAAM,EAAE;AACPC,IAAAA,SAAS,EAAE;AACVC,MAAAA,IAAI,EAAE,MADI;AAEVC,MAAAA,UAAU,EAAE;AAFF;AADJ;AAHuB,CAAjB,C","sourcesContent":["import { buildErrorSchema } from '@sprucelabs/schema'\n\nexport default buildErrorSchema({\n\tid: 'dependencyExists',\n\tname: 'Dependency exists',\n\tfields: {\n\t\tnamespace: {\n\t\t\ttype: 'text',\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n"],"file":"dependencyExists.builder.js"}
@@ -158,7 +158,7 @@ var AbstractAction = /*#__PURE__*/function () {
158
158
  while (1) {
159
159
  switch (_context2.prev = _context2.next) {
160
160
  case 0:
161
- versions = _spruceSkillUtils.diskUtil.doesDirExist(resolvedDestination) ? _spruceSkillUtils.versionUtil.getAllVersions(resolvedDestination) : [];
161
+ versions = _spruceSkillUtils.versionUtil.getAllVersions(resolvedDestination);
162
162
  todaysVersion = _spruceSkillUtils.versionUtil.generateVersion();
163
163
  version = fallbackVersion;
164
164
  alreadyHasToday = !!versions.find(function (version) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/AbstractAction.ts"],"names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizeUtil","validateAndNormalize","userSuppliedVersion","resolvedDestination","resolvedVersion","versionUtil","generateVersion","undefined","constValue","askForVersionIfTodaysVersionDoesNotExist","assertValidVersion","dirValue","fallbackVersion","versions","diskUtil","doesDirExist","getAllVersions","todaysVersion","version","alreadyHasToday","find","choices","push","label","value","sort","a","b","intValue","map","length","prompt","hint","isRequired"],"mappings":"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","sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tServiceProvider,\n\tService,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tStoreFactoryMethodOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport AbstractFeature from './AbstractFeature'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureAction,\n\tFeatureActionResponse,\n\tActionOptions,\n\tFeatureCode,\n} from './features.types'\nimport validateAndNormalizeUtil from './validateAndNormalize.utility'\n\nexport default abstract class AbstractAction<S extends Schema = Schema>\n\timplements FeatureAction<S>, ServiceProvider\n{\n\tpublic abstract optionsSchema: S\n\tpublic readonly commandAliases: string[] = []\n\tpublic abstract invocationMessage: string\n\n\tprotected parent: AbstractFeature\n\tprotected featureInstaller: FeatureInstaller\n\tprotected cwd: string\n\tprotected templates: Templates\n\tprotected ui: GraphicsInterface\n\tprotected emitter: GlobalEmitter\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\n\tpublic constructor(options: ActionOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.templates = options.templates\n\t\tthis.parent = options.parent\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.writerFactory = options.writerFactory\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tpublic abstract execute(\n\t\toptions: SchemaValues<S>\n\t): Promise<FeatureActionResponse>\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tprotected Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: StoreFactoryMethodOptions\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...options })\n\t}\n\n\tprotected Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writerFactory.Writer(code, {\n\t\t\tfileDescriptions: this.parent.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tprotected getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.featureInstaller.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizeUtil.validateAndNormalize(schema, options)\n\t}\n\n\tprotected async resolveVersion(\n\t\tuserSuppliedVersion: string | null | undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tlet resolvedVersion = versionUtil.generateVersion(\n\t\t\tuserSuppliedVersion ?? undefined\n\t\t).constValue\n\n\t\tif (!userSuppliedVersion) {\n\t\t\tresolvedVersion = await this.askForVersionIfTodaysVersionDoesNotExist(\n\t\t\t\tresolvedDestination,\n\t\t\t\tresolvedVersion\n\t\t\t)\n\t\t}\n\t\tversionUtil.assertValidVersion(resolvedVersion)\n\n\t\treturn versionUtil.generateVersion(resolvedVersion).dirValue\n\t}\n\n\tprivate async askForVersionIfTodaysVersionDoesNotExist(\n\t\tresolvedDestination: string,\n\t\tfallbackVersion: string\n\t) {\n\t\tconst versions = diskUtil.doesDirExist(resolvedDestination)\n\t\t\t? versionUtil.getAllVersions(resolvedDestination)\n\t\t\t: []\n\t\tconst todaysVersion = versionUtil.generateVersion()\n\n\t\tlet version = fallbackVersion\n\t\tconst alreadyHasToday = !!versions.find(\n\t\t\t(version) => version.dirValue === todaysVersion.dirValue\n\t\t)\n\t\tconst choices = []\n\n\t\tif (!alreadyHasToday) {\n\t\t\tchoices.push({\n\t\t\t\tlabel: 'New Version',\n\t\t\t\tvalue: todaysVersion.dirValue,\n\t\t\t})\n\t\t}\n\n\t\tchoices.push(\n\t\t\t...versions\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.intValue > b.intValue ? -1 : 1\n\t\t\t\t})\n\t\t\t\t.map((version) => ({\n\t\t\t\t\tvalue: version.dirValue,\n\t\t\t\t\tlabel: version.dirValue,\n\t\t\t\t}))\n\t\t)\n\n\t\tif (versions.length > 0) {\n\t\t\tversion = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Version',\n\t\t\t\thint: 'Confirm which version you want to use?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn version\n\t}\n\n\tprotected async connectToApi(\n\t\toptions?: ApiClientFactoryOptions\n\t): Promise<ApiClient> {\n\t\treturn this.apiClientFactory(options)\n\t}\n}\n"],"file":"AbstractAction.js"}
1
+ {"version":3,"sources":["../../src/features/AbstractAction.ts"],"names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizeUtil","validateAndNormalize","userSuppliedVersion","resolvedDestination","resolvedVersion","versionUtil","generateVersion","undefined","constValue","askForVersionIfTodaysVersionDoesNotExist","assertValidVersion","dirValue","fallbackVersion","versions","getAllVersions","todaysVersion","version","alreadyHasToday","find","choices","push","label","value","sort","a","b","intValue","map","length","prompt","hint","isRequired"],"mappings":"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","sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport { versionUtil } from '@sprucelabs/spruce-skill-utils'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tServiceProvider,\n\tService,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tStoreFactoryMethodOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport AbstractFeature from './AbstractFeature'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureAction,\n\tFeatureActionResponse,\n\tActionOptions,\n\tFeatureCode,\n} from './features.types'\nimport validateAndNormalizeUtil from './validateAndNormalize.utility'\n\nexport default abstract class AbstractAction<S extends Schema = Schema>\n\timplements FeatureAction<S>, ServiceProvider\n{\n\tpublic abstract optionsSchema: S\n\tpublic readonly commandAliases: string[] = []\n\tpublic abstract invocationMessage: string\n\n\tprotected parent: AbstractFeature\n\tprotected featureInstaller: FeatureInstaller\n\tprotected cwd: string\n\tprotected templates: Templates\n\tprotected ui: GraphicsInterface\n\tprotected emitter: GlobalEmitter\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\n\tpublic constructor(options: ActionOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.templates = options.templates\n\t\tthis.parent = options.parent\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.writerFactory = options.writerFactory\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tpublic abstract execute(\n\t\toptions: SchemaValues<S>\n\t): Promise<FeatureActionResponse>\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tprotected Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: StoreFactoryMethodOptions\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...options })\n\t}\n\n\tprotected Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writerFactory.Writer(code, {\n\t\t\tfileDescriptions: this.parent.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tprotected getFeature<C extends FeatureCode>(code: C) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.featureInstaller.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizeUtil.validateAndNormalize(schema, options)\n\t}\n\n\tprotected async resolveVersion(\n\t\tuserSuppliedVersion: string | null | undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tlet resolvedVersion = versionUtil.generateVersion(\n\t\t\tuserSuppliedVersion ?? undefined\n\t\t).constValue\n\n\t\tif (!userSuppliedVersion) {\n\t\t\tresolvedVersion = await this.askForVersionIfTodaysVersionDoesNotExist(\n\t\t\t\tresolvedDestination,\n\t\t\t\tresolvedVersion\n\t\t\t)\n\t\t}\n\t\tversionUtil.assertValidVersion(resolvedVersion)\n\n\t\treturn versionUtil.generateVersion(resolvedVersion).dirValue\n\t}\n\n\tprivate async askForVersionIfTodaysVersionDoesNotExist(\n\t\tresolvedDestination: string,\n\t\tfallbackVersion: string\n\t) {\n\t\tconst versions = versionUtil.getAllVersions(resolvedDestination)\n\t\tconst todaysVersion = versionUtil.generateVersion()\n\n\t\tlet version = fallbackVersion\n\t\tconst alreadyHasToday = !!versions.find(\n\t\t\t(version) => version.dirValue === todaysVersion.dirValue\n\t\t)\n\t\tconst choices = []\n\n\t\tif (!alreadyHasToday) {\n\t\t\tchoices.push({\n\t\t\t\tlabel: 'New Version',\n\t\t\t\tvalue: todaysVersion.dirValue,\n\t\t\t})\n\t\t}\n\n\t\tchoices.push(\n\t\t\t...versions\n\t\t\t\t.sort((a, b) => {\n\t\t\t\t\treturn a.intValue > b.intValue ? -1 : 1\n\t\t\t\t})\n\t\t\t\t.map((version) => ({\n\t\t\t\t\tvalue: version.dirValue,\n\t\t\t\t\tlabel: version.dirValue,\n\t\t\t\t}))\n\t\t)\n\n\t\tif (versions.length > 0) {\n\t\t\tversion = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Version',\n\t\t\t\thint: 'Confirm which version you want to use?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn version\n\t}\n\n\tprotected async connectToApi(\n\t\toptions?: ApiClientFactoryOptions\n\t): Promise<ApiClient> {\n\t\treturn this.apiClientFactory(options)\n\t}\n}\n"],"file":"AbstractAction.js"}
@@ -72,7 +72,7 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
72
72
  key: "execute",
73
73
  value: function () {
74
74
  var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
75
- var _this$validateAndNorm, namespace, skills, skill;
75
+ var _this$validateAndNorm, namespace, skills, dependencyService, dependencies, choices, skill;
76
76
 
77
77
  return _regenerator["default"].wrap(function _callee$(_context) {
78
78
  while (1) {
@@ -84,37 +84,44 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
84
84
 
85
85
  case 3:
86
86
  skills = _context.sent;
87
+ dependencyService = this.Service('dependency');
87
88
 
88
89
  if (namespace) {
89
- _context.next = 8;
90
+ _context.next = 11;
90
91
  break;
91
92
  }
92
93
 
93
- _context.next = 7;
94
+ dependencies = dependencyService.get().map(function (d) {
95
+ return d.namespace;
96
+ });
97
+ choices = skills.filter(function (s) {
98
+ return dependencies.indexOf(s.slug) === -1;
99
+ }).map(function (s) {
100
+ return {
101
+ value: s.slug,
102
+ label: s.name
103
+ };
104
+ });
105
+ _context.next = 10;
94
106
  return this.ui.prompt({
95
107
  type: 'select',
96
108
  label: 'Which skill would you like to add as a dependency?',
97
109
  isRequired: true,
98
110
  options: {
99
- choices: skills.map(function (s) {
100
- return {
101
- value: s.slug,
102
- label: s.name
103
- };
104
- })
111
+ choices: choices
105
112
  }
106
113
  });
107
114
 
108
- case 7:
115
+ case 10:
109
116
  namespace = _context.sent;
110
117
 
111
- case 8:
118
+ case 11:
112
119
  skill = skills.find(function (s) {
113
120
  return s.slug === namespace;
114
121
  });
115
122
 
116
123
  if (skill) {
117
- _context.next = 11;
124
+ _context.next = 14;
118
125
  break;
119
126
  }
120
127
 
@@ -123,8 +130,8 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
123
130
  friendlyMessage: "I could not find a skill with the slug of ".concat(namespace, ".")
124
131
  });
125
132
 
126
- case 11:
127
- this.Service('dependency').add({
133
+ case 14:
134
+ dependencyService.add({
128
135
  id: skill.id,
129
136
  namespace: skill.slug
130
137
  });
@@ -132,7 +139,7 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
132
139
  summaryLines: ["Added \"".concat(skill.name, "\" as a dependency!")]
133
140
  });
134
141
 
135
- case 13:
142
+ case 16:
136
143
  case "end":
137
144
  return _context.stop();
138
145
  }