@sprucelabs/spruce-cli 18.1.8 → 18.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/CHANGELOG.md +12 -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/SkillEmitsBootEvents.test.d.ts +1 -0
  35. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js +16 -9
  36. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
  37. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.d.ts +2 -2
  38. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js +7 -7
  39. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js.map +1 -1
  40. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.d.ts +6 -0
  41. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js +85 -0
  42. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js.map +1 -0
  43. package/build/__tests__/behavioral/permissions/PermissionStore.test.d.ts +12 -2
  44. package/build/__tests__/behavioral/permissions/PermissionStore.test.js +248 -36
  45. package/build/__tests__/behavioral/permissions/PermissionStore.test.js.map +1 -1
  46. package/build/__tests__/behavioral/permissions/PermissionWriter.test.d.ts +5 -0
  47. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js +88 -0
  48. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js.map +1 -0
  49. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.d.ts +15 -4
  50. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js +325 -28
  51. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js.map +1 -1
  52. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.d.ts +11 -0
  53. package/build/__tests__/behavioral/permissions/{AbstractPermissionsTest.js → support/AbstractPermissionsTest.js} +34 -2
  54. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.js.map +1 -0
  55. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.d.ts +1 -0
  56. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js +11 -0
  57. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js.map +1 -0
  58. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.d.ts +1 -0
  59. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js +17 -0
  60. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js.map +1 -0
  61. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.d.ts +5 -0
  62. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js +10 -0
  63. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js.map +1 -0
  64. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.d.ts +1 -1
  65. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js +46 -46
  66. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js.map +1 -1
  67. package/build/__tests__/behavioral/tests/CreatingATest.test.js +2 -2
  68. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  69. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js +7 -3
  70. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
  71. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js +2 -2
  72. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
  73. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js +1 -1
  74. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js.map +1 -1
  75. package/build/__tests__/implementation/ActionExecuter2.test.d.ts +1 -1
  76. package/build/__tests__/implementation/ActionExecuter2.test.js +23 -11
  77. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  78. package/build/__tests__/implementation/GlobalEmitter.test.d.ts +1 -0
  79. package/build/__tests__/implementation/GlobalEmitter.test.js +40 -3
  80. package/build/__tests__/implementation/GlobalEmitter.test.js.map +1 -1
  81. package/build/__tests__/implementation/SkillStore.test.js +3 -4
  82. package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
  83. package/build/__tests__/support/EventFaker.d.ts +5 -0
  84. package/build/__tests__/support/EventFaker.js +48 -0
  85. package/build/__tests__/support/EventFaker.js.map +1 -0
  86. package/build/features/AbstractAction.d.ts +1 -1
  87. package/build/features/AbstractAction.js.map +1 -1
  88. package/build/features/AbstractFeature.d.ts +3 -3
  89. package/build/features/AbstractFeature.js +8 -8
  90. package/build/features/AbstractFeature.js.map +1 -1
  91. package/build/features/ActionExecuter.d.ts +1 -1
  92. package/build/features/ActionExecuter.js +3 -4
  93. package/build/features/ActionExecuter.js.map +1 -1
  94. package/build/features/ActionFactory.d.ts +12 -5
  95. package/build/features/ActionFactory.js +27 -6
  96. package/build/features/ActionFactory.js.map +1 -1
  97. package/build/features/ActionQuestionAsker.d.ts +1 -1
  98. package/build/features/ActionQuestionAsker.js +6 -6
  99. package/build/features/ActionQuestionAsker.js.map +1 -1
  100. package/build/features/conversation/ConversationFeature.js +1 -1
  101. package/build/features/conversation/ConversationFeature.js.map +1 -1
  102. package/build/features/dependencies/DependencyFeature.js +1 -1
  103. package/build/features/dependencies/DependencyFeature.js.map +1 -1
  104. package/build/features/deploy/actions/HerokuAction.js +31 -33
  105. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  106. package/build/features/error/ErrorFeature.js +4 -4
  107. package/build/features/error/ErrorFeature.js.map +1 -1
  108. package/build/features/event/EventFeature.d.ts +8 -8
  109. package/build/features/event/EventFeature.js +7 -4
  110. package/build/features/event/EventFeature.js.map +1 -1
  111. package/build/features/event/actions/CreateAction.js.map +1 -1
  112. package/build/features/event/actions/ListenAction.js.map +1 -1
  113. package/build/features/event/stores/EventStore.d.ts +9 -9
  114. package/build/features/event/stores/EventStore.js +26 -26
  115. package/build/features/event/stores/EventStore.js.map +1 -1
  116. package/build/features/eventContract/EventContractFeature.js +4 -1
  117. package/build/features/eventContract/EventContractFeature.js.map +1 -1
  118. package/build/features/eventContract/actions/PullAction.js +10 -5
  119. package/build/features/eventContract/actions/PullAction.js.map +1 -1
  120. package/build/features/features.types.d.ts +2 -37
  121. package/build/features/features.types.js +0 -41
  122. package/build/features/features.types.js.map +1 -1
  123. package/build/features/log/LogFeature.js +1 -1
  124. package/build/features/log/LogFeature.js.map +1 -1
  125. package/build/features/node/NodeFeature.js.map +1 -1
  126. package/build/features/organization/actions/InstallAction.js.map +1 -1
  127. package/build/features/permission/PermissionFeature.d.ts +12 -2
  128. package/build/features/permission/PermissionFeature.js +140 -15
  129. package/build/features/permission/PermissionFeature.js.map +1 -1
  130. package/build/features/permission/actions/CreateAction.js +4 -1
  131. package/build/features/permission/actions/CreateAction.js.map +1 -1
  132. package/build/features/permission/actions/SyncAction.d.ts +5 -1
  133. package/build/features/permission/actions/SyncAction.js +28 -10
  134. package/build/features/permission/actions/SyncAction.js.map +1 -1
  135. package/build/features/permission/stores/PermissionStore.d.ts +7 -1
  136. package/build/features/permission/stores/PermissionStore.js +92 -23
  137. package/build/features/permission/stores/PermissionStore.js.map +1 -1
  138. package/build/features/permission/writers/PermissionWriter.d.ts +7 -1
  139. package/build/features/permission/writers/PermissionWriter.js +66 -17
  140. package/build/features/permission/writers/PermissionWriter.js.map +1 -1
  141. package/build/features/person/PersonFeature.js +1 -1
  142. package/build/features/person/PersonFeature.js.map +1 -1
  143. package/build/features/sandbox/SandboxFeature.js +1 -1
  144. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  145. package/build/features/schema/SchemaFeature.d.ts +8 -8
  146. package/build/features/schema/SchemaFeature.js +4 -4
  147. package/build/features/schema/SchemaFeature.js.map +1 -1
  148. package/build/features/schema/writers/SchemaWriter.d.ts +12 -12
  149. package/build/features/schema/writers/SchemaWriter.js.map +1 -1
  150. package/build/features/skill/SkillFeature.d.ts +11 -11
  151. package/build/features/skill/SkillFeature.js +2 -2
  152. package/build/features/skill/SkillFeature.js.map +1 -1
  153. package/build/features/skill/actions/RebuildAction.js.map +1 -1
  154. package/build/features/skill/actions/RegisterAction.js.map +1 -1
  155. package/build/features/skill/stores/SkillStore.js +1 -2
  156. package/build/features/skill/stores/SkillStore.js.map +1 -1
  157. package/build/features/store/StoreFeature.js +1 -1
  158. package/build/features/store/StoreFeature.js.map +1 -1
  159. package/build/features/store/actions/SyncAction.d.ts +1 -1
  160. package/build/features/store/actions/SyncAction.js.map +1 -1
  161. package/build/features/test/TestFeature.js +1 -1
  162. package/build/features/test/TestFeature.js.map +1 -1
  163. package/build/features/view/ViewFeature.js +1 -1
  164. package/build/features/view/ViewFeature.js.map +1 -1
  165. package/build/schemas/v2020_07_22/actionResponse.builder.d.ts +85 -0
  166. package/build/schemas/v2020_07_22/actionResponse.builder.js +70 -0
  167. package/build/schemas/v2020_07_22/actionResponse.builder.js.map +1 -0
  168. package/build/schemas/v2020_07_22/generatedFile.builder.d.ts +27 -0
  169. package/build/schemas/v2020_07_22/generatedFile.builder.js +45 -0
  170. package/build/schemas/v2020_07_22/generatedFile.builder.js.map +1 -0
  171. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js +4 -40
  172. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js.map +1 -1
  173. package/build/services/CommandService.d.ts +2 -2
  174. package/build/services/CommandService.js +6 -6
  175. package/build/services/CommandService.js.map +1 -1
  176. package/build/services/PkgService.d.ts +1 -0
  177. package/build/services/PkgService.js +5 -0
  178. package/build/services/PkgService.js.map +1 -1
  179. package/build/tests/AbstractCliTest.d.ts +7 -3
  180. package/build/tests/AbstractCliTest.js +81 -45
  181. package/build/tests/AbstractCliTest.js.map +1 -1
  182. package/build/tests/buildTestCache.js +7 -0
  183. package/build/tests/buildTestCache.js.map +1 -1
  184. package/build/tests/fixtures/FeatureFixture.js +1 -0
  185. package/build/tests/fixtures/FeatureFixture.js.map +1 -1
  186. package/build/tests/utilities/test.utility.d.ts +2 -0
  187. package/build/tests/utilities/test.utility.js +6 -0
  188. package/build/tests/utilities/test.utility.js.map +1 -1
  189. package/node_modules/@typescript-eslint/parser/package.json +6 -6
  190. package/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js +9 -9
  191. package/node_modules/@typescript-eslint/scope-manager/dist/ScopeManager.js.map +1 -1
  192. package/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts +1 -1
  193. package/node_modules/@typescript-eslint/scope-manager/dist/definition/Definition.d.ts.map +1 -1
  194. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.d.ts.map +1 -1
  195. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.d.ts.map +1 -1
  196. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js +1 -0
  197. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.iterable.js.map +1 -1
  198. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js +21 -7
  199. package/node_modules/@typescript-eslint/scope-manager/dist/lib/dom.js.map +1 -1
  200. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.d.ts.map +1 -1
  201. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.d.ts +3 -0
  202. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.d.ts.map +1 -0
  203. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.js +12 -0
  204. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.intl.js.map +1 -0
  205. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js +2 -1
  206. package/node_modules/@typescript-eslint/scope-manager/dist/lib/es2019.js.map +1 -1
  207. package/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts +1 -0
  208. package/node_modules/@typescript-eslint/scope-manager/dist/lib/index.d.ts.map +1 -1
  209. package/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js +2 -0
  210. package/node_modules/@typescript-eslint/scope-manager/dist/lib/index.js.map +1 -1
  211. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.d.ts.map +1 -1
  212. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.d.ts.map +1 -1
  213. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js +2 -0
  214. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.iterable.js.map +1 -1
  215. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js +39 -1
  216. package/node_modules/@typescript-eslint/scope-manager/dist/lib/webworker.js.map +1 -1
  217. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts +4 -2
  218. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts.map +1 -1
  219. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js +13 -5
  220. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js.map +1 -1
  221. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts +1 -1
  222. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ExportVisitor.d.ts.map +1 -1
  223. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts +2 -2
  224. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.d.ts.map +1 -1
  225. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js +9 -9
  226. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/PatternVisitor.js.map +1 -1
  227. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js +17 -17
  228. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Reference.js.map +1 -1
  229. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts +2 -1
  230. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map +1 -1
  231. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js +3 -0
  232. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map +1 -1
  233. package/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts +1 -1
  234. package/node_modules/@typescript-eslint/scope-manager/dist/scope/Scope.d.ts.map +1 -1
  235. package/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts +1 -1
  236. package/node_modules/@typescript-eslint/scope-manager/dist/scope/ScopeBase.d.ts.map +1 -1
  237. package/node_modules/@typescript-eslint/scope-manager/package.json +12 -12
  238. package/node_modules/@typescript-eslint/types/_ts3.4/dist/generated/ast-spec.d.ts +27 -3
  239. package/node_modules/@typescript-eslint/types/_ts3.4/dist/lib.d.ts +1 -1
  240. package/node_modules/@typescript-eslint/types/_ts3.4/dist/parser-options.d.ts +3 -3
  241. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +27 -3
  242. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts.map +1 -1
  243. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js +3 -0
  244. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js.map +1 -1
  245. package/node_modules/@typescript-eslint/types/dist/lib.d.ts +1 -1
  246. package/node_modules/@typescript-eslint/types/dist/lib.d.ts.map +1 -1
  247. package/node_modules/@typescript-eslint/types/dist/parser-options.d.ts +3 -3
  248. package/node_modules/@typescript-eslint/types/dist/parser-options.d.ts.map +1 -1
  249. package/node_modules/@typescript-eslint/types/package.json +3 -3
  250. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/create-program/shared.d.ts +1 -1
  251. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/parseSettings/index.d.ts +2 -2
  252. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/parser-options.d.ts +1 -1
  253. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/parser.d.ts +1 -1
  254. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/simple-traverse.d.ts +1 -1
  255. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/estree-to-ts-node-types.d.ts +4 -1
  256. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/ts-nodes.d.ts +4 -2
  257. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map +1 -1
  258. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js +22 -3
  259. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map +1 -1
  260. package/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.d.ts.map +1 -1
  261. package/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js +9 -0
  262. package/node_modules/@typescript-eslint/typescript-estree/dist/create-program/createWatchProgram.js.map +1 -1
  263. package/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts +1 -1
  264. package/node_modules/@typescript-eslint/typescript-estree/dist/create-program/shared.d.ts.map +1 -1
  265. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.d.ts +2 -2
  266. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/index.d.ts.map +1 -1
  267. package/node_modules/@typescript-eslint/typescript-estree/dist/parseSettings/warnAboutTSVersion.js +1 -1
  268. package/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts +1 -1
  269. package/node_modules/@typescript-eslint/typescript-estree/dist/parser-options.d.ts.map +1 -1
  270. package/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts +1 -1
  271. package/node_modules/@typescript-eslint/typescript-estree/dist/parser.d.ts.map +1 -1
  272. package/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts +1 -1
  273. package/node_modules/@typescript-eslint/typescript-estree/dist/simple-traverse.d.ts.map +1 -1
  274. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts +4 -1
  275. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map +1 -1
  276. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts +4 -2
  277. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map +1 -1
  278. package/node_modules/@typescript-eslint/typescript-estree/package.json +6 -6
  279. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map +1 -1
  280. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js +63 -48
  281. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map +1 -1
  282. package/node_modules/@typescript-eslint/visitor-keys/package.json +4 -4
  283. package/package.json +65 -33
  284. package/src/.spruce/events/events.contract.ts +24 -0
  285. package/src/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.ts +54 -0
  286. package/src/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.ts +79 -0
  287. package/src/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.ts +48 -0
  288. package/src/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.ts +13 -0
  289. package/src/.spruce/schemas/schemas.types.ts +171 -52
  290. package/src/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.ts +58 -0
  291. package/src/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.ts +33 -0
  292. package/src/.spruce/settings.json +2 -1
  293. package/src/GlobalEmitter.ts +2 -7
  294. package/src/__tests__/behavioral/TestingAConversation.test.ts +20 -37
  295. package/src/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.ts +14 -2
  296. package/src/__tests__/behavioral/events/SkillEmitsBootEvents.test.ts +6 -0
  297. package/src/__tests__/behavioral/permissions/CreatingPermissions.test.ts +2 -2
  298. package/src/__tests__/behavioral/permissions/PermissionPlugin.test.ts +24 -0
  299. package/src/__tests__/behavioral/permissions/PermissionStore.test.ts +204 -23
  300. package/src/__tests__/behavioral/permissions/PermissionWriter.test.ts +23 -0
  301. package/src/__tests__/behavioral/permissions/SyncingPermissions.test.ts +125 -8
  302. package/src/__tests__/behavioral/permissions/support/AbstractPermissionsTest.ts +38 -0
  303. package/src/__tests__/behavioral/permissions/support/generateShortAlphaId.ts +5 -0
  304. package/src/__tests__/behavioral/permissions/support/renderPermissionTestFile.ts +27 -0
  305. package/src/__tests__/behavioral/permissions/support/sortPermissionContracts.ts +3 -0
  306. package/src/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.ts +12 -12
  307. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +2 -2
  308. package/src/__tests__/behavioral/upgrading/UpgradingANodeModule.test.ts +3 -0
  309. package/src/__tests__/behavioral/upgrading/UpgradingASkill3.test.ts +3 -2
  310. package/src/__tests__/behavioral/upgrading/UpgradingASkill4.test.ts +1 -1
  311. package/src/__tests__/implementation/ActionExecuter2.test.ts +13 -6
  312. package/src/__tests__/implementation/GlobalEmitter.test.ts +22 -1
  313. package/src/__tests__/implementation/SkillStore.test.ts +1 -2
  314. package/src/__tests__/support/EventFaker.ts +23 -0
  315. package/src/features/AbstractAction.ts +2 -2
  316. package/src/features/AbstractFeature.ts +8 -8
  317. package/src/features/ActionExecuter.ts +4 -5
  318. package/src/features/ActionFactory.ts +44 -20
  319. package/src/features/ActionQuestionAsker.ts +17 -17
  320. package/src/features/conversation/ConversationFeature.ts +1 -1
  321. package/src/features/dependencies/DependencyFeature.ts +1 -1
  322. package/src/features/deploy/actions/HerokuAction.ts +2 -2
  323. package/src/features/error/ErrorFeature.ts +4 -4
  324. package/src/features/event/EventFeature.ts +15 -14
  325. package/src/features/event/actions/CreateAction.ts +1 -1
  326. package/src/features/event/actions/ListenAction.ts +1 -1
  327. package/src/features/event/stores/EventStore.ts +37 -37
  328. package/src/features/eventContract/EventContractFeature.ts +6 -1
  329. package/src/features/eventContract/actions/PullAction.ts +7 -3
  330. package/src/features/features.types.ts +4 -41
  331. package/src/features/log/LogFeature.ts +1 -1
  332. package/src/features/node/NodeFeature.ts +1 -1
  333. package/src/features/organization/actions/InstallAction.ts +1 -1
  334. package/src/features/permission/PermissionFeature.ts +66 -11
  335. package/src/features/permission/actions/CreateAction.ts +2 -0
  336. package/src/features/permission/actions/SyncAction.ts +22 -3
  337. package/src/features/permission/stores/PermissionStore.ts +44 -3
  338. package/src/features/permission/writers/PermissionWriter.ts +64 -3
  339. package/src/features/person/PersonFeature.ts +1 -1
  340. package/src/features/sandbox/SandboxFeature.ts +1 -3
  341. package/src/features/schema/SchemaFeature.ts +14 -14
  342. package/src/features/schema/writers/SchemaWriter.ts +14 -15
  343. package/src/features/skill/SkillFeature.ts +18 -18
  344. package/src/features/skill/actions/RebuildAction.ts +1 -1
  345. package/src/features/skill/actions/RegisterAction.ts +1 -1
  346. package/src/features/skill/stores/SkillStore.ts +1 -2
  347. package/src/features/store/StoreFeature.ts +1 -1
  348. package/src/features/store/actions/SyncAction.ts +1 -1
  349. package/src/features/test/TestFeature.ts +1 -1
  350. package/src/features/view/ViewFeature.ts +1 -1
  351. package/src/schemas/v2020_07_22/actionResponse.builder.ts +62 -0
  352. package/src/schemas/v2020_07_22/generatedFile.builder.ts +44 -0
  353. package/src/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.ts +3 -46
  354. package/src/services/CommandService.ts +5 -5
  355. package/src/services/PkgService.ts +4 -0
  356. package/src/tests/AbstractCliTest.ts +31 -13
  357. package/src/tests/buildTestCache.ts +7 -0
  358. package/src/tests/fixtures/FeatureFixture.ts +2 -0
  359. package/src/tests/utilities/test.utility.ts +13 -0
  360. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.d.ts +0 -8
  361. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.js.map +0 -1
  362. package/src/__tests__/behavioral/permissions/AbstractPermissionsTest.ts +0 -20
@@ -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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"}
@@ -50,7 +50,7 @@ var ConversationFeature = /*#__PURE__*/function (_AbstractFeature) {
50
50
  switch (_context.prev = _context.next) {
51
51
  case 0:
52
52
  _context.next = 2;
53
- return this.featureInstaller.isInstalled('conversation');
53
+ return this.features.isInstalled('conversation');
54
54
  case 2:
55
55
  isInstalled = _context.sent;
56
56
  if (!(payload.featureCode === 'node' && payload.actionCode === 'upgrade' && isInstalled)) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConversationFeature.js","names":["ConversationFeature","options","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","emitter","on","handleWillExecute","bind","payload","featureInstaller","isInstalled","featureCode","actionCode","writePlugin","files","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/conversation/ConversationFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tconversation: ConversationFeature\n\t}\n}\n\nexport default class ConversationFeature extends AbstractFeature {\n\tpublic nameReadable = 'Conversation'\n\tpublic code: FeatureCode = 'conversation'\n\tpublic description = 'Computers like to talk, too.'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'event', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-conversation-plugin@latest',\n\t\t\tisDev: false,\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tactionCode: string\n\t\tfeatureCode: string\n\t}) {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('conversation')\n\n\t\tif (\n\t\t\tpayload.featureCode === 'node' &&\n\t\t\tpayload.actionCode === 'upgrade' &&\n\t\t\tisInstalled\n\t\t) {\n\t\t\tconst files = await this.writePlugin()\n\t\t\treturn { files }\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async writePlugin() {\n\t\treturn this.Writer('conversation').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAEA;AAI2B;AAAA;AAAA,IASNA,mBAAmB;EAAA;EAAA;EAgBvC,6BAAmBC,OAAuB,EAAE;IAAA;IAAA;IAC3C,0BAAMA,OAAO;IAAC,iGAhBO,cAAc;IAAA,yFACT,cAAc;IAAA,gGACpB,8BAA8B;IAAA,iGAER,CAC1C;MAAEC,IAAI,EAAE,OAAO;MAAEC,UAAU,EAAE;IAAK,CAAC,CACnC;IAAA,wGAC0C,CAC1C;MACCC,IAAI,EAAE,+CAA+C;MACrDC,KAAK,EAAE;IACR,CAAC,CACD;IAAA,+FACmBC,0BAAQ,CAACC,WAAW,CAACC,SAAS,EAAE,SAAS,CAAC;IAK7D,KAAK,MAAKC,OAAO,CAACC,EAAE,CACnB,sBAAsB,EACtB,MAAKC,iBAAiB,CAACC,IAAI,gDAAM,CACjC;IAAA;EACF;EAAC;IAAA;IAAA;MAAA,uGAED,iBAAgCC,OAG/B;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC0B,IAAI,CAACC,gBAAgB,CAACC,WAAW,CAAC,cAAc,CAAC;cAAA;gBAArEA,WAAW;gBAAA,MAGhBF,OAAO,CAACG,WAAW,KAAK,MAAM,IAC9BH,OAAO,CAACI,UAAU,KAAK,SAAS,IAChCF,WAAW;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAES,IAAI,CAACG,WAAW,EAAE;cAAA;gBAAhCC,KAAK;gBAAA,iCACJ;kBAAEA,KAAK,EAALA;gBAAM,CAAC;cAAA;gBAAA,iCAGV,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACT;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,yGAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,IAAI,CAACD,WAAW,EAAE;cAAA;gBAAhCC,KAAK;gBAAA,kCAEJ;kBACNA,KAAK,EAALA;gBACD,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,iGAED;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,IAAI,CAACC,MAAM,CAAC,cAAc,CAAC,CAACF,WAAW,CAAC,IAAI,CAACG,GAAG,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACxD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EArD+CC,4BAAe;AAAA"}
1
+ {"version":3,"file":"ConversationFeature.js","names":["ConversationFeature","options","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","emitter","on","handleWillExecute","bind","payload","features","isInstalled","featureCode","actionCode","writePlugin","files","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/conversation/ConversationFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tconversation: ConversationFeature\n\t}\n}\n\nexport default class ConversationFeature extends AbstractFeature {\n\tpublic nameReadable = 'Conversation'\n\tpublic code: FeatureCode = 'conversation'\n\tpublic description = 'Computers like to talk, too.'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'event', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-conversation-plugin@latest',\n\t\t\tisDev: false,\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tactionCode: string\n\t\tfeatureCode: string\n\t}) {\n\t\tconst isInstalled = await this.features.isInstalled('conversation')\n\n\t\tif (\n\t\t\tpayload.featureCode === 'node' &&\n\t\t\tpayload.actionCode === 'upgrade' &&\n\t\t\tisInstalled\n\t\t) {\n\t\t\tconst files = await this.writePlugin()\n\t\t\treturn { files }\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async writePlugin() {\n\t\treturn this.Writer('conversation').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAEA;AAI2B;AAAA;AAAA,IASNA,mBAAmB;EAAA;EAAA;EAgBvC,6BAAmBC,OAAuB,EAAE;IAAA;IAAA;IAC3C,0BAAMA,OAAO;IAAC,iGAhBO,cAAc;IAAA,yFACT,cAAc;IAAA,gGACpB,8BAA8B;IAAA,iGAER,CAC1C;MAAEC,IAAI,EAAE,OAAO;MAAEC,UAAU,EAAE;IAAK,CAAC,CACnC;IAAA,wGAC0C,CAC1C;MACCC,IAAI,EAAE,+CAA+C;MACrDC,KAAK,EAAE;IACR,CAAC,CACD;IAAA,+FACmBC,0BAAQ,CAACC,WAAW,CAACC,SAAS,EAAE,SAAS,CAAC;IAK7D,KAAK,MAAKC,OAAO,CAACC,EAAE,CACnB,sBAAsB,EACtB,MAAKC,iBAAiB,CAACC,IAAI,gDAAM,CACjC;IAAA;EACF;EAAC;IAAA;IAAA;MAAA,uGAED,iBAAgCC,OAG/B;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAC0B,IAAI,CAACC,QAAQ,CAACC,WAAW,CAAC,cAAc,CAAC;cAAA;gBAA7DA,WAAW;gBAAA,MAGhBF,OAAO,CAACG,WAAW,KAAK,MAAM,IAC9BH,OAAO,CAACI,UAAU,KAAK,SAAS,IAChCF,WAAW;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAES,IAAI,CAACG,WAAW,EAAE;cAAA;gBAAhCC,KAAK;gBAAA,iCACJ;kBAAEA,KAAK,EAALA;gBAAM,CAAC;cAAA;gBAAA,iCAGV,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACT;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,yGAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,IAAI,CAACD,WAAW,EAAE;cAAA;gBAAhCC,KAAK;gBAAA,kCAEJ;kBACNA,KAAK,EAALA;gBACD,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,iGAED;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,IAAI,CAACC,MAAM,CAAC,cAAc,CAAC,CAACF,WAAW,CAAC,IAAI,CAACG,GAAG,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACxD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EArD+CC,4BAAe;AAAA"}
@@ -47,7 +47,7 @@ var DependencyFeature = /*#__PURE__*/function (_AbstractFeature) {
47
47
  while (1) {
48
48
  switch (_context.prev = _context.next) {
49
49
  case 0:
50
- return _context.abrupt("return", this.featureInstaller.isInstalled('skill'));
50
+ return _context.abrupt("return", this.features.isInstalled('skill'));
51
51
  case 1:
52
52
  case "end":
53
53
  return _context.stop();
@@ -1 +1 @@
1
- {"version":3,"file":"DependencyFeature.js","names":["DependencyFeature","diskUtil","resolvePath","__dirname","code","isRequired","featureInstaller","isInstalled","AbstractFeature"],"sources":["../../../src/features/dependencies/DependencyFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdependency: DependencyFeature\n\t}\n}\n\nexport default class DependencyFeature extends AbstractFeature {\n\tpublic description = 'Tell me which skills you depend on.'\n\tpublic code: FeatureCode = 'dependency'\n\tpublic nameReadable = 'Dependencies'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\n\tpublic async isInstalled() {\n\t\treturn this.featureInstaller.isInstalled('skill')\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AAAuE;AAAA;AAAA,IASlDA,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,gGAChB,qCAAqC;IAAA,yFAC/B,YAAY;IAAA,iGACjB,cAAc;IAAA,+FAChBC,0BAAQ,CAACC,WAAW,CAACC,SAAS,EAAE,SAAS,CAAC;IAAA,iGACnB,CAC1C;MACCC,IAAI,EAAE,OAAO;MACbC,UAAU,EAAE;IACb,CAAC,CACD;IAAA,wGAC4B,EAAE;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,iGAE/B;QAAA;UAAA;YAAA;cAAA;gBAAA,iCACQ,IAAI,CAACC,gBAAgB,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAf6CC,4BAAe;AAAA"}
1
+ {"version":3,"file":"DependencyFeature.js","names":["DependencyFeature","diskUtil","resolvePath","__dirname","code","isRequired","features","isInstalled","AbstractFeature"],"sources":["../../../src/features/dependencies/DependencyFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdependency: DependencyFeature\n\t}\n}\n\nexport default class DependencyFeature extends AbstractFeature {\n\tpublic description = 'Tell me which skills you depend on.'\n\tpublic code: FeatureCode = 'dependency'\n\tpublic nameReadable = 'Dependencies'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\n\tpublic async isInstalled() {\n\t\treturn this.features.isInstalled('skill')\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AAAuE;AAAA;AAAA,IASlDA,iBAAiB;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,gGAChB,qCAAqC;IAAA,yFAC/B,YAAY;IAAA,iGACjB,cAAc;IAAA,+FAChBC,0BAAQ,CAACC,WAAW,CAACC,SAAS,EAAE,SAAS,CAAC;IAAA,iGACnB,CAC1C;MACCC,IAAI,EAAE,OAAO;MACbC,UAAU,EAAE;IACb,CAAC,CACD;IAAA,wGAC4B,EAAE;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,iGAE/B;QAAA;UAAA;YAAA;cAAA;gBAAA,iCACQ,IAAI,CAACC,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACzC;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAf6CC,4BAAe;AAAA"}
@@ -70,80 +70,78 @@ var DeployAction = /*#__PURE__*/function (_AbstractAction) {
70
70
  case 0:
71
71
  results = {};
72
72
  _context.prev = 1;
73
- _context.next = 4;
74
- return this.assertRegisteredSkill();
75
- case 4:
76
- _context.next = 6;
73
+ this.assertRegisteredSkill();
74
+ _context.next = 5;
77
75
  return this.assertDependencies();
78
- case 6:
79
- _context.next = 8;
76
+ case 5:
77
+ _context.next = 7;
80
78
  return this.assertLoggedInToHeroku();
81
- case 8:
82
- _context.next = 10;
79
+ case 7:
80
+ _context.next = 9;
83
81
  return this.setupGitRepo();
84
- case 10:
85
- _context.next = 12;
82
+ case 9:
83
+ _context.next = 11;
86
84
  return this.setupGitRemote();
87
- case 12:
88
- _context.next = 14;
85
+ case 11:
86
+ _context.next = 13;
89
87
  return this.setupProcFile();
90
- case 14:
88
+ case 13:
91
89
  procResults = _context.sent;
92
90
  results = _action["default"].mergeActionResults(results, procResults);
93
- _context.next = 18;
91
+ _context.next = 17;
94
92
  return this.assertNoPendingGitChanges();
95
- case 18:
96
- _context.next = 23;
93
+ case 17:
94
+ _context.next = 22;
97
95
  break;
98
- case 20:
99
- _context.prev = 20;
96
+ case 19:
97
+ _context.prev = 19;
100
98
  _context.t0 = _context["catch"](1);
101
99
  return _context.abrupt("return", {
102
100
  errors: [_context.t0]
103
101
  });
104
- case 23:
102
+ case 22:
105
103
  _this$validateAndNorm = this.validateAndNormalizeOptions(options), shouldBuildAndLint = _this$validateAndNorm.shouldBuildAndLint, shouldRunTests = _this$validateAndNorm.shouldRunTests;
106
104
  if (!shouldBuildAndLint) {
107
- _context.next = 30;
105
+ _context.next = 29;
108
106
  break;
109
107
  }
110
- _context.next = 27;
108
+ _context.next = 26;
111
109
  return this.buildAndLint();
112
- case 27:
110
+ case 26:
113
111
  results = _context.sent;
114
112
  if (!results.errors) {
115
- _context.next = 30;
113
+ _context.next = 29;
116
114
  break;
117
115
  }
118
116
  return _context.abrupt("return", results);
119
- case 30:
117
+ case 29:
120
118
  if (!shouldRunTests) {
121
- _context.next = 36;
119
+ _context.next = 35;
122
120
  break;
123
121
  }
124
- _context.next = 33;
122
+ _context.next = 32;
125
123
  return this.runTests();
126
- case 33:
124
+ case 32:
127
125
  results = _context.sent;
128
126
  if (!results.errors) {
129
- _context.next = 36;
127
+ _context.next = 35;
130
128
  break;
131
129
  }
132
130
  return _context.abrupt("return", results);
133
- case 36:
134
- _context.next = 38;
131
+ case 35:
132
+ _context.next = 37;
135
133
  return this.deploy();
136
- case 38:
134
+ case 37:
137
135
  this.ui.clear();
138
136
  skill = this.Service('auth').getCurrentSkill();
139
137
  results.summaryLines = ["You are good to go!", "You gotta make sure that your ENV's are set on Heroku to the following:\n", "SKILL_NAME=".concat(skill.name), "SKILL_SLUG=".concat(skill.slug), "SKILL_ID=".concat(skill.id), "SKILL_API_KEY=".concat(skill.apiKey)];
140
138
  return _context.abrupt("return", results);
141
- case 42:
139
+ case 41:
142
140
  case "end":
143
141
  return _context.stop();
144
142
  }
145
143
  }
146
- }, _callee, this, [[1, 20]]);
144
+ }, _callee, this, [[1, 19]]);
147
145
  }));
148
146
  function execute(_x) {
149
147
  return _execute.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"HerokuAction.js","names":["optionsSchema","buildSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","features","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tawait this.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.features.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.features.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"HerokuAction.js","names":["optionsSchema","buildSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","features","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tthis.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err: any) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.features.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.features.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
@@ -48,7 +48,7 @@ var ErrorFeature = /*#__PURE__*/function (_AbstractFeature) {
48
48
  switch (_context.prev = _context.next) {
49
49
  case 0:
50
50
  _context.next = 2;
51
- return _this.featureInstaller.isInstalled('error');
51
+ return _this.features.isInstalled('error');
52
52
  case 2:
53
53
  isInstalled = _context.sent;
54
54
  if (!isInstalled) {
@@ -79,7 +79,7 @@ var ErrorFeature = /*#__PURE__*/function (_AbstractFeature) {
79
79
  switch (_context2.prev = _context2.next) {
80
80
  case 0:
81
81
  _context2.next = 2;
82
- return this.featureInstaller.isInstalled('skill');
82
+ return this.features.isInstalled('skill');
83
83
  case 2:
84
84
  isSkillInstalled = _context2.sent;
85
85
  if (isSkillInstalled) {
@@ -118,11 +118,11 @@ var ErrorFeature = /*#__PURE__*/function (_AbstractFeature) {
118
118
  case 0:
119
119
  featureCode = payload.featureCode, actionCode = payload.actionCode;
120
120
  _context3.next = 3;
121
- return this.featureInstaller.isInstalled('error');
121
+ return this.features.isInstalled('error');
122
122
  case 3:
123
123
  isInstalled = _context3.sent;
124
124
  _context3.next = 6;
125
- return this.featureInstaller.isInstalled('skill');
125
+ return this.features.isInstalled('skill');
126
126
  case 6:
127
127
  isSkillInstalled = _context3.sent;
128
128
  if (!(isInstalled && featureCode === 'node' && actionCode === 'upgrade')) {
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorFeature.js","names":["ErrorFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidExecuteCommand","bind","featureInstaller","isInstalled","filesToSkip","isSkillInstalled","writePlugin","files","payload","featureCode","actionCode","Action","execute","results","plugin","push","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/error/ErrorFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\terror: ErrorFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\terror: undefined\n\t}\n}\n\nexport default class ErrorFeature extends AbstractFeature {\n\tpublic nameReadable = 'error handling'\n\tpublic description =\n\t\t'Errors: Use schemas to define your errors and get great type checking!'\n\tpublic code: FeatureCode = 'error'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t\t{ code: 'node', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/error@latest',\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecuteCommand.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on('skill.will-write-directory-template', async () => {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\t\t\tif (isInstalled) {\n\t\t\t\treturn {\n\t\t\t\t\tfilesToSkip: ['options.types.ts'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (!isSkillInstalled) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async handleDidExecuteCommand(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst results = await this.Action('error', 'sync').execute({})\n\n\t\t\tif (isSkillInstalled) {\n\t\t\t\tif (!results.files) {\n\t\t\t\t\tresults.files = []\n\t\t\t\t}\n\n\t\t\t\tconst plugin = await this.writePlugin()\n\t\t\t\tresults.files.push(...plugin)\n\t\t\t}\n\n\t\t\treturn results\n\t\t}\n\n\t\treturn {}\n\t}\n\tprivate async writePlugin() {\n\t\treturn this.Writer('error').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ErrorFeature.js","names":["ErrorFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidExecuteCommand","bind","features","isInstalled","filesToSkip","isSkillInstalled","writePlugin","files","payload","featureCode","actionCode","Action","execute","results","plugin","push","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/error/ErrorFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\terror: ErrorFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\terror: undefined\n\t}\n}\n\nexport default class ErrorFeature extends AbstractFeature {\n\tpublic nameReadable = 'error handling'\n\tpublic description =\n\t\t'Errors: Use schemas to define your errors and get great type checking!'\n\tpublic code: FeatureCode = 'error'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t\t{ code: 'node', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/error@latest',\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecuteCommand.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on('skill.will-write-directory-template', async () => {\n\t\t\tconst isInstalled = await this.features.isInstalled('error')\n\t\t\tif (isInstalled) {\n\t\t\t\treturn {\n\t\t\t\t\tfilesToSkip: ['options.types.ts'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst isSkillInstalled = await this.features.isInstalled('skill')\n\n\t\tif (!isSkillInstalled) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async handleDidExecuteCommand(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.features.isInstalled('error')\n\n\t\tconst isSkillInstalled = await this.features.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst results = await this.Action('error', 'sync').execute({})\n\n\t\t\tif (isSkillInstalled) {\n\t\t\t\tif (!results.files) {\n\t\t\t\t\tresults.files = []\n\t\t\t\t}\n\n\t\t\t\tconst plugin = await this.writePlugin()\n\t\t\t\tresults.files.push(...plugin)\n\t\t\t}\n\n\t\t\treturn results\n\t\t}\n\n\t\treturn {}\n\t}\n\tprivate async writePlugin() {\n\t\treturn this.Writer('error').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAEA;AAI2B;AAAA;AAAA,IAaNA,YAAY;EAAA;EAAA;EAiBhC,sBAAmBC,OAAuB,EAAE;IAAA;IAAA;IAC3C,0BAAMA,OAAO;IAAC,iGAjBO,gBAAgB;IAAA,gGAErC,wEAAwE;IAAA,yFAC9C,OAAO;IAAA,iGAES,CAC1C;MAAEC,IAAI,EAAE,QAAQ;MAAEC,UAAU,EAAE;IAAK,CAAC,EACpC;MAAED,IAAI,EAAE,MAAM;MAAEC,UAAU,EAAE;IAAK,CAAC,CAClC;IAAA,wGAC0C,CAC1C;MACCC,IAAI,EAAE;IACP,CAAC,CACD;IAAA,+FACmBC,0BAAQ,CAACC,WAAW,CAACC,SAAS,EAAE,SAAS,CAAC;IAK7D,KAAK,MAAKC,OAAO,CAACC,EAAE,CACnB,qBAAqB,EACrB,MAAKC,uBAAuB,CAACC,IAAI,gDAAM,CACvC;IAED,KAAK,MAAKH,OAAO,CAACC,EAAE,CAAC,qCAAqC,6FAAE;MAAA;MAAA;QAAA;UAAA;YAAA;cAAA;cAAA,OACjC,MAAKG,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;YAAA;cAAtDA,WAAW;cAAA,KACbA,WAAW;gBAAA;gBAAA;cAAA;cAAA,iCACP;gBACNC,WAAW,EAAE,CAAC,kBAAkB;cACjC,CAAC;YAAA;cAAA,iCAGK,CAAC,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CACT,GAAC;IAAA;EACH;EAAC;IAAA;IAAA;MAAA,yGAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACgC,IAAI,CAACF,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;gBAA3DE,gBAAgB;gBAAA,IAEjBA,gBAAgB;kBAAA;kBAAA;gBAAA;gBAAA,kCACb,CAAC,CAAC;cAAA;gBAAA;gBAAA,OAGU,IAAI,CAACC,WAAW,EAAE;cAAA;gBAAhCC,KAAK;gBAAA,kCAEJ;kBACNA,KAAK,EAALA;gBACD,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,6GAED,kBAAsCC,OAGrC;QAAA;QAAA;UAAA;YAAA;cAAA;gBACQC,WAAW,GAAiBD,OAAO,CAAnCC,WAAW,EAAEC,UAAU,GAAKF,OAAO,CAAtBE,UAAU;gBAAA;gBAAA,OAEL,IAAI,CAACR,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;gBAAtDA,WAAW;gBAAA;gBAAA,OAEc,IAAI,CAACD,QAAQ,CAACC,WAAW,CAAC,OAAO,CAAC;cAAA;gBAA3DE,gBAAgB;gBAAA,MAElBF,WAAW,IAAIM,WAAW,KAAK,MAAM,IAAIC,UAAU,KAAK,SAAS;kBAAA;kBAAA;gBAAA;gBAAA;gBAAA,OAC9C,IAAI,CAACC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAACC,OAAO,CAAC,CAAC,CAAC,CAAC;cAAA;gBAAxDC,OAAO;gBAAA,KAETR,gBAAgB;kBAAA;kBAAA;gBAAA;gBACnB,IAAI,CAACQ,OAAO,CAACN,KAAK,EAAE;kBACnBM,OAAO,CAACN,KAAK,GAAG,EAAE;gBACnB;gBAAC;gBAAA,OAEoB,IAAI,CAACD,WAAW,EAAE;cAAA;gBAAjCQ,MAAM;gBACZ,kBAAAD,OAAO,CAACN,KAAK,EAACQ,IAAI,2DAAID,MAAM,EAAC;cAAA;gBAAA,kCAGvBD,OAAO;cAAA;gBAAA,kCAGR,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACT;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA;MAAA,iGACD;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,IAAI,CAACG,MAAM,CAAC,OAAO,CAAC,CAACV,WAAW,CAAC,IAAI,CAACW,GAAG,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACjD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;EAAA;AAAA,EAhFwCC,4BAAe;AAAA"}