@sprucelabs/spruce-cli 18.2.0 → 18.3.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 (368) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/.spruce/events/events.contract.d.ts +159 -0
  3. package/build/.spruce/events/events.contract.js +5 -1
  4. package/build/.spruce/events/events.contract.js.map +1 -1
  5. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.d.ts +46 -0
  6. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.js +57 -0
  7. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.js.map +1 -0
  8. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.d.ts +68 -0
  9. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.js +78 -0
  10. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.js.map +1 -0
  11. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.d.ts +40 -0
  12. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.js +51 -0
  13. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.js.map +1 -0
  14. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.d.ts +9 -0
  15. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.js +17 -0
  16. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.js.map +1 -0
  17. package/build/.spruce/schemas/schemas.types.d.ts +158 -55
  18. package/build/.spruce/schemas/schemas.types.js.map +1 -1
  19. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.d.ts +3 -0
  20. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.js +70 -0
  21. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.js.map +1 -0
  22. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.d.ts +3 -0
  23. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.js +35 -0
  24. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.js.map +1 -0
  25. package/build/.spruce/settings.json +2 -1
  26. package/build/GlobalEmitter.d.ts +13 -38
  27. package/build/GlobalEmitter.js +3 -6
  28. package/build/GlobalEmitter.js.map +1 -1
  29. package/build/__tests__/behavioral/TestingAConversation.test.d.ts +2 -1
  30. package/build/__tests__/behavioral/TestingAConversation.test.js +74 -84
  31. package/build/__tests__/behavioral/TestingAConversation.test.js.map +1 -1
  32. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js +38 -13
  33. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js.map +1 -1
  34. package/build/__tests__/behavioral/events/EventWriter.test.d.ts +4 -0
  35. package/build/__tests__/behavioral/events/EventWriter.test.js +116 -0
  36. package/build/__tests__/behavioral/events/EventWriter.test.js.map +1 -0
  37. package/build/__tests__/behavioral/{ListeningToCoreEvents.test.d.ts → events/ListeningToCoreEvents.test.d.ts} +1 -1
  38. package/build/__tests__/behavioral/{ListeningToCoreEvents.test.js → events/ListeningToCoreEvents.test.js} +1 -1
  39. package/build/__tests__/behavioral/events/ListeningToCoreEvents.test.js.map +1 -0
  40. package/build/__tests__/behavioral/{RegisteringEventsOnBoot.test.d.ts → events/RegisteringEventsOnBoot.test.d.ts} +1 -1
  41. package/build/__tests__/behavioral/{RegisteringEventsOnBoot.test.js → events/RegisteringEventsOnBoot.test.js} +2 -2
  42. package/build/__tests__/behavioral/events/RegisteringEventsOnBoot.test.js.map +1 -0
  43. package/build/__tests__/behavioral/{RegisteringGlobalEvents.test.d.ts → events/RegisteringGlobalEvents.test.d.ts} +2 -3
  44. package/build/__tests__/behavioral/{RegisteringGlobalEvents.test.js → events/RegisteringGlobalEvents.test.js} +45 -70
  45. package/build/__tests__/behavioral/events/RegisteringGlobalEvents.test.js.map +1 -0
  46. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.d.ts +1 -0
  47. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js +16 -9
  48. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
  49. package/build/__tests__/behavioral/{SyncingEventsOnlyFromDependencies.test.d.ts → events/SyncingEventsOnlyFromDependencies.test.d.ts} +1 -1
  50. package/build/__tests__/behavioral/{SyncingEventsOnlyFromDependencies.test.js → events/SyncingEventsOnlyFromDependencies.test.js} +1 -1
  51. package/build/__tests__/behavioral/events/SyncingEventsOnlyFromDependencies.test.js.map +1 -0
  52. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.d.ts +2 -2
  53. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js +7 -7
  54. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js.map +1 -1
  55. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.d.ts +6 -0
  56. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js +85 -0
  57. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js.map +1 -0
  58. package/build/__tests__/behavioral/permissions/PermissionStore.test.d.ts +5 -4
  59. package/build/__tests__/behavioral/permissions/PermissionStore.test.js +97 -63
  60. package/build/__tests__/behavioral/permissions/PermissionStore.test.js.map +1 -1
  61. package/build/__tests__/behavioral/permissions/PermissionWriter.test.d.ts +5 -0
  62. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js +88 -0
  63. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js.map +1 -0
  64. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.d.ts +15 -4
  65. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js +325 -28
  66. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js.map +1 -1
  67. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.d.ts +11 -0
  68. package/build/__tests__/behavioral/permissions/{AbstractPermissionsTest.js → support/AbstractPermissionsTest.js} +34 -2
  69. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.js.map +1 -0
  70. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.d.ts +1 -0
  71. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js +11 -0
  72. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js.map +1 -0
  73. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.d.ts +1 -0
  74. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js +17 -0
  75. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js.map +1 -0
  76. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.d.ts +5 -0
  77. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js +10 -0
  78. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js.map +1 -0
  79. package/build/__tests__/behavioral/{CreatingSchemasWithGenerics.test.d.ts → schemas/CreatingSchemasWithGenerics.test.d.ts} +1 -1
  80. package/build/__tests__/behavioral/{CreatingSchemasWithGenerics.test.js → schemas/CreatingSchemasWithGenerics.test.js} +2 -2
  81. package/build/__tests__/behavioral/schemas/CreatingSchemasWithGenerics.test.js.map +1 -0
  82. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.d.ts +1 -1
  83. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js +46 -46
  84. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js.map +1 -1
  85. package/build/__tests__/behavioral/{SettingUpSchemasForModuleDistribution.test.d.ts → schemas/SettingUpSchemasForModuleDistribution.test.d.ts} +1 -1
  86. package/build/__tests__/behavioral/{SettingUpSchemasForModuleDistribution.test.js → schemas/SettingUpSchemasForModuleDistribution.test.js} +3 -3
  87. package/build/__tests__/behavioral/schemas/SettingUpSchemasForModuleDistribution.test.js.map +1 -0
  88. package/build/__tests__/behavioral/{InstallingASkillAtAnOrg.test.d.ts → skill/InstallingASkillAtAnOrg.test.d.ts} +1 -1
  89. package/build/__tests__/behavioral/{InstallingASkillAtAnOrg.test.js → skill/InstallingASkillAtAnOrg.test.js} +2 -2
  90. package/build/__tests__/behavioral/skill/InstallingASkillAtAnOrg.test.js.map +1 -0
  91. package/build/__tests__/behavioral/{LoggingInAsASkill.test.d.ts → skill/LoggingInAsASkill.test.d.ts} +1 -1
  92. package/build/__tests__/behavioral/{LoggingInAsASkill.test.js → skill/LoggingInAsASkill.test.js} +2 -2
  93. package/build/__tests__/behavioral/skill/LoggingInAsASkill.test.js.map +1 -0
  94. package/build/__tests__/behavioral/{RebuildingASkill.test.d.ts → skill/RebuildingASkill.test.d.ts} +1 -1
  95. package/build/__tests__/behavioral/{RebuildingASkill.test.js → skill/RebuildingASkill.test.js} +2 -2
  96. package/build/__tests__/behavioral/skill/RebuildingASkill.test.js.map +1 -0
  97. package/build/__tests__/behavioral/tests/CreatingATest.test.js +2 -2
  98. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  99. package/build/__tests__/behavioral/{SettingUpASkillForTesting.test.d.ts → tests/SettingUpASkillForTesting.test.d.ts} +1 -1
  100. package/build/__tests__/behavioral/{SettingUpASkillForTesting.test.js → tests/SettingUpASkillForTesting.test.js} +2 -2
  101. package/build/__tests__/behavioral/tests/SettingUpASkillForTesting.test.js.map +1 -0
  102. package/build/__tests__/behavioral/{TestReporterSettingsRemembered.test.d.ts → tests/TestReporterSettingsRemembered.test.d.ts} +1 -1
  103. package/build/__tests__/behavioral/{TestReporterSettingsRemembered.test.js → tests/TestReporterSettingsRemembered.test.js} +1 -1
  104. package/build/__tests__/behavioral/tests/TestReporterSettingsRemembered.test.js.map +1 -0
  105. package/build/__tests__/behavioral/{TestingDataStores.test.d.ts → tests/TestingDataStores.test.d.ts} +1 -1
  106. package/build/__tests__/behavioral/{TestingDataStores.test.js → tests/TestingDataStores.test.js} +3 -3
  107. package/build/__tests__/behavioral/tests/TestingDataStores.test.js.map +1 -0
  108. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js +7 -3
  109. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
  110. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js +2 -2
  111. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
  112. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js +1 -1
  113. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js.map +1 -1
  114. package/build/__tests__/behavioral/{RegisteringSkillViewOnBoot.test.d.ts → views/RegisteringSkillViewOnBoot.test.d.ts} +4 -4
  115. package/build/__tests__/behavioral/{RegisteringSkillViewOnBoot.test.js → views/RegisteringSkillViewOnBoot.test.js} +2 -2
  116. package/build/__tests__/behavioral/views/RegisteringSkillViewOnBoot.test.js.map +1 -0
  117. package/build/__tests__/behavioral/{WatchingSkillViews.test.d.ts → views/WatchingSkillViews.test.d.ts} +1 -1
  118. package/build/__tests__/behavioral/{WatchingSkillViews.test.js → views/WatchingSkillViews.test.js} +2 -2
  119. package/build/__tests__/behavioral/views/WatchingSkillViews.test.js.map +1 -0
  120. package/build/__tests__/implementation/ActionExecuter2.test.d.ts +1 -1
  121. package/build/__tests__/implementation/ActionExecuter2.test.js +23 -11
  122. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  123. package/build/__tests__/implementation/GlobalEmitter.test.d.ts +1 -0
  124. package/build/__tests__/implementation/GlobalEmitter.test.js +40 -3
  125. package/build/__tests__/implementation/GlobalEmitter.test.js.map +1 -1
  126. package/build/__tests__/implementation/SkillStore.test.js +3 -4
  127. package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
  128. package/build/features/AbstractAction.d.ts +1 -1
  129. package/build/features/AbstractAction.js.map +1 -1
  130. package/build/features/AbstractFeature.d.ts +3 -3
  131. package/build/features/AbstractFeature.js +8 -8
  132. package/build/features/AbstractFeature.js.map +1 -1
  133. package/build/features/ActionExecuter.d.ts +1 -1
  134. package/build/features/ActionExecuter.js +3 -4
  135. package/build/features/ActionExecuter.js.map +1 -1
  136. package/build/features/ActionFactory.d.ts +12 -5
  137. package/build/features/ActionFactory.js +27 -6
  138. package/build/features/ActionFactory.js.map +1 -1
  139. package/build/features/ActionQuestionAsker.d.ts +1 -1
  140. package/build/features/ActionQuestionAsker.js +6 -6
  141. package/build/features/ActionQuestionAsker.js.map +1 -1
  142. package/build/features/conversation/ConversationFeature.js +1 -1
  143. package/build/features/conversation/ConversationFeature.js.map +1 -1
  144. package/build/features/dependencies/DependencyFeature.js +1 -1
  145. package/build/features/dependencies/DependencyFeature.js.map +1 -1
  146. package/build/features/deploy/actions/HerokuAction.js +31 -33
  147. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  148. package/build/features/error/ErrorFeature.js +4 -4
  149. package/build/features/error/ErrorFeature.js.map +1 -1
  150. package/build/features/event/EventFeature.d.ts +8 -8
  151. package/build/features/event/EventFeature.js +7 -4
  152. package/build/features/event/EventFeature.js.map +1 -1
  153. package/build/features/event/actions/CreateAction.js.map +1 -1
  154. package/build/features/event/actions/ListenAction.js.map +1 -1
  155. package/build/features/event/stores/EventStore.d.ts +9 -9
  156. package/build/features/event/stores/EventStore.js +26 -26
  157. package/build/features/event/stores/EventStore.js.map +1 -1
  158. package/build/features/eventContract/EventContractFeature.js +4 -1
  159. package/build/features/eventContract/EventContractFeature.js.map +1 -1
  160. package/build/features/eventContract/actions/PullAction.js +10 -5
  161. package/build/features/eventContract/actions/PullAction.js.map +1 -1
  162. package/build/features/features.types.d.ts +2 -37
  163. package/build/features/features.types.js +0 -41
  164. package/build/features/features.types.js.map +1 -1
  165. package/build/features/log/LogFeature.js +1 -1
  166. package/build/features/log/LogFeature.js.map +1 -1
  167. package/build/features/node/NodeFeature.js.map +1 -1
  168. package/build/features/organization/actions/InstallAction.js.map +1 -1
  169. package/build/features/permission/PermissionFeature.d.ts +12 -2
  170. package/build/features/permission/PermissionFeature.js +138 -15
  171. package/build/features/permission/PermissionFeature.js.map +1 -1
  172. package/build/features/permission/actions/CreateAction.js +4 -1
  173. package/build/features/permission/actions/CreateAction.js.map +1 -1
  174. package/build/features/permission/actions/SyncAction.d.ts +5 -1
  175. package/build/features/permission/actions/SyncAction.js +28 -10
  176. package/build/features/permission/actions/SyncAction.js.map +1 -1
  177. package/build/features/permission/stores/PermissionStore.d.ts +6 -1
  178. package/build/features/permission/stores/PermissionStore.js +43 -31
  179. package/build/features/permission/stores/PermissionStore.js.map +1 -1
  180. package/build/features/permission/writers/PermissionWriter.d.ts +7 -1
  181. package/build/features/permission/writers/PermissionWriter.js +67 -18
  182. package/build/features/permission/writers/PermissionWriter.js.map +1 -1
  183. package/build/features/person/PersonFeature.js +1 -1
  184. package/build/features/person/PersonFeature.js.map +1 -1
  185. package/build/features/sandbox/SandboxFeature.js +1 -1
  186. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  187. package/build/features/schema/SchemaFeature.d.ts +8 -8
  188. package/build/features/schema/SchemaFeature.js +4 -4
  189. package/build/features/schema/SchemaFeature.js.map +1 -1
  190. package/build/features/schema/writers/SchemaWriter.d.ts +12 -12
  191. package/build/features/schema/writers/SchemaWriter.js.map +1 -1
  192. package/build/features/skill/SkillFeature.d.ts +11 -11
  193. package/build/features/skill/SkillFeature.js +2 -2
  194. package/build/features/skill/SkillFeature.js.map +1 -1
  195. package/build/features/skill/actions/RebuildAction.js.map +1 -1
  196. package/build/features/skill/actions/RegisterAction.js.map +1 -1
  197. package/build/features/skill/stores/SkillStore.js +1 -2
  198. package/build/features/skill/stores/SkillStore.js.map +1 -1
  199. package/build/features/store/StoreFeature.js +1 -1
  200. package/build/features/store/StoreFeature.js.map +1 -1
  201. package/build/features/store/actions/SyncAction.d.ts +1 -1
  202. package/build/features/store/actions/SyncAction.js.map +1 -1
  203. package/build/features/test/TestFeature.js +1 -1
  204. package/build/features/test/TestFeature.js.map +1 -1
  205. package/build/features/view/ViewFeature.js +1 -1
  206. package/build/features/view/ViewFeature.js.map +1 -1
  207. package/build/schemas/v2020_07_22/actionResponse.builder.d.ts +85 -0
  208. package/build/schemas/v2020_07_22/actionResponse.builder.js +70 -0
  209. package/build/schemas/v2020_07_22/actionResponse.builder.js.map +1 -0
  210. package/build/schemas/v2020_07_22/generatedFile.builder.d.ts +27 -0
  211. package/build/schemas/v2020_07_22/generatedFile.builder.js +45 -0
  212. package/build/schemas/v2020_07_22/generatedFile.builder.js.map +1 -0
  213. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js +4 -40
  214. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js.map +1 -1
  215. package/build/services/CommandService.d.ts +2 -2
  216. package/build/services/CommandService.js +6 -6
  217. package/build/services/CommandService.js.map +1 -1
  218. package/build/services/PkgService.d.ts +1 -0
  219. package/build/services/PkgService.js +5 -0
  220. package/build/services/PkgService.js.map +1 -1
  221. package/build/tests/AbstractCliTest.d.ts +7 -3
  222. package/build/tests/AbstractCliTest.js +81 -45
  223. package/build/tests/AbstractCliTest.js.map +1 -1
  224. package/build/tests/buildTestCache.js +7 -0
  225. package/build/tests/buildTestCache.js.map +1 -1
  226. package/build/tests/fixtures/FeatureFixture.js +1 -0
  227. package/build/tests/fixtures/FeatureFixture.js.map +1 -1
  228. package/build/tests/utilities/test.utility.d.ts +2 -0
  229. package/build/tests/utilities/test.utility.js +6 -0
  230. package/build/tests/utilities/test.utility.js.map +1 -1
  231. package/node_modules/@typescript-eslint/parser/package.json +5 -5
  232. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts +4 -2
  233. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts.map +1 -1
  234. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js +13 -5
  235. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js.map +1 -1
  236. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts +2 -1
  237. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map +1 -1
  238. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js +3 -0
  239. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map +1 -1
  240. package/node_modules/@typescript-eslint/scope-manager/package.json +5 -5
  241. package/node_modules/@typescript-eslint/types/_ts3.4/dist/generated/ast-spec.d.ts +20 -2
  242. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +20 -2
  243. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts.map +1 -1
  244. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js +2 -0
  245. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js.map +1 -1
  246. package/node_modules/@typescript-eslint/types/package.json +2 -2
  247. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/estree-to-ts-node-types.d.ts +2 -0
  248. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/ts-nodes.d.ts +2 -0
  249. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map +1 -1
  250. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js +15 -3
  251. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map +1 -1
  252. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts +2 -0
  253. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map +1 -1
  254. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts +2 -0
  255. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map +1 -1
  256. package/node_modules/@typescript-eslint/typescript-estree/package.json +5 -5
  257. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map +1 -1
  258. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js +63 -49
  259. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map +1 -1
  260. package/node_modules/@typescript-eslint/visitor-keys/package.json +3 -3
  261. package/package.json +65 -33
  262. package/src/.spruce/events/events.contract.ts +24 -0
  263. package/src/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.ts +54 -0
  264. package/src/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.ts +79 -0
  265. package/src/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.ts +48 -0
  266. package/src/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.ts +13 -0
  267. package/src/.spruce/schemas/schemas.types.ts +171 -52
  268. package/src/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.ts +58 -0
  269. package/src/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.ts +33 -0
  270. package/src/.spruce/settings.json +2 -1
  271. package/src/GlobalEmitter.ts +2 -7
  272. package/src/__tests__/behavioral/TestingAConversation.test.ts +20 -37
  273. package/src/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.ts +14 -2
  274. package/src/__tests__/behavioral/events/EventWriter.test.ts +75 -0
  275. package/src/__tests__/behavioral/{ListeningToCoreEvents.test.ts → events/ListeningToCoreEvents.test.ts} +1 -1
  276. package/src/__tests__/behavioral/{RegisteringEventsOnBoot.test.ts → events/RegisteringEventsOnBoot.test.ts} +2 -2
  277. package/src/__tests__/behavioral/{RegisteringGlobalEvents.test.ts → events/RegisteringGlobalEvents.test.ts} +4 -12
  278. package/src/__tests__/behavioral/events/SkillEmitsBootEvents.test.ts +6 -0
  279. package/src/__tests__/behavioral/{SyncingEventsOnlyFromDependencies.test.ts → events/SyncingEventsOnlyFromDependencies.test.ts} +2 -2
  280. package/src/__tests__/behavioral/permissions/CreatingPermissions.test.ts +2 -2
  281. package/src/__tests__/behavioral/permissions/PermissionPlugin.test.ts +24 -0
  282. package/src/__tests__/behavioral/permissions/PermissionStore.test.ts +96 -38
  283. package/src/__tests__/behavioral/permissions/PermissionWriter.test.ts +24 -0
  284. package/src/__tests__/behavioral/permissions/SyncingPermissions.test.ts +125 -8
  285. package/src/__tests__/behavioral/permissions/support/AbstractPermissionsTest.ts +38 -0
  286. package/src/__tests__/behavioral/permissions/support/generateShortAlphaId.ts +5 -0
  287. package/src/__tests__/behavioral/permissions/support/renderPermissionTestFile.ts +27 -0
  288. package/src/__tests__/behavioral/permissions/support/sortPermissionContracts.ts +3 -0
  289. package/src/__tests__/behavioral/{CreatingSchemasWithGenerics.test.ts → schemas/CreatingSchemasWithGenerics.test.ts} +2 -2
  290. package/src/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.ts +12 -12
  291. package/src/__tests__/behavioral/{SettingUpSchemasForModuleDistribution.test.ts → schemas/SettingUpSchemasForModuleDistribution.test.ts} +4 -4
  292. package/src/__tests__/behavioral/{InstallingASkillAtAnOrg.test.ts → skill/InstallingASkillAtAnOrg.test.ts} +2 -2
  293. package/src/__tests__/behavioral/{LoggingInAsASkill.test.ts → skill/LoggingInAsASkill.test.ts} +3 -3
  294. package/src/__tests__/behavioral/{RebuildingASkill.test.ts → skill/RebuildingASkill.test.ts} +2 -2
  295. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +2 -2
  296. package/src/__tests__/behavioral/{SettingUpASkillForTesting.test.ts → tests/SettingUpASkillForTesting.test.ts} +2 -2
  297. package/src/__tests__/behavioral/{TestReporterSettingsRemembered.test.ts → tests/TestReporterSettingsRemembered.test.ts} +2 -2
  298. package/src/__tests__/behavioral/{TestingDataStores.test.ts → tests/TestingDataStores.test.ts} +3 -3
  299. package/src/__tests__/behavioral/upgrading/UpgradingANodeModule.test.ts +3 -0
  300. package/src/__tests__/behavioral/upgrading/UpgradingASkill3.test.ts +3 -2
  301. package/src/__tests__/behavioral/upgrading/UpgradingASkill4.test.ts +1 -1
  302. package/src/__tests__/behavioral/{RegisteringSkillViewOnBoot.test.ts → views/RegisteringSkillViewOnBoot.test.ts} +2 -2
  303. package/src/__tests__/behavioral/{WatchingSkillViews.test.ts → views/WatchingSkillViews.test.ts} +3 -3
  304. package/src/__tests__/implementation/ActionExecuter2.test.ts +13 -6
  305. package/src/__tests__/implementation/GlobalEmitter.test.ts +22 -1
  306. package/src/__tests__/implementation/SkillStore.test.ts +1 -2
  307. package/src/features/AbstractAction.ts +2 -2
  308. package/src/features/AbstractFeature.ts +8 -8
  309. package/src/features/ActionExecuter.ts +4 -5
  310. package/src/features/ActionFactory.ts +44 -20
  311. package/src/features/ActionQuestionAsker.ts +17 -17
  312. package/src/features/conversation/ConversationFeature.ts +1 -1
  313. package/src/features/dependencies/DependencyFeature.ts +1 -1
  314. package/src/features/deploy/actions/HerokuAction.ts +2 -2
  315. package/src/features/error/ErrorFeature.ts +4 -4
  316. package/src/features/event/EventFeature.ts +15 -14
  317. package/src/features/event/actions/CreateAction.ts +1 -1
  318. package/src/features/event/actions/ListenAction.ts +1 -1
  319. package/src/features/event/stores/EventStore.ts +37 -37
  320. package/src/features/eventContract/EventContractFeature.ts +6 -1
  321. package/src/features/eventContract/actions/PullAction.ts +7 -3
  322. package/src/features/features.types.ts +4 -41
  323. package/src/features/log/LogFeature.ts +1 -1
  324. package/src/features/node/NodeFeature.ts +1 -1
  325. package/src/features/organization/actions/InstallAction.ts +1 -1
  326. package/src/features/permission/PermissionFeature.ts +68 -11
  327. package/src/features/permission/actions/CreateAction.ts +2 -0
  328. package/src/features/permission/actions/SyncAction.ts +22 -3
  329. package/src/features/permission/stores/PermissionStore.ts +27 -8
  330. package/src/features/permission/writers/PermissionWriter.ts +62 -4
  331. package/src/features/person/PersonFeature.ts +1 -1
  332. package/src/features/sandbox/SandboxFeature.ts +1 -3
  333. package/src/features/schema/SchemaFeature.ts +14 -14
  334. package/src/features/schema/writers/SchemaWriter.ts +14 -15
  335. package/src/features/skill/SkillFeature.ts +18 -18
  336. package/src/features/skill/actions/RebuildAction.ts +1 -1
  337. package/src/features/skill/actions/RegisterAction.ts +1 -1
  338. package/src/features/skill/stores/SkillStore.ts +1 -2
  339. package/src/features/store/StoreFeature.ts +1 -1
  340. package/src/features/store/actions/SyncAction.ts +1 -1
  341. package/src/features/test/TestFeature.ts +1 -1
  342. package/src/features/view/ViewFeature.ts +1 -1
  343. package/src/schemas/v2020_07_22/actionResponse.builder.ts +62 -0
  344. package/src/schemas/v2020_07_22/generatedFile.builder.ts +44 -0
  345. package/src/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.ts +3 -46
  346. package/src/services/CommandService.ts +5 -5
  347. package/src/services/PkgService.ts +4 -0
  348. package/src/tests/AbstractCliTest.ts +31 -13
  349. package/src/tests/buildTestCache.ts +7 -0
  350. package/src/tests/fixtures/FeatureFixture.ts +2 -0
  351. package/src/tests/utilities/test.utility.ts +13 -0
  352. package/build/__tests__/behavioral/CreatingSchemasWithGenerics.test.js.map +0 -1
  353. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +0 -1
  354. package/build/__tests__/behavioral/ListeningToCoreEvents.test.js.map +0 -1
  355. package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +0 -1
  356. package/build/__tests__/behavioral/RebuildingASkill.test.js.map +0 -1
  357. package/build/__tests__/behavioral/RegisteringEventsOnBoot.test.js.map +0 -1
  358. package/build/__tests__/behavioral/RegisteringGlobalEvents.test.js.map +0 -1
  359. package/build/__tests__/behavioral/RegisteringSkillViewOnBoot.test.js.map +0 -1
  360. package/build/__tests__/behavioral/SettingUpASkillForTesting.test.js.map +0 -1
  361. package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js.map +0 -1
  362. package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.js.map +0 -1
  363. package/build/__tests__/behavioral/TestReporterSettingsRemembered.test.js.map +0 -1
  364. package/build/__tests__/behavioral/TestingDataStores.test.js.map +0 -1
  365. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +0 -1
  366. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.d.ts +0 -8
  367. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.js.map +0 -1
  368. package/src/__tests__/behavioral/permissions/AbstractPermissionsTest.ts +0 -20
@@ -1 +1 @@
1
- {"version":3,"file":"SkillStore.test.js","names":["SkillStoreTest","test","store","SkillStore","assert","isFunction","register","doesThrowAsync","name","slug","err","errorAssert","assertError","loadCurrentSkill","isCurrentSkillRegistered","FeatureFixture","installCachedFeatures","loadCurrentSkillsNamespace","namespace","isEqual","setCurrentSkillsNamespace","Date","getTime","people","loginAsDemoPerson","isRegistered","isFalse","skill","isTruthy","isString","apiKey","id","connectToApi","client","authenticate","skillId","results","isTrue","currentSkill","env","Service","get","pkg","Store","AbstractCliTest"],"sources":["../../../src/__tests__/implementation/SkillStore.test.ts"],"sourcesContent":["import { test, assert } from '@sprucelabs/test-utils'\nimport { errorAssert } from '@sprucelabs/test-utils'\nimport SkillStore from '../../features/skill/stores/SkillStore'\nimport AbstractCliTest from '../../tests/AbstractCliTest'\n\nexport default class SkillStoreTest extends AbstractCliTest {\n\tprivate static store: SkillStore\n\n\tprotected static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.store = this.SkillStore()\n\t}\n\n\t@test()\n\tprotected static async hasRegisterMethod() {\n\t\tassert.isFunction(this.store.register)\n\t}\n\n\t@test()\n\tprotected static async cantRegisterIfNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.register({\n\t\t\t\tname: 'awesome skill',\n\t\t\t\tslug: 'awesome-skill',\n\t\t\t})\n\t\t)\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async cantLoadcurrentSkillIfNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() => this.store.loadCurrentSkill())\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async cantCheckIfSkillIsRegisteredNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.isCurrentSkillRegistered()\n\t\t)\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async canGetNamespace() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\t\tconst namespace = await this.store.loadCurrentSkillsNamespace()\n\t\tassert.isEqual(namespace, 'TestSkill')\n\t}\n\n\t@test()\n\tprotected static async canSetNamespace() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\n\t\tlet namespace = await this.store.loadCurrentSkillsNamespace()\n\t\tawait this.store.setCurrentSkillsNamespace('new-namespace')\n\t\tnamespace = await this.store.loadCurrentSkillsNamespace()\n\t\tassert.isEqual(namespace, 'NewNamespace')\n\t}\n\n\t@test()\n\tprotected static async canRegister() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\n\t\tconst slug = `awesome-skill-${new Date().getTime()}`\n\t\tawait this.people.loginAsDemoPerson()\n\n\t\tlet isRegistered = await this.store.isCurrentSkillRegistered()\n\t\tassert.isFalse(isRegistered)\n\n\t\tconst skill = await this.store.register({\n\t\t\tname: 'awesome skill',\n\t\t\tslug,\n\t\t})\n\n\t\tassert.isTruthy(skill)\n\t\tassert.isEqual(skill.name, 'awesome skill')\n\t\tassert.isEqual(skill.slug, slug)\n\t\tassert.isString(skill.apiKey)\n\t\tassert.isString(skill.id)\n\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.authenticate({\n\t\t\tskillId: skill.id,\n\t\t\tapiKey: skill.apiKey,\n\t\t})\n\n\t\tassert.isEqual(results.skill?.id, skill.id)\n\n\t\tisRegistered = await this.store.isCurrentSkillRegistered()\n\t\tassert.isTrue(isRegistered)\n\n\t\tconst currentSkill = await this.store.loadCurrentSkill()\n\n\t\tassert.isEqual(currentSkill.id, skill.id)\n\t\tassert.isTrue(currentSkill.isRegistered)\n\t\tassert.isEqual(currentSkill.name, 'awesome skill')\n\t\tassert.isEqual(currentSkill.slug, slug)\n\t\tassert.isEqual(currentSkill.apiKey, skill.apiKey)\n\n\t\tconst env = this.Service('env')\n\n\t\tassert.isEqual(env.get('SKILL_ID'), skill.id)\n\t\tassert.isEqual(env.get('SKILL_API_KEY'), skill.apiKey)\n\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.setCurrentSkillsNamespace('test')\n\t\t)\n\n\t\terrorAssert.assertError(err, 'GENERIC')\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst namespace = pkg.get('skill.namespace')\n\t\tassert.isEqual(namespace, slug)\n\t}\n\n\tprivate static SkillStore(): SkillStore {\n\t\treturn this.Store('skill', {})\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SkillStore.test.js","names":["SkillStoreTest","test","store","SkillStore","assert","isFunction","register","doesThrowAsync","name","slug","err","errorAssert","assertError","loadCurrentSkill","isCurrentSkillRegistered","FeatureFixture","installCachedFeatures","loadCurrentSkillsNamespace","namespace","isEqual","setCurrentSkillsNamespace","Date","getTime","people","loginAsDemoPerson","isRegistered","isFalse","skill","isTruthy","isString","apiKey","id","connectToApi","client","authenticate","skillId","results","isTrue","currentSkill","env","Service","get","getSkillNamespace","Store","AbstractCliTest"],"sources":["../../../src/__tests__/implementation/SkillStore.test.ts"],"sourcesContent":["import { test, assert } from '@sprucelabs/test-utils'\nimport { errorAssert } from '@sprucelabs/test-utils'\nimport SkillStore from '../../features/skill/stores/SkillStore'\nimport AbstractCliTest from '../../tests/AbstractCliTest'\n\nexport default class SkillStoreTest extends AbstractCliTest {\n\tprivate static store: SkillStore\n\n\tprotected static async beforeEach() {\n\t\tawait super.beforeEach()\n\t\tthis.store = this.SkillStore()\n\t}\n\n\t@test()\n\tprotected static async hasRegisterMethod() {\n\t\tassert.isFunction(this.store.register)\n\t}\n\n\t@test()\n\tprotected static async cantRegisterIfNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.register({\n\t\t\t\tname: 'awesome skill',\n\t\t\t\tslug: 'awesome-skill',\n\t\t\t})\n\t\t)\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async cantLoadcurrentSkillIfNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() => this.store.loadCurrentSkill())\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async cantCheckIfSkillIsRegisteredNotInSkill() {\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.isCurrentSkillRegistered()\n\t\t)\n\t\terrorAssert.assertError(err, 'DIRECTORY_NOT_SKILL')\n\t}\n\n\t@test()\n\tprotected static async canGetNamespace() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\t\tconst namespace = await this.store.loadCurrentSkillsNamespace()\n\t\tassert.isEqual(namespace, 'TestSkill')\n\t}\n\n\t@test()\n\tprotected static async canSetNamespace() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\n\t\tlet namespace = await this.store.loadCurrentSkillsNamespace()\n\t\tawait this.store.setCurrentSkillsNamespace('new-namespace')\n\t\tnamespace = await this.store.loadCurrentSkillsNamespace()\n\t\tassert.isEqual(namespace, 'NewNamespace')\n\t}\n\n\t@test()\n\tprotected static async canRegister() {\n\t\tawait this.FeatureFixture().installCachedFeatures('skills')\n\n\t\tconst slug = `awesome-skill-${new Date().getTime()}`\n\t\tawait this.people.loginAsDemoPerson()\n\n\t\tlet isRegistered = await this.store.isCurrentSkillRegistered()\n\t\tassert.isFalse(isRegistered)\n\n\t\tconst skill = await this.store.register({\n\t\t\tname: 'awesome skill',\n\t\t\tslug,\n\t\t})\n\n\t\tassert.isTruthy(skill)\n\t\tassert.isEqual(skill.name, 'awesome skill')\n\t\tassert.isEqual(skill.slug, slug)\n\t\tassert.isString(skill.apiKey)\n\t\tassert.isString(skill.id)\n\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.authenticate({\n\t\t\tskillId: skill.id,\n\t\t\tapiKey: skill.apiKey,\n\t\t})\n\n\t\tassert.isEqual(results.skill?.id, skill.id)\n\n\t\tisRegistered = await this.store.isCurrentSkillRegistered()\n\t\tassert.isTrue(isRegistered)\n\n\t\tconst currentSkill = await this.store.loadCurrentSkill()\n\n\t\tassert.isEqual(currentSkill.id, skill.id)\n\t\tassert.isTrue(currentSkill.isRegistered)\n\t\tassert.isEqual(currentSkill.name, 'awesome skill')\n\t\tassert.isEqual(currentSkill.slug, slug)\n\t\tassert.isEqual(currentSkill.apiKey, skill.apiKey)\n\n\t\tconst env = this.Service('env')\n\n\t\tassert.isEqual(env.get('SKILL_ID'), skill.id)\n\t\tassert.isEqual(env.get('SKILL_API_KEY'), skill.apiKey)\n\n\t\tconst err = await assert.doesThrowAsync(() =>\n\t\t\tthis.store.setCurrentSkillsNamespace('test')\n\t\t)\n\n\t\terrorAssert.assertError(err, 'GENERIC')\n\n\t\tconst namespace = this.Service('pkg').getSkillNamespace()\n\t\tassert.isEqual(namespace, slug)\n\t}\n\n\tprivate static SkillStore(): SkillStore {\n\t\treturn this.Store('skill', {})\n\t}\n}\n"],"mappings":"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"}
@@ -27,7 +27,7 @@ export default abstract class AbstractAction<S extends Schema = Schema> implemen
27
27
  private actionExecuter;
28
28
  constructor(options: ActionOptions);
29
29
  abstract execute(options: SchemaValues<S>): Promise<FeatureActionResponse>;
30
- protected Action(featureCode: string, actionCode: string): FeatureAction<Schema>;
30
+ protected Action(featureCode: FeatureCode, actionCode: string): FeatureAction<Schema>;
31
31
  Service<S extends Service>(type: S, cwd?: string): ServiceMap[S];
32
32
  protected Store<C extends StoreCode>(code: C, options?: CreateStoreOptions<C>): StoreMap[C];
33
33
  protected Writer<C extends WriterCode>(code: C, options?: Partial<WriterOptions>): WriterMap[C];
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractAction.js","names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","features","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizer","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"],"sources":["../../src/features/AbstractAction.ts"],"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\tCreateStoreOptions,\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 validateAndNormalizer 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 features: 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.features = 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?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\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.features.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.features.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizer.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"],"mappings":"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"}
1
+ {"version":3,"file":"AbstractAction.js","names":["AbstractAction","options","cwd","templates","parent","storeFactory","serviceFactory","features","featureInstaller","ui","writerFactory","apiClientFactory","emitter","actionExecuter","featureCode","actionCode","Action","type","Service","code","Store","Writer","fileDescriptions","linter","getFeature","getAllCodes","schema","optionsSchema","validateAndNormalizer","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"],"sources":["../../src/features/AbstractAction.ts"],"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\tCreateStoreOptions,\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 validateAndNormalizer 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 features: 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.features = 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: FeatureCode, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode, 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?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\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.features.getFeature(code)\n\t}\n\n\tprotected getFeatureCodes(): FeatureCode[] {\n\t\treturn this.features.getAllCodes()\n\t}\n\n\tprotected validateAndNormalizeOptions(options: SchemaPartialValues<S>) {\n\t\tconst schema = this.optionsSchema\n\t\treturn validateAndNormalizer.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"],"mappings":"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"}
@@ -25,14 +25,14 @@ export default abstract class AbstractFeature<S extends Schema | undefined = Sch
25
25
  cwd: string;
26
26
  scripts: Record<string, any>;
27
27
  actionsDir: string | undefined;
28
- protected actionFactory?: ActionFactory;
28
+ protected actions?: ActionFactory;
29
29
  protected templates: Templates;
30
30
  protected emitter: GlobalEmitter;
31
- protected featureInstaller: FeatureInstaller;
31
+ protected features: FeatureInstaller;
32
32
  protected ui: GraphicsInterface;
33
33
  private serviceFactory;
34
34
  private storeFactory;
35
- private writerFactory;
35
+ private writers;
36
36
  private apiClientFactory;
37
37
  private actionExecuter;
38
38
  private actionCodes?;
@@ -33,30 +33,30 @@ var AbstractFeature = /*#__PURE__*/function () {
33
33
  (0, _defineProperty2["default"])(this, "cwd", void 0);
34
34
  (0, _defineProperty2["default"])(this, "scripts", {});
35
35
  (0, _defineProperty2["default"])(this, "actionsDir", void 0);
36
- (0, _defineProperty2["default"])(this, "actionFactory", void 0);
36
+ (0, _defineProperty2["default"])(this, "actions", void 0);
37
37
  (0, _defineProperty2["default"])(this, "templates", void 0);
38
38
  (0, _defineProperty2["default"])(this, "emitter", void 0);
39
- (0, _defineProperty2["default"])(this, "featureInstaller", void 0);
39
+ (0, _defineProperty2["default"])(this, "features", void 0);
40
40
  (0, _defineProperty2["default"])(this, "ui", void 0);
41
41
  (0, _defineProperty2["default"])(this, "serviceFactory", void 0);
42
42
  (0, _defineProperty2["default"])(this, "storeFactory", void 0);
43
- (0, _defineProperty2["default"])(this, "writerFactory", void 0);
43
+ (0, _defineProperty2["default"])(this, "writers", void 0);
44
44
  (0, _defineProperty2["default"])(this, "apiClientFactory", void 0);
45
45
  (0, _defineProperty2["default"])(this, "actionExecuter", void 0);
46
46
  (0, _defineProperty2["default"])(this, "actionCodes", void 0);
47
47
  this.cwd = options.cwd;
48
48
  this.serviceFactory = options.serviceFactory;
49
49
  this.templates = options.templates;
50
- this.actionFactory = options.actionFactory;
50
+ this.actions = options.actionFactory;
51
51
  this.storeFactory = options.storeFactory;
52
- this.writerFactory = new _WriterFactory["default"]({
52
+ this.writers = new _WriterFactory["default"]({
53
53
  templates: this.templates,
54
54
  ui: options.ui,
55
55
  settings: this.Service('settings'),
56
56
  linter: this.Service('lint')
57
57
  });
58
58
  this.emitter = options.emitter;
59
- this.featureInstaller = options.featureInstaller;
59
+ this.features = options.featureInstaller;
60
60
  this.ui = options.ui;
61
61
  this.apiClientFactory = options.apiClientFactory;
62
62
  this.actionExecuter = options.actionExecuter;
@@ -124,7 +124,7 @@ var AbstractFeature = /*#__PURE__*/function () {
124
124
  }, {
125
125
  key: "Writer",
126
126
  value: function Writer(code, options) {
127
- return this.writerFactory.Writer(code, _objectSpread({
127
+ return this.writers.Writer(code, _objectSpread({
128
128
  fileDescriptions: this.fileDescriptions,
129
129
  linter: this.Service('lint')
130
130
  }, options));
@@ -132,7 +132,7 @@ var AbstractFeature = /*#__PURE__*/function () {
132
132
  }, {
133
133
  key: "getFeature",
134
134
  value: function getFeature(code) {
135
- return this.featureInstaller.getFeature(code);
135
+ return this.features.getFeature(code);
136
136
  }
137
137
  }, {
138
138
  key: "getAvailableActionCodes",
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractFeature.js","names":["AbstractFeature","options","cwd","serviceFactory","templates","actionFactory","storeFactory","writerFactory","WriterFactory","ui","settings","Service","linter","emitter","featureInstaller","apiClientFactory","actionExecuter","featureCode","actionCode","Action","_options","type","code","Writer","fileDescriptions","getFeature","actionsDir","actionCodes","globby","pathUtil","join","matches","codes","match","generatedCode","featuresUtil","filePathToActionCode","push","Store"],"sources":["../../src/features/AbstractFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { Schema, SchemaValues } from '@sprucelabs/schema'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport globby from 'globby'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tCreateStoreOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { NpmPackage, GeneratedFile, FileDescription } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport ActionExecuter from './ActionExecuter'\nimport ActionFactory from './ActionFactory'\nimport featuresUtil from './feature.utilities'\nimport FeatureInstaller from './FeatureInstaller'\nimport { FeatureCode } from './features.types'\n\nexport default abstract class AbstractFeature<\n\tS extends Schema | undefined = Schema | undefined\n> implements ServiceProvider\n{\n\tpublic abstract description: string\n\tpublic readonly dependencies: FeatureDependency[] = []\n\tpublic readonly packageDependencies: NpmPackage[] = []\n\tpublic readonly optionsSchema?: S\n\tpublic readonly fileDescriptions: FileDescription[] = []\n\n\tpublic isInstalled?(): Promise<boolean>\n\n\tpublic abstract readonly code: FeatureCode\n\tpublic abstract readonly nameReadable: string\n\tpublic readonly installOrderWeight: number = 0\n\n\tpublic cwd: string\n\tpublic scripts: Record<string, any> = {}\n\tpublic actionsDir: string | undefined\n\tprotected actionFactory?: ActionFactory\n\tprotected templates: Templates\n\tprotected emitter: GlobalEmitter\n\tprotected featureInstaller: FeatureInstaller\n\tprotected ui: GraphicsInterface\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\tprivate actionCodes?: string[]\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.templates = options.templates\n\t\tthis.actionFactory = options.actionFactory\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.writerFactory = new WriterFactory({\n\t\t\ttemplates: this.templates,\n\t\t\tui: options.ui,\n\t\t\tsettings: this.Service('settings'),\n\t\t\tlinter: this.Service('lint'),\n\t\t})\n\t\tthis.emitter = options.emitter\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic async beforePackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\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\tpublic 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.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tpublic getFeature<Code extends FeatureCode>(code: Code) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tpublic async getAvailableActionCodes(): Promise<string[]> {\n\t\tif (!this.actionsDir) {\n\t\t\treturn []\n\t\t}\n\n\t\tif (!this.actionCodes) {\n\t\t\tconst matches: string[] = await globby(\n\t\t\t\tpathUtil.join(this.actionsDir, '**/*Action.js')\n\t\t\t)\n\n\t\t\tconst codes: string[] = []\n\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst generatedCode = featuresUtil.filePathToActionCode(match)\n\t\t\t\tcodes.push(generatedCode)\n\t\t\t}\n\n\t\t\tthis.actionCodes = codes\n\t\t}\n\n\t\treturn this.actionCodes\n\t}\n\n\tpublic Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\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\nexport interface InstallResults {\n\tfiles?: GeneratedFile[]\n\tcwd?: string\n}\n\nexport interface FeatureDependency {\n\tisRequired: boolean\n\tcode: FeatureCode\n}\n\nexport interface FeatureOptions {\n\tcwd: string\n\tserviceFactory: ServiceFactory\n\ttemplates: Templates\n\tstoreFactory: StoreFactory\n\tactionFactory?: ActionFactory\n\tfeatureInstaller: FeatureInstaller\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tapiClientFactory: ApiClientFactory\n\tactionExecuter: ActionExecuter\n}\n"],"mappings":";;;;;;;;;;;;AAAA;AAGA;AAoBA;AAGA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAAA,IAIhBA,eAAe;EAgC5C,yBAAmBC,OAAuB,EAAE;IAAA;IAAA;IAAA,uDA3BQ,EAAE;IAAA,8DACF,EAAE;IAAA;IAAA,2DAEA,EAAE;IAAA;IAAA;IAAA,6DAMX,CAAC;IAAA;IAAA,kDAGR,CAAC,CAAC;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAgBvC,IAAI,CAACC,GAAG,GAAGD,OAAO,CAACC,GAAG;IACtB,IAAI,CAACC,cAAc,GAAGF,OAAO,CAACE,cAAc;IAC5C,IAAI,CAACC,SAAS,GAAGH,OAAO,CAACG,SAAS;IAClC,IAAI,CAACC,aAAa,GAAGJ,OAAO,CAACI,aAAa;IAC1C,IAAI,CAACC,YAAY,GAAGL,OAAO,CAACK,YAAY;IACxC,IAAI,CAACC,aAAa,GAAG,IAAIC,yBAAa,CAAC;MACtCJ,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBK,EAAE,EAAER,OAAO,CAACQ,EAAE;MACdC,QAAQ,EAAE,IAAI,CAACC,OAAO,CAAC,UAAU,CAAC;MAClCC,MAAM,EAAE,IAAI,CAACD,OAAO,CAAC,MAAM;IAC5B,CAAC,CAAC;IACF,IAAI,CAACE,OAAO,GAAGZ,OAAO,CAACY,OAAO;IAC9B,IAAI,CAACC,gBAAgB,GAAGb,OAAO,CAACa,gBAAgB;IAChD,IAAI,CAACL,EAAE,GAAGR,OAAO,CAACQ,EAAE;IACpB,IAAI,CAACM,gBAAgB,GAAGd,OAAO,CAACc,gBAAgB;IAChD,IAAI,CAACC,cAAc,GAAGf,OAAO,CAACe,cAAc;EAC7C;EAAC;IAAA;IAAA,OAED,gBAAiBC,WAAmB,EAAEC,UAAkB,EAAE;MACzD,OAAO,IAAI,CAACF,cAAc,CAACG,MAAM,CAACF,WAAW,EAASC,UAAU,CAAC;IAClE;EAAC;IAAA;IAAA;MAAA,0GAED,iBACCE,QAAwD;QAAA;UAAA;YAAA;cAAA;gBAAA,iCAEjD,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACT;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,yGAED,kBACCA,QAAwD;QAAA;UAAA;YAAA;cAAA;gBAAA,kCAEjD,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACT;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA;QAAA;MAAA;MAAA;QAAA;MAAA;MAAA;IAAA,EAED,UAAkCC,IAAO,EAAEnB,GAAY,EAAiB;MACvE,OAAO,IAAI,CAACC,cAAc,CAACQ,OAAO,CAACT,GAAG,aAAHA,GAAG,cAAHA,GAAG,GAAI,IAAI,CAACA,GAAG,EAAEmB,IAAI,CAAC;IAC1D,CAAC;EAAA;IAAA;IAAA,OAED,gBACCC,IAAO,EACPrB,OAAgC,EACjB;MACf,OAAO,IAAI,CAACM,aAAa,CAACgB,MAAM,CAACD,IAAI;QACpCE,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;QACvCZ,MAAM,EAAE,IAAI,CAACD,OAAO,CAAC,MAAM;MAAC,GACzBV,OAAO,EACT;IACH;EAAC;IAAA;IAAA,OAED,oBAA4CqB,IAAU,EAAE;MACvD,OAAO,IAAI,CAACR,gBAAgB,CAACW,UAAU,CAACH,IAAI,CAAC;IAC9C;EAAC;IAAA;IAAA;MAAA,6GAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA,IACM,IAAI,CAACI,UAAU;kBAAA;kBAAA;gBAAA;gBAAA,kCACZ,EAAE;cAAA;gBAAA,IAGL,IAAI,CAACC,WAAW;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OACY,IAAAC,kBAAM,EACrCC,gBAAQ,CAACC,IAAI,CAAC,IAAI,CAACJ,UAAU,EAAE,eAAe,CAAC,CAC/C;cAAA;gBAFKK,OAAiB;gBAIjBC,KAAe,GAAG,EAAE;gBAAA,uCAEND,OAAO;gBAAA;kBAA3B,oDAA6B;oBAAlBE,KAAK;oBACTC,aAAa,GAAGC,mBAAY,CAACC,oBAAoB,CAACH,KAAK,CAAC;oBAC9DD,KAAK,CAACK,IAAI,CAACH,aAAa,CAAC;kBAC1B;gBAAC;kBAAA;gBAAA;kBAAA;gBAAA;gBAED,IAAI,CAACP,WAAW,GAAGK,KAAK;cAAA;gBAAA,kCAGlB,IAAI,CAACL,WAAW;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACvB;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,eACCL,IAAO,EACPrB,OAA+B,EACjB;MACd,OAAO,IAAI,CAACK,YAAY,CAACgC,KAAK,CAAChB,IAAI;QAAIpB,GAAG,EAAE,IAAI,CAACA;MAAG,GAAMD,OAAO,EAAW;IAC7E;EAAC;IAAA;IAAA;MAAA,kGAED,kBACCA,OAAiC;QAAA;UAAA;YAAA;cAAA;gBAAA,kCAE1B,IAAI,CAACc,gBAAgB,CAACd,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACrC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA;AAAA"}
1
+ {"version":3,"file":"AbstractFeature.js","names":["AbstractFeature","options","cwd","serviceFactory","templates","actions","actionFactory","storeFactory","writers","WriterFactory","ui","settings","Service","linter","emitter","features","featureInstaller","apiClientFactory","actionExecuter","featureCode","actionCode","Action","_options","type","code","Writer","fileDescriptions","getFeature","actionsDir","actionCodes","globby","pathUtil","join","matches","codes","match","generatedCode","featuresUtil","filePathToActionCode","push","Store"],"sources":["../../src/features/AbstractFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { Schema, SchemaValues } from '@sprucelabs/schema'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport globby from 'globby'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tCreateStoreOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { NpmPackage, GeneratedFile, FileDescription } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport ActionExecuter from './ActionExecuter'\nimport ActionFactory from './ActionFactory'\nimport featuresUtil from './feature.utilities'\nimport FeatureInstaller from './FeatureInstaller'\nimport { FeatureCode } from './features.types'\n\nexport default abstract class AbstractFeature<\n\tS extends Schema | undefined = Schema | undefined\n> implements ServiceProvider\n{\n\tpublic abstract description: string\n\tpublic readonly dependencies: FeatureDependency[] = []\n\tpublic readonly packageDependencies: NpmPackage[] = []\n\tpublic readonly optionsSchema?: S\n\tpublic readonly fileDescriptions: FileDescription[] = []\n\n\tpublic isInstalled?(): Promise<boolean>\n\n\tpublic abstract readonly code: FeatureCode\n\tpublic abstract readonly nameReadable: string\n\tpublic readonly installOrderWeight: number = 0\n\n\tpublic cwd: string\n\tpublic scripts: Record<string, any> = {}\n\tpublic actionsDir: string | undefined\n\tprotected actions?: ActionFactory\n\tprotected templates: Templates\n\tprotected emitter: GlobalEmitter\n\tprotected features: FeatureInstaller\n\tprotected ui: GraphicsInterface\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writers: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\tprivate actionCodes?: string[]\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.templates = options.templates\n\t\tthis.actions = options.actionFactory\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.writers = new WriterFactory({\n\t\t\ttemplates: this.templates,\n\t\t\tui: options.ui,\n\t\t\tsettings: this.Service('settings'),\n\t\t\tlinter: this.Service('lint'),\n\t\t})\n\t\tthis.emitter = options.emitter\n\t\tthis.features = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic async beforePackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\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\tpublic Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writers.Writer(code, {\n\t\t\tfileDescriptions: this.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tpublic getFeature<Code extends FeatureCode>(code: Code) {\n\t\treturn this.features.getFeature(code)\n\t}\n\n\tpublic async getAvailableActionCodes(): Promise<string[]> {\n\t\tif (!this.actionsDir) {\n\t\t\treturn []\n\t\t}\n\n\t\tif (!this.actionCodes) {\n\t\t\tconst matches: string[] = await globby(\n\t\t\t\tpathUtil.join(this.actionsDir, '**/*Action.js')\n\t\t\t)\n\n\t\t\tconst codes: string[] = []\n\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst generatedCode = featuresUtil.filePathToActionCode(match)\n\t\t\t\tcodes.push(generatedCode)\n\t\t\t}\n\n\t\t\tthis.actionCodes = codes\n\t\t}\n\n\t\treturn this.actionCodes\n\t}\n\n\tpublic Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\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\nexport interface InstallResults {\n\tfiles?: GeneratedFile[]\n\tcwd?: string\n}\n\nexport interface FeatureDependency {\n\tisRequired: boolean\n\tcode: FeatureCode\n}\n\nexport interface FeatureOptions {\n\tcwd: string\n\tserviceFactory: ServiceFactory\n\ttemplates: Templates\n\tstoreFactory: StoreFactory\n\tactionFactory?: ActionFactory\n\tfeatureInstaller: FeatureInstaller\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tapiClientFactory: ApiClientFactory\n\tactionExecuter: ActionExecuter\n}\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { FeatureCode, FeatureAction } from './features.types';
6
6
  export default class ActionExecuter {
7
7
  private emitter;
8
8
  private ui;
9
- private actionFactory;
9
+ private actions;
10
10
  private featureInstallerFactory;
11
11
  private shouldAutoHandleDependencies;
12
12
  private shouldThrowOnListenerError;
@@ -24,14 +24,14 @@ var ActionExecuter = /*#__PURE__*/function () {
24
24
  (0, _classCallCheck2["default"])(this, ActionExecuter);
25
25
  (0, _defineProperty2["default"])(this, "emitter", void 0);
26
26
  (0, _defineProperty2["default"])(this, "ui", void 0);
27
- (0, _defineProperty2["default"])(this, "actionFactory", void 0);
27
+ (0, _defineProperty2["default"])(this, "actions", void 0);
28
28
  (0, _defineProperty2["default"])(this, "featureInstallerFactory", void 0);
29
29
  (0, _defineProperty2["default"])(this, "shouldAutoHandleDependencies", void 0);
30
30
  (0, _defineProperty2["default"])(this, "shouldThrowOnListenerError", void 0);
31
31
  this.featureInstallerFactory = options.featureInstallerFactory;
32
32
  this.emitter = options.emitter;
33
33
  this.ui = options.ui;
34
- this.actionFactory = options.actionFactory;
34
+ this.actions = options.actionFactory;
35
35
  this.shouldAutoHandleDependencies = (_options$shouldAutoHa = options.shouldAutoHandleDependencies) !== null && _options$shouldAutoHa !== void 0 ? _options$shouldAutoHa : true;
36
36
  this.shouldThrowOnListenerError = !!options.shouldThrowOnListenerError;
37
37
  }
@@ -263,8 +263,7 @@ var ActionExecuter = /*#__PURE__*/function () {
263
263
  value: function Action(featureCode, actionCode) {
264
264
  var _this = this;
265
265
  var featureInstaller = this.getFeatureInstaller();
266
- var actionFactory = this.actionFactory;
267
- var action = actionFactory.Action({
266
+ var action = this.actions.Action({
268
267
  featureCode: featureCode,
269
268
  actionCode: actionCode,
270
269
  actionExecuter: this,
@@ -1 +1 @@
1
- {"version":3,"file":"ActionExecuter.js","names":["ActionExecuter","options","featureInstallerFactory","emitter","ui","actionFactory","shouldAutoHandleDependencies","shouldThrowOnListenerError","featureCode","actionCode","action","originalExecute","actionOptions","installer","getFeatureInstaller","isInstalled","SpruceError","code","friendlyMessage","emit","willExecuteResults","eventResponseUtil","getAllResponsePayloadsAndErrors","willExecutePayloads","payloads","errors","length","actionUtil","assertNoErrorsInResponse","feature","getFeature","asker","ActionOptionAsker","featureInstaller","installOrMarkAsSkippedMissingDependencies","response","askAboutMissingFeatureOptionsIfFeatureIsNotInstalled","installOptions","askAboutMissingActionOptions","answers","installOurFeature","ourFeatureResults","merge","executeResults","results","didExecuteResults","didExecuteErrors","mergeActionResults","Action","actionExecuter","execute","bind"],"sources":["../../src/features/ActionExecuter.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { GraphicsInterface } from '../types/cli.types'\nimport actionUtil from '../utilities/action.utility'\nimport ActionFactory from './ActionFactory'\nimport ActionOptionAsker from './ActionQuestionAsker'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureActionResponse,\n} from './features.types'\n\nexport default class ActionExecuter {\n\tprivate emitter: GlobalEmitter\n\tprivate ui: GraphicsInterface\n\tprivate actionFactory: ActionFactory\n\tprivate featureInstallerFactory: () => FeatureInstaller\n\tprivate shouldAutoHandleDependencies: boolean\n\tprivate shouldThrowOnListenerError: boolean\n\n\tpublic constructor(options: ActionExecuterOptions) {\n\t\tthis.featureInstallerFactory = options.featureInstallerFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.ui = options.ui\n\t\tthis.actionFactory = options.actionFactory\n\t\tthis.shouldAutoHandleDependencies =\n\t\t\toptions.shouldAutoHandleDependencies ?? true\n\n\t\tthis.shouldThrowOnListenerError = !!options.shouldThrowOnListenerError\n\t}\n\n\tprivate getFeatureInstaller() {\n\t\treturn this.featureInstallerFactory()\n\t}\n\n\tprivate async execute(options: {\n\t\tfeatureCode: FeatureCode\n\t\tactionCode: string\n\t\taction: any\n\t\toriginalExecute: any\n\t\toptions?: Record<string, any>\n\t}): Promise<FeatureInstallResponse & FeatureActionResponse> {\n\t\tconst {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\taction,\n\t\t\toriginalExecute,\n\t\t\toptions: actionOptions,\n\t\t} = options\n\n\t\tconst installer = this.getFeatureInstaller()\n\t\tconst isInstalled = await installer.isInstalled(featureCode)\n\n\t\tif (!isInstalled && !this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${featureCode}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tconst willExecuteResults = await this.emitter.emit('feature.will-execute', {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\toptions: actionOptions,\n\t\t})\n\n\t\tconst { payloads: willExecutePayloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\twillExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (errors?.length ?? 0 > 0) {\n\t\t\tif (this.shouldThrowOnListenerError) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthrow errors[0]\n\t\t\t}\n\t\t\treturn { errors }\n\t\t}\n\n\t\tactionUtil.assertNoErrorsInResponse(willExecuteResults)\n\n\t\tconst feature = installer.getFeature(featureCode)\n\n\t\tconst asker = new ActionOptionAsker({\n\t\t\tfeatureInstaller: installer,\n\t\t\tfeature,\n\t\t\tactionCode,\n\t\t\tshouldAutoHandleDependencies: this.shouldAutoHandleDependencies,\n\t\t\tui: this.ui,\n\t\t})\n\n\t\tlet response =\n\t\t\t(await asker.installOrMarkAsSkippedMissingDependencies()) ?? {}\n\n\t\tconst installOptions =\n\t\t\t(await asker.askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\t\t\tisInstalled,\n\t\t\t\tactionOptions\n\t\t\t)) ??\n\t\t\tactionOptions ??\n\t\t\t{}\n\n\t\tlet answers =\n\t\t\t(await asker.askAboutMissingActionOptions(action, installOptions)) ??\n\t\t\tinstallOptions\n\n\t\tif (!isInstalled) {\n\t\t\tconst ourFeatureResults =\n\t\t\t\t(await asker.installOurFeature(installOptions)) ?? {}\n\t\t\tresponse = merge(response, ourFeatureResults)\n\t\t}\n\n\t\tlet executeResults: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\texecuteResults = await originalExecute({\n\t\t\t\t...answers,\n\t\t\t})\n\t\t} catch (err) {\n\t\t\texecuteResults.errors = [err]\n\t\t}\n\n\t\tresponse = merge(response, executeResults)\n\n\t\tconst didExecuteResults = await this.emitter.emit('feature.did-execute', {\n\t\t\tresults: response,\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t})\n\n\t\tconst { payloads, errors: didExecuteErrors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\tdidExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (\n\t\t\t(this.shouldThrowOnListenerError && didExecuteErrors?.length) ??\n\t\t\t0 > 0\n\t\t) {\n\t\t\t//@ts-ignore\n\t\t\tthrow didExecuteErrors[0]\n\t\t}\n\n\t\tresponse = actionUtil.mergeActionResults(\n\t\t\tresponse,\n\t\t\t...willExecutePayloads,\n\t\t\t...payloads\n\t\t)\n\n\t\tif (didExecuteErrors) {\n\t\t\tresponse = actionUtil.mergeActionResults(response, {\n\t\t\t\terrors: didExecuteErrors,\n\t\t\t})\n\t\t}\n\n\t\treturn response\n\t}\n\n\tpublic Action<F extends FeatureCode>(\n\t\tfeatureCode: F,\n\t\tactionCode: string\n\t): FeatureAction {\n\t\tconst featureInstaller = this.getFeatureInstaller()\n\n\t\tconst actionFactory = this.actionFactory\n\t\tconst action = actionFactory.Action({\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\tactionExecuter: this,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tconst originalExecute = action.execute.bind(action)\n\n\t\taction.execute = async (options: any) => {\n\t\t\treturn this.execute({\n\t\t\t\tfeatureCode,\n\t\t\t\tactionCode,\n\t\t\t\taction,\n\t\t\t\toriginalExecute,\n\t\t\t\toptions,\n\t\t\t})\n\t\t}\n\n\t\treturn action as any\n\t}\n}\n\nexport interface ActionExecuterOptions {\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tactionFactory: ActionFactory\n\tfeatureInstallerFactory: () => FeatureInstaller\n\tshouldAutoHandleDependencies?: boolean\n\tshouldThrowOnListenerError?: boolean\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ActionExecuter.js","names":["ActionExecuter","options","featureInstallerFactory","emitter","ui","actions","actionFactory","shouldAutoHandleDependencies","shouldThrowOnListenerError","featureCode","actionCode","action","originalExecute","actionOptions","installer","getFeatureInstaller","isInstalled","SpruceError","code","friendlyMessage","emit","willExecuteResults","eventResponseUtil","getAllResponsePayloadsAndErrors","willExecutePayloads","payloads","errors","length","actionUtil","assertNoErrorsInResponse","feature","getFeature","asker","ActionOptionAsker","featureInstaller","installOrMarkAsSkippedMissingDependencies","response","askAboutMissingFeatureOptionsIfFeatureIsNotInstalled","installOptions","askAboutMissingActionOptions","answers","installOurFeature","ourFeatureResults","merge","executeResults","results","didExecuteResults","didExecuteErrors","mergeActionResults","Action","actionExecuter","execute","bind"],"sources":["../../src/features/ActionExecuter.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { GraphicsInterface } from '../types/cli.types'\nimport actionUtil from '../utilities/action.utility'\nimport ActionFactory from './ActionFactory'\nimport ActionOptionAsker from './ActionQuestionAsker'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureActionResponse,\n} from './features.types'\n\nexport default class ActionExecuter {\n\tprivate emitter: GlobalEmitter\n\tprivate ui: GraphicsInterface\n\tprivate actions: ActionFactory\n\tprivate featureInstallerFactory: () => FeatureInstaller\n\tprivate shouldAutoHandleDependencies: boolean\n\tprivate shouldThrowOnListenerError: boolean\n\n\tpublic constructor(options: ActionExecuterOptions) {\n\t\tthis.featureInstallerFactory = options.featureInstallerFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.ui = options.ui\n\t\tthis.actions = options.actionFactory\n\t\tthis.shouldAutoHandleDependencies =\n\t\t\toptions.shouldAutoHandleDependencies ?? true\n\n\t\tthis.shouldThrowOnListenerError = !!options.shouldThrowOnListenerError\n\t}\n\n\tprivate getFeatureInstaller() {\n\t\treturn this.featureInstallerFactory()\n\t}\n\n\tprivate async execute(options: {\n\t\tfeatureCode: FeatureCode\n\t\tactionCode: string\n\t\taction: any\n\t\toriginalExecute: any\n\t\toptions?: Record<string, any>\n\t}): Promise<FeatureInstallResponse & FeatureActionResponse> {\n\t\tconst {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\taction,\n\t\t\toriginalExecute,\n\t\t\toptions: actionOptions,\n\t\t} = options\n\n\t\tconst installer = this.getFeatureInstaller()\n\t\tconst isInstalled = await installer.isInstalled(featureCode)\n\n\t\tif (!isInstalled && !this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${featureCode}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tconst willExecuteResults = await this.emitter.emit('feature.will-execute', {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\toptions: actionOptions,\n\t\t})\n\n\t\tconst { payloads: willExecutePayloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\twillExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (errors?.length ?? 0 > 0) {\n\t\t\tif (this.shouldThrowOnListenerError) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthrow errors[0]\n\t\t\t}\n\t\t\treturn { errors }\n\t\t}\n\n\t\tactionUtil.assertNoErrorsInResponse(willExecuteResults)\n\n\t\tconst feature = installer.getFeature(featureCode)\n\n\t\tconst asker = new ActionOptionAsker({\n\t\t\tfeatureInstaller: installer,\n\t\t\tfeature,\n\t\t\tactionCode,\n\t\t\tshouldAutoHandleDependencies: this.shouldAutoHandleDependencies,\n\t\t\tui: this.ui,\n\t\t})\n\n\t\tlet response =\n\t\t\t(await asker.installOrMarkAsSkippedMissingDependencies()) ?? {}\n\n\t\tconst installOptions =\n\t\t\t(await asker.askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\t\t\tisInstalled,\n\t\t\t\tactionOptions\n\t\t\t)) ??\n\t\t\tactionOptions ??\n\t\t\t{}\n\n\t\tlet answers =\n\t\t\t(await asker.askAboutMissingActionOptions(action, installOptions)) ??\n\t\t\tinstallOptions\n\n\t\tif (!isInstalled) {\n\t\t\tconst ourFeatureResults =\n\t\t\t\t(await asker.installOurFeature(installOptions)) ?? {}\n\t\t\tresponse = merge(response, ourFeatureResults)\n\t\t}\n\n\t\tlet executeResults: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\texecuteResults = await originalExecute({\n\t\t\t\t...answers,\n\t\t\t})\n\t\t} catch (err: any) {\n\t\t\texecuteResults.errors = [err]\n\t\t}\n\n\t\tresponse = merge(response, executeResults)\n\n\t\tconst didExecuteResults = await this.emitter.emit('feature.did-execute', {\n\t\t\tresults: response,\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t})\n\n\t\tconst { payloads, errors: didExecuteErrors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\tdidExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (\n\t\t\t(this.shouldThrowOnListenerError && didExecuteErrors?.length) ??\n\t\t\t0 > 0\n\t\t) {\n\t\t\t//@ts-ignore\n\t\t\tthrow didExecuteErrors[0]\n\t\t}\n\n\t\tresponse = actionUtil.mergeActionResults(\n\t\t\tresponse,\n\t\t\t...willExecutePayloads,\n\t\t\t...payloads\n\t\t)\n\n\t\tif (didExecuteErrors) {\n\t\t\tresponse = actionUtil.mergeActionResults(response, {\n\t\t\t\terrors: didExecuteErrors,\n\t\t\t})\n\t\t}\n\n\t\treturn response\n\t}\n\n\tpublic Action<F extends FeatureCode>(\n\t\tfeatureCode: F,\n\t\tactionCode: string\n\t): FeatureAction {\n\t\tconst featureInstaller = this.getFeatureInstaller()\n\n\t\tconst action = this.actions.Action({\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\tactionExecuter: this,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tconst originalExecute = action.execute.bind(action)\n\n\t\taction.execute = async (options: any) => {\n\t\t\treturn this.execute({\n\t\t\t\tfeatureCode,\n\t\t\t\tactionCode,\n\t\t\t\taction,\n\t\t\t\toriginalExecute,\n\t\t\t\toptions,\n\t\t\t})\n\t\t}\n\n\t\treturn action as any\n\t}\n}\n\nexport interface ActionExecuterOptions {\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tactionFactory: ActionFactory\n\tfeatureInstallerFactory: () => FeatureInstaller\n\tshouldAutoHandleDependencies?: boolean\n\tshouldThrowOnListenerError?: boolean\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AACA;AACA;AAGA;AAEA;AAAqD;AAAA;AAAA,IAShCA,cAAc;EAQlC,wBAAmBC,OAA8B,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAClD,IAAI,CAACC,uBAAuB,GAAGD,OAAO,CAACC,uBAAuB;IAC9D,IAAI,CAACC,OAAO,GAAGF,OAAO,CAACE,OAAO;IAC9B,IAAI,CAACC,EAAE,GAAGH,OAAO,CAACG,EAAE;IACpB,IAAI,CAACC,OAAO,GAAGJ,OAAO,CAACK,aAAa;IACpC,IAAI,CAACC,4BAA4B,4BAChCN,OAAO,CAACM,4BAA4B,yEAAI,IAAI;IAE7C,IAAI,CAACC,0BAA0B,GAAG,CAAC,CAACP,OAAO,CAACO,0BAA0B;EACvE;EAAC;IAAA;IAAA,OAED,+BAA8B;MAC7B,OAAO,IAAI,CAACN,uBAAuB,EAAE;IACtC;EAAC;IAAA;IAAA;MAAA,6FAED,iBAAsBD,OAMrB;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAECQ,WAAW,GAKRR,OAAO,CALVQ,WAAW,EACXC,UAAU,GAIPT,OAAO,CAJVS,UAAU,EACVC,MAAM,GAGHV,OAAO,CAHVU,MAAM,EACNC,eAAe,GAEZX,OAAO,CAFVW,eAAe,EACNC,aAAa,GACnBZ,OAAO,CADVA,OAAO;gBAGFa,SAAS,GAAG,IAAI,CAACC,mBAAmB,EAAE;gBAAA;gBAAA,OAClBD,SAAS,CAACE,WAAW,CAACP,WAAW,CAAC;cAAA;gBAAtDO,WAAW;gBAAA,MAEb,CAACA,WAAW,IAAI,CAAC,IAAI,CAACT,4BAA4B;kBAAA;kBAAA;gBAAA;gBAAA,MAC/C,IAAIU,uBAAW,CAAC;kBACrBC,IAAI,EAAE,uBAAuB;kBAC7BT,WAAW,EAAXA,WAAW;kBACXU,eAAe,qCAA+BV,WAAW;gBAC1D,CAAC,CAAC;cAAA;gBAAA;gBAAA,OAG8B,IAAI,CAACN,OAAO,CAACiB,IAAI,CAAC,sBAAsB,EAAE;kBAC1EX,WAAW,EAAXA,WAAW;kBACXC,UAAU,EAAVA,UAAU;kBACVT,OAAO,EAAEY;gBACV,CAAC,CAAC;cAAA;gBAJIQ,kBAAkB;gBAAA,wBAOvBC,mCAAiB,CAACC,+BAA+B,CAChDF,kBAAkB,EAClBJ,uBAAW,CACX,EAJgBO,mBAAmB,yBAA7BC,QAAQ,EAAuBC,MAAM,yBAANA,MAAM;gBAAA,wBAMzCA,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEC,MAAM,2DAAI,CAAC,GAAG,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,KACtB,IAAI,CAACnB,0BAA0B;kBAAA;kBAAA;gBAAA;gBAAA,MAE5BkB,MAAM,CAAC,CAAC,CAAC;cAAA;gBAAA,iCAET;kBAAEA,MAAM,EAANA;gBAAO,CAAC;cAAA;gBAGlBE,kBAAU,CAACC,wBAAwB,CAACR,kBAAkB,CAAC;gBAEjDS,OAAO,GAAGhB,SAAS,CAACiB,UAAU,CAACtB,WAAW,CAAC;gBAE3CuB,KAAK,GAAG,IAAIC,+BAAiB,CAAC;kBACnCC,gBAAgB,EAAEpB,SAAS;kBAC3BgB,OAAO,EAAPA,OAAO;kBACPpB,UAAU,EAAVA,UAAU;kBACVH,4BAA4B,EAAE,IAAI,CAACA,4BAA4B;kBAC/DH,EAAE,EAAE,IAAI,CAACA;gBACV,CAAC,CAAC;gBAAA;gBAAA,OAGM4B,KAAK,CAACG,yCAAyC,EAAE;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA,cAAK,CAAC,CAAC;cAAA;gBAD5DC,QAAQ;gBAAA;gBAAA,OAIJJ,KAAK,CAACK,oDAAoD,CAChErB,WAAW,EACXH,aAAa,CACb;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA,cACDA,aAAa;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA,cACb,CAAC,CAAC;cAAA;gBANGyB,cAAc;gBAAA;gBAAA,OASZN,KAAK,CAACO,4BAA4B,CAAC5B,MAAM,EAAE2B,cAAc,CAAC;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA,eACjEA,cAAc;cAAA;gBAFXE,OAAO;gBAAA,IAINxB,WAAW;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAEPgB,KAAK,CAACS,iBAAiB,CAACH,cAAc,CAAC;cAAA;gBAAA;gBAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;cAAA;gBAAA;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA;gBAAA;cAAA;gBAAA,eAAK,CAAC,CAAC;cAAA;gBADhDI,iBAAiB;gBAEvBN,QAAQ,GAAG,IAAAO,iBAAK,EAACP,QAAQ,EAAEM,iBAAiB,CAAC;cAAA;gBAG1CE,cAAqC,GAAG,CAAC,CAAC;gBAAA;gBAAA;gBAAA,OAGtBhC,eAAe,mBAClC4B,OAAO,EACT;cAAA;gBAFFI,cAAc;gBAAA;gBAAA;cAAA;gBAAA;gBAAA;gBAIdA,cAAc,CAAClB,MAAM,GAAG,cAAK;cAAA;gBAG9BU,QAAQ,GAAG,IAAAO,iBAAK,EAACP,QAAQ,EAAEQ,cAAc,CAAC;gBAAA;gBAAA,OAEV,IAAI,CAACzC,OAAO,CAACiB,IAAI,CAAC,qBAAqB,EAAE;kBACxEyB,OAAO,EAAET,QAAQ;kBACjB3B,WAAW,EAAXA,WAAW;kBACXC,UAAU,EAAVA;gBACD,CAAC,CAAC;cAAA;gBAJIoC,iBAAiB;gBAAA,yBAOtBxB,mCAAiB,CAACC,+BAA+B,CAChDuB,iBAAiB,EACjB7B,uBAAW,CACX,EAJMQ,QAAQ,0BAARA,QAAQ,EAAUsB,gBAAgB,0BAAxBrB,MAAM;gBAAA,eAOtB,IAAI,CAAClB,0BAA0B,KAAIuC,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAEpB,MAAM,0CAC5D,CAAC,GAAG,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,MAGCoB,gBAAgB,CAAC,CAAC,CAAC;cAAA;gBAG1BX,QAAQ,GAAGR,kBAAU,CAACoB,kBAAkB,OAA7BpB,kBAAU,GACpBQ,QAAQ,6CACLZ,mBAAmB,uCACnBC,QAAQ,GACX;gBAED,IAAIsB,gBAAgB,EAAE;kBACrBX,QAAQ,GAAGR,kBAAU,CAACoB,kBAAkB,CAACZ,QAAQ,EAAE;oBAClDV,MAAM,EAAEqB;kBACT,CAAC,CAAC;gBACH;gBAAC,iCAEMX,QAAQ;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACf;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,gBACC3B,WAAc,EACdC,UAAkB,EACF;MAAA;MAChB,IAAMwB,gBAAgB,GAAG,IAAI,CAACnB,mBAAmB,EAAE;MAEnD,IAAMJ,MAAM,GAAG,IAAI,CAACN,OAAO,CAAC4C,MAAM,CAAC;QAClCxC,WAAW,EAAXA,WAAW;QACXC,UAAU,EAAVA,UAAU;QACVwC,cAAc,EAAE,IAAI;QACpBhB,gBAAgB,EAAhBA;MACD,CAAC,CAAC;MAEF,IAAMtB,eAAe,GAAGD,MAAM,CAACwC,OAAO,CAACC,IAAI,CAACzC,MAAM,CAAC;MAEnDA,MAAM,CAACwC,OAAO;QAAA,0FAAG,kBAAOlD,OAAY;UAAA;YAAA;cAAA;gBAAA;kBAAA,kCAC5B,KAAI,CAACkD,OAAO,CAAC;oBACnB1C,WAAW,EAAXA,WAAW;oBACXC,UAAU,EAAVA,UAAU;oBACVC,MAAM,EAANA,MAAM;oBACNC,eAAe,EAAfA,eAAe;oBACfX,OAAO,EAAPA;kBACD,CAAC,CAAC;gBAAA;gBAAA;kBAAA;cAAA;YAAA;UAAA;QAAA,CACF;QAAA;UAAA;QAAA;MAAA;MAED,OAAOU,MAAM;IACd;EAAC;EAAA;AAAA;AAAA"}
@@ -2,17 +2,14 @@ import { Schema } from '@sprucelabs/schema';
2
2
  import { FeatureAction, ActionOptions, FeatureCode } from '../features/features.types';
3
3
  import { GlobalEmitter } from '../GlobalEmitter';
4
4
  import { BlockedCommands, OptionOverrides } from '../types/cli.types';
5
+ import AbstractAction from './AbstractAction';
5
6
  import ActionExecuter from './ActionExecuter';
6
7
  import FeatureInstaller from './FeatureInstaller';
7
- export interface FeatureActionFactoryOptions extends Omit<ActionOptions, 'parent' | 'actionExecuter' | 'featureInstaller'> {
8
- emitter: GlobalEmitter;
9
- blockedCommands?: BlockedCommands;
10
- optionOverrides?: OptionOverrides;
11
- }
12
8
  export default class ActionFactory {
13
9
  private actionOptions;
14
10
  private blockedCommands?;
15
11
  private optionOverrides?;
12
+ private static overrides;
16
13
  constructor(options: FeatureActionFactoryOptions);
17
14
  Action<F extends FeatureCode, S extends Schema = Schema>(options: {
18
15
  featureCode: F;
@@ -20,4 +17,14 @@ export default class ActionFactory {
20
17
  actionExecuter: ActionExecuter;
21
18
  featureInstaller: FeatureInstaller;
22
19
  }): FeatureAction<S>;
20
+ static setActionClass(featureCode: FeatureCode, action: string, ExecuteTrackingAction: ActionConstructor): void;
21
+ private static overrideKey;
22
+ static clearActionOverrides(): void;
23
+ }
24
+ export interface FeatureActionFactoryOptions extends Omit<ActionOptions, 'parent' | 'actionExecuter' | 'featureInstaller'> {
25
+ emitter: GlobalEmitter;
26
+ blockedCommands?: BlockedCommands;
27
+ optionOverrides?: OptionOverrides;
23
28
  }
29
+ declare type ActionConstructor = new (options: ActionOptions) => AbstractAction;
30
+ export {};
@@ -39,14 +39,19 @@ var ActionFactory = /*#__PURE__*/function () {
39
39
  if (!feature.actionsDir) {
40
40
  throw new Error("Your ".concat(featureCode, " features needs `public actionsDir = diskUtil.resolvePath(__dirname, 'actions')`"));
41
41
  }
42
- var classPath = _spruceSkillUtils.diskUtil.resolvePath(feature.actionsDir, "".concat(_spruceSkillUtils.namesUtil.toPascal(actionCode), "Action"));
43
42
  var Class;
44
43
  var originalError;
45
- try {
46
- Class = require(classPath)["default"];
47
- // eslint-disable-next-line no-empty
48
- } catch (err) {
49
- originalError = err;
44
+ var key = ActionFactory.overrideKey(featureCode, actionCode);
45
+ if (ActionFactory.overrides[key]) {
46
+ Class = ActionFactory.overrides[key];
47
+ } else {
48
+ var classPath = _spruceSkillUtils.diskUtil.resolvePath(feature.actionsDir, "".concat(_spruceSkillUtils.namesUtil.toPascal(actionCode), "Action"));
49
+ try {
50
+ Class = require(classPath)["default"];
51
+ // eslint-disable-next-line no-empty
52
+ } catch (err) {
53
+ originalError = err;
54
+ }
50
55
  }
51
56
 
52
57
  //@ts-ignore
@@ -84,8 +89,24 @@ var ActionFactory = /*#__PURE__*/function () {
84
89
  });
85
90
  return actionDecorator;
86
91
  }
92
+ }], [{
93
+ key: "setActionClass",
94
+ value: function setActionClass(featureCode, action, ExecuteTrackingAction) {
95
+ this.overrides[ActionFactory.overrideKey(featureCode, action)] = ExecuteTrackingAction;
96
+ }
97
+ }, {
98
+ key: "overrideKey",
99
+ value: function overrideKey(featureCode, action) {
100
+ return "".concat(featureCode).concat(action);
101
+ }
102
+ }, {
103
+ key: "clearActionOverrides",
104
+ value: function clearActionOverrides() {
105
+ this.overrides = {};
106
+ }
87
107
  }]);
88
108
  return ActionFactory;
89
109
  }();
90
110
  exports["default"] = ActionFactory;
111
+ (0, _defineProperty2["default"])(ActionFactory, "overrides", {});
91
112
  //# sourceMappingURL=ActionFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionFactory.js","names":["ActionFactory","options","blockedCommands","optionOverrides","actionOptions","featureCode","actionCode","actionExecuter","featureInstaller","feature","getFeature","actionsDir","Error","classPath","diskUtil","resolvePath","namesUtil","toPascal","Class","originalError","require","err","SpruceError","code","friendlyMessage","action","parent","execute","actionDecorator","OverrideActionDecorator","ui"],"sources":["../../src/features/ActionFactory.ts"],"sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport {\n\tFeatureAction,\n\tActionOptions,\n\tFeatureCode,\n} from '../features/features.types'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractAction from './AbstractAction'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport OverrideActionDecorator from './OverrideActionDecorator'\n\nexport interface FeatureActionFactoryOptions\n\textends Omit<\n\t\tActionOptions,\n\t\t'parent' | 'actionExecuter' | 'featureInstaller'\n\t> {\n\temitter: GlobalEmitter\n\tblockedCommands?: BlockedCommands\n\toptionOverrides?: OptionOverrides\n}\n\nexport default class ActionFactory {\n\tprivate actionOptions: FeatureActionFactoryOptions\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\n\tpublic constructor(options: FeatureActionFactoryOptions) {\n\t\tconst { blockedCommands, optionOverrides, ...actionOptions } = options\n\t\tthis.actionOptions = actionOptions\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t}\n\n\tpublic Action<F extends FeatureCode, S extends Schema = Schema>(options: {\n\t\tfeatureCode: F\n\t\tactionCode: string\n\t\tactionExecuter: ActionExecuter\n\t\tfeatureInstaller: FeatureInstaller\n\t}): FeatureAction<S> {\n\t\tconst { featureCode, actionCode, actionExecuter, featureInstaller } =\n\t\t\toptions\n\n\t\tconst feature = featureInstaller.getFeature(featureCode)\n\n\t\tif (!feature.actionsDir) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your ${featureCode} features needs \\`public actionsDir = diskUtil.resolvePath(__dirname, 'actions')\\``\n\t\t\t)\n\t\t}\n\n\t\tconst classPath = diskUtil.resolvePath(\n\t\t\tfeature.actionsDir,\n\t\t\t`${namesUtil.toPascal(actionCode)}Action`\n\t\t)\n\n\t\tlet Class: new (options: ActionOptions) => AbstractAction | undefined\n\t\tlet originalError: Error | undefined\n\n\t\ttry {\n\t\t\tClass = require(classPath).default\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (err: any) {\n\t\t\toriginalError = err\n\t\t}\n\n\t\t//@ts-ignore\n\t\tif (!Class) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not find any action named '${actionCode}' for the ${feature.code} feature. Make sure it's the default export and extends AbstractAction.`,\n\t\t\t\toriginalError,\n\t\t\t})\n\t\t}\n\n\t\tconst action = new Class({\n\t\t\t...this.actionOptions,\n\t\t\tactionExecuter,\n\t\t\tparent: feature,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tif (!action) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not instantiate ${actionCode} action on ${feature.code} feature.`,\n\t\t\t})\n\t\t}\n\n\t\tif (!action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `It looks like the ${feature.code} feature's '${actionCode}' action does not properly extend AbstractAction.`,\n\t\t\t})\n\t\t}\n\n\t\tconst actionDecorator = new OverrideActionDecorator({\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tblockedCommands: this.blockedCommands,\n\t\t\toptionOverrides: this.optionOverrides,\n\t\t\tui: this.actionOptions.ui,\n\t\t\tactionCode,\n\t\t})\n\n\t\treturn actionDecorator as FeatureAction<S>\n\t}\n}\n"],"mappings":";;;;;;;;;;;AACA;AAEA;AAWA;AAA+D;AAAA;AAAA;AAAA,IAY1CA,aAAa;EAKjC,uBAAmBC,OAAoC,EAAE;IAAA;IAAA;IAAA;IAAA;IACxD,IAAQC,eAAe,GAAwCD,OAAO,CAA9DC,eAAe;MAAEC,eAAe,GAAuBF,OAAO,CAA7CE,eAAe;MAAKC,aAAa,6CAAKH,OAAO;IACtE,IAAI,CAACG,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACF,eAAe,GAAGA,eAAe;IACtC,IAAI,CAACC,eAAe,GAAGA,eAAe;EACvC;EAAC;IAAA;IAAA,OAED,gBAAgEF,OAK/D,EAAoB;MACpB,IAAQI,WAAW,GAClBJ,OAAO,CADAI,WAAW;QAAEC,UAAU,GAC9BL,OAAO,CADaK,UAAU;QAAEC,cAAc,GAC9CN,OAAO,CADyBM,cAAc;QAAEC,gBAAgB,GAChEP,OAAO,CADyCO,gBAAgB;MAGjE,IAAMC,OAAO,GAAGD,gBAAgB,CAACE,UAAU,CAACL,WAAW,CAAC;MAExD,IAAI,CAACI,OAAO,CAACE,UAAU,EAAE;QACxB,MAAM,IAAIC,KAAK,gBACNP,WAAW,sFACnB;MACF;MAEA,IAAMQ,SAAS,GAAGC,0BAAQ,CAACC,WAAW,CACrCN,OAAO,CAACE,UAAU,YACfK,2BAAS,CAACC,QAAQ,CAACX,UAAU,CAAC,YACjC;MAED,IAAIY,KAAiE;MACrE,IAAIC,aAAgC;MAEpC,IAAI;QACHD,KAAK,GAAGE,OAAO,CAACP,SAAS,CAAC,WAAQ;QAClC;MACD,CAAC,CAAC,OAAOQ,GAAQ,EAAE;QAClBF,aAAa,GAAGE,GAAG;MACpB;;MAEA;MACA,IAAI,CAACH,KAAK,EAAE;QACX,MAAM,IAAII,uBAAW,CAAC;UACrBC,IAAI,EAAE,SAAS;UACfC,eAAe,+CAAwClB,UAAU,uBAAaG,OAAO,CAACc,IAAI,4EAAyE;UACnKJ,aAAa,EAAbA;QACD,CAAC,CAAC;MACH;MAEA,IAAMM,MAAM,GAAG,IAAIP,KAAK,iCACpB,IAAI,CAACd,aAAa;QACrBG,cAAc,EAAdA,cAAc;QACdmB,MAAM,EAAEjB,OAAO;QACfD,gBAAgB,EAAhBA;MAAgB,GACf;MAEF,IAAI,CAACiB,MAAM,EAAE;QACZ,MAAM,IAAIH,uBAAW,CAAC;UACrBC,IAAI,EAAE,SAAS;UACfC,eAAe,oCAA6BlB,UAAU,wBAAcG,OAAO,CAACc,IAAI;QACjF,CAAC,CAAC;MACH;MAEA,IAAI,CAACE,MAAM,CAACE,OAAO,EAAE;QACpB,MAAM,IAAIL,uBAAW,CAAC;UACrBC,IAAI,EAAE,SAAS;UACfC,eAAe,8BAAuBf,OAAO,CAACc,IAAI,yBAAejB,UAAU;QAC5E,CAAC,CAAC;MACH;MAEA,IAAMsB,eAAe,GAAG,IAAIC,mCAAuB,CAAC;QACnDJ,MAAM,EAANA,MAAM;QACNhB,OAAO,EAAPA,OAAO;QACPP,eAAe,EAAE,IAAI,CAACA,eAAe;QACrCC,eAAe,EAAE,IAAI,CAACA,eAAe;QACrC2B,EAAE,EAAE,IAAI,CAAC1B,aAAa,CAAC0B,EAAE;QACzBxB,UAAU,EAAVA;MACD,CAAC,CAAC;MAEF,OAAOsB,eAAe;IACvB;EAAC;EAAA;AAAA;AAAA"}
1
+ {"version":3,"file":"ActionFactory.js","names":["ActionFactory","options","blockedCommands","optionOverrides","actionOptions","featureCode","actionCode","actionExecuter","featureInstaller","feature","getFeature","actionsDir","Error","Class","originalError","key","overrideKey","overrides","classPath","diskUtil","resolvePath","namesUtil","toPascal","require","err","SpruceError","code","friendlyMessage","action","parent","execute","actionDecorator","OverrideActionDecorator","ui","ExecuteTrackingAction"],"sources":["../../src/features/ActionFactory.ts"],"sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport {\n\tFeatureAction,\n\tActionOptions,\n\tFeatureCode,\n} from '../features/features.types'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractAction from './AbstractAction'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport OverrideActionDecorator from './OverrideActionDecorator'\n\nexport default class ActionFactory {\n\tprivate actionOptions: FeatureActionFactoryOptions\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\tprivate static overrides: Record<string, ActionConstructor> = {}\n\n\tpublic constructor(options: FeatureActionFactoryOptions) {\n\t\tconst { blockedCommands, optionOverrides, ...actionOptions } = options\n\t\tthis.actionOptions = actionOptions\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t}\n\n\tpublic Action<F extends FeatureCode, S extends Schema = Schema>(options: {\n\t\tfeatureCode: F\n\t\tactionCode: string\n\t\tactionExecuter: ActionExecuter\n\t\tfeatureInstaller: FeatureInstaller\n\t}): FeatureAction<S> {\n\t\tconst { featureCode, actionCode, actionExecuter, featureInstaller } =\n\t\t\toptions\n\n\t\tconst feature = featureInstaller.getFeature(featureCode)\n\n\t\tif (!feature.actionsDir) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your ${featureCode} features needs \\`public actionsDir = diskUtil.resolvePath(__dirname, 'actions')\\``\n\t\t\t)\n\t\t}\n\n\t\tlet Class: new (options: ActionOptions) => AbstractAction | undefined\n\t\tlet originalError: Error | undefined\n\n\t\tconst key = ActionFactory.overrideKey(featureCode, actionCode)\n\t\tif (ActionFactory.overrides[key]) {\n\t\t\tClass = ActionFactory.overrides[key]\n\t\t} else {\n\t\t\tconst classPath = diskUtil.resolvePath(\n\t\t\t\tfeature.actionsDir,\n\t\t\t\t`${namesUtil.toPascal(actionCode)}Action`\n\t\t\t)\n\t\t\ttry {\n\t\t\t\tClass = require(classPath).default\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch (err: any) {\n\t\t\t\toriginalError = err\n\t\t\t}\n\t\t}\n\n\t\t//@ts-ignore\n\t\tif (!Class) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not find any action named '${actionCode}' for the ${feature.code} feature. Make sure it's the default export and extends AbstractAction.`,\n\t\t\t\toriginalError,\n\t\t\t})\n\t\t}\n\n\t\tconst action = new Class({\n\t\t\t...this.actionOptions,\n\t\t\tactionExecuter,\n\t\t\tparent: feature,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tif (!action) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not instantiate ${actionCode} action on ${feature.code} feature.`,\n\t\t\t})\n\t\t}\n\n\t\tif (!action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `It looks like the ${feature.code} feature's '${actionCode}' action does not properly extend AbstractAction.`,\n\t\t\t})\n\t\t}\n\n\t\tconst actionDecorator = new OverrideActionDecorator({\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tblockedCommands: this.blockedCommands,\n\t\t\toptionOverrides: this.optionOverrides,\n\t\t\tui: this.actionOptions.ui,\n\t\t\tactionCode,\n\t\t})\n\n\t\treturn actionDecorator as FeatureAction<S>\n\t}\n\n\tpublic static setActionClass(\n\t\tfeatureCode: FeatureCode,\n\t\taction: string,\n\t\tExecuteTrackingAction: ActionConstructor\n\t) {\n\t\tthis.overrides[ActionFactory.overrideKey(featureCode, action)] =\n\t\t\tExecuteTrackingAction\n\t}\n\n\tprivate static overrideKey(featureCode: string, action: string) {\n\t\treturn `${featureCode}${action}`\n\t}\n\n\tpublic static clearActionOverrides() {\n\t\tthis.overrides = {}\n\t}\n}\n\nexport interface FeatureActionFactoryOptions\n\textends Omit<\n\t\tActionOptions,\n\t\t'parent' | 'actionExecuter' | 'featureInstaller'\n\t> {\n\temitter: GlobalEmitter\n\tblockedCommands?: BlockedCommands\n\toptionOverrides?: OptionOverrides\n}\n\ntype ActionConstructor = new (options: ActionOptions) => AbstractAction\n"],"mappings":"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"}
@@ -3,7 +3,6 @@ import { GraphicsInterface } from '../types/cli.types';
3
3
  import AbstractFeature from './AbstractFeature';
4
4
  import FeatureInstaller from './FeatureInstaller';
5
5
  import { FeatureCode, FeatureInstallResponse, FeatureAction, FeatureMap } from './features.types';
6
- declare type FeatureCommandExecuteOptions<F extends FeatureCode, S extends Schema | undefined = FeatureMap[F]['optionsSchema']> = S extends Schema ? SchemaPartialValues<S> : undefined;
7
6
  export default class ActionOptionAsker<F extends FeatureCode = FeatureCode> {
8
7
  private ui;
9
8
  private featureInstaller;
@@ -33,4 +32,5 @@ export default class ActionOptionAsker<F extends FeatureCode = FeatureCode> {
33
32
  private getCommandName;
34
33
  private generateConfirmInstallMessage;
35
34
  }
35
+ declare type FeatureCommandExecuteOptions<F extends FeatureCode, S extends Schema | undefined = FeatureMap[F]['optionsSchema']> = S extends Schema ? SchemaPartialValues<S> : undefined;
36
36
  export {};
@@ -18,12 +18,6 @@ var _form = _interopRequireDefault(require("../utilities/form.utility"));
18
18
  var _feature = _interopRequireDefault(require("./feature.utilities"));
19
19
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
20
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
- function s(array) {
22
- return array.length === 1 ? '' : '';
23
- }
24
- function areIs(array) {
25
- return array.length === 1 ? 'is' : 'are';
26
- }
27
21
  var ActionOptionAsker = /*#__PURE__*/function () {
28
22
  function ActionOptionAsker(options) {
29
23
  (0, _classCallCheck2["default"])(this, ActionOptionAsker);
@@ -508,4 +502,10 @@ var ActionOptionAsker = /*#__PURE__*/function () {
508
502
  return ActionOptionAsker;
509
503
  }();
510
504
  exports["default"] = ActionOptionAsker;
505
+ function s(array) {
506
+ return array.length === 1 ? '' : '';
507
+ }
508
+ function areIs(array) {
509
+ return array.length === 1 ? 'is' : 'are';
510
+ }
511
511
  //# sourceMappingURL=ActionQuestionAsker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionQuestionAsker.js","names":["s","array","length","areIs","ActionOptionAsker","options","ui","featureInstaller","actionCode","feature","shouldAutoHandleDependencies","getDependenciesNotInstalled","notInstalled","response","installCount","renderLine","generateConfirmInstallMessage","toInstall","shift","Error","isInstalled","code","wasInstalled","isMarkedAsSkipped","installOrMarkAsSkippedMissingDependency","installResults","merge","clear","waitForEnter","getCommandName","dependencies","getFeatureDependencies","Promise","all","map","dependency","getFeature","installedStatuses","filter","installOptions","optionsSchema","collectAnswers","answers","action","schema","SpruceError","featureCode","friendlyMessage","isFirstUpdate","install","installFeatureDependencies","features","didUpdateHandler","message","renderHeading","startLoading","stopLoading","renderHero","CLI_HERO","renderHeadline","isRequired","confirm","nameReadable","command","prompt","type","defaultValue","label","choices","value","markAsSkippedThisRun","markAsPermanentlySkipped","installResponse","undefined","cleaned","Object","keys","forEach","key","fieldNames","fields","providedFieldNames","fieldsToPresent","name","indexOf","isPrivate","featureForm","FormComponent","initialValues","onWillAskQuestion","formUtil","onWillAskQuestionHandler","bind","present","showOverview","featuresUtil","generateCommand","required","optional","feat","push","requiredMessage","optionalMessage","mixedMessage"],"sources":["../../src/features/ActionQuestionAsker.ts"],"sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport merge from 'lodash/merge'\nimport FormComponent from '../components/FormComponent'\nimport { CLI_HERO } from '../constants'\nimport SpruceError from '../errors/SpruceError'\nimport { GraphicsInterface } from '../types/cli.types'\nimport formUtil from '../utilities/form.utility'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport featuresUtil from './feature.utilities'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureMap,\n} from './features.types'\n\ntype FeatureCommandExecuteOptions<\n\tF extends FeatureCode,\n\tS extends Schema | undefined = FeatureMap[F]['optionsSchema']\n> = S extends Schema ? SchemaPartialValues<S> : undefined\n\ntype FeatureDependencyWithFeature = FeatureDependency & {\n\tfeature: AbstractFeature\n}\n\nfunction s(array: any[]) {\n\treturn array.length === 1 ? '' : ''\n}\n\nfunction areIs(array: any[]) {\n\treturn array.length === 1 ? 'is' : 'are'\n}\n\nexport default class ActionOptionAsker<F extends FeatureCode = FeatureCode> {\n\tprivate ui: GraphicsInterface\n\tprivate featureInstaller: FeatureInstaller\n\tprivate actionCode: string\n\tprivate feature: AbstractFeature\n\tprivate shouldAutoHandleDependencies = true\n\n\tpublic constructor(options: {\n\t\tui: GraphicsInterface\n\t\tfeatureInstaller: FeatureInstaller\n\t\tactionCode: string\n\t\tfeature: AbstractFeature\n\t\tshouldAutoHandleDependencies: boolean\n\t}) {\n\t\tthis.ui = options.ui\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.actionCode = options.actionCode\n\t\tthis.feature = options.feature\n\t\tthis.shouldAutoHandleDependencies = options.shouldAutoHandleDependencies\n\t}\n\n\tpublic async installOrMarkAsSkippedMissingDependencies(): Promise<FeatureInstallResponse> {\n\t\tconst notInstalled = await this.getDependenciesNotInstalled()\n\n\t\tlet response: FeatureInstallResponse = {}\n\t\tlet installCount = 0\n\n\t\tif (notInstalled.length > 0) {\n\t\t\tthis.ui.renderLine(\n\t\t\t\tthis.generateConfirmInstallMessage(notInstalled) + '\\n'\n\t\t\t)\n\n\t\t\twhile (notInstalled.length > 0) {\n\t\t\t\tconst toInstall = notInstalled.shift()\n\t\t\t\tif (!toInstall) {\n\t\t\t\t\t// for typescript\n\t\t\t\t\tthrow new Error('Dependent feature error')\n\t\t\t\t}\n\n\t\t\t\tconst wasInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t\ttoInstall.code\n\t\t\t\t)\n\n\t\t\t\tif (\n\t\t\t\t\t!wasInstalled &&\n\t\t\t\t\t!this.featureInstaller.isMarkedAsSkipped(toInstall.code)\n\t\t\t\t) {\n\t\t\t\t\tconst installResults =\n\t\t\t\t\t\tawait this.installOrMarkAsSkippedMissingDependency(toInstall)\n\t\t\t\t\tresponse = merge(response, installResults)\n\t\t\t\t\tinstallCount++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (installCount > 0) {\n\t\t\t\tthis.ui.clear()\n\n\t\t\t\tawait this.ui.waitForEnter(\n\t\t\t\t\t`Phew, now that we're done with that, lets get back to ${this.getCommandName()}!`\n\t\t\t\t)\n\n\t\t\t\tthis.ui.clear()\n\t\t\t}\n\t\t}\n\n\t\treturn response\n\t}\n\n\tprivate async getDependenciesNotInstalled(): Promise<\n\t\tFeatureDependencyWithFeature[]\n\t> {\n\t\tconst dependencies = this.featureInstaller.getFeatureDependencies(\n\t\t\tthis.feature.code\n\t\t)\n\n\t\tconst installedStatuses = await Promise.all(\n\t\t\tdependencies.map(async (dependency) => {\n\t\t\t\tconst feature = this.featureInstaller.getFeature(dependency.code)\n\n\t\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t\tdependency.code\n\t\t\t\t)\n\n\t\t\t\tconst isMarkedAsSkipped = this.featureInstaller.isMarkedAsSkipped(\n\t\t\t\t\tfeature.code\n\t\t\t\t)\n\n\t\t\t\tif (isMarkedAsSkipped) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\treturn !isInstalled ? { feature, ...dependency } : null\n\t\t\t})\n\t\t)\n\n\t\tconst notInstalled = installedStatuses.filter(\n\t\t\t(feature) => !!feature\n\t\t) as FeatureDependencyWithFeature[]\n\n\t\treturn notInstalled\n\t}\n\n\tpublic async askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\tisInstalled: boolean,\n\t\toptions: (Record<string, any> & FeatureCommandExecuteOptions<F>) | undefined\n\t) {\n\t\tlet installOptions = { ...options }\n\n\t\tif (!isInstalled) {\n\t\t\tif (this.feature.optionsSchema) {\n\t\t\t\tconst answers = await this.collectAnswers(\n\t\t\t\t\tthis.feature.optionsSchema,\n\t\t\t\t\toptions\n\t\t\t\t)\n\n\t\t\t\tinstallOptions = { ...installOptions, ...answers }\n\t\t\t}\n\t\t}\n\t\treturn installOptions\n\t}\n\n\tpublic async askAboutMissingActionOptions(\n\t\taction: FeatureAction<Schema>,\n\t\toptions: (Record<string, any> & FeatureCommandExecuteOptions<F>) | undefined\n\t) {\n\t\tlet answers\n\n\t\tconst schema = action.optionsSchema\n\t\tif (schema) {\n\t\t\tanswers = await this.collectAnswers(schema, options)\n\t\t}\n\t\treturn answers\n\t}\n\n\tpublic async installOurFeature(installOptions: Record<string, any>) {\n\t\tif (!this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode: this.feature.code,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${this.feature.code}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tlet isFirstUpdate = true\n\n\t\tconst installResults = await this.featureInstaller.install({\n\t\t\tinstallFeatureDependencies: false,\n\t\t\tfeatures: [\n\t\t\t\t{\n\t\t\t\t\tcode: this.feature.code as any,\n\t\t\t\t\toptions: installOptions as any,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdidUpdateHandler: (message) => {\n\t\t\t\tif (isFirstUpdate) {\n\t\t\t\t\tthis.renderHeading(this.feature.code)\n\t\t\t\t\tisFirstUpdate = false\n\t\t\t\t}\n\t\t\t\tthis.ui.startLoading(message)\n\t\t\t},\n\t\t})\n\n\t\tthis.ui.stopLoading()\n\n\t\treturn installResults\n\t}\n\n\tprivate renderHeading(code: string) {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero(CLI_HERO)\n\t\tthis.ui.renderHeadline(`Installing ${code} feature...`)\n\t}\n\n\tprivate async installOrMarkAsSkippedMissingDependency(\n\t\ttoInstall: FeatureDependencyWithFeature\n\t): Promise<FeatureInstallResponse> {\n\t\tconst { feature, isRequired } = toInstall\n\n\t\tif (isRequired) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`Install the ${feature.nameReadable} feature?`\n\t\t\t)\n\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'COMMAND_ABORTED',\n\t\t\t\t\tcommand: this.getCommandName(),\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\tconst response = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tdefaultValue: 'yes',\n\t\t\t\tlabel: `Install the ${feature.nameReadable} feature? (optional)`,\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\n\t\t\tif (response !== 'yes') {\n\t\t\t\tthis.ui.renderLine(\n\t\t\t\t\tresponse === 'alwaysSkip'\n\t\t\t\t\t\t? 'Skipping forever!'\n\t\t\t\t\t\t: 'Cool, skipping for now.'\n\t\t\t\t)\n\n\t\t\t\tif (response === 'skip') {\n\t\t\t\t\tthis.featureInstaller.markAsSkippedThisRun(feature.code)\n\t\t\t\t} else {\n\t\t\t\t\tthis.featureInstaller.markAsPermanentlySkipped(feature.code)\n\t\t\t\t}\n\n\t\t\t\tconst installResponse: FeatureInstallResponse = {}\n\t\t\t\treturn installResponse\n\t\t\t}\n\t\t}\n\n\t\tlet installOptions = {}\n\n\t\tif (feature.optionsSchema) {\n\t\t\tinstallOptions = await this.collectAnswers(\n\t\t\t\tfeature.optionsSchema,\n\t\t\t\tundefined\n\t\t\t)\n\t\t}\n\n\t\tif (!this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode: this.feature.code,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${this.feature.code}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tlet isFirstUpdate = true\n\n\t\tconst installResults = await this.featureInstaller.install({\n\t\t\tinstallFeatureDependencies: false,\n\t\t\tdidUpdateHandler: (message: string) => {\n\t\t\t\tif (isFirstUpdate) {\n\t\t\t\t\tthis.renderHeading(this.feature.code)\n\t\t\t\t\tisFirstUpdate = false\n\t\t\t\t}\n\t\t\t\tthis.ui.startLoading(message)\n\t\t\t},\n\t\t\tfeatures: [\n\t\t\t\t{\n\t\t\t\t\tcode: feature.code as any,\n\t\t\t\t\toptions: installOptions as any,\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\tthis.ui.stopLoading()\n\n\t\treturn installResults\n\t}\n\n\tprivate async collectAnswers<S extends Schema>(\n\t\tschema: S,\n\t\toptions: FeatureCommandExecuteOptions<F, S> | undefined\n\t) {\n\t\tconst cleaned: Record<string, any> = {}\n\t\tObject.keys(options ?? {}).forEach((key) => {\n\t\t\t//@ts-ignore\n\t\t\tif (typeof options[key] !== 'undefined') {\n\t\t\t\t//@ts-ignore\n\t\t\t\tcleaned[key] = options[key]\n\t\t\t}\n\t\t})\n\n\t\tconst fieldNames = Object.keys(schema.fields ?? {})\n\t\tconst providedFieldNames = cleaned ? Object.keys(cleaned ?? {}) : []\n\t\tconst fieldsToPresent = fieldNames.filter(\n\t\t\t(name) =>\n\t\t\t\tprovidedFieldNames.indexOf(name) === -1 &&\n\t\t\t\tschema.fields?.[name].isRequired === true &&\n\t\t\t\tschema.fields?.[name].isPrivate !== true\n\t\t)\n\n\t\tlet answers = {}\n\t\tif (fieldsToPresent.length > 0) {\n\t\t\tconst featureForm = new FormComponent<S>({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema,\n\t\t\t\t//@ts-ignore\n\t\t\t\tinitialValues: cleaned,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler.bind(\n\t\t\t\t\tformUtil\n\t\t\t\t) as any,\n\t\t\t})\n\n\t\t\tanswers = await featureForm.present({\n\t\t\t\tshowOverview: false,\n\t\t\t\t// @ts-ignore\n\t\t\t\tfields: fieldsToPresent,\n\t\t\t})\n\t\t}\n\n\t\treturn { ...(cleaned ?? {}), ...answers } as SchemaValues<S>\n\t}\n\n\tprivate getCommandName() {\n\t\treturn featuresUtil.generateCommand(this.feature.code, this.actionCode)\n\t}\n\n\tprivate generateConfirmInstallMessage(\n\t\tnotInstalled: FeatureDependencyWithFeature[]\n\t): string {\n\t\tconst required: FeatureDependencyWithFeature[] = []\n\t\tconst optional: FeatureDependencyWithFeature[] = []\n\n\t\tnotInstalled.forEach((feat) => {\n\t\t\tif (feat.isRequired) {\n\t\t\t\trequired.push(feat)\n\t\t\t} else {\n\t\t\t\toptional.push(feat)\n\t\t\t}\n\t\t})\n\n\t\tconst requiredMessage = `I'll need to install ${required.length} feature${s(\n\t\t\trequired\n\t\t)}.`\n\n\t\tconst optionalMessage = `there ${areIs(optional)} ${\n\t\t\toptional.length\n\t\t} optional feature${s(optional)} that could be installed.`\n\n\t\tconst mixedMessage = `I found ${required.length} required and ${\n\t\t\toptional.length\n\t\t} optional feature${s(optional)} to install.`\n\n\t\tlet message = mixedMessage\n\n\t\tif (optional.length === 0) {\n\t\t\tmessage = requiredMessage\n\t\t} else if (optional.length > 0 && required.length === 0) {\n\t\t\tmessage = optionalMessage\n\t\t}\n\n\t\treturn `Before you can run \\`${this.getCommandName()}\\`, ${message} Don't worry, I'll walk you through it!`\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ActionQuestionAsker.js","names":["ActionOptionAsker","options","ui","featureInstaller","actionCode","feature","shouldAutoHandleDependencies","getDependenciesNotInstalled","notInstalled","response","installCount","length","renderLine","generateConfirmInstallMessage","toInstall","shift","Error","isInstalled","code","wasInstalled","isMarkedAsSkipped","installOrMarkAsSkippedMissingDependency","installResults","merge","clear","waitForEnter","getCommandName","dependencies","getFeatureDependencies","Promise","all","map","dependency","getFeature","installedStatuses","filter","installOptions","optionsSchema","collectAnswers","answers","action","schema","SpruceError","featureCode","friendlyMessage","isFirstUpdate","install","installFeatureDependencies","features","didUpdateHandler","message","renderHeading","startLoading","stopLoading","renderHero","CLI_HERO","renderHeadline","isRequired","confirm","nameReadable","command","prompt","type","defaultValue","label","choices","value","markAsSkippedThisRun","markAsPermanentlySkipped","installResponse","undefined","cleaned","Object","keys","forEach","key","fieldNames","fields","providedFieldNames","fieldsToPresent","name","indexOf","isPrivate","featureForm","FormComponent","initialValues","onWillAskQuestion","formUtil","onWillAskQuestionHandler","bind","present","showOverview","featuresUtil","generateCommand","required","optional","feat","push","requiredMessage","s","optionalMessage","areIs","mixedMessage","array"],"sources":["../../src/features/ActionQuestionAsker.ts"],"sourcesContent":["import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'\nimport merge from 'lodash/merge'\nimport FormComponent from '../components/FormComponent'\nimport { CLI_HERO } from '../constants'\nimport SpruceError from '../errors/SpruceError'\nimport { GraphicsInterface } from '../types/cli.types'\nimport formUtil from '../utilities/form.utility'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport featuresUtil from './feature.utilities'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureMap,\n} from './features.types'\n\nexport default class ActionOptionAsker<F extends FeatureCode = FeatureCode> {\n\tprivate ui: GraphicsInterface\n\tprivate featureInstaller: FeatureInstaller\n\tprivate actionCode: string\n\tprivate feature: AbstractFeature\n\tprivate shouldAutoHandleDependencies = true\n\n\tpublic constructor(options: {\n\t\tui: GraphicsInterface\n\t\tfeatureInstaller: FeatureInstaller\n\t\tactionCode: string\n\t\tfeature: AbstractFeature\n\t\tshouldAutoHandleDependencies: boolean\n\t}) {\n\t\tthis.ui = options.ui\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.actionCode = options.actionCode\n\t\tthis.feature = options.feature\n\t\tthis.shouldAutoHandleDependencies = options.shouldAutoHandleDependencies\n\t}\n\n\tpublic async installOrMarkAsSkippedMissingDependencies(): Promise<FeatureInstallResponse> {\n\t\tconst notInstalled = await this.getDependenciesNotInstalled()\n\n\t\tlet response: FeatureInstallResponse = {}\n\t\tlet installCount = 0\n\n\t\tif (notInstalled.length > 0) {\n\t\t\tthis.ui.renderLine(\n\t\t\t\tthis.generateConfirmInstallMessage(notInstalled) + '\\n'\n\t\t\t)\n\n\t\t\twhile (notInstalled.length > 0) {\n\t\t\t\tconst toInstall = notInstalled.shift()\n\t\t\t\tif (!toInstall) {\n\t\t\t\t\t// for typescript\n\t\t\t\t\tthrow new Error('Dependent feature error')\n\t\t\t\t}\n\n\t\t\t\tconst wasInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t\ttoInstall.code\n\t\t\t\t)\n\n\t\t\t\tif (\n\t\t\t\t\t!wasInstalled &&\n\t\t\t\t\t!this.featureInstaller.isMarkedAsSkipped(toInstall.code)\n\t\t\t\t) {\n\t\t\t\t\tconst installResults =\n\t\t\t\t\t\tawait this.installOrMarkAsSkippedMissingDependency(toInstall)\n\t\t\t\t\tresponse = merge(response, installResults)\n\t\t\t\t\tinstallCount++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (installCount > 0) {\n\t\t\t\tthis.ui.clear()\n\n\t\t\t\tawait this.ui.waitForEnter(\n\t\t\t\t\t`Phew, now that we're done with that, lets get back to ${this.getCommandName()}!`\n\t\t\t\t)\n\n\t\t\t\tthis.ui.clear()\n\t\t\t}\n\t\t}\n\n\t\treturn response\n\t}\n\n\tprivate async getDependenciesNotInstalled(): Promise<\n\t\tFeatureDependencyWithFeature[]\n\t> {\n\t\tconst dependencies = this.featureInstaller.getFeatureDependencies(\n\t\t\tthis.feature.code\n\t\t)\n\n\t\tconst installedStatuses = await Promise.all(\n\t\t\tdependencies.map(async (dependency) => {\n\t\t\t\tconst feature = this.featureInstaller.getFeature(dependency.code)\n\n\t\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\t\tdependency.code\n\t\t\t\t)\n\n\t\t\t\tconst isMarkedAsSkipped = this.featureInstaller.isMarkedAsSkipped(\n\t\t\t\t\tfeature.code\n\t\t\t\t)\n\n\t\t\t\tif (isMarkedAsSkipped) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\n\t\t\t\treturn !isInstalled ? { feature, ...dependency } : null\n\t\t\t})\n\t\t)\n\n\t\tconst notInstalled = installedStatuses.filter(\n\t\t\t(feature) => !!feature\n\t\t) as FeatureDependencyWithFeature[]\n\n\t\treturn notInstalled\n\t}\n\n\tpublic async askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\tisInstalled: boolean,\n\t\toptions: (Record<string, any> & FeatureCommandExecuteOptions<F>) | undefined\n\t) {\n\t\tlet installOptions = { ...options }\n\n\t\tif (!isInstalled) {\n\t\t\tif (this.feature.optionsSchema) {\n\t\t\t\tconst answers = await this.collectAnswers(\n\t\t\t\t\tthis.feature.optionsSchema,\n\t\t\t\t\toptions\n\t\t\t\t)\n\n\t\t\t\tinstallOptions = { ...installOptions, ...answers }\n\t\t\t}\n\t\t}\n\t\treturn installOptions\n\t}\n\n\tpublic async askAboutMissingActionOptions(\n\t\taction: FeatureAction<Schema>,\n\t\toptions: (Record<string, any> & FeatureCommandExecuteOptions<F>) | undefined\n\t) {\n\t\tlet answers\n\n\t\tconst schema = action.optionsSchema\n\t\tif (schema) {\n\t\t\tanswers = await this.collectAnswers(schema, options)\n\t\t}\n\t\treturn answers\n\t}\n\n\tpublic async installOurFeature(installOptions: Record<string, any>) {\n\t\tif (!this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode: this.feature.code,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${this.feature.code}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tlet isFirstUpdate = true\n\n\t\tconst installResults = await this.featureInstaller.install({\n\t\t\tinstallFeatureDependencies: false,\n\t\t\tfeatures: [\n\t\t\t\t{\n\t\t\t\t\tcode: this.feature.code as any,\n\t\t\t\t\toptions: installOptions as any,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdidUpdateHandler: (message) => {\n\t\t\t\tif (isFirstUpdate) {\n\t\t\t\t\tthis.renderHeading(this.feature.code)\n\t\t\t\t\tisFirstUpdate = false\n\t\t\t\t}\n\t\t\t\tthis.ui.startLoading(message)\n\t\t\t},\n\t\t})\n\n\t\tthis.ui.stopLoading()\n\n\t\treturn installResults\n\t}\n\n\tprivate renderHeading(code: string) {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero(CLI_HERO)\n\t\tthis.ui.renderHeadline(`Installing ${code} feature...`)\n\t}\n\n\tprivate async installOrMarkAsSkippedMissingDependency(\n\t\ttoInstall: FeatureDependencyWithFeature\n\t): Promise<FeatureInstallResponse> {\n\t\tconst { feature, isRequired } = toInstall\n\n\t\tif (isRequired) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`Install the ${feature.nameReadable} feature?`\n\t\t\t)\n\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'COMMAND_ABORTED',\n\t\t\t\t\tcommand: this.getCommandName(),\n\t\t\t\t})\n\t\t\t}\n\t\t} else {\n\t\t\tconst response = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tdefaultValue: 'yes',\n\t\t\t\tlabel: `Install the ${feature.nameReadable} feature? (optional)`,\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\n\t\t\tif (response !== 'yes') {\n\t\t\t\tthis.ui.renderLine(\n\t\t\t\t\tresponse === 'alwaysSkip'\n\t\t\t\t\t\t? 'Skipping forever!'\n\t\t\t\t\t\t: 'Cool, skipping for now.'\n\t\t\t\t)\n\n\t\t\t\tif (response === 'skip') {\n\t\t\t\t\tthis.featureInstaller.markAsSkippedThisRun(feature.code)\n\t\t\t\t} else {\n\t\t\t\t\tthis.featureInstaller.markAsPermanentlySkipped(feature.code)\n\t\t\t\t}\n\n\t\t\t\tconst installResponse: FeatureInstallResponse = {}\n\t\t\t\treturn installResponse\n\t\t\t}\n\t\t}\n\n\t\tlet installOptions = {}\n\n\t\tif (feature.optionsSchema) {\n\t\t\tinstallOptions = await this.collectAnswers(\n\t\t\t\tfeature.optionsSchema,\n\t\t\t\tundefined\n\t\t\t)\n\t\t}\n\n\t\tif (!this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode: this.feature.code,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${this.feature.code}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tlet isFirstUpdate = true\n\n\t\tconst installResults = await this.featureInstaller.install({\n\t\t\tinstallFeatureDependencies: false,\n\t\t\tdidUpdateHandler: (message: string) => {\n\t\t\t\tif (isFirstUpdate) {\n\t\t\t\t\tthis.renderHeading(this.feature.code)\n\t\t\t\t\tisFirstUpdate = false\n\t\t\t\t}\n\t\t\t\tthis.ui.startLoading(message)\n\t\t\t},\n\t\t\tfeatures: [\n\t\t\t\t{\n\t\t\t\t\tcode: feature.code as any,\n\t\t\t\t\toptions: installOptions as any,\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\n\t\tthis.ui.stopLoading()\n\n\t\treturn installResults\n\t}\n\n\tprivate async collectAnswers<S extends Schema>(\n\t\tschema: S,\n\t\toptions: FeatureCommandExecuteOptions<F, S> | undefined\n\t) {\n\t\tconst cleaned: Record<string, any> = {}\n\t\tObject.keys(options ?? {}).forEach((key) => {\n\t\t\t//@ts-ignore\n\t\t\tif (typeof options[key] !== 'undefined') {\n\t\t\t\t//@ts-ignore\n\t\t\t\tcleaned[key] = options[key]\n\t\t\t}\n\t\t})\n\n\t\tconst fieldNames = Object.keys(schema.fields ?? {})\n\t\tconst providedFieldNames = cleaned ? Object.keys(cleaned ?? {}) : []\n\t\tconst fieldsToPresent = fieldNames.filter(\n\t\t\t(name) =>\n\t\t\t\tprovidedFieldNames.indexOf(name) === -1 &&\n\t\t\t\tschema.fields?.[name].isRequired === true &&\n\t\t\t\tschema.fields?.[name].isPrivate !== true\n\t\t)\n\n\t\tlet answers = {}\n\t\tif (fieldsToPresent.length > 0) {\n\t\t\tconst featureForm = new FormComponent<S>({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema,\n\t\t\t\t//@ts-ignore\n\t\t\t\tinitialValues: cleaned,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler.bind(\n\t\t\t\t\tformUtil\n\t\t\t\t) as any,\n\t\t\t})\n\n\t\t\tanswers = await featureForm.present({\n\t\t\t\tshowOverview: false,\n\t\t\t\t// @ts-ignore\n\t\t\t\tfields: fieldsToPresent,\n\t\t\t})\n\t\t}\n\n\t\treturn { ...(cleaned ?? {}), ...answers } as SchemaValues<S>\n\t}\n\n\tprivate getCommandName() {\n\t\treturn featuresUtil.generateCommand(this.feature.code, this.actionCode)\n\t}\n\n\tprivate generateConfirmInstallMessage(\n\t\tnotInstalled: FeatureDependencyWithFeature[]\n\t): string {\n\t\tconst required: FeatureDependencyWithFeature[] = []\n\t\tconst optional: FeatureDependencyWithFeature[] = []\n\n\t\tnotInstalled.forEach((feat) => {\n\t\t\tif (feat.isRequired) {\n\t\t\t\trequired.push(feat)\n\t\t\t} else {\n\t\t\t\toptional.push(feat)\n\t\t\t}\n\t\t})\n\n\t\tconst requiredMessage = `I'll need to install ${required.length} feature${s(\n\t\t\trequired\n\t\t)}.`\n\n\t\tconst optionalMessage = `there ${areIs(optional)} ${\n\t\t\toptional.length\n\t\t} optional feature${s(optional)} that could be installed.`\n\n\t\tconst mixedMessage = `I found ${required.length} required and ${\n\t\t\toptional.length\n\t\t} optional feature${s(optional)} to install.`\n\n\t\tlet message = mixedMessage\n\n\t\tif (optional.length === 0) {\n\t\t\tmessage = requiredMessage\n\t\t} else if (optional.length > 0 && required.length === 0) {\n\t\t\tmessage = optionalMessage\n\t\t}\n\n\t\treturn `Before you can run \\`${this.getCommandName()}\\`, ${message} Don't worry, I'll walk you through it!`\n\t}\n}\n\ntype FeatureCommandExecuteOptions<\n\tF extends FeatureCode,\n\tS extends Schema | undefined = FeatureMap[F]['optionsSchema']\n> = S extends Schema ? SchemaPartialValues<S> : undefined\n\ntype FeatureDependencyWithFeature = FeatureDependency & {\n\tfeature: AbstractFeature\n}\n\nfunction s(array: any[]) {\n\treturn array.length === 1 ? '' : ''\n}\n\nfunction areIs(array: any[]) {\n\treturn array.length === 1 ? 'is' : 'are'\n}\n"],"mappings":"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"}