@sprucelabs/spruce-cli 22.1.13 → 22.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/.DS_Store +0 -0
  2. package/.env +25 -0
  3. package/.env-dev +24 -0
  4. package/.eslintcache +1 -0
  5. package/build/.spruce/errors/errors.types.d.ts +137 -123
  6. package/build/.spruce/errors/options.types.d.ts +9 -3
  7. package/build/.spruce/errors/spruceCli/actionCancelled.schema.js +1 -1
  8. package/build/.spruce/errors/spruceCli/actionCancelled.schema.js.map +1 -1
  9. package/build/.spruce/errors/spruceCli/appViewControllerAlreadyExists.schema.d.ts +3 -0
  10. package/build/.spruce/errors/spruceCli/appViewControllerAlreadyExists.schema.js +12 -0
  11. package/build/.spruce/errors/spruceCli/appViewControllerAlreadyExists.schema.js.map +1 -0
  12. package/build/.spruce/errors/spruceCli/bootError.schema.js +1 -1
  13. package/build/.spruce/errors/spruceCli/bootError.schema.js.map +1 -1
  14. package/build/.spruce/errors/spruceCli/buildFailed.schema.js +3 -3
  15. package/build/.spruce/errors/spruceCli/buildFailed.schema.js.map +1 -1
  16. package/build/.spruce/errors/spruceCli/cacheNotEnabled.schema.js +1 -1
  17. package/build/.spruce/errors/spruceCli/cacheNotEnabled.schema.js.map +1 -1
  18. package/build/.spruce/errors/spruceCli/cannotPromptInCi.schema.d.ts +3 -0
  19. package/build/.spruce/errors/spruceCli/cannotPromptInCi.schema.js +12 -0
  20. package/build/.spruce/errors/spruceCli/cannotPromptInCi.schema.js.map +1 -0
  21. package/build/.spruce/errors/spruceCli/commandAborted.schema.js +3 -3
  22. package/build/.spruce/errors/spruceCli/commandAborted.schema.js.map +1 -1
  23. package/build/.spruce/errors/spruceCli/commandBlocked.schema.js +5 -5
  24. package/build/.spruce/errors/spruceCli/commandBlocked.schema.js.map +1 -1
  25. package/build/.spruce/errors/spruceCli/commandNotImplemented.schema.js +5 -5
  26. package/build/.spruce/errors/spruceCli/commandNotImplemented.schema.js.map +1 -1
  27. package/build/.spruce/errors/spruceCli/createAutoloaderFailed.schema.js +10 -10
  28. package/build/.spruce/errors/spruceCli/createAutoloaderFailed.schema.js.map +1 -1
  29. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js +3 -3
  30. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -1
  31. package/build/.spruce/errors/spruceCli/deployFailed.schema.js +3 -13
  32. package/build/.spruce/errors/spruceCli/deployFailed.schema.js.map +1 -1
  33. package/build/.spruce/errors/spruceCli/directoryEmpty.schema.js +3 -3
  34. package/build/.spruce/errors/spruceCli/directoryEmpty.schema.js.map +1 -1
  35. package/build/.spruce/errors/spruceCli/directoryNotSkill.schema.js +1 -1
  36. package/build/.spruce/errors/spruceCli/directoryNotSkill.schema.js.map +1 -1
  37. package/build/.spruce/errors/spruceCli/dockerNotStarted.schema.js +1 -1
  38. package/build/.spruce/errors/spruceCli/dockerNotStarted.schema.js.map +1 -1
  39. package/build/.spruce/errors/spruceCli/executingCommandFailed.schema.js +11 -11
  40. package/build/.spruce/errors/spruceCli/executingCommandFailed.schema.js.map +1 -1
  41. package/build/.spruce/errors/spruceCli/failedToImport.schema.js +3 -3
  42. package/build/.spruce/errors/spruceCli/failedToImport.schema.js.map +1 -1
  43. package/build/.spruce/errors/spruceCli/featureNotInstalled.schema.js +3 -3
  44. package/build/.spruce/errors/spruceCli/featureNotInstalled.schema.js.map +1 -1
  45. package/build/.spruce/errors/spruceCli/fileExists.schema.js +3 -3
  46. package/build/.spruce/errors/spruceCli/fileExists.schema.js.map +1 -1
  47. package/build/.spruce/errors/spruceCli/generic.schema.js +4 -4
  48. package/build/.spruce/errors/spruceCli/generic.schema.js.map +1 -1
  49. package/build/.spruce/errors/spruceCli/invalidCommand.schema.js +3 -3
  50. package/build/.spruce/errors/spruceCli/invalidCommand.schema.js.map +1 -1
  51. package/build/.spruce/errors/spruceCli/invalidEventContract.schema.js +5 -5
  52. package/build/.spruce/errors/spruceCli/invalidEventContract.schema.js.map +1 -1
  53. package/build/.spruce/errors/spruceCli/invalidFeatureCode.schema.js +3 -3
  54. package/build/.spruce/errors/spruceCli/invalidFeatureCode.schema.js.map +1 -1
  55. package/build/.spruce/errors/spruceCli/invalidTestDirectory.schema.js +3 -3
  56. package/build/.spruce/errors/spruceCli/invalidTestDirectory.schema.js.map +1 -1
  57. package/build/.spruce/errors/spruceCli/lintFailed.schema.js +3 -3
  58. package/build/.spruce/errors/spruceCli/lintFailed.schema.js.map +1 -1
  59. package/build/.spruce/errors/spruceCli/mercuryResponseError.schema.js +3 -3
  60. package/build/.spruce/errors/spruceCli/mercuryResponseError.schema.js.map +1 -1
  61. package/build/.spruce/errors/spruceCli/missingDependencies.schema.js +3 -3
  62. package/build/.spruce/errors/spruceCli/missingDependencies.schema.js.map +1 -1
  63. package/build/.spruce/errors/spruceCli/missingDependenciesDependency.schema.js +5 -5
  64. package/build/.spruce/errors/spruceCli/missingDependenciesDependency.schema.js.map +1 -1
  65. package/build/.spruce/errors/spruceCli/noOrganizationsFound.schema.js +1 -1
  66. package/build/.spruce/errors/spruceCli/noOrganizationsFound.schema.js.map +1 -1
  67. package/build/.spruce/errors/spruceCli/noSkillsRegistered.schema.js +1 -1
  68. package/build/.spruce/errors/spruceCli/noSkillsRegistered.schema.js.map +1 -1
  69. package/build/.spruce/errors/spruceCli/notImplemented.schema.js +1 -1
  70. package/build/.spruce/errors/spruceCli/notImplemented.schema.js.map +1 -1
  71. package/build/.spruce/errors/spruceCli/notLoggedIn.schema.js +1 -1
  72. package/build/.spruce/errors/spruceCli/notLoggedIn.schema.js.map +1 -1
  73. package/build/.spruce/errors/spruceCli/schemaExists.schema.js +5 -5
  74. package/build/.spruce/errors/spruceCli/schemaExists.schema.js.map +1 -1
  75. package/build/.spruce/errors/spruceCli/schemaFailedToImport.schema.js +3 -3
  76. package/build/.spruce/errors/spruceCli/schemaFailedToImport.schema.js.map +1 -1
  77. package/build/.spruce/errors/spruceCli/schemaTemplateItemBuildingFailed.schema.js +9 -9
  78. package/build/.spruce/errors/spruceCli/schemaTemplateItemBuildingFailed.schema.js.map +1 -1
  79. package/build/.spruce/errors/spruceCli/skillNotFound.schema.js +1 -1
  80. package/build/.spruce/errors/spruceCli/skillNotFound.schema.js.map +1 -1
  81. package/build/.spruce/errors/spruceCli/skillNotRegistered.schema.js +1 -1
  82. package/build/.spruce/errors/spruceCli/skillNotRegistered.schema.js.map +1 -1
  83. package/build/.spruce/errors/spruceCli/skillViewExists.schema.js +3 -3
  84. package/build/.spruce/errors/spruceCli/skillViewExists.schema.js.map +1 -1
  85. package/build/.spruce/errors/spruceCli/storeExists.schema.js +1 -1
  86. package/build/.spruce/errors/spruceCli/storeExists.schema.js.map +1 -1
  87. package/build/.spruce/errors/spruceCli/testFailed.schema.js +7 -7
  88. package/build/.spruce/errors/spruceCli/testFailed.schema.js.map +1 -1
  89. package/build/.spruce/errors/spruceCli/themeExists.schema.js +1 -1
  90. package/build/.spruce/errors/spruceCli/themeExists.schema.js.map +1 -1
  91. package/build/.spruce/errors/spruceCli/transportAlreadyExists.schema.js +3 -3
  92. package/build/.spruce/errors/spruceCli/transportAlreadyExists.schema.js.map +1 -1
  93. package/build/.spruce/errors/spruceCli/viewPluginAlreadyExists.schema.js +3 -3
  94. package/build/.spruce/errors/spruceCli/viewPluginAlreadyExists.schema.js.map +1 -1
  95. package/build/.spruce/errors/spruceCli/vscodeNotInstalled.schema.js +1 -1
  96. package/build/.spruce/errors/spruceCli/vscodeNotInstalled.schema.js.map +1 -1
  97. package/build/GlobalEmitter.js.map +1 -1
  98. package/build/__tests__/behavioral/features/InstallingFeaturesDirectly.test.d.ts +17 -0
  99. package/build/__tests__/behavioral/features/InstallingFeaturesDirectly.test.js +142 -0
  100. package/build/__tests__/behavioral/features/InstallingFeaturesDirectly.test.js.map +1 -0
  101. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +1 -1
  102. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  103. package/build/__tests__/behavioral/views/CreatingAnAppViewController.test.d.ts +23 -0
  104. package/build/__tests__/behavioral/views/CreatingAnAppViewController.test.js +136 -0
  105. package/build/__tests__/behavioral/views/CreatingAnAppViewController.test.js.map +1 -0
  106. package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js +1 -1
  107. package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js.map +1 -1
  108. package/build/__tests__/behavioral/views/plugins/CreatingAViewPlugin.test.js +1 -1
  109. package/build/__tests__/behavioral/views/plugins/CreatingAViewPlugin.test.js.map +1 -1
  110. package/build/__tests__/implementation/TerminalInterface.test.d.ts +1 -0
  111. package/build/__tests__/implementation/TerminalInterface.test.js +8 -0
  112. package/build/__tests__/implementation/TerminalInterface.test.js.map +1 -1
  113. package/build/cli/Cli.js +0 -1
  114. package/build/cli/Cli.js.map +1 -1
  115. package/build/errors/SpruceError.js +6 -0
  116. package/build/errors/SpruceError.js.map +1 -1
  117. package/build/errors/appViewControllerAlreadyExists.builder.d.ts +6 -0
  118. package/build/errors/appViewControllerAlreadyExists.builder.js +9 -0
  119. package/build/errors/appViewControllerAlreadyExists.builder.js.map +1 -0
  120. package/build/errors/cannotPromptInCi.builder.d.ts +6 -0
  121. package/build/errors/cannotPromptInCi.builder.js +9 -0
  122. package/build/errors/cannotPromptInCi.builder.js.map +1 -0
  123. package/build/features/cache/CacheFeature.d.ts +8 -5
  124. package/build/features/cache/CacheFeature.js.map +1 -1
  125. package/build/features/conversation/ConversationFeature.d.ts +8 -5
  126. package/build/features/conversation/ConversationFeature.js.map +1 -1
  127. package/build/features/dependencies/DependencyFeature.d.ts +8 -5
  128. package/build/features/dependencies/DependencyFeature.js.map +1 -1
  129. package/build/features/deploy/DeployFeature.d.ts +8 -5
  130. package/build/features/deploy/DeployFeature.js.map +1 -1
  131. package/build/features/error/ErrorFeature.d.ts +8 -8
  132. package/build/features/error/ErrorFeature.js.map +1 -1
  133. package/build/features/eventContract/EventContractFeature.d.ts +8 -5
  134. package/build/features/eventContract/EventContractFeature.js.map +1 -1
  135. package/build/features/onboard/OnboardFeature.d.ts +8 -5
  136. package/build/features/onboard/OnboardFeature.js.map +1 -1
  137. package/build/features/organization/OrganizationFeature.d.ts +3 -0
  138. package/build/features/permission/PermissionFeature.d.ts +3 -0
  139. package/build/features/person/PersonFeature.d.ts +3 -0
  140. package/build/features/polish/PolishFeature.d.ts +3 -0
  141. package/build/features/sandbox/SandboxFeature.d.ts +8 -5
  142. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  143. package/build/features/skill/actions/BootAction.d.ts +9 -9
  144. package/build/features/skill/actions/BootAction.js.map +1 -1
  145. package/build/features/skill/actions/InstallFeature.d.ts +0 -0
  146. package/build/features/skill/actions/InstallFeature.js +2 -0
  147. package/build/features/skill/actions/InstallFeature.js.map +1 -0
  148. package/build/features/skill/actions/InstallFeatureAction.d.ts +37 -0
  149. package/build/features/skill/actions/InstallFeatureAction.js +79 -0
  150. package/build/features/skill/actions/InstallFeatureAction.js.map +1 -0
  151. package/build/features/store/StoreFeature.d.ts +8 -5
  152. package/build/features/store/StoreFeature.js.map +1 -1
  153. package/build/features/test/TestFeature.d.ts +8 -5
  154. package/build/features/test/TestFeature.js.map +1 -1
  155. package/build/features/view/ViewFeature.d.ts +8 -8
  156. package/build/features/view/ViewFeature.js.map +1 -1
  157. package/build/features/view/actions/CreateAppAction.d.ts +17 -0
  158. package/build/features/view/actions/CreateAppAction.js +28 -0
  159. package/build/features/view/actions/CreateAppAction.js.map +1 -0
  160. package/build/features/view/actions/SyncAction.d.ts +1 -2
  161. package/build/features/view/actions/SyncAction.js +13 -4
  162. package/build/features/view/actions/SyncAction.js.map +1 -1
  163. package/build/features/view/writers/ViewWriter.d.ts +1 -0
  164. package/build/features/view/writers/ViewWriter.js +11 -0
  165. package/build/features/view/writers/ViewWriter.js.map +1 -1
  166. package/build/features/vscode/VsCodeFeature.d.ts +8 -5
  167. package/build/features/vscode/VsCodeFeature.js.map +1 -1
  168. package/build/index.js +0 -0
  169. package/build/interfaces/TerminalInterface.js +3 -0
  170. package/build/interfaces/TerminalInterface.js.map +1 -1
  171. package/build/tests/fixtures/ViewFixture.js +1 -1
  172. package/build/tests/fixtures/ViewFixture.js.map +1 -1
  173. package/build/utilities/isCi.js +3 -0
  174. package/build/utilities/isCi.js.map +1 -1
  175. package/dist/spruce-darwin-arm64 +0 -0
  176. package/dist/spruce-linux-arm64 +0 -0
  177. package/junit.xml +1782 -0
  178. package/package.json +29 -29
  179. package/src/.spruce/errors/errors.types.ts +1180 -911
  180. package/src/.spruce/errors/options.types.ts +131 -248
  181. package/src/.spruce/errors/spruceCli/actionCancelled.schema.ts +8 -5
  182. package/src/.spruce/errors/spruceCli/appViewControllerAlreadyExists.schema.ts +16 -0
  183. package/src/.spruce/errors/spruceCli/bootError.schema.ts +8 -5
  184. package/src/.spruce/errors/spruceCli/buildFailed.schema.ts +16 -15
  185. package/src/.spruce/errors/spruceCli/cacheNotEnabled.schema.ts +8 -5
  186. package/src/.spruce/errors/spruceCli/cannotPromptInCi.schema.ts +16 -0
  187. package/src/.spruce/errors/spruceCli/commandAborted.schema.ts +15 -13
  188. package/src/.spruce/errors/spruceCli/commandBlocked.schema.ts +20 -18
  189. package/src/.spruce/errors/spruceCli/commandNotImplemented.schema.ts +26 -25
  190. package/src/.spruce/errors/spruceCli/createAutoloaderFailed.schema.ts +43 -42
  191. package/src/.spruce/errors/spruceCli/dependencyExists.schema.ts +14 -12
  192. package/src/.spruce/errors/spruceCli/deployFailed.schema.ts +14 -22
  193. package/src/.spruce/errors/spruceCli/directoryEmpty.schema.ts +14 -12
  194. package/src/.spruce/errors/spruceCli/directoryNotSkill.schema.ts +9 -7
  195. package/src/.spruce/errors/spruceCli/dockerNotStarted.schema.ts +8 -5
  196. package/src/.spruce/errors/spruceCli/executingCommandFailed.schema.ts +41 -40
  197. package/src/.spruce/errors/spruceCli/failedToImport.schema.ts +17 -15
  198. package/src/.spruce/errors/spruceCli/featureNotInstalled.schema.ts +15 -14
  199. package/src/.spruce/errors/spruceCli/fileExists.schema.ts +17 -15
  200. package/src/.spruce/errors/spruceCli/generic.schema.ts +15 -13
  201. package/src/.spruce/errors/spruceCli/invalidCommand.schema.ts +17 -15
  202. package/src/.spruce/errors/spruceCli/invalidEventContract.schema.ts +21 -20
  203. package/src/.spruce/errors/spruceCli/invalidFeatureCode.schema.ts +15 -14
  204. package/src/.spruce/errors/spruceCli/invalidTestDirectory.schema.ts +15 -14
  205. package/src/.spruce/errors/spruceCli/lintFailed.schema.ts +17 -15
  206. package/src/.spruce/errors/spruceCli/mercuryResponseError.schema.ts +16 -15
  207. package/src/.spruce/errors/spruceCli/missingDependencies.schema.ts +16 -16
  208. package/src/.spruce/errors/spruceCli/missingDependenciesDependency.schema.ts +21 -20
  209. package/src/.spruce/errors/spruceCli/noOrganizationsFound.schema.ts +9 -7
  210. package/src/.spruce/errors/spruceCli/noSkillsRegistered.schema.ts +9 -7
  211. package/src/.spruce/errors/spruceCli/notImplemented.schema.ts +9 -6
  212. package/src/.spruce/errors/spruceCli/notLoggedIn.schema.ts +8 -5
  213. package/src/.spruce/errors/spruceCli/schemaExists.schema.ts +21 -19
  214. package/src/.spruce/errors/spruceCli/schemaFailedToImport.schema.ts +18 -17
  215. package/src/.spruce/errors/spruceCli/schemaTemplateItemBuildingFailed.schema.ts +33 -32
  216. package/src/.spruce/errors/spruceCli/skillNotFound.schema.ts +8 -5
  217. package/src/.spruce/errors/spruceCli/skillNotRegistered.schema.ts +9 -7
  218. package/src/.spruce/errors/spruceCli/skillViewExists.schema.ts +14 -12
  219. package/src/.spruce/errors/spruceCli/storeExists.schema.ts +8 -5
  220. package/src/.spruce/errors/spruceCli/testFailed.schema.ts +26 -24
  221. package/src/.spruce/errors/spruceCli/themeExists.schema.ts +8 -5
  222. package/src/.spruce/errors/spruceCli/transportAlreadyExists.schema.ts +16 -15
  223. package/src/.spruce/errors/spruceCli/viewPluginAlreadyExists.schema.ts +15 -14
  224. package/src/.spruce/errors/spruceCli/vscodeNotInstalled.schema.ts +9 -7
  225. package/src/GlobalEmitter.ts +0 -1
  226. package/src/__tests__/behavioral/features/InstallingFeaturesDirectly.test.ts +149 -0
  227. package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
  228. package/src/__tests__/behavioral/views/CreatingAnAppViewController.test.ts +158 -0
  229. package/src/__tests__/behavioral/views/KeepingViewsInSync.test.ts +1 -1
  230. package/src/__tests__/behavioral/views/plugins/CreatingAViewPlugin.test.ts +1 -1
  231. package/src/__tests__/implementation/TerminalInterface.test.ts +14 -1
  232. package/src/cli/Cli.ts +1 -2
  233. package/src/errors/SpruceError.ts +8 -0
  234. package/src/errors/appViewControllerAlreadyExists.builder.ts +7 -0
  235. package/src/errors/cannotPromptInCi.builder.ts +7 -0
  236. package/src/features/cache/CacheFeature.ts +10 -6
  237. package/src/features/conversation/ConversationFeature.ts +10 -6
  238. package/src/features/dependencies/DependencyFeature.ts +10 -6
  239. package/src/features/deploy/DeployFeature.ts +10 -6
  240. package/src/features/error/ErrorFeature.ts +10 -10
  241. package/src/features/eventContract/EventContractFeature.ts +10 -6
  242. package/src/features/onboard/OnboardFeature.ts +10 -6
  243. package/src/features/organization/OrganizationFeature.ts +4 -0
  244. package/src/features/permission/PermissionFeature.ts +4 -0
  245. package/src/features/person/PersonFeature.ts +4 -0
  246. package/src/features/polish/PolishFeature.ts +4 -0
  247. package/src/features/sandbox/SandboxFeature.ts +10 -6
  248. package/src/features/skill/actions/BootAction.ts +11 -11
  249. package/src/features/skill/actions/InstallFeatureAction.ts +93 -0
  250. package/src/features/store/StoreFeature.ts +10 -6
  251. package/src/features/test/TestFeature.ts +10 -6
  252. package/src/features/view/ViewFeature.ts +10 -10
  253. package/src/features/view/actions/CreateAppAction.ts +32 -0
  254. package/src/features/view/actions/SyncAction.ts +13 -7
  255. package/src/features/view/writers/ViewWriter.ts +19 -0
  256. package/src/features/vscode/VsCodeFeature.ts +9 -6
  257. package/src/interfaces/TerminalInterface.ts +5 -0
  258. package/src/tests/fixtures/ViewFixture.ts +1 -1
  259. package/src/utilities/isCi.ts +4 -0
  260. package/yarn-error.log +597 -0
  261. package/LICENSE +0 -21
@@ -5,12 +5,6 @@ import AbstractFeature, {
5
5
  } from '../AbstractFeature'
6
6
  import { FeatureCode } from '../features.types'
7
7
 
8
- declare module '../../features/features.types' {
9
- interface FeatureMap {
10
- deploy: DeployFeature
11
- }
12
- }
13
-
14
8
  export default class DeployFeature extends AbstractFeature {
15
9
  public description = 'Deploy your skill with ease.'
16
10
  public code: FeatureCode = 'deploy'
@@ -35,3 +29,13 @@ export default class DeployFeature extends AbstractFeature {
35
29
  }
36
30
  }
37
31
  }
32
+
33
+ declare module '../../features/features.types' {
34
+ interface FeatureMap {
35
+ deploy: DeployFeature
36
+ }
37
+
38
+ interface FeatureOptionsMap {
39
+ deploy: undefined
40
+ }
41
+ }
@@ -7,16 +7,6 @@ import AbstractFeature, {
7
7
  } from '../AbstractFeature'
8
8
  import { FeatureCode } from '../features.types'
9
9
 
10
- declare module '../../features/features.types' {
11
- interface FeatureMap {
12
- error: ErrorFeature
13
- }
14
-
15
- interface FeatureOptionsMap {
16
- error: undefined
17
- }
18
- }
19
-
20
10
  export default class ErrorFeature extends AbstractFeature {
21
11
  public nameReadable = 'error handling'
22
12
  public description =
@@ -102,3 +92,13 @@ export default class ErrorFeature extends AbstractFeature {
102
92
  return this.Writer('error').writePlugin(this.cwd)
103
93
  }
104
94
  }
95
+
96
+ declare module '../../features/features.types' {
97
+ interface FeatureMap {
98
+ error: ErrorFeature
99
+ }
100
+
101
+ interface FeatureOptionsMap {
102
+ error: undefined
103
+ }
104
+ }
@@ -3,12 +3,6 @@ import { FileDescription } from '../../types/cli.types'
3
3
  import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
4
4
  import { FeatureCode } from '../features.types'
5
5
 
6
- declare module '../../features/features.types' {
7
- interface FeatureMap {
8
- eventContract: EventContractFeature
9
- }
10
- }
11
-
12
6
  export default class EventContractFeature extends AbstractFeature {
13
7
  public code: FeatureCode = 'eventContract'
14
8
  public nameReadable = 'Event Contract'
@@ -22,3 +16,13 @@ export default class EventContractFeature extends AbstractFeature {
22
16
 
23
17
  public isInstalled = async () => true
24
18
  }
19
+
20
+ declare module '../../features/features.types' {
21
+ interface FeatureMap {
22
+ eventContract: EventContractFeature
23
+ }
24
+
25
+ interface FeatureOptionsMap {
26
+ eventContract: undefined
27
+ }
28
+ }
@@ -9,12 +9,6 @@ import { FeatureCode } from '../features.types'
9
9
  import ScriptLoader from './ScriptLoader'
10
10
  import OnboardingStore from './stores/OnboardingStore'
11
11
 
12
- declare module '../../features/features.types' {
13
- interface FeatureMap {
14
- onboard: OnboardFeature
15
- }
16
- }
17
-
18
12
  export default class OnboardFeature extends AbstractFeature {
19
13
  public code: FeatureCode = 'onboard'
20
14
  public nameReadable = 'Onboard'
@@ -150,3 +144,13 @@ export default class OnboardFeature extends AbstractFeature {
150
144
  return isExpectedCommand
151
145
  }
152
146
  }
147
+
148
+ declare module '../../features/features.types' {
149
+ interface FeatureMap {
150
+ onboard: OnboardFeature
151
+ }
152
+
153
+ interface FeatureOptionsMap {
154
+ onboard: undefined
155
+ }
156
+ }
@@ -25,4 +25,8 @@ declare module '../../features/features.types' {
25
25
  interface FeatureMap {
26
26
  organization: OrganizationFeature
27
27
  }
28
+
29
+ interface FeatureOptionsMap {
30
+ organization: undefined
31
+ }
28
32
  }
@@ -81,4 +81,8 @@ declare module '../../features/features.types' {
81
81
  interface FeatureMap {
82
82
  permission: PermissionFeature
83
83
  }
84
+
85
+ interface FeatureOptionsMap {
86
+ permission: undefined
87
+ }
84
88
  }
@@ -20,4 +20,8 @@ declare module '../../features/features.types' {
20
20
  interface FeatureMap {
21
21
  person: PersonFeature
22
22
  }
23
+
24
+ interface FeatureOptionsMap {
25
+ person: undefined
26
+ }
23
27
  }
@@ -30,4 +30,8 @@ declare module '../../features/features.types' {
30
30
  interface FeatureMap {
31
31
  polish: PolishFeature
32
32
  }
33
+
34
+ interface FeatureOptionsMap {
35
+ polish: undefined
36
+ }
33
37
  }
@@ -3,12 +3,6 @@ import uiUtil from '../../utilities/ui.utility'
3
3
  import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
4
4
  import { ActionOptions, FeatureCode } from '../features.types'
5
5
 
6
- declare module '../../features/features.types' {
7
- interface FeatureMap {
8
- sandbox: SandboxFeature
9
- }
10
- }
11
-
12
6
  export default class SandboxFeature extends AbstractFeature {
13
7
  public code: FeatureCode = 'sandbox'
14
8
  public nameReadable = 'Sandbox'
@@ -45,3 +39,13 @@ export default class SandboxFeature extends AbstractFeature {
45
39
  })
46
40
  }
47
41
  }
42
+
43
+ declare module '../../features/features.types' {
44
+ interface FeatureMap {
45
+ sandbox: SandboxFeature
46
+ }
47
+
48
+ interface FeatureOptionsMap {
49
+ sandbox: undefined
50
+ }
51
+ }
@@ -5,17 +5,6 @@ import CommandService from '../../../services/CommandService'
5
5
  import AbstractAction from '../../AbstractAction'
6
6
  import { FeatureActionResponse } from '../../features.types'
7
7
 
8
- type OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.BootSkillOptionsSchema
9
- type Options = SpruceSchemas.SpruceCli.v2020_07_22.BootSkillOptions
10
-
11
- export interface BootMeta {
12
- kill: () => void
13
- pid: number
14
- promise: Promise<void>
15
- isBooted: boolean
16
- bootPromise: Promise<void>
17
- }
18
-
19
8
  export default class BootAction extends AbstractAction<OptionsSchema> {
20
9
  public optionsSchema: OptionsSchema = bootSkillOptionsSchema
21
10
  public commandAliases = ['boot']
@@ -125,3 +114,14 @@ export default class BootAction extends AbstractAction<OptionsSchema> {
125
114
  return null
126
115
  }
127
116
  }
117
+
118
+ type OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.BootSkillOptionsSchema
119
+ type Options = SpruceSchemas.SpruceCli.v2020_07_22.BootSkillOptions
120
+
121
+ export interface BootMeta {
122
+ kill: () => void
123
+ pid: number
124
+ promise: Promise<void>
125
+ isBooted: boolean
126
+ bootPromise: Promise<void>
127
+ }
@@ -0,0 +1,93 @@
1
+ import { buildSchema, SchemaValues } from '@sprucelabs/schema'
2
+ import { SelectChoice } from '@sprucelabs/spruce-core-schemas'
3
+ import AbstractAction from '../../AbstractAction'
4
+ import { FeatureActionResponse, FeatureCode } from '../../features.types'
5
+
6
+ export default class InstallFeatureAction extends AbstractAction<OptionsSchema> {
7
+ public optionsSchema = optionsSchema
8
+ public invocationMessage = 'Installing a feature... 🚀'
9
+ public commandAliases = ['install.feature']
10
+
11
+ public async execute(
12
+ options: InstallFeatureActionOptions
13
+ ): Promise<FeatureActionResponse> {
14
+ let { code } = options ?? {}
15
+
16
+ if (!code) {
17
+ const choices: SelectChoice[] = await this.buildFeatureChoices()
18
+
19
+ if (!choices.length) {
20
+ return {
21
+ summaryLines: [
22
+ 'Nothing to install, you have already installed everything!',
23
+ ],
24
+ }
25
+ }
26
+
27
+ code = await this.promptForFeature(choices)
28
+ }
29
+ const results = await this.features.install({
30
+ features: [{ code: code as any }],
31
+ })
32
+
33
+ return results
34
+ }
35
+
36
+ private async promptForFeature(choices: SelectChoice[]) {
37
+ return await this.ui.prompt({
38
+ type: 'select',
39
+ label: 'Which feature do you want to install?',
40
+ isRequired: true,
41
+ options: {
42
+ choices,
43
+ },
44
+ })
45
+ }
46
+
47
+ private async buildFeatureChoices() {
48
+ const choices: SelectChoice[] = []
49
+
50
+ for (const key in features) {
51
+ const isInstalled = await this.features.isInstalled(
52
+ key as FeatureCode
53
+ )
54
+ if (!isInstalled) {
55
+ choices.push({
56
+ label: features[key as keyof typeof features],
57
+ value: key,
58
+ })
59
+ }
60
+ }
61
+ return choices
62
+ }
63
+ }
64
+
65
+ const features = {
66
+ error: 'Errors',
67
+ event: 'Events',
68
+ schema: 'Schemas',
69
+ store: 'Stores (including database support)',
70
+ test: 'Tests',
71
+ view: 'Views',
72
+ }
73
+
74
+ const allFeatureChoices: SelectChoice[] = Object.keys(features).map((key) => ({
75
+ label: features[key as keyof typeof features],
76
+ value: key,
77
+ }))
78
+
79
+ const optionsSchema = buildSchema({
80
+ id: 'installFeature',
81
+ fields: {
82
+ code: {
83
+ type: 'select',
84
+ label: 'Feature to install',
85
+ options: {
86
+ choices: allFeatureChoices,
87
+ },
88
+ },
89
+ },
90
+ })
91
+
92
+ type OptionsSchema = typeof optionsSchema
93
+ export type InstallFeatureActionOptions = SchemaValues<OptionsSchema>
@@ -6,12 +6,6 @@ import AbstractFeature, {
6
6
  } from '../AbstractFeature'
7
7
  import { FeatureCode } from '../features.types'
8
8
 
9
- declare module '../../features/features.types' {
10
- interface FeatureMap {
11
- store: StoreFeature
12
- }
13
- }
14
-
15
9
  export default class StoreFeature extends AbstractFeature {
16
10
  public nameReadable = 'Data Stores'
17
11
  public description = 'For working with remote places of storage.'
@@ -87,3 +81,13 @@ export default class StoreFeature extends AbstractFeature {
87
81
  }
88
82
  }
89
83
  }
84
+
85
+ declare module '../../features/features.types' {
86
+ interface FeatureMap {
87
+ store: StoreFeature
88
+ }
89
+
90
+ interface FeatureOptionsMap {
91
+ store: undefined
92
+ }
93
+ }
@@ -8,12 +8,6 @@ import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
8
8
  import ParentTestFinder from '../error/ParentTestFinder'
9
9
  import { FeatureCode } from '../features.types'
10
10
 
11
- declare module '../../features/features.types' {
12
- interface FeatureMap {
13
- test: TestFeature
14
- }
15
- }
16
-
17
11
  export interface ParentClassCandidate {
18
12
  name: string
19
13
  label: string
@@ -149,3 +143,13 @@ export default class TestFeature extends AbstractFeature {
149
143
  return candidates
150
144
  }
151
145
  }
146
+
147
+ declare module '../../features/features.types' {
148
+ interface FeatureMap {
149
+ test: TestFeature
150
+ }
151
+
152
+ interface FeatureOptionsMap {
153
+ test: undefined
154
+ }
155
+ }
@@ -3,16 +3,6 @@ import { NpmPackage } from '../../types/cli.types'
3
3
  import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
4
4
  import { ActionOptions, FeatureCode } from '../features.types'
5
5
 
6
- declare module '../../features/features.types' {
7
- interface FeatureMap {
8
- view: ViewFeature
9
- }
10
-
11
- interface FeatureOptionsMap {
12
- view: undefined
13
- }
14
- }
15
-
16
6
  export default class ViewFeature extends AbstractFeature {
17
7
  public nameReadable = 'views'
18
8
  public description = 'Views: Create views using the Heartwood framework.'
@@ -98,3 +88,13 @@ export default class ViewFeature extends AbstractFeature {
98
88
  return { files }
99
89
  }
100
90
  }
91
+
92
+ declare module '../../features/features.types' {
93
+ interface FeatureMap {
94
+ view: ViewFeature
95
+ }
96
+
97
+ interface FeatureOptionsMap {
98
+ view: undefined
99
+ }
100
+ }
@@ -0,0 +1,32 @@
1
+ import { buildSchema } from '@sprucelabs/schema'
2
+ import actionUtil from '../../../utilities/action.utility'
3
+ import AbstractAction from '../../AbstractAction'
4
+ import { FeatureActionResponse } from '../../features.types'
5
+
6
+ export default class CreateAppAction extends AbstractAction<OptionsSchema> {
7
+ public optionsSchema = optionsSchema
8
+ public invocationMessage = 'Creating new app view controller... '
9
+ public readonly commandAliases = ['create.avc']
10
+
11
+ public async execute(): Promise<FeatureActionResponse> {
12
+ const writer = this.Writer('view', {})
13
+ const files = await writer.writeAppViewController(this.cwd)
14
+
15
+ const results = await this.Action('view', 'sync').execute({})
16
+ const merged = actionUtil.mergeActionResults(
17
+ {
18
+ files,
19
+ },
20
+ results
21
+ )
22
+
23
+ return merged
24
+ }
25
+ }
26
+
27
+ const optionsSchema = buildSchema({
28
+ id: 'createAppViewControllerOptions',
29
+ fields: {},
30
+ })
31
+
32
+ type OptionsSchema = typeof optionsSchema
@@ -1,5 +1,5 @@
1
1
  import globby from '@sprucelabs/globby'
2
- import { buildSchema, SchemaValues } from '@sprucelabs/schema'
2
+ import { buildSchema } from '@sprucelabs/schema'
3
3
  import { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'
4
4
  import {
5
5
  VcTemplateItem,
@@ -16,12 +16,10 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
16
16
  public commandAliases = ['sync.views']
17
17
  public invocationMessage = 'Syncing view controller types... 🌲'
18
18
 
19
- public async execute(
20
- _options: SchemaValues<OptionsSchema>
21
- ): Promise<FeatureActionResponse> {
19
+ public async execute(): Promise<FeatureActionResponse> {
22
20
  const targetDir = diskUtil.resolvePath(this.cwd, 'src')
23
21
  const matches = await globby(
24
- ['**/*.svc.ts', '**/*.vc.ts', '**/*.view.plugin.ts'],
22
+ ['**/*.svc.ts', '**/*.vc.ts', '**/*.view.plugin.ts', '**/*.avc.ts'],
25
23
  {
26
24
  cwd: targetDir,
27
25
  }
@@ -35,12 +33,13 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
35
33
  const introspect = introspectionUtil.introspect(paths)
36
34
 
37
35
  const vcTemplateItems: VcTemplateItem[] = []
36
+ let appTemplateItem: VcTemplateItem | undefined
38
37
  const svcTemplateItems: VcTemplateItem[] = []
39
38
  const viewPluginItems: ViewControllerPluginItem[] = []
40
39
 
41
40
  introspect.forEach(({ classes }) => {
42
41
  for (const thisClass of classes) {
43
- const { vc, svc, plugin } =
42
+ const { vc, svc, plugin, avc } =
44
43
  this.mapIntrospectedClassToTemplateItem(thisClass)
45
44
 
46
45
  if (vc) {
@@ -49,6 +48,8 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
49
48
  viewPluginItems.push(plugin)
50
49
  } else if (svc) {
51
50
  svcTemplateItems.push(svc)
51
+ } else if (avc) {
52
+ appTemplateItem = avc
52
53
  } else {
53
54
  throw new Error('Unexpected class type.')
54
55
  }
@@ -63,6 +64,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
63
64
  vcTemplateItems,
64
65
  svcTemplateItems,
65
66
  viewPluginItems,
67
+ appTemplateItem,
66
68
  }
67
69
  )
68
70
 
@@ -75,6 +77,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
75
77
  vc?: VcTemplateItem
76
78
  svc?: VcTemplateItem
77
79
  plugin?: ViewControllerPluginItem
80
+ avc?: VcTemplateItem
78
81
  } {
79
82
  const item = {
80
83
  id: c.staticProperties.id,
@@ -84,10 +87,13 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
84
87
 
85
88
  let vc: VcTemplateItem | undefined
86
89
  let svc: VcTemplateItem | undefined
90
+ let avc: VcTemplateItem | undefined
87
91
  let plugin: ViewControllerPluginItem | undefined
88
92
 
89
93
  if (c.classPath.endsWith('.svc.ts')) {
90
94
  svc = item
95
+ } else if (c.classPath.endsWith('avc.ts')) {
96
+ avc = item
91
97
  } else if (c.classPath.endsWith('view.plugin.ts')) {
92
98
  const nameCamel = c.classPath.match(/([^/]+).view.plugin.ts$/)![1]
93
99
  plugin = { ...item, nameCamel }
@@ -95,7 +101,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
95
101
  vc = item
96
102
  }
97
103
 
98
- return { svc, vc, plugin }
104
+ return { svc, vc, plugin, avc }
99
105
  }
100
106
  }
101
107
 
@@ -214,4 +214,23 @@ export default class ViewWriter extends AbstractWriter {
214
214
  )
215
215
  return { path, filename }
216
216
  }
217
+
218
+ public async writeAppViewController(cwd: string) {
219
+ const match = await globby(cwd + '/**/App.avc.ts')
220
+
221
+ if (match.length > 0) {
222
+ throw new SpruceError({
223
+ code: 'APP_VIEW_CONTROLLER_ALREADY_EXISTS',
224
+ })
225
+ }
226
+
227
+ const destination = diskUtil.resolvePath(cwd, 'src', 'App.avc.ts')
228
+ const contents = this.templates.appViewController()
229
+
230
+ return this.writeFileIfChangedMixinResults(
231
+ destination,
232
+ contents,
233
+ 'Your new app view controller!'
234
+ )
235
+ }
217
236
  }
@@ -3,12 +3,6 @@ import { FileDescription } from '../../types/cli.types'
3
3
  import AbstractFeature from '../AbstractFeature'
4
4
  import { FeatureCode } from '../features.types'
5
5
 
6
- declare module '../../features/features.types' {
7
- interface FeatureMap {
8
- vscode: VsCodeFeature
9
- }
10
- }
11
-
12
6
  export default class VsCodeFeature extends AbstractFeature {
13
7
  public nameReadable = 'VSCode'
14
8
  public description = 'Create settings and install VSCode extensions'
@@ -52,3 +46,12 @@ export default class VsCodeFeature extends AbstractFeature {
52
46
  return true
53
47
  }
54
48
  }
49
+
50
+ declare module '../../features/features.types' {
51
+ interface FeatureMap {
52
+ vscode: VsCodeFeature
53
+ }
54
+ interface FeatureOptionsMap {
55
+ vscode: undefined
56
+ }
57
+ }
@@ -414,6 +414,11 @@ export default class TerminalInterface implements GraphicsInterface {
414
414
  definition: T
415
415
  ): Promise<FieldDefinitionValueType<T>> {
416
416
  this.isPromptActive = true
417
+
418
+ if (isCi()) {
419
+ throw new SpruceError({ code: 'CANNOT_PROMPT_IN_CI' })
420
+ }
421
+
417
422
  const name = generateInquirerFieldName()
418
423
  const fieldDefinition: FieldDefinitions = definition
419
424
  const { defaultValue } = fieldDefinition
@@ -24,7 +24,7 @@ export default class ViewFixture {
24
24
  options
25
25
  )
26
26
 
27
- await this.syncAction.execute({})
27
+ await this.syncAction.execute()
28
28
 
29
29
  return files[0]
30
30
  }
@@ -1,6 +1,10 @@
1
1
  export default function isCi() {
2
2
  const env = process.env
3
3
 
4
+ if (process.env.IS_TESTING_SELF) {
5
+ return false
6
+ }
7
+
4
8
  if (
5
9
  [
6
10
  'TRAVIS',