@sprucelabs/spruce-cli 15.2.24 → 15.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 (548) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/build/.spruce/errors/errors.types.js.map +1 -1
  3. package/build/.spruce/errors/options.types.js.map +1 -1
  4. package/build/.spruce/errors/spruceCli/actionCancelled.schema.js.map +1 -1
  5. package/build/.spruce/errors/spruceCli/bootError.schema.js.map +1 -1
  6. package/build/.spruce/errors/spruceCli/buildFailed.schema.js.map +1 -1
  7. package/build/.spruce/errors/spruceCli/cacheNotEnabled.schema.js.map +1 -1
  8. package/build/.spruce/errors/spruceCli/commandAborted.schema.js.map +1 -1
  9. package/build/.spruce/errors/spruceCli/commandBlocked.schema.js.map +1 -1
  10. package/build/.spruce/errors/spruceCli/commandNotImplemented.schema.js.map +1 -1
  11. package/build/.spruce/errors/spruceCli/createAutoloaderFailed.schema.js.map +1 -1
  12. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -1
  13. package/build/.spruce/errors/spruceCli/deployFailed.schema.js.map +1 -1
  14. package/build/.spruce/errors/spruceCli/directoryEmpty.schema.js.map +1 -1
  15. package/build/.spruce/errors/spruceCli/directoryNotSkill.schema.js.map +1 -1
  16. package/build/.spruce/errors/spruceCli/dockerNotStarted.schema.js.map +1 -1
  17. package/build/.spruce/errors/spruceCli/executingCommandFailed.schema.js.map +1 -1
  18. package/build/.spruce/errors/spruceCli/failedToImport.schema.js.map +1 -1
  19. package/build/.spruce/errors/spruceCli/featureNotInstalled.schema.js.map +1 -1
  20. package/build/.spruce/errors/spruceCli/fileExists.schema.js.map +1 -1
  21. package/build/.spruce/errors/spruceCli/generic.schema.js.map +1 -1
  22. package/build/.spruce/errors/spruceCli/invalidCommand.schema.js.map +1 -1
  23. package/build/.spruce/errors/spruceCli/invalidEventContract.schema.js.map +1 -1
  24. package/build/.spruce/errors/spruceCli/invalidFeatureCode.schema.js.map +1 -1
  25. package/build/.spruce/errors/spruceCli/invalidTestDirectory.schema.js.map +1 -1
  26. package/build/.spruce/errors/spruceCli/lintFailed.schema.js.map +1 -1
  27. package/build/.spruce/errors/spruceCli/mercuryResponseError.schema.js.map +1 -1
  28. package/build/.spruce/errors/spruceCli/missingDependencies.schema.js.map +1 -1
  29. package/build/.spruce/errors/spruceCli/missingDependenciesDependency.schema.js.map +1 -1
  30. package/build/.spruce/errors/spruceCli/noOrganizationsFound.schema.js.map +1 -1
  31. package/build/.spruce/errors/spruceCli/noSkillsRegistered.schema.js.map +1 -1
  32. package/build/.spruce/errors/spruceCli/notImplemented.schema.js.map +1 -1
  33. package/build/.spruce/errors/spruceCli/notLoggedIn.schema.js.map +1 -1
  34. package/build/.spruce/errors/spruceCli/schemaExists.schema.js.map +1 -1
  35. package/build/.spruce/errors/spruceCli/schemaFailedToImport.schema.js.map +1 -1
  36. package/build/.spruce/errors/spruceCli/schemaTemplateItemBuildingFailed.schema.js.map +1 -1
  37. package/build/.spruce/errors/spruceCli/skillNotFound.schema.js.map +1 -1
  38. package/build/.spruce/errors/spruceCli/skillNotRegistered.schema.js.map +1 -1
  39. package/build/.spruce/errors/spruceCli/skillViewExists.schema.js.map +1 -1
  40. package/build/.spruce/errors/spruceCli/storeExists.schema.js.map +1 -1
  41. package/build/.spruce/errors/spruceCli/testFailed.schema.js.map +1 -1
  42. package/build/.spruce/errors/spruceCli/themeExists.schema.js.map +1 -1
  43. package/build/.spruce/errors/spruceCli/transportAlreadyExists.schema.js.map +1 -1
  44. package/build/.spruce/errors/spruceCli/vscodeNotInstalled.schema.js.map +1 -1
  45. package/build/.spruce/events/events.contract.js.map +1 -1
  46. package/build/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.js.map +1 -1
  47. package/build/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.js.map +1 -1
  48. package/build/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.js.map +1 -1
  49. package/build/.spruce/events/heartwood/listViews.v2021_02_11.contract.js.map +1 -1
  50. package/build/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.js.map +1 -1
  51. package/build/.spruce/schemas/fields/fieldClassMap.js.map +1 -1
  52. package/build/.spruce/schemas/fields/fields.types.js.map +1 -1
  53. package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitPayload.schema.js.map +1 -1
  54. package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitTarget.schema.js.map +1 -1
  55. package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
  56. package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitPayload.schema.js.map +1 -1
  57. package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitTarget.schema.js.map +1 -1
  58. package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitTargetAndPayload.schema.js.map +1 -1
  59. package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlResponsePayload.schema.js.map +1 -1
  60. package/build/.spruce/schemas/heartwood/v2021_02_11/getSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
  61. package/build/.spruce/schemas/heartwood/v2021_02_11/getSkillViewsResponsePayload.schema.js.map +1 -1
  62. package/build/.spruce/schemas/heartwood/v2021_02_11/getViewControllersEmitTarget.schema.js.map +1 -1
  63. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.js.map +1 -1
  64. package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.js.map +1 -1
  65. package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsEmitPayload.schema.js.map +1 -1
  66. package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
  67. package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsResponsePayload.schema.js.map +1 -1
  68. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/theme.schema.js.map +1 -1
  69. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/themeProps.schema.js.map +1 -1
  70. package/build/.spruce/schemas/schemas.types.js.map +1 -1
  71. package/build/.spruce/schemas/spruce/v2020_07_22/fullMessageChoices.schema.js.map +1 -1
  72. package/build/.spruce/schemas/spruce/v2020_07_22/location.schema.js.map +1 -1
  73. package/build/.spruce/schemas/spruce/v2020_07_22/message.schema.js.map +1 -1
  74. package/build/.spruce/schemas/spruce/v2020_07_22/messageSource.schema.js.map +1 -1
  75. package/build/.spruce/schemas/spruce/v2020_07_22/messageTarget.schema.js.map +1 -1
  76. package/build/.spruce/schemas/spruce/v2020_07_22/organization.schema.js.map +1 -1
  77. package/build/.spruce/schemas/spruce/v2020_07_22/person.schema.js.map +1 -1
  78. package/build/.spruce/schemas/spruce/v2020_07_22/personLocation.schema.js.map +1 -1
  79. package/build/.spruce/schemas/spruce/v2020_07_22/personOrganization.schema.js.map +1 -1
  80. package/build/.spruce/schemas/spruce/v2020_07_22/profileImage.schema.js.map +1 -1
  81. package/build/.spruce/schemas/spruce/v2020_07_22/role.schema.js.map +1 -1
  82. package/build/.spruce/schemas/spruce/v2020_07_22/sendMessage.schema.js.map +1 -1
  83. package/build/.spruce/schemas/spruce/v2020_07_22/skill.schema.js.map +1 -1
  84. package/build/.spruce/schemas/spruce/v2020_07_22/skillCreator.schema.js.map +1 -1
  85. package/build/.spruce/schemas/spruceCli/v2020_07_22/bootSkillOptions.schema.js.map +1 -1
  86. package/build/.spruce/schemas/spruceCli/v2020_07_22/createConversationTopicOptions.schema.js.map +1 -1
  87. package/build/.spruce/schemas/spruceCli/v2020_07_22/createErrorOptions.schema.js.map +1 -1
  88. package/build/.spruce/schemas/spruceCli/v2020_07_22/createOrganizationOptions.schema.js.map +1 -1
  89. package/build/.spruce/schemas/spruceCli/v2020_07_22/createSchemaOptions.schema.js.map +1 -1
  90. package/build/.spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema.js.map +1 -1
  91. package/build/.spruce/schemas/spruceCli/v2020_07_22/generatedDir.schema.js.map +1 -1
  92. package/build/.spruce/schemas/spruceCli/v2020_07_22/generatedFile.schema.js.map +1 -1
  93. package/build/.spruce/schemas/spruceCli/v2020_07_22/installSkillAtOrganizationOptions.schema.js.map +1 -1
  94. package/build/.spruce/schemas/spruceCli/v2020_07_22/listenEventOptions.schema.js.map +1 -1
  95. package/build/.spruce/schemas/spruceCli/v2020_07_22/namedTemplateItem.schema.js.map +1 -1
  96. package/build/.spruce/schemas/spruceCli/v2020_07_22/nodeFeatureOptions.schema.js.map +1 -1
  97. package/build/.spruce/schemas/spruceCli/v2020_07_22/onboardOptions.schema.js.map +1 -1
  98. package/build/.spruce/schemas/spruceCli/v2020_07_22/onboarding.schema.js.map +1 -1
  99. package/build/.spruce/schemas/spruceCli/v2020_07_22/personWithToken.schema.js.map +1 -1
  100. package/build/.spruce/schemas/spruceCli/v2020_07_22/registerDashboardWidgetsEmitPayloadSchema.schema.js.map +1 -1
  101. package/build/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.js.map +1 -1
  102. package/build/.spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema.js.map +1 -1
  103. package/build/.spruce/schemas/spruceCli/v2020_07_22/skillFeature.schema.js.map +1 -1
  104. package/build/.spruce/schemas/spruceCli/v2020_07_22/syncErrorOptions.schema.js.map +1 -1
  105. package/build/.spruce/schemas/spruceCli/v2020_07_22/syncEventOptions.schema.js.map +1 -1
  106. package/build/.spruce/schemas/spruceCli/v2020_07_22/syncSchemaFieldsOptions.schema.js.map +1 -1
  107. package/build/.spruce/schemas/spruceCli/v2020_07_22/syncSchemasOptions.schema.js.map +1 -1
  108. package/build/.spruce/schemas/spruceCli/v2020_07_22/testOptions.schema.js.map +1 -1
  109. package/build/.spruce/schemas/spruceCli/v2020_07_22/upgradeSkillOptions.schema.js.map +1 -1
  110. package/build/.spruce/schemas/spruceCli/v2020_07_22/watcherDidDetectChangesEmitPayload.schema.js.map +1 -1
  111. package/build/.spruce/schemas/spruceEventUtils/v2021_09_13/eventSource.schema.js.map +1 -1
  112. package/build/.spruce/skill.types.js.map +1 -1
  113. package/build/GlobalEmitter.js.map +1 -1
  114. package/build/InFlightEntertainment.js.map +1 -1
  115. package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
  116. package/build/__tests__/behavioral/BlockingCommands.test.js.map +1 -1
  117. package/build/__tests__/behavioral/BootingTheCli.test.js.map +1 -1
  118. package/build/__tests__/behavioral/BootingWithBadFiles.test.js.map +1 -1
  119. package/build/__tests__/behavioral/CreatingAConversationTopic.test.js.map +1 -1
  120. package/build/__tests__/behavioral/CreatingSchemasWithGenerics.test.js.map +1 -1
  121. package/build/__tests__/behavioral/DeployingASkill.test.js.map +1 -1
  122. package/build/__tests__/behavioral/DeployingToSandbox.test.js.map +1 -1
  123. package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js.map +1 -1
  124. package/build/__tests__/behavioral/GettingCliVersion.test.js.map +1 -1
  125. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
  126. package/build/__tests__/behavioral/ListeningToCoreEvents.test.js.map +1 -1
  127. package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
  128. package/build/__tests__/behavioral/ManagingDependencies.test.js.map +1 -1
  129. package/build/__tests__/behavioral/OverridingCommandsInPackageJson.test.js.map +1 -1
  130. package/build/__tests__/behavioral/RebuildingASkill.test.js.map +1 -1
  131. package/build/__tests__/behavioral/RegisteringConversationsOnBoot.test.js.map +1 -1
  132. package/build/__tests__/behavioral/RegisteringEventsOnBoot.test.js.map +1 -1
  133. package/build/__tests__/behavioral/RegisteringGlobalEvents.test.js.map +1 -1
  134. package/build/__tests__/behavioral/RegisteringSkillViewOnBoot.test.js.map +1 -1
  135. package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
  136. package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js.map +1 -1
  137. package/build/__tests__/behavioral/SettingRemote.test.js.map +1 -1
  138. package/build/__tests__/behavioral/SettingUpASkillForTesting.test.js.map +1 -1
  139. package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js.map +1 -1
  140. package/build/__tests__/behavioral/SettingUpVscode.test.js.map +1 -1
  141. package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.js.map +1 -1
  142. package/build/__tests__/behavioral/TestReporterSettingsRemembered.test.js.map +1 -1
  143. package/build/__tests__/behavioral/TestingAConversation.test.js.map +1 -1
  144. package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
  145. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
  146. package/build/__tests__/behavioral/errors/CreatingANewErrorBuilder.test.js.map +1 -1
  147. package/build/__tests__/behavioral/errors/KeepingErrorClassInSync.test.js.map +1 -1
  148. package/build/__tests__/behavioral/errors/KeepingErrorsInSync.test.js.map +1 -1
  149. package/build/__tests__/behavioral/errors/SettingUpErrors.test.js.map +1 -1
  150. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js.map +1 -1
  151. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  152. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
  153. package/build/__tests__/behavioral/events/KeepingEventsInSync.test.js.map +1 -1
  154. package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
  155. package/build/__tests__/behavioral/events/KeepingListenersInSync.test.js.map +1 -1
  156. package/build/__tests__/behavioral/events/ListeningToAnEventYouCreate.test.js.map +1 -1
  157. package/build/__tests__/behavioral/events/SettingUpEvents.test.js.map +1 -1
  158. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
  159. package/build/__tests__/behavioral/node/CreatingANodeModule.test.js.map +1 -1
  160. package/build/__tests__/behavioral/onboard/StartingOnboarding.test.js.map +1 -1
  161. package/build/__tests__/behavioral/organization/CreatingAnOrg.test.js.map +1 -1
  162. package/build/__tests__/behavioral/person/LoggingInAsPerson.test.js.map +1 -1
  163. package/build/__tests__/behavioral/person/SeeWhoIsLoggedIn.test.js.map +1 -1
  164. package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js.map +1 -1
  165. package/build/__tests__/behavioral/schemas/GeneratingFieldTypesOnly.test.js.map +1 -1
  166. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js.map +1 -1
  167. package/build/__tests__/behavioral/schemas/HandlesRelatedSchemas.test.js.map +1 -1
  168. package/build/__tests__/behavioral/schemas/ImportingSchemaImports.test.js.map +1 -1
  169. package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
  170. package/build/__tests__/behavioral/schemas/SettingUpSchemas.test.js.map +1 -1
  171. package/build/__tests__/behavioral/schemas/SyncingBadSchemasProvidesHelpfulErrorMessages.test.js.map +1 -1
  172. package/build/__tests__/behavioral/schemas/UsingSchemasInCli.test.js.map +1 -1
  173. package/build/__tests__/behavioral/skill/BootingASkill.test.js.map +1 -1
  174. package/build/__tests__/behavioral/skill/CreatingASkill.test.js.map +1 -1
  175. package/build/__tests__/behavioral/skill/RegisteringASkill.test.js.map +1 -1
  176. package/build/__tests__/behavioral/skill/SettingUpASkill.test.js.map +1 -1
  177. package/build/__tests__/behavioral/stores/CreatingADataStore.test.js.map +1 -1
  178. package/build/__tests__/behavioral/stores/KeepingDataStoresInSync.test.js.map +1 -1
  179. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  180. package/build/__tests__/behavioral/tests/RunningTests.test.js.map +1 -1
  181. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  182. package/build/__tests__/behavioral/tests/SettingUpTests.test.js.map +1 -1
  183. package/build/__tests__/behavioral/upgrading/UpdatingDependencies.test.js.map +1 -1
  184. package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js.map +1 -1
  185. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
  186. package/build/__tests__/behavioral/upgrading/UpgradingASkill.test.js.map +1 -1
  187. package/build/__tests__/behavioral/upgrading/UpgradingASkill2.test.js.map +1 -1
  188. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
  189. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js.map +1 -1
  190. package/build/__tests__/behavioral/upgrading/UpgradingASkill5.test.js.map +1 -1
  191. package/build/__tests__/behavioral/upgrading/UpgradingWithListeners.test.js.map +1 -1
  192. package/build/__tests__/behavioral/upgrading/UpgradingWithSandboxFeatureInstalled.test.js.map +1 -1
  193. package/build/__tests__/behavioral/views/CreatingASkillView.test.js.map +1 -1
  194. package/build/__tests__/behavioral/views/CreatingATheme.test.js.map +1 -1
  195. package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js.map +1 -1
  196. package/build/__tests__/behavioral/views/SettingUpViews.test.js.map +1 -1
  197. package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
  198. package/build/__tests__/behavioral/watchers/WatchingForChanges.test.js.map +1 -1
  199. package/build/__tests__/implementation/ActionExecuter.test.js.map +1 -1
  200. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  201. package/build/__tests__/implementation/ActionExecuter3.test.js.map +1 -1
  202. package/build/__tests__/implementation/ActionExecuter4.test.js.map +1 -1
  203. package/build/__tests__/implementation/ArgParser.test.js.map +1 -1
  204. package/build/__tests__/implementation/BuildService.test.js.map +1 -1
  205. package/build/__tests__/implementation/BulkImporting.test.js.map +1 -1
  206. package/build/__tests__/implementation/CachingImports.test.js.map +1 -1
  207. package/build/__tests__/implementation/CommandOptionBuilder.test.js.map +1 -1
  208. package/build/__tests__/implementation/CommanderCommandResultMapper.test.js.map +1 -1
  209. package/build/__tests__/implementation/DataStoreStore.test.js.map +1 -1
  210. package/build/__tests__/implementation/DeletingOrphanedSchemaDefinitions.test.js.map +1 -1
  211. package/build/__tests__/implementation/EventContractCleanerUtil.test.js.map +1 -1
  212. package/build/__tests__/implementation/EventStore.test.d.ts +1 -0
  213. package/build/__tests__/implementation/EventStore.test.js +61 -33
  214. package/build/__tests__/implementation/EventStore.test.js.map +1 -1
  215. package/build/__tests__/implementation/EventTemplateItemBuilder.test.js.map +1 -1
  216. package/build/__tests__/implementation/FeatureCommandAttacher.test.js.map +1 -1
  217. package/build/__tests__/implementation/FeatureFixture.test.js.map +1 -1
  218. package/build/__tests__/implementation/FeatureInstaller.test.js.map +1 -1
  219. package/build/__tests__/implementation/FeaturesUtil.test.js.map +1 -1
  220. package/build/__tests__/implementation/FieldTemplateItemBuilder.test.js.map +1 -1
  221. package/build/__tests__/implementation/GlobalEmitter.js.map +1 -1
  222. package/build/__tests__/implementation/Introspection.test.js.map +1 -1
  223. package/build/__tests__/implementation/JestJsonParser.test.js.map +1 -1
  224. package/build/__tests__/implementation/LintService.test.js.map +1 -1
  225. package/build/__tests__/implementation/ListenerStore.test.d.ts +4 -0
  226. package/build/__tests__/implementation/ListenerStore.test.js +56 -0
  227. package/build/__tests__/implementation/ListenerStore.test.js.map +1 -0
  228. package/build/__tests__/implementation/OnboardingScriptLoader.test.js.map +1 -1
  229. package/build/__tests__/implementation/OnboardingScriptPlayer.test.js.map +1 -1
  230. package/build/__tests__/implementation/OnboardingStore.test.js.map +1 -1
  231. package/build/__tests__/implementation/OrganizationStore.test.js.map +1 -1
  232. package/build/__tests__/implementation/ParentTestFinder.test.js.map +1 -1
  233. package/build/__tests__/implementation/PkgService.test.js.map +1 -1
  234. package/build/__tests__/implementation/SchemaStore.test.js.map +1 -1
  235. package/build/__tests__/implementation/SchemaTemplateItemBuilder.test.js.map +1 -1
  236. package/build/__tests__/implementation/SchemaValueTypeWriter.test.js.map +1 -1
  237. package/build/__tests__/implementation/ServiceFactory.test.js.map +1 -1
  238. package/build/__tests__/implementation/SettingUpANodeModule.test.js.map +1 -1
  239. package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
  240. package/build/__tests__/implementation/StoreFeature.test.js +1 -1
  241. package/build/__tests__/implementation/StoreFeature.test.js.map +1 -1
  242. package/build/__tests__/implementation/TestReporter.test.js.map +1 -1
  243. package/build/__tests__/implementation/TestRunner.test.js.map +1 -1
  244. package/build/__tests__/implementation/ValueTypeMapping.test.js.map +1 -1
  245. package/build/__tests__/implementation/Widgets.test.js.map +1 -1
  246. package/build/__tests__/support/onTestFileResult.js.map +1 -1
  247. package/build/__tests__/support/scripts/first.script.js.map +1 -1
  248. package/build/__tests__/support/scripts/second.script.js.map +1 -1
  249. package/build/__tests__/support/scripts/third.test.script.js.map +1 -1
  250. package/build/addons/filePrompt.addon.js.map +1 -1
  251. package/build/cli.js.map +1 -1
  252. package/build/components/AbstractComponent.js.map +1 -1
  253. package/build/components/FormComponent.js.map +1 -1
  254. package/build/components/QuizComponent.js.map +1 -1
  255. package/build/constants.js.map +1 -1
  256. package/build/errors/SpruceError.js.map +1 -1
  257. package/build/errors/actionCancelled.builder.js.map +1 -1
  258. package/build/errors/bootError.builder.js.map +1 -1
  259. package/build/errors/buildFailed.builder.js.map +1 -1
  260. package/build/errors/cacheNotEnabled.builder.js.map +1 -1
  261. package/build/errors/commandAborted.builder.js.map +1 -1
  262. package/build/errors/commandBlocked.builder.js.map +1 -1
  263. package/build/errors/commandNotImplemented.builder.js.map +1 -1
  264. package/build/errors/createAutoloaderFailed.builder.js.map +1 -1
  265. package/build/errors/dependencyExists.builder.js.map +1 -1
  266. package/build/errors/deployFailed.builder.js.map +1 -1
  267. package/build/errors/directoryEmpty.builder.js.map +1 -1
  268. package/build/errors/directoryNotSkill.builder.js.map +1 -1
  269. package/build/errors/dockerNotStarted.builder.js.map +1 -1
  270. package/build/errors/executingCommandFailed.builder.js.map +1 -1
  271. package/build/errors/failedToImport.builder.js.map +1 -1
  272. package/build/errors/featureNotInstalled.builder.js.map +1 -1
  273. package/build/errors/fileExists.builder.js.map +1 -1
  274. package/build/errors/generic.builder.js.map +1 -1
  275. package/build/errors/invalidCommand.builder.js.map +1 -1
  276. package/build/errors/invalidEventContract.builder.js.map +1 -1
  277. package/build/errors/invalidFeatureCode.builder.js.map +1 -1
  278. package/build/errors/invalidTestDirectory.builder.js.map +1 -1
  279. package/build/errors/lintFailed.builder.js.map +1 -1
  280. package/build/errors/mercuryResponseError.builder.js.map +1 -1
  281. package/build/errors/missingDependencies.builder.js.map +1 -1
  282. package/build/errors/noOrganizationsFound.builder.js.map +1 -1
  283. package/build/errors/noSkillsRegistered.builder.js.map +1 -1
  284. package/build/errors/notImplemented.builder.js.map +1 -1
  285. package/build/errors/notLoggedIn.builder.js.map +1 -1
  286. package/build/errors/schemaExists.builder.js.map +1 -1
  287. package/build/errors/schemaFailedToImport.builder.js.map +1 -1
  288. package/build/errors/schemaTemplateItemBuildingFailed.builder.js.map +1 -1
  289. package/build/errors/skillNotFound.builder.js.map +1 -1
  290. package/build/errors/skillNotRegistered.builder.js.map +1 -1
  291. package/build/errors/skillViewExists.builder.js.map +1 -1
  292. package/build/errors/storeExists.builder.js.map +1 -1
  293. package/build/errors/testFailed.builder.js.map +1 -1
  294. package/build/errors/themeExists.builder.js.map +1 -1
  295. package/build/errors/transportAlreadyExists.builder.js.map +1 -1
  296. package/build/errors/vscodeNotInstalled.builder.js.map +1 -1
  297. package/build/features/AbstractAction.js.map +1 -1
  298. package/build/features/AbstractFeature.js.map +1 -1
  299. package/build/features/ActionExecuter.js.map +1 -1
  300. package/build/features/ActionFactory.js.map +1 -1
  301. package/build/features/ActionQuestionAsker.js.map +1 -1
  302. package/build/features/FeatureCommandAttacher.js.map +1 -1
  303. package/build/features/FeatureInstaller.js.map +1 -1
  304. package/build/features/FeatureInstallerFactory.js.map +1 -1
  305. package/build/features/OverrideActionDecorator.js.map +1 -1
  306. package/build/features/cache/CacheFeature.js.map +1 -1
  307. package/build/features/cache/actions/DisableAction.js.map +1 -1
  308. package/build/features/cache/actions/EnableAction.js.map +1 -1
  309. package/build/features/cache/constants.js.map +1 -1
  310. package/build/features/conversation/ConversationFeature.js.map +1 -1
  311. package/build/features/conversation/actions/CreateAction.js.map +1 -1
  312. package/build/features/conversation/actions/TestAction.js.map +1 -1
  313. package/build/features/conversation/stores/ConversationStore.js.map +1 -1
  314. package/build/features/conversation/writers/ConversationWriter.js.map +1 -1
  315. package/build/features/dependencies/DependencyFeature.js.map +1 -1
  316. package/build/features/dependencies/actions/AddAction.js.map +1 -1
  317. package/build/features/dependencies/actions/ManageAction.js.map +1 -1
  318. package/build/features/deploy/DeployFeature.js.map +1 -1
  319. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  320. package/build/features/deploy/writers/DeployWriter.js.map +1 -1
  321. package/build/features/error/ErrorFeature.js.map +1 -1
  322. package/build/features/error/ParentTestFinder.js.map +1 -1
  323. package/build/features/error/actions/CreateAction.js.map +1 -1
  324. package/build/features/error/actions/SyncAction.js.map +1 -1
  325. package/build/features/error/writers/ErrorWriter.js.map +1 -1
  326. package/build/features/event/EventFeature.js.map +1 -1
  327. package/build/features/event/actions/CreateAction.js.map +1 -1
  328. package/build/features/event/actions/ListenAction.js.map +1 -1
  329. package/build/features/event/actions/SetRemoteAction.js.map +1 -1
  330. package/build/features/event/actions/SyncAction.js.map +1 -1
  331. package/build/features/event/actions/SyncListenersAction.js.map +1 -1
  332. package/build/features/event/builders/EventContractBuilder.js.map +1 -1
  333. package/build/features/event/builders/ListenerTemplateItemBuilder.js.map +1 -1
  334. package/build/features/event/services/EventSettingsService.js.map +1 -1
  335. package/build/features/event/services/RemoteService.js.map +1 -1
  336. package/build/features/event/stores/EventStore.d.ts +1 -0
  337. package/build/features/event/stores/EventStore.js +6 -1
  338. package/build/features/event/stores/EventStore.js.map +1 -1
  339. package/build/features/event/stores/ListenerStore.d.ts +1 -0
  340. package/build/features/event/stores/ListenerStore.js +6 -1
  341. package/build/features/event/stores/ListenerStore.js.map +1 -1
  342. package/build/features/event/writers/EventWriter.js.map +1 -1
  343. package/build/features/eventContract/EventContractFeature.js.map +1 -1
  344. package/build/features/eventContract/actions/PullAction.js.map +1 -1
  345. package/build/features/feature.utilities.js.map +1 -1
  346. package/build/features/features.types.js.map +1 -1
  347. package/build/features/log/LogFeature.js.map +1 -1
  348. package/build/features/log/actions/CreateTransportAction.js.map +1 -1
  349. package/build/features/log/writers/LogWriter.js.map +1 -1
  350. package/build/features/node/NodeFeature.js.map +1 -1
  351. package/build/features/node/actions/CreateAction.js.map +1 -1
  352. package/build/features/node/actions/UpdateDependenciesAction.js.map +1 -1
  353. package/build/features/node/actions/UpgradeAction.js.map +1 -1
  354. package/build/features/node/writers/NodeWriter.js.map +1 -1
  355. package/build/features/onboard/OnboardFeature.js.map +1 -1
  356. package/build/features/onboard/ScriptLoader.js.map +1 -1
  357. package/build/features/onboard/ScriptPlayer.js.map +1 -1
  358. package/build/features/onboard/actions/OnboardAction.js.map +1 -1
  359. package/build/features/onboard/scripts/onboarding.first.script.js.map +1 -1
  360. package/build/features/onboard/scripts/onboarding.immersive.script.js.map +1 -1
  361. package/build/features/onboard/scripts/onboarding.returning.script.js.map +1 -1
  362. package/build/features/onboard/scripts/onboarding.short.script.js.map +1 -1
  363. package/build/features/onboard/scripts/todo/todo.create.skill.script.js.map +1 -1
  364. package/build/features/onboard/scripts/todo/todo.test.script.js.map +1 -1
  365. package/build/features/onboard/scripts/wrongCommand.script.js.map +1 -1
  366. package/build/features/onboard/stores/OnboardingStore.js.map +1 -1
  367. package/build/features/organization/OrganizationFeature.js.map +1 -1
  368. package/build/features/organization/actions/CreateAction.js.map +1 -1
  369. package/build/features/organization/actions/InstallAction.js.map +1 -1
  370. package/build/features/organization/stores/OrganizationStore.js.map +1 -1
  371. package/build/features/person/PersonFeature.js.map +1 -1
  372. package/build/features/person/actions/LoginAction.js.map +1 -1
  373. package/build/features/person/actions/LogoutAction.js.map +1 -1
  374. package/build/features/person/actions/WhoamiAction.js.map +1 -1
  375. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  376. package/build/features/sandbox/actions/SetupAction.js.map +1 -1
  377. package/build/features/sandbox/writers/SandboxWriter.js.map +1 -1
  378. package/build/features/schema/SchemaFeature.js.map +1 -1
  379. package/build/features/schema/ValueTypeBuilder.js.map +1 -1
  380. package/build/features/schema/actions/CreateAction.js.map +1 -1
  381. package/build/features/schema/actions/SyncAction.js.map +1 -1
  382. package/build/features/schema/actions/SyncFieldsAction.js.map +1 -1
  383. package/build/features/schema/services/SchemaService.js.map +1 -1
  384. package/build/features/schema/stores/SchemaStore.js.map +1 -1
  385. package/build/features/schema/utilities/schema.utility.js.map +1 -1
  386. package/build/features/schema/utilities/schemaDisk.utility.js.map +1 -1
  387. package/build/features/schema/utilities/schemaGenerator.utility.js.map +1 -1
  388. package/build/features/schema/writers/SchemaWriter.js.map +1 -1
  389. package/build/features/skill/SkillFeature.js.map +1 -1
  390. package/build/features/skill/actions/BootAction.js.map +1 -1
  391. package/build/features/skill/actions/CreateAction.js.map +1 -1
  392. package/build/features/skill/actions/DashboardAction.js.map +1 -1
  393. package/build/features/skill/actions/LoginAction.js.map +1 -1
  394. package/build/features/skill/actions/RebuildAction.js.map +1 -1
  395. package/build/features/skill/actions/RegisterAction.js.map +1 -1
  396. package/build/features/skill/stores/SkillStore.js.map +1 -1
  397. package/build/features/skill/updaters/Updater.js.map +1 -1
  398. package/build/features/skill/writers/SkillWriter.js.map +1 -1
  399. package/build/features/store/StoreFeature.js +1 -1
  400. package/build/features/store/StoreFeature.js.map +1 -1
  401. package/build/features/store/actions/CreateAction.js.map +1 -1
  402. package/build/features/store/actions/SyncAction.js.map +1 -1
  403. package/build/features/store/stores/StoreStore.js.map +1 -1
  404. package/build/features/store/templateItemBuilders/StoreTemplateItemBuilder.js.map +1 -1
  405. package/build/features/store/writers/StoreWriter.js.map +1 -1
  406. package/build/features/test/TestFeature.js.map +1 -1
  407. package/build/features/test/TestLogItemGenerator.js.map +1 -1
  408. package/build/features/test/TestReporter.js.map +1 -1
  409. package/build/features/test/TestRunner.js.map +1 -1
  410. package/build/features/test/actions/CreateAction.js.map +1 -1
  411. package/build/features/test/actions/SetupAction.js.map +1 -1
  412. package/build/features/test/actions/TestAction.js.map +1 -1
  413. package/build/features/test/test.types.js.map +1 -1
  414. package/build/features/test/writers/TestWriter.js.map +1 -1
  415. package/build/features/universalDevDependencies.js.map +1 -1
  416. package/build/features/universalFileDescriptions.js.map +1 -1
  417. package/build/features/universalScripts.js.map +1 -1
  418. package/build/features/validateAndNormalize.utility.d.ts +2 -2
  419. package/build/features/validateAndNormalize.utility.js +2 -2
  420. package/build/features/validateAndNormalize.utility.js.map +1 -1
  421. package/build/features/view/ViewFeature.js.map +1 -1
  422. package/build/features/view/actions/CreateAction.js.map +1 -1
  423. package/build/features/view/actions/CreateThemeAction.js.map +1 -1
  424. package/build/features/view/actions/SyncAction.js.map +1 -1
  425. package/build/features/view/actions/WatchAction.js.map +1 -1
  426. package/build/features/view/stores/ViewStore.js.map +1 -1
  427. package/build/features/view/writers/ViewWriter.js.map +1 -1
  428. package/build/features/vscode/VsCodeFeature.js.map +1 -1
  429. package/build/features/vscode/actions/SetupAction.js.map +1 -1
  430. package/build/features/vscode/services/VsCodeService.js.map +1 -1
  431. package/build/features/vscode/writers/VsCodeWriter.js.map +1 -1
  432. package/build/features/watch/WatchFeature.js.map +1 -1
  433. package/build/index.js.map +1 -1
  434. package/build/interfaces/SpyInterface.js.map +1 -1
  435. package/build/interfaces/TerminalInterface.js.map +1 -1
  436. package/build/schemas/v2020_07_22/bootSkillOptions.builder.js.map +1 -1
  437. package/build/schemas/v2020_07_22/createConversationTopicOptions.builder.js.map +1 -1
  438. package/build/schemas/v2020_07_22/createErrorOptions.builder.js.map +1 -1
  439. package/build/schemas/v2020_07_22/createOrganizationOptions.builder.js.map +1 -1
  440. package/build/schemas/v2020_07_22/createSchemaOptions.builder.js.map +1 -1
  441. package/build/schemas/v2020_07_22/createTestOptions.builder.js.map +1 -1
  442. package/build/schemas/v2020_07_22/installSkillAtOrganizationOptions.builder.js.map +1 -1
  443. package/build/schemas/v2020_07_22/listenEventOptions.builder.js.map +1 -1
  444. package/build/schemas/v2020_07_22/namedTemplateItem.builder.js.map +1 -1
  445. package/build/schemas/v2020_07_22/nodeFeatureOptions.builder.js.map +1 -1
  446. package/build/schemas/v2020_07_22/onboardOptions.builder.js.map +1 -1
  447. package/build/schemas/v2020_07_22/onboarding.builder.js.map +1 -1
  448. package/build/schemas/v2020_07_22/personWithToken.builder.js.map +1 -1
  449. package/build/schemas/v2020_07_22/registerDashboardWidgetsEmitPayloadSchema.builder.js.map +1 -1
  450. package/build/schemas/v2020_07_22/setupTestsOptions.builder.js.map +1 -1
  451. package/build/schemas/v2020_07_22/setupVscodeOptions.builder.js.map +1 -1
  452. package/build/schemas/v2020_07_22/skillFeature.builder.js.map +1 -1
  453. package/build/schemas/v2020_07_22/syncErrorOptions.builder.js.map +1 -1
  454. package/build/schemas/v2020_07_22/syncEventOptions.builder.js.map +1 -1
  455. package/build/schemas/v2020_07_22/syncSchemaFieldsOptions.builder.js.map +1 -1
  456. package/build/schemas/v2020_07_22/syncSchemasOptions.builder.js.map +1 -1
  457. package/build/schemas/v2020_07_22/testOptions.builder.js.map +1 -1
  458. package/build/schemas/v2020_07_22/upgradeSkillOptions.builder.js.map +1 -1
  459. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js.map +1 -1
  460. package/build/services/BuildService.js.map +1 -1
  461. package/build/services/CommandService.js.map +1 -1
  462. package/build/services/DependencyService.js.map +1 -1
  463. package/build/services/GameService.js.map +1 -1
  464. package/build/services/ImportService.js.map +1 -1
  465. package/build/services/LintService.js.map +1 -1
  466. package/build/services/PkgService.js.map +1 -1
  467. package/build/services/ServiceFactory.js.map +1 -1
  468. package/build/services/TypeCheckerService.js.map +1 -1
  469. package/build/stores/AbstractLocalStore.js.map +1 -1
  470. package/build/stores/AbstractStore.js.map +1 -1
  471. package/build/stores/StoreFactory.js.map +1 -1
  472. package/build/templateItemBuilders/EventTemplateItemBuilder.js.map +1 -1
  473. package/build/templateItemBuilders/FieldTemplateItemBuilder.js.map +1 -1
  474. package/build/templateItemBuilders/SchemaTemplateItemBuilder.js.map +1 -1
  475. package/build/tests/AbstractCliTest.js.map +1 -1
  476. package/build/tests/AbstractErrorTest.js.map +1 -1
  477. package/build/tests/AbstractEventTest.js.map +1 -1
  478. package/build/tests/AbstractSchemaTest.js.map +1 -1
  479. package/build/tests/AbstractSkillTest.js.map +1 -1
  480. package/build/tests/AbstractTestTest.js.map +1 -1
  481. package/build/tests/CommandFaker.js.map +1 -1
  482. package/build/tests/JestJsonParser.js.map +1 -1
  483. package/build/tests/MockProgramFactory.js.map +1 -1
  484. package/build/tests/buildTestCache.js.map +1 -1
  485. package/build/tests/cleanTestCache.js.map +1 -1
  486. package/build/tests/cleanTestData.js.map +1 -1
  487. package/build/tests/constants.js.map +1 -1
  488. package/build/tests/fixtures/FeatureFixture.js.map +1 -1
  489. package/build/tests/fixtures/MercuryFixture.js.map +1 -1
  490. package/build/tests/fixtures/OrganizationFixture.js.map +1 -1
  491. package/build/tests/fixtures/PersonFixture.js.map +1 -1
  492. package/build/tests/fixtures/SkillFixture.js.map +1 -1
  493. package/build/tests/fixtures/ViewFixture.js.map +1 -1
  494. package/build/tests/utilities/test.utility.js.map +1 -1
  495. package/build/tests/utilities/uiAssert.utility.js.map +1 -1
  496. package/build/types/apiClient.types.js.map +1 -1
  497. package/build/types/cli.types.js.map +1 -1
  498. package/build/types/graphicsInterface.types.js.map +1 -1
  499. package/build/updaters/ScriptUpdater.js.map +1 -1
  500. package/build/utilities/action.utility.js.map +1 -1
  501. package/build/utilities/apiClient.utility.js.map +1 -1
  502. package/build/utilities/argParser.utility.js.map +1 -1
  503. package/build/utilities/commander.utility.js.map +1 -1
  504. package/build/utilities/duration.utility.js.map +1 -1
  505. package/build/utilities/eventContractCleaner.utility.js.map +1 -1
  506. package/build/utilities/form.utility.js.map +1 -1
  507. package/build/utilities/introspection.utility.js.map +1 -1
  508. package/build/utilities/isCi.js.map +1 -1
  509. package/build/utilities/tsConfig.utility.js.map +1 -1
  510. package/build/utilities/ui.utility.js.map +1 -1
  511. package/build/widgets/Theme.js.map +1 -1
  512. package/build/widgets/WidgetFactory.js.map +1 -1
  513. package/build/widgets/keySelectChoices.js.map +1 -1
  514. package/build/widgets/terminalKit/TKButtonWidget.js.map +1 -1
  515. package/build/widgets/terminalKit/TkBaseWidget.js.map +1 -1
  516. package/build/widgets/terminalKit/TkInputWidget.js.map +1 -1
  517. package/build/widgets/terminalKit/TkLayoutCellWidget.js.map +1 -1
  518. package/build/widgets/terminalKit/TkLayoutWidget.js.map +1 -1
  519. package/build/widgets/terminalKit/TkMenuBarWidget.js.map +1 -1
  520. package/build/widgets/terminalKit/TkPopupWidget.js.map +1 -1
  521. package/build/widgets/terminalKit/TkProgressBarWidget.js.map +1 -1
  522. package/build/widgets/terminalKit/TkTextWidget.js.map +1 -1
  523. package/build/widgets/terminalKit/TkWindowWidget.js.map +1 -1
  524. package/build/widgets/terminalKit/termKit.utility.js.map +1 -1
  525. package/build/widgets/types/button.types.js.map +1 -1
  526. package/build/widgets/types/factory.types.js.map +1 -1
  527. package/build/widgets/types/input.types.js.map +1 -1
  528. package/build/widgets/types/layout.types.js.map +1 -1
  529. package/build/widgets/types/menuBar.types.js.map +1 -1
  530. package/build/widgets/types/popup.types.js.map +1 -1
  531. package/build/widgets/types/progressBar.types.js.map +1 -1
  532. package/build/widgets/types/table.types.js.map +1 -1
  533. package/build/widgets/types/text.types.js.map +1 -1
  534. package/build/widgets/types/widgets.types.js.map +1 -1
  535. package/build/widgets/types/window.types.js.map +1 -1
  536. package/build/widgets/widget.utilities.js.map +1 -1
  537. package/build/writers/AbstractWriter.js.map +1 -1
  538. package/build/writers/WriterFactory.js.map +1 -1
  539. package/package.json +3 -3
  540. package/src/__tests__/implementation/EventStore.test.ts +14 -0
  541. package/src/__tests__/implementation/ListenerStore.test.ts +14 -0
  542. package/src/__tests__/implementation/StoreFeature.test.ts +1 -1
  543. package/src/features/AbstractAction.ts +2 -2
  544. package/src/features/event/builders/EventContractBuilder.ts +2 -2
  545. package/src/features/event/stores/EventStore.ts +11 -8
  546. package/src/features/event/stores/ListenerStore.ts +5 -3
  547. package/src/features/store/StoreFeature.ts +1 -1
  548. package/src/features/validateAndNormalize.utility.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/test/actions/SetupAction.ts"],"names":["SetupAction","setupTestsOptionsSchema","options","normalizedOptions","validateAndNormalizeOptions","demoNumber","skillSlug","Action","execute","phone","pin","substr","length","loginResponse","nameReadable","nameKebab","registerResponse","err","errors","isDuplicateSlugError","responseErrors","code","loginAsSkillResponse","actionUtil","mergeActionResults","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;IAMqBA,W;;;;;;;;;;;;;;;sGACGC,6B;uGACC,CAAC,eAAD,C;0GACG,8B;;;;;;;mGAE3B,iBAAqBC,OAArB;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AACOC,gBAAAA,iBADP,GAC2B,KAAKC,2BAAL,CAAiCF,OAAjC,CAD3B;AAESG,gBAAAA,UAFT,GAEmCF,iBAFnC,CAESE,UAFT,EAEqBC,SAFrB,GAEmCH,iBAFnC,CAEqBG,SAFrB;AAAA;AAAA,uBAI6B,KAAKC,MAAL,CAAY,QAAZ,EAAsB,OAAtB,EAA+BC,OAA/B,CAAuC;AAClEC,kBAAAA,KAAK,EAAEJ,UAD2D;AAElEK,kBAAAA,GAAG,EAAEL,UAAU,CAACM,MAAX,CAAkBN,UAAU,CAACO,MAAX,GAAoB,CAAtC;AAF6D,iBAAvC,CAJ7B;;AAAA;AAIOC,gBAAAA,aAJP;AAAA;AAAA,uBASgC,KAAKN,MAAL,CAAY,OAAZ,EAAqB,UAArB,EAAiCC,OAAjC,CAAyC;AACvEM,kBAAAA,YAAY,EAAER,SADyD;AAEvES,kBAAAA,SAAS,EAAET;AAF4D,iBAAzC,CAThC;;AAAA;AASOU,gBAAAA,gBATP;AAcOC,gBAAAA,GAdP,4BAcaD,gBAAgB,CAACE,MAd9B,0DAca,sBAA0B,CAA1B,CAdb;AAgBOC,gBAAAA,oBAhBP,GAiBE,CAAAF,GAAG,SAAH,IAAAA,GAAG,WAAH,4BAAAA,GAAG,CAAEf,OAAL,uFAAckB,cAAd,gFAA8BR,MAA9B,MAAyC,CAAzC,IACA,CAAAK,GAAG,SAAH,IAAAA,GAAG,WAAH,6BAAAA,GAAG,CAAEf,OAAL,yFAAckB,cAAd,0GAA+B,CAA/B,6GAAmClB,OAAnC,kFAA4CmB,IAA5C,MAAqD,gBAlBvD;AAoBKC,gBAAAA,oBApBL,GAoBiC,EApBjC;;AAAA,qBAsBKH,oBAtBL;AAAA;AAAA;AAAA;;AAuBE,uBAAOH,gBAAgB,CAACE,MAAxB;AAvBF;AAAA,uBAyB+B,KAAKX,MAAL,CAAY,OAAZ,EAAqB,OAArB,EAA8BC,OAA9B,CAAsC;AAClEF,kBAAAA,SAAS,EAATA;AADkE,iBAAtC,CAzB/B;;AAAA;AAyBEgB,gBAAAA,oBAzBF;;AAAA;AAAA,iDA8BQC,mBAAWC,kBAAX,CACN,EADM,EAENX,aAFM,EAGNG,gBAHM,EAINM,oBAJM,CA9BR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EALwCG,2B","sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupTestsOptionsSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = setupTestsOptionsSchema\n\tpublic commandAliases = ['setup.testing']\n\tpublic invocationMessage = 'Setting up for testing... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { demoNumber, skillSlug } = normalizedOptions\n\n\t\tconst loginResponse = await this.Action('person', 'login').execute({\n\t\t\tphone: demoNumber,\n\t\t\tpin: demoNumber.substr(demoNumber.length - 4),\n\t\t})\n\n\t\tconst registerResponse = await this.Action('skill', 'register').execute({\n\t\t\tnameReadable: skillSlug,\n\t\t\tnameKebab: skillSlug,\n\t\t})\n\n\t\tconst err = registerResponse.errors?.[0]\n\n\t\tconst isDuplicateSlugError =\n\t\t\terr?.options?.responseErrors?.length === 1 &&\n\t\t\terr?.options?.responseErrors?.[0]?.options?.code === 'DUPLICATE_SLUG'\n\n\t\tlet loginAsSkillResponse: any = {}\n\n\t\tif (isDuplicateSlugError) {\n\t\t\tdelete registerResponse.errors\n\n\t\t\tloginAsSkillResponse = await this.Action('skill', 'login').execute({\n\t\t\t\tskillSlug,\n\t\t\t})\n\t\t}\n\n\t\treturn actionUtil.mergeActionResults(\n\t\t\t{},\n\t\t\tloginResponse,\n\t\t\tregisterResponse,\n\t\t\tloginAsSkillResponse\n\t\t)\n\t}\n}\n"],"file":"SetupAction.js"}
1
+ {"version":3,"file":"SetupAction.js","names":["SetupAction","setupTestsOptionsSchema","options","normalizedOptions","validateAndNormalizeOptions","demoNumber","skillSlug","Action","execute","phone","pin","substr","length","loginResponse","nameReadable","nameKebab","registerResponse","err","errors","isDuplicateSlugError","responseErrors","code","loginAsSkillResponse","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/test/actions/SetupAction.ts"],"sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupTestsOptionsSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupTestsOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = setupTestsOptionsSchema\n\tpublic commandAliases = ['setup.testing']\n\tpublic invocationMessage = 'Setting up for testing... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { demoNumber, skillSlug } = normalizedOptions\n\n\t\tconst loginResponse = await this.Action('person', 'login').execute({\n\t\t\tphone: demoNumber,\n\t\t\tpin: demoNumber.substr(demoNumber.length - 4),\n\t\t})\n\n\t\tconst registerResponse = await this.Action('skill', 'register').execute({\n\t\t\tnameReadable: skillSlug,\n\t\t\tnameKebab: skillSlug,\n\t\t})\n\n\t\tconst err = registerResponse.errors?.[0]\n\n\t\tconst isDuplicateSlugError =\n\t\t\terr?.options?.responseErrors?.length === 1 &&\n\t\t\terr?.options?.responseErrors?.[0]?.options?.code === 'DUPLICATE_SLUG'\n\n\t\tlet loginAsSkillResponse: any = {}\n\n\t\tif (isDuplicateSlugError) {\n\t\t\tdelete registerResponse.errors\n\n\t\t\tloginAsSkillResponse = await this.Action('skill', 'login').execute({\n\t\t\t\tskillSlug,\n\t\t\t})\n\t\t}\n\n\t\treturn actionUtil.mergeActionResults(\n\t\t\t{},\n\t\t\tloginResponse,\n\t\t\tregisterResponse,\n\t\t\tloginAsSkillResponse\n\t\t)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;IAMqBA,W;;;;;;;;;;;;;;;sGACGC,6B;uGACC,CAAC,eAAD,C;0GACG,8B;;;;;;;mGAE3B,iBAAqBC,OAArB;QAAA;;QAAA;QAAA;UAAA;YAAA;cAAA;gBACOC,iBADP,GAC2B,KAAKC,2BAAL,CAAiCF,OAAjC,CAD3B;gBAESG,UAFT,GAEmCF,iBAFnC,CAESE,UAFT,EAEqBC,SAFrB,GAEmCH,iBAFnC,CAEqBG,SAFrB;gBAAA;gBAAA,OAI6B,KAAKC,MAAL,CAAY,QAAZ,EAAsB,OAAtB,EAA+BC,OAA/B,CAAuC;kBAClEC,KAAK,EAAEJ,UAD2D;kBAElEK,GAAG,EAAEL,UAAU,CAACM,MAAX,CAAkBN,UAAU,CAACO,MAAX,GAAoB,CAAtC;gBAF6D,CAAvC,CAJ7B;;cAAA;gBAIOC,aAJP;gBAAA;gBAAA,OASgC,KAAKN,MAAL,CAAY,OAAZ,EAAqB,UAArB,EAAiCC,OAAjC,CAAyC;kBACvEM,YAAY,EAAER,SADyD;kBAEvES,SAAS,EAAET;gBAF4D,CAAzC,CAThC;;cAAA;gBASOU,gBATP;gBAcOC,GAdP,4BAcaD,gBAAgB,CAACE,MAd9B,0DAca,sBAA0B,CAA1B,CAdb;gBAgBOC,oBAhBP,GAiBE,CAAAF,GAAG,SAAH,IAAAA,GAAG,WAAH,4BAAAA,GAAG,CAAEf,OAAL,uFAAckB,cAAd,gFAA8BR,MAA9B,MAAyC,CAAzC,IACA,CAAAK,GAAG,SAAH,IAAAA,GAAG,WAAH,6BAAAA,GAAG,CAAEf,OAAL,yFAAckB,cAAd,0GAA+B,CAA/B,6GAAmClB,OAAnC,kFAA4CmB,IAA5C,MAAqD,gBAlBvD;gBAoBKC,oBApBL,GAoBiC,EApBjC;;gBAAA,KAsBKH,oBAtBL;kBAAA;kBAAA;gBAAA;;gBAuBE,OAAOH,gBAAgB,CAACE,MAAxB;gBAvBF;gBAAA,OAyB+B,KAAKX,MAAL,CAAY,OAAZ,EAAqB,OAArB,EAA8BC,OAA9B,CAAsC;kBAClEF,SAAS,EAATA;gBADkE,CAAtC,CAzB/B;;cAAA;gBAyBEgB,oBAzBF;;cAAA;gBAAA,iCA8BQC,mBAAWC,kBAAX,CACN,EADM,EAENX,aAFM,EAGNG,gBAHM,EAINM,oBAJM,CA9BR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EALwCG,2B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/test/actions/TestAction.ts"],"names":["optionsSchema","testOptionsSchema","TestAction","options","totalTestFiles","watchMode","settings","Service","get","normalizedOptions","validateAndNormalizeOptions","pattern","shouldReportWhileRunning","inspect","shouldHoldAtStart","shouldReturnImmediately","originalInspect","hasWatchEverBeenEnabled","testReporter","TestReporter","cwd","status","isDebugging","filterPattern","undefined","handleRestart","bind","handleStartStop","handleQuit","handleRerunTestFile","handleOpenTestFile","handleFilterPatternChange","handleToggleDebug","handletoggleStandardWatch","handleToggleSmartWatch","start","watcher","getFeature","startWatching","delay","emitter","on","handleFileChange","runnerStatus","promise","startTestRunner","meta","test","emit","reporter","testResults","stopWatching","destroy","actionResponse","summaryLines","totalTests","totalPassed","totalFailed","totalSkipped","totalTodo","errors","generateErrorsFromTestResults","payload","changes","shouldRestart","filesWeCareAbout","change","values","path","name","doWeCareAboutThisFileChanging","setStatusLabel","push","fileChangeTimeout","clearTimeout","startCountdownTimer","watchDelaySec","setTimeout","smartFilter","generateFilterFromChangedFiles","length","restart","filter","file","search","map","fileToFilterPattern","join","ext","pathUtil","extname","setIsDebugging","setWatchMode","mode","kill","setFilterPattern","filename","basename","replace","dirname","split","sep","pop","holdPromiseResolve","testRunner","fileName","openTestFile","waitForStart","lastTestResults","setStatus","stopCountdownTimer","TestRunner","commandService","firstUpdate","reset","results","failed","testFiles","find","updateResults","render","appendError","message","run","debugPort","hasFailedTests","hasSkippedTests","Promise","resolve","diskUtil","resolvePath","forEach","tests","errorMessages","err","mapErrorResultToSpruceError","SpruceError","code","testName","errorMessage","AbstractAction"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport { SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport open from 'open'\nimport testOptionsSchema from '#spruce/schemas/spruceCli/v2020_07_22/testOptions.schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse, ActionOptions } from '../../features.types'\nimport WatchFeature from '../../watch/WatchFeature'\nimport {\n\tSpruceTestFile,\n\tSpruceTestFileTest,\n\tSpruceTestResults,\n} from '../test.types'\nimport TestReporter, { WatchMode } from '../TestReporter'\nimport TestRunner from '../TestRunner'\n\nexport const optionsSchema = testOptionsSchema\n\nexport type OptionsSchema = typeof optionsSchema\n\ntype DidChangePayload =\n\tSchemaValues<SpruceSchemas.SpruceCli.v2020_07_22.WatcherDidDetectChangesEmitPayloadSchema>\n\nexport default class TestAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic invocationMessage = 'Starting tests... 🛡'\n\n\tprivate testReporter?: TestReporter | undefined\n\tprivate testRunner?: TestRunner\n\tprivate runnerStatus: 'hold' | 'quit' | 'run' | 'restart' = 'hold'\n\tprivate pattern: string | undefined\n\tprivate inspect?: number | null\n\tprivate holdPromiseResolve?: () => void\n\tprivate lastTestResults: SpruceTestResults = { totalTestFiles: 0 }\n\tprivate originalInspect!: number\n\tprivate watcher?: WatchFeature\n\tprivate watchMode: WatchMode = 'off'\n\tprivate fileChangeTimeout?: any\n\tprivate hasWatchEverBeenEnabled = false\n\n\tprivate readonly watchDelaySec = 2\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\t}\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tif (!options.watchMode) {\n\t\t\tconst settings = this.Service('settings')\n\t\t\toptions.watchMode = settings.get('test.watchMode') ?? 'off'\n\t\t}\n\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\n\t\tconst {\n\t\t\tpattern,\n\t\t\tshouldReportWhileRunning,\n\t\t\tinspect,\n\t\t\tshouldHoldAtStart,\n\t\t\twatchMode,\n\t\t\tshouldReturnImmediately,\n\t\t} = normalizedOptions\n\n\t\tthis.originalInspect = inspect ?? 5200\n\t\tthis.inspect = inspect\n\t\tthis.pattern = pattern\n\t\tthis.hasWatchEverBeenEnabled = watchMode !== 'off'\n\t\tthis.watchMode = watchMode as WatchMode\n\n\t\tif (shouldReportWhileRunning) {\n\t\t\tthis.testReporter = new TestReporter({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\twatchMode: this.watchMode,\n\t\t\t\tstatus: shouldHoldAtStart ? 'stopped' : 'ready',\n\t\t\t\tisDebugging: !!inspect,\n\t\t\t\tfilterPattern: pattern ?? undefined,\n\t\t\t\thandleRestart: this.handleRestart.bind(this),\n\t\t\t\thandleStartStop: this.handleStartStop.bind(this),\n\t\t\t\thandleQuit: this.handleQuit.bind(this),\n\t\t\t\thandleRerunTestFile: this.handleRerunTestFile.bind(this),\n\t\t\t\thandleOpenTestFile: this.handleOpenTestFile.bind(this),\n\t\t\t\thandleFilterPatternChange: this.handleFilterPatternChange.bind(this),\n\t\t\t\thandleToggleDebug: this.handleToggleDebug.bind(this),\n\t\t\t\thandletoggleStandardWatch: this.handletoggleStandardWatch.bind(this),\n\t\t\t\thandleToggleSmartWatch: this.handleToggleSmartWatch?.bind(this),\n\t\t\t})\n\n\t\t\tawait this.testReporter.start()\n\t\t}\n\n\t\tthis.watcher = this.getFeature('watch') as WatchFeature\n\t\tvoid this.watcher.startWatching({ delay: 0 })\n\n\t\tawait this.emitter.on(\n\t\t\t'watcher.did-detect-change',\n\t\t\tthis.handleFileChange.bind(this)\n\t\t)\n\n\t\tthis.runnerStatus = shouldHoldAtStart ? 'hold' : 'run'\n\n\t\tconst promise = this.startTestRunner(normalizedOptions)\n\n\t\tif (shouldReturnImmediately) {\n\t\t\treturn {\n\t\t\t\tmeta: {\n\t\t\t\t\tpromise,\n\t\t\t\t\ttest: this,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tvoid this.emitter.emit('test.reporter-did-boot', {\n\t\t\treporter: this,\n\t\t})\n\n\t\tconst testResults = await promise\n\n\t\tawait this.watcher?.stopWatching()\n\t\tawait this.testReporter?.destroy()\n\n\t\tconst actionResponse: FeatureActionResponse = {\n\t\t\tmeta: { testResults },\n\t\t\tsummaryLines: [\n\t\t\t\t`Test files: ${testResults.totalTestFiles}`,\n\t\t\t\t`Tests: ${testResults.totalTests ?? '0'}`,\n\t\t\t\t`Passed: ${testResults.totalPassed ?? '0'}`,\n\t\t\t\t`Failed: ${testResults.totalFailed ?? '0'}`,\n\t\t\t\t`Skipped: ${testResults.totalSkipped ?? '0'}`,\n\t\t\t\t`Todo: ${testResults.totalTodo ?? '0'}`,\n\t\t\t],\n\t\t}\n\n\t\tif (testResults.totalFailed ?? 0 > 0) {\n\t\t\tactionResponse.errors = this.generateErrorsFromTestResults(testResults)\n\t\t}\n\n\t\treturn actionResponse\n\t}\n\n\tprivate handleFileChange(payload: DidChangePayload) {\n\t\tif (\n\t\t\tthis.watchMode === 'off' ||\n\t\t\t!(this.runnerStatus === 'run' || this.runnerStatus == 'hold')\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { changes } = payload\n\n\t\tlet shouldRestart = false\n\t\tconst filesWeCareAbout: string[] = []\n\n\t\tfor (const change of changes) {\n\t\t\tconst { path, name } = change.values\n\n\t\t\tif (this.doWeCareAboutThisFileChanging(path)) {\n\t\t\t\tthis.testReporter?.setStatusLabel(`Built file: ${name}`)\n\t\t\t\tshouldRestart = true\n\t\t\t\tfilesWeCareAbout.push(path)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRestart) {\n\t\t\tif (this.fileChangeTimeout) {\n\t\t\t\tclearTimeout(this.fileChangeTimeout)\n\t\t\t}\n\n\t\t\tthis.testReporter?.startCountdownTimer(this.watchDelaySec)\n\t\t\tthis.fileChangeTimeout = setTimeout(() => {\n\t\t\t\tif (this.watchMode === 'smart') {\n\t\t\t\t\tconst smartFilter =\n\t\t\t\t\t\tthis.generateFilterFromChangedFiles(filesWeCareAbout)\n\t\t\t\t\tif (smartFilter.length > 0) {\n\t\t\t\t\t\tthis.handleFilterPatternChange(smartFilter)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.restart()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.restart()\n\t\t\t\t}\n\t\t\t}, this.watchDelaySec * 1000) as any\n\t\t}\n\t}\n\n\tprivate generateFilterFromChangedFiles(filesWeCareAbout: string[]): string {\n\t\tconst filter = filesWeCareAbout\n\t\t\t.filter((file) => file.search('test.js') > -1)\n\t\t\t.map((file) => this.fileToFilterPattern(file))\n\t\t\t.join(' ')\n\n\t\treturn filter\n\t}\n\n\tprivate doWeCareAboutThisFileChanging(path: string) {\n\t\tconst ext = pathUtil.extname(path)\n\n\t\tif (\n\t\t\tpath.search('testDirsAndFiles') > -1 ||\n\t\t\tpath.search('.change_cache') > -1\n\t\t) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (ext === '.js') {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate handleToggleDebug() {\n\t\tif (this.inspect) {\n\t\t\tthis.inspect = undefined\n\t\t} else {\n\t\t\tthis.inspect = this.originalInspect\n\t\t}\n\n\t\tthis.testReporter?.setIsDebugging(!!this.inspect)\n\t\tthis.restart()\n\t}\n\n\tprivate handletoggleStandardWatch() {\n\t\tif (this.watchMode === 'standard') {\n\t\t\tthis.testReporter?.setWatchMode('off')\n\t\t} else {\n\t\t\tthis.setWatchMode('standard')\n\t\t}\n\t}\n\n\tprivate handleToggleSmartWatch() {\n\t\tif (this.watchMode === 'smart') {\n\t\t\tthis.setWatchMode('off')\n\t\t} else {\n\t\t\tthis.setWatchMode('smart')\n\t\t}\n\t}\n\n\tpublic setWatchMode(mode: WatchMode) {\n\t\tthis.watchMode = mode\n\t\tthis.testReporter?.setWatchMode(mode)\n\t\tthis.hasWatchEverBeenEnabled = true\n\t}\n\n\tprivate restart() {\n\t\tthis.runnerStatus = 'restart'\n\t\tthis.kill()\n\t}\n\n\tprivate handleQuit() {\n\t\tthis.runnerStatus = 'quit'\n\t\tthis.kill()\n\t}\n\n\tprivate handleRerunTestFile(file: string) {\n\t\tconst name = this.fileToFilterPattern(file)\n\n\t\tthis.testReporter?.setFilterPattern(name)\n\t\tthis.handleFilterPatternChange(name)\n\t}\n\n\tprivate fileToFilterPattern(file: string) {\n\t\tconst filename = pathUtil\n\t\t\t.basename(file, '.ts')\n\t\t\t.replace('.tsx', '')\n\t\t\t.replace('.js', '')\n\t\tconst dirname = pathUtil.dirname(file).split(pathUtil.sep).pop() ?? ''\n\n\t\tconst name = pathUtil.join(dirname, filename)\n\t\treturn name\n\t}\n\n\tprivate handleFilterPatternChange(filterPattern?: string) {\n\t\tthis.pattern = filterPattern\n\t\tthis.testReporter?.setFilterPattern(filterPattern)\n\n\t\tthis.restart()\n\t}\n\n\tprivate handleStartStop() {\n\t\tif (this.runnerStatus === 'hold') {\n\t\t\tthis.runnerStatus = 'run'\n\t\t\tthis.holdPromiseResolve?.()\n\t\t\tthis.holdPromiseResolve = undefined\n\t\t} else if (this.runnerStatus === 'run') {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t\tthis.kill()\n\t\t}\n\t}\n\n\tprivate handleRestart() {\n\t\tthis.restart()\n\t}\n\n\tpublic kill() {\n\t\tthis.testRunner?.kill()\n\t\tthis.holdPromiseResolve?.()\n\t\tthis.holdPromiseResolve = undefined\n\t}\n\n\tprivate async handleOpenTestFile(fileName: string) {\n\t\tawait this.openTestFile(fileName)\n\t}\n\n\tprivate async startTestRunner(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<SpruceTestResults> {\n\t\tif (this.runnerStatus === 'hold') {\n\t\t\tawait this.waitForStart()\n\t\t}\n\n\t\tif (this.runnerStatus === 'quit') {\n\t\t\treturn this.lastTestResults\n\t\t}\n\n\t\tthis.testReporter?.setStatus('ready')\n\t\tthis.testReporter?.stopCountdownTimer()\n\n\t\tthis.testRunner = new TestRunner({\n\t\t\tcwd: this.cwd,\n\t\t\tcommandService: this.Service('command'),\n\t\t})\n\n\t\tlet firstUpdate = true\n\n\t\tif (this.testReporter) {\n\t\t\tawait this.testRunner.on('did-update', (payload) => {\n\t\t\t\tif (firstUpdate) {\n\t\t\t\t\tfirstUpdate = false\n\t\t\t\t\tthis.testReporter?.setStatus('running')\n\t\t\t\t\tthis.testReporter?.reset()\n\t\t\t\t}\n\n\t\t\t\tif (this.watchMode === 'smart' && payload.results.totalFailed > 0) {\n\t\t\t\t\tconst failed = payload.results.testFiles.find(\n\t\t\t\t\t\t(file: any) => file.status === 'failed'\n\t\t\t\t\t)\n\n\t\t\t\t\tif (failed) {\n\t\t\t\t\t\tconst pattern = this.fileToFilterPattern(failed.path)\n\t\t\t\t\t\tif (this.pattern !== pattern) {\n\t\t\t\t\t\t\tthis.handleFilterPatternChange(pattern)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.testReporter?.updateResults(payload.results)\n\t\t\t\tthis.testReporter?.render()\n\t\t\t})\n\n\t\t\tawait this.testRunner.on('did-error', (payload) => {\n\t\t\t\tthis.testReporter?.appendError(payload.message)\n\t\t\t\tthis.testReporter?.render()\n\t\t\t})\n\t\t}\n\n\t\tthis.runnerStatus = 'run'\n\n\t\tlet testResults: SpruceTestResults = await this.testRunner.run({\n\t\t\tpattern: this.pattern,\n\t\t\tdebugPort: this.inspect,\n\t\t})\n\n\t\tif (\n\t\t\t//@ts-ignore\n\t\t\tthis.runnerStatus !== 'restart' &&\n\t\t\t(!options.shouldReportWhileRunning ||\n\t\t\t\t!this.hasWatchEverBeenEnabled ||\n\t\t\t\t(this.runnerStatus as any) === 'quit')\n\t\t) {\n\t\t\treturn testResults\n\t\t}\n\n\t\tif (\n\t\t\tthis.runnerStatus === 'run' &&\n\t\t\tthis.watchMode === 'smart' &&\n\t\t\tthis.testRunner?.hasFailedTests() === false &&\n\t\t\t!this.testRunner?.hasSkippedTests() &&\n\t\t\t(this.pattern ?? []).length > 0\n\t\t) {\n\t\t\tthis.testReporter?.setStatusLabel('Restarting...')\n\t\t\tthis.runnerStatus = 'restart'\n\t\t\tthis.testReporter?.startCountdownTimer(3)\n\n\t\t\treturn await new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.pattern = ''\n\t\t\t\t\tthis.testReporter?.setFilterPattern('')\n\t\t\t\t\tresolve(this.startTestRunner(options))\n\t\t\t\t}, 3000)\n\t\t\t})\n\t\t}\n\n\t\tif (this.runnerStatus === 'run') {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t}\n\n\t\tthis.testReporter?.setStatus('stopped')\n\n\t\tthis.lastTestResults = testResults\n\n\t\treturn this.startTestRunner(options)\n\t}\n\n\tpublic async waitForStart() {\n\t\tawait new Promise((resolve: any) => {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t\tthis.holdPromiseResolve = resolve\n\t\t})\n\t}\n\n\tprivate async openTestFile(fileName: string): Promise<void> {\n\t\tconst path = diskUtil.resolvePath(this.cwd, 'src', '__tests__', fileName)\n\t\tawait open(path)\n\t}\n\n\tprivate generateErrorsFromTestResults(testResults: SpruceTestResults) {\n\t\tconst errors: SpruceError[] = []\n\t\ttestResults.testFiles?.forEach((file) => {\n\t\t\tfile.tests?.forEach((test) => {\n\t\t\t\ttest.errorMessages?.forEach((message) => {\n\t\t\t\t\tconst err = this.mapErrorResultToSpruceError(test, file, message)\n\t\t\t\t\terrors.push(err)\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t\tif (errors.length > 0) {\n\t\t\treturn errors\n\t\t}\n\n\t\treturn undefined\n\t}\n\n\tprivate mapErrorResultToSpruceError(\n\t\ttest: SpruceTestFileTest,\n\t\tfile: SpruceTestFile,\n\t\tmessage: string\n\t) {\n\t\treturn new SpruceError({\n\t\t\tcode: 'TEST_FAILED',\n\t\t\ttestName: test.name,\n\t\t\tfileName: file.path,\n\t\t\terrorMessage: message,\n\t\t})\n\t}\n\n\tpublic getWatchMode() {\n\t\treturn this.watchMode\n\t}\n}\n"],"file":"TestAction.js"}
1
+ {"version":3,"file":"TestAction.js","names":["optionsSchema","testOptionsSchema","TestAction","options","totalTestFiles","watchMode","settings","Service","get","normalizedOptions","validateAndNormalizeOptions","pattern","shouldReportWhileRunning","inspect","shouldHoldAtStart","shouldReturnImmediately","originalInspect","hasWatchEverBeenEnabled","testReporter","TestReporter","cwd","status","isDebugging","filterPattern","undefined","handleRestart","bind","handleStartStop","handleQuit","handleRerunTestFile","handleOpenTestFile","handleFilterPatternChange","handleToggleDebug","handletoggleStandardWatch","handleToggleSmartWatch","start","watcher","getFeature","startWatching","delay","emitter","on","handleFileChange","runnerStatus","promise","startTestRunner","meta","test","emit","reporter","testResults","stopWatching","destroy","actionResponse","summaryLines","totalTests","totalPassed","totalFailed","totalSkipped","totalTodo","errors","generateErrorsFromTestResults","payload","changes","shouldRestart","filesWeCareAbout","change","values","path","name","doWeCareAboutThisFileChanging","setStatusLabel","push","fileChangeTimeout","clearTimeout","startCountdownTimer","watchDelaySec","setTimeout","smartFilter","generateFilterFromChangedFiles","length","restart","filter","file","search","map","fileToFilterPattern","join","ext","pathUtil","extname","setIsDebugging","setWatchMode","mode","kill","setFilterPattern","filename","basename","replace","dirname","split","sep","pop","holdPromiseResolve","testRunner","fileName","openTestFile","waitForStart","lastTestResults","setStatus","stopCountdownTimer","TestRunner","commandService","firstUpdate","reset","results","failed","testFiles","find","updateResults","render","appendError","message","run","debugPort","hasFailedTests","hasSkippedTests","Promise","resolve","diskUtil","resolvePath","forEach","tests","errorMessages","err","mapErrorResultToSpruceError","SpruceError","code","testName","errorMessage","AbstractAction"],"sources":["../../../../src/features/test/actions/TestAction.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport { SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport open from 'open'\nimport testOptionsSchema from '#spruce/schemas/spruceCli/v2020_07_22/testOptions.schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse, ActionOptions } from '../../features.types'\nimport WatchFeature from '../../watch/WatchFeature'\nimport {\n\tSpruceTestFile,\n\tSpruceTestFileTest,\n\tSpruceTestResults,\n} from '../test.types'\nimport TestReporter, { WatchMode } from '../TestReporter'\nimport TestRunner from '../TestRunner'\n\nexport const optionsSchema = testOptionsSchema\n\nexport type OptionsSchema = typeof optionsSchema\n\ntype DidChangePayload =\n\tSchemaValues<SpruceSchemas.SpruceCli.v2020_07_22.WatcherDidDetectChangesEmitPayloadSchema>\n\nexport default class TestAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic invocationMessage = 'Starting tests... 🛡'\n\n\tprivate testReporter?: TestReporter | undefined\n\tprivate testRunner?: TestRunner\n\tprivate runnerStatus: 'hold' | 'quit' | 'run' | 'restart' = 'hold'\n\tprivate pattern: string | undefined\n\tprivate inspect?: number | null\n\tprivate holdPromiseResolve?: () => void\n\tprivate lastTestResults: SpruceTestResults = { totalTestFiles: 0 }\n\tprivate originalInspect!: number\n\tprivate watcher?: WatchFeature\n\tprivate watchMode: WatchMode = 'off'\n\tprivate fileChangeTimeout?: any\n\tprivate hasWatchEverBeenEnabled = false\n\n\tprivate readonly watchDelaySec = 2\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\t}\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tif (!options.watchMode) {\n\t\t\tconst settings = this.Service('settings')\n\t\t\toptions.watchMode = settings.get('test.watchMode') ?? 'off'\n\t\t}\n\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\n\t\tconst {\n\t\t\tpattern,\n\t\t\tshouldReportWhileRunning,\n\t\t\tinspect,\n\t\t\tshouldHoldAtStart,\n\t\t\twatchMode,\n\t\t\tshouldReturnImmediately,\n\t\t} = normalizedOptions\n\n\t\tthis.originalInspect = inspect ?? 5200\n\t\tthis.inspect = inspect\n\t\tthis.pattern = pattern\n\t\tthis.hasWatchEverBeenEnabled = watchMode !== 'off'\n\t\tthis.watchMode = watchMode as WatchMode\n\n\t\tif (shouldReportWhileRunning) {\n\t\t\tthis.testReporter = new TestReporter({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\twatchMode: this.watchMode,\n\t\t\t\tstatus: shouldHoldAtStart ? 'stopped' : 'ready',\n\t\t\t\tisDebugging: !!inspect,\n\t\t\t\tfilterPattern: pattern ?? undefined,\n\t\t\t\thandleRestart: this.handleRestart.bind(this),\n\t\t\t\thandleStartStop: this.handleStartStop.bind(this),\n\t\t\t\thandleQuit: this.handleQuit.bind(this),\n\t\t\t\thandleRerunTestFile: this.handleRerunTestFile.bind(this),\n\t\t\t\thandleOpenTestFile: this.handleOpenTestFile.bind(this),\n\t\t\t\thandleFilterPatternChange: this.handleFilterPatternChange.bind(this),\n\t\t\t\thandleToggleDebug: this.handleToggleDebug.bind(this),\n\t\t\t\thandletoggleStandardWatch: this.handletoggleStandardWatch.bind(this),\n\t\t\t\thandleToggleSmartWatch: this.handleToggleSmartWatch?.bind(this),\n\t\t\t})\n\n\t\t\tawait this.testReporter.start()\n\t\t}\n\n\t\tthis.watcher = this.getFeature('watch') as WatchFeature\n\t\tvoid this.watcher.startWatching({ delay: 0 })\n\n\t\tawait this.emitter.on(\n\t\t\t'watcher.did-detect-change',\n\t\t\tthis.handleFileChange.bind(this)\n\t\t)\n\n\t\tthis.runnerStatus = shouldHoldAtStart ? 'hold' : 'run'\n\n\t\tconst promise = this.startTestRunner(normalizedOptions)\n\n\t\tif (shouldReturnImmediately) {\n\t\t\treturn {\n\t\t\t\tmeta: {\n\t\t\t\t\tpromise,\n\t\t\t\t\ttest: this,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tvoid this.emitter.emit('test.reporter-did-boot', {\n\t\t\treporter: this,\n\t\t})\n\n\t\tconst testResults = await promise\n\n\t\tawait this.watcher?.stopWatching()\n\t\tawait this.testReporter?.destroy()\n\n\t\tconst actionResponse: FeatureActionResponse = {\n\t\t\tmeta: { testResults },\n\t\t\tsummaryLines: [\n\t\t\t\t`Test files: ${testResults.totalTestFiles}`,\n\t\t\t\t`Tests: ${testResults.totalTests ?? '0'}`,\n\t\t\t\t`Passed: ${testResults.totalPassed ?? '0'}`,\n\t\t\t\t`Failed: ${testResults.totalFailed ?? '0'}`,\n\t\t\t\t`Skipped: ${testResults.totalSkipped ?? '0'}`,\n\t\t\t\t`Todo: ${testResults.totalTodo ?? '0'}`,\n\t\t\t],\n\t\t}\n\n\t\tif (testResults.totalFailed ?? 0 > 0) {\n\t\t\tactionResponse.errors = this.generateErrorsFromTestResults(testResults)\n\t\t}\n\n\t\treturn actionResponse\n\t}\n\n\tprivate handleFileChange(payload: DidChangePayload) {\n\t\tif (\n\t\t\tthis.watchMode === 'off' ||\n\t\t\t!(this.runnerStatus === 'run' || this.runnerStatus == 'hold')\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tconst { changes } = payload\n\n\t\tlet shouldRestart = false\n\t\tconst filesWeCareAbout: string[] = []\n\n\t\tfor (const change of changes) {\n\t\t\tconst { path, name } = change.values\n\n\t\t\tif (this.doWeCareAboutThisFileChanging(path)) {\n\t\t\t\tthis.testReporter?.setStatusLabel(`Built file: ${name}`)\n\t\t\t\tshouldRestart = true\n\t\t\t\tfilesWeCareAbout.push(path)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRestart) {\n\t\t\tif (this.fileChangeTimeout) {\n\t\t\t\tclearTimeout(this.fileChangeTimeout)\n\t\t\t}\n\n\t\t\tthis.testReporter?.startCountdownTimer(this.watchDelaySec)\n\t\t\tthis.fileChangeTimeout = setTimeout(() => {\n\t\t\t\tif (this.watchMode === 'smart') {\n\t\t\t\t\tconst smartFilter =\n\t\t\t\t\t\tthis.generateFilterFromChangedFiles(filesWeCareAbout)\n\t\t\t\t\tif (smartFilter.length > 0) {\n\t\t\t\t\t\tthis.handleFilterPatternChange(smartFilter)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.restart()\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.restart()\n\t\t\t\t}\n\t\t\t}, this.watchDelaySec * 1000) as any\n\t\t}\n\t}\n\n\tprivate generateFilterFromChangedFiles(filesWeCareAbout: string[]): string {\n\t\tconst filter = filesWeCareAbout\n\t\t\t.filter((file) => file.search('test.js') > -1)\n\t\t\t.map((file) => this.fileToFilterPattern(file))\n\t\t\t.join(' ')\n\n\t\treturn filter\n\t}\n\n\tprivate doWeCareAboutThisFileChanging(path: string) {\n\t\tconst ext = pathUtil.extname(path)\n\n\t\tif (\n\t\t\tpath.search('testDirsAndFiles') > -1 ||\n\t\t\tpath.search('.change_cache') > -1\n\t\t) {\n\t\t\treturn false\n\t\t}\n\n\t\tif (ext === '.js') {\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate handleToggleDebug() {\n\t\tif (this.inspect) {\n\t\t\tthis.inspect = undefined\n\t\t} else {\n\t\t\tthis.inspect = this.originalInspect\n\t\t}\n\n\t\tthis.testReporter?.setIsDebugging(!!this.inspect)\n\t\tthis.restart()\n\t}\n\n\tprivate handletoggleStandardWatch() {\n\t\tif (this.watchMode === 'standard') {\n\t\t\tthis.testReporter?.setWatchMode('off')\n\t\t} else {\n\t\t\tthis.setWatchMode('standard')\n\t\t}\n\t}\n\n\tprivate handleToggleSmartWatch() {\n\t\tif (this.watchMode === 'smart') {\n\t\t\tthis.setWatchMode('off')\n\t\t} else {\n\t\t\tthis.setWatchMode('smart')\n\t\t}\n\t}\n\n\tpublic setWatchMode(mode: WatchMode) {\n\t\tthis.watchMode = mode\n\t\tthis.testReporter?.setWatchMode(mode)\n\t\tthis.hasWatchEverBeenEnabled = true\n\t}\n\n\tprivate restart() {\n\t\tthis.runnerStatus = 'restart'\n\t\tthis.kill()\n\t}\n\n\tprivate handleQuit() {\n\t\tthis.runnerStatus = 'quit'\n\t\tthis.kill()\n\t}\n\n\tprivate handleRerunTestFile(file: string) {\n\t\tconst name = this.fileToFilterPattern(file)\n\n\t\tthis.testReporter?.setFilterPattern(name)\n\t\tthis.handleFilterPatternChange(name)\n\t}\n\n\tprivate fileToFilterPattern(file: string) {\n\t\tconst filename = pathUtil\n\t\t\t.basename(file, '.ts')\n\t\t\t.replace('.tsx', '')\n\t\t\t.replace('.js', '')\n\t\tconst dirname = pathUtil.dirname(file).split(pathUtil.sep).pop() ?? ''\n\n\t\tconst name = pathUtil.join(dirname, filename)\n\t\treturn name\n\t}\n\n\tprivate handleFilterPatternChange(filterPattern?: string) {\n\t\tthis.pattern = filterPattern\n\t\tthis.testReporter?.setFilterPattern(filterPattern)\n\n\t\tthis.restart()\n\t}\n\n\tprivate handleStartStop() {\n\t\tif (this.runnerStatus === 'hold') {\n\t\t\tthis.runnerStatus = 'run'\n\t\t\tthis.holdPromiseResolve?.()\n\t\t\tthis.holdPromiseResolve = undefined\n\t\t} else if (this.runnerStatus === 'run') {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t\tthis.kill()\n\t\t}\n\t}\n\n\tprivate handleRestart() {\n\t\tthis.restart()\n\t}\n\n\tpublic kill() {\n\t\tthis.testRunner?.kill()\n\t\tthis.holdPromiseResolve?.()\n\t\tthis.holdPromiseResolve = undefined\n\t}\n\n\tprivate async handleOpenTestFile(fileName: string) {\n\t\tawait this.openTestFile(fileName)\n\t}\n\n\tprivate async startTestRunner(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<SpruceTestResults> {\n\t\tif (this.runnerStatus === 'hold') {\n\t\t\tawait this.waitForStart()\n\t\t}\n\n\t\tif (this.runnerStatus === 'quit') {\n\t\t\treturn this.lastTestResults\n\t\t}\n\n\t\tthis.testReporter?.setStatus('ready')\n\t\tthis.testReporter?.stopCountdownTimer()\n\n\t\tthis.testRunner = new TestRunner({\n\t\t\tcwd: this.cwd,\n\t\t\tcommandService: this.Service('command'),\n\t\t})\n\n\t\tlet firstUpdate = true\n\n\t\tif (this.testReporter) {\n\t\t\tawait this.testRunner.on('did-update', (payload) => {\n\t\t\t\tif (firstUpdate) {\n\t\t\t\t\tfirstUpdate = false\n\t\t\t\t\tthis.testReporter?.setStatus('running')\n\t\t\t\t\tthis.testReporter?.reset()\n\t\t\t\t}\n\n\t\t\t\tif (this.watchMode === 'smart' && payload.results.totalFailed > 0) {\n\t\t\t\t\tconst failed = payload.results.testFiles.find(\n\t\t\t\t\t\t(file: any) => file.status === 'failed'\n\t\t\t\t\t)\n\n\t\t\t\t\tif (failed) {\n\t\t\t\t\t\tconst pattern = this.fileToFilterPattern(failed.path)\n\t\t\t\t\t\tif (this.pattern !== pattern) {\n\t\t\t\t\t\t\tthis.handleFilterPatternChange(pattern)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.testReporter?.updateResults(payload.results)\n\t\t\t\tthis.testReporter?.render()\n\t\t\t})\n\n\t\t\tawait this.testRunner.on('did-error', (payload) => {\n\t\t\t\tthis.testReporter?.appendError(payload.message)\n\t\t\t\tthis.testReporter?.render()\n\t\t\t})\n\t\t}\n\n\t\tthis.runnerStatus = 'run'\n\n\t\tlet testResults: SpruceTestResults = await this.testRunner.run({\n\t\t\tpattern: this.pattern,\n\t\t\tdebugPort: this.inspect,\n\t\t})\n\n\t\tif (\n\t\t\t//@ts-ignore\n\t\t\tthis.runnerStatus !== 'restart' &&\n\t\t\t(!options.shouldReportWhileRunning ||\n\t\t\t\t!this.hasWatchEverBeenEnabled ||\n\t\t\t\t(this.runnerStatus as any) === 'quit')\n\t\t) {\n\t\t\treturn testResults\n\t\t}\n\n\t\tif (\n\t\t\tthis.runnerStatus === 'run' &&\n\t\t\tthis.watchMode === 'smart' &&\n\t\t\tthis.testRunner?.hasFailedTests() === false &&\n\t\t\t!this.testRunner?.hasSkippedTests() &&\n\t\t\t(this.pattern ?? []).length > 0\n\t\t) {\n\t\t\tthis.testReporter?.setStatusLabel('Restarting...')\n\t\t\tthis.runnerStatus = 'restart'\n\t\t\tthis.testReporter?.startCountdownTimer(3)\n\n\t\t\treturn await new Promise((resolve) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.pattern = ''\n\t\t\t\t\tthis.testReporter?.setFilterPattern('')\n\t\t\t\t\tresolve(this.startTestRunner(options))\n\t\t\t\t}, 3000)\n\t\t\t})\n\t\t}\n\n\t\tif (this.runnerStatus === 'run') {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t}\n\n\t\tthis.testReporter?.setStatus('stopped')\n\n\t\tthis.lastTestResults = testResults\n\n\t\treturn this.startTestRunner(options)\n\t}\n\n\tpublic async waitForStart() {\n\t\tawait new Promise((resolve: any) => {\n\t\t\tthis.runnerStatus = 'hold'\n\t\t\tthis.holdPromiseResolve = resolve\n\t\t})\n\t}\n\n\tprivate async openTestFile(fileName: string): Promise<void> {\n\t\tconst path = diskUtil.resolvePath(this.cwd, 'src', '__tests__', fileName)\n\t\tawait open(path)\n\t}\n\n\tprivate generateErrorsFromTestResults(testResults: SpruceTestResults) {\n\t\tconst errors: SpruceError[] = []\n\t\ttestResults.testFiles?.forEach((file) => {\n\t\t\tfile.tests?.forEach((test) => {\n\t\t\t\ttest.errorMessages?.forEach((message) => {\n\t\t\t\t\tconst err = this.mapErrorResultToSpruceError(test, file, message)\n\t\t\t\t\terrors.push(err)\n\t\t\t\t})\n\t\t\t})\n\t\t})\n\t\tif (errors.length > 0) {\n\t\t\treturn errors\n\t\t}\n\n\t\treturn undefined\n\t}\n\n\tprivate mapErrorResultToSpruceError(\n\t\ttest: SpruceTestFileTest,\n\t\tfile: SpruceTestFile,\n\t\tmessage: string\n\t) {\n\t\treturn new SpruceError({\n\t\t\tcode: 'TEST_FAILED',\n\t\t\ttestName: test.name,\n\t\t\tfileName: file.path,\n\t\t\terrorMessage: message,\n\t\t})\n\t}\n\n\tpublic getWatchMode() {\n\t\treturn this.watchMode\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGA;;AACA;;AACA;;AACA;;AACA;;AAQA;;AACA;;;;;;;;;;;;AAEO,IAAMA,aAAa,GAAGC,uBAAtB;;;IAOcC,U;;;;;EAmBpB,oBAAmBC,OAAnB,EAA2C;IAAA;;IAAA;IAC1C,0BAAMA,OAAN;IAD0C,kGAlBpBH,aAkBoB;IAAA,sGAjBhB,sBAiBgB;IAAA;IAAA;IAAA,iGAbiB,MAajB;IAAA;IAAA;IAAA;IAAA,oGATE;MAAEI,cAAc,EAAE;IAAlB,CASF;IAAA;IAAA;IAAA,8FANZ,KAMY;IAAA;IAAA,4GAJT,KAIS;IAAA,kGAFV,CAEU;IAAA;EAE1C;;;;;mGAED,iBACCD,OADD;QAAA;;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAGC,IAAI,CAACA,OAAO,CAACE,SAAb,EAAwB;kBACjBC,QADiB,GACN,KAAKC,OAAL,CAAa,UAAb,CADM;kBAEvBJ,OAAO,CAACE,SAAR,oBAAoBC,QAAQ,CAACE,GAAT,CAAa,gBAAb,CAApB,yDAAsD,KAAtD;gBACA;;gBAEKC,iBARP,GAQ2B,KAAKC,2BAAL,CAAiCP,OAAjC,CAR3B;gBAWEQ,OAXF,GAiBKF,iBAjBL,CAWEE,OAXF,EAYEC,wBAZF,GAiBKH,iBAjBL,CAYEG,wBAZF,EAaEC,OAbF,GAiBKJ,iBAjBL,CAaEI,OAbF,EAcEC,iBAdF,GAiBKL,iBAjBL,CAcEK,iBAdF,EAeET,SAfF,GAiBKI,iBAjBL,CAeEJ,SAfF,EAgBEU,uBAhBF,GAiBKN,iBAjBL,CAgBEM,uBAhBF;gBAmBC,KAAKC,eAAL,GAAuBH,OAAvB,aAAuBA,OAAvB,cAAuBA,OAAvB,GAAkC,IAAlC;gBACA,KAAKA,OAAL,GAAeA,OAAf;gBACA,KAAKF,OAAL,GAAeA,OAAf;gBACA,KAAKM,uBAAL,GAA+BZ,SAAS,KAAK,KAA7C;gBACA,KAAKA,SAAL,GAAiBA,SAAjB;;gBAvBD,KAyBKO,wBAzBL;kBAAA;kBAAA;gBAAA;;gBA0BE,KAAKM,YAAL,GAAoB,IAAIC,wBAAJ,CAAiB;kBACpCC,GAAG,EAAE,KAAKA,GAD0B;kBAEpCf,SAAS,EAAE,KAAKA,SAFoB;kBAGpCgB,MAAM,EAAEP,iBAAiB,GAAG,SAAH,GAAe,OAHJ;kBAIpCQ,WAAW,EAAE,CAAC,CAACT,OAJqB;kBAKpCU,aAAa,EAAEZ,OAAF,aAAEA,OAAF,cAAEA,OAAF,GAAaa,SALU;kBAMpCC,aAAa,EAAE,KAAKA,aAAL,CAAmBC,IAAnB,CAAwB,IAAxB,CANqB;kBAOpCC,eAAe,EAAE,KAAKA,eAAL,CAAqBD,IAArB,CAA0B,IAA1B,CAPmB;kBAQpCE,UAAU,EAAE,KAAKA,UAAL,CAAgBF,IAAhB,CAAqB,IAArB,CARwB;kBASpCG,mBAAmB,EAAE,KAAKA,mBAAL,CAAyBH,IAAzB,CAA8B,IAA9B,CATe;kBAUpCI,kBAAkB,EAAE,KAAKA,kBAAL,CAAwBJ,IAAxB,CAA6B,IAA7B,CAVgB;kBAWpCK,yBAAyB,EAAE,KAAKA,yBAAL,CAA+BL,IAA/B,CAAoC,IAApC,CAXS;kBAYpCM,iBAAiB,EAAE,KAAKA,iBAAL,CAAuBN,IAAvB,CAA4B,IAA5B,CAZiB;kBAapCO,yBAAyB,EAAE,KAAKA,yBAAL,CAA+BP,IAA/B,CAAoC,IAApC,CAbS;kBAcpCQ,sBAAsB,2BAAE,KAAKA,sBAAP,0DAAE,sBAA6BR,IAA7B,CAAkC,IAAlC;gBAdY,CAAjB,CAApB;gBA1BF;gBAAA,OA2CQ,KAAKR,YAAL,CAAkBiB,KAAlB,EA3CR;;cAAA;gBA8CC,KAAKC,OAAL,GAAe,KAAKC,UAAL,CAAgB,OAAhB,CAAf;gBACA,KAAK,KAAKD,OAAL,CAAaE,aAAb,CAA2B;kBAAEC,KAAK,EAAE;gBAAT,CAA3B,CAAL;gBA/CD;gBAAA,OAiDO,KAAKC,OAAL,CAAaC,EAAb,CACL,2BADK,EAEL,KAAKC,gBAAL,CAAsBhB,IAAtB,CAA2B,IAA3B,CAFK,CAjDP;;cAAA;gBAsDC,KAAKiB,YAAL,GAAoB7B,iBAAiB,GAAG,MAAH,GAAY,KAAjD;gBAEM8B,OAxDP,GAwDiB,KAAKC,eAAL,CAAqBpC,iBAArB,CAxDjB;;gBAAA,KA0DKM,uBA1DL;kBAAA;kBAAA;gBAAA;;gBAAA,iCA2DS;kBACN+B,IAAI,EAAE;oBACLF,OAAO,EAAPA,OADK;oBAELG,IAAI,EAAE;kBAFD;gBADA,CA3DT;;cAAA;gBAmEC,KAAK,KAAKP,OAAL,CAAaQ,IAAb,CAAkB,wBAAlB,EAA4C;kBAChDC,QAAQ,EAAE;gBADsC,CAA5C,CAAL;gBAnED;gBAAA,OAuE2BL,OAvE3B;;cAAA;gBAuEOM,WAvEP;gBAAA;gBAAA,wBAyEO,KAAKd,OAzEZ,kDAyEO,cAAce,YAAd,EAzEP;;cAAA;gBAAA;gBAAA,6BA0EO,KAAKjC,YA1EZ,uDA0EO,mBAAmBkC,OAAnB,EA1EP;;cAAA;gBA4EOC,cA5EP,GA4E+C;kBAC7CP,IAAI,EAAE;oBAAEI,WAAW,EAAXA;kBAAF,CADuC;kBAE7CI,YAAY,EAAE,uBACEJ,WAAW,CAAC9C,cADd,6CAEH8C,WAAW,CAACK,UAFT,yEAEuB,GAFvB,8CAGFL,WAAW,CAACM,WAHV,yEAGyB,GAHzB,8CAIFN,WAAW,CAACO,WAJV,yEAIyB,GAJzB,+CAKDP,WAAW,CAACQ,YALX,yEAK2B,GAL3B,4CAMJR,WAAW,CAACS,SANR,yEAMqB,GANrB;gBAF+B,CA5E/C;;gBAwFC,8BAAIT,WAAW,CAACO,WAAhB,2EAA+B,IAAI,CAAnC,EAAsC;kBACrCJ,cAAc,CAACO,MAAf,GAAwB,KAAKC,6BAAL,CAAmCX,WAAnC,CAAxB;gBACA;;gBA1FF,iCA4FQG,cA5FR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;WA+FA,0BAAyBS,OAAzB,EAAoD;MAAA;;MACnD,IACC,KAAKzD,SAAL,KAAmB,KAAnB,IACA,EAAE,KAAKsC,YAAL,KAAsB,KAAtB,IAA+B,KAAKA,YAAL,IAAqB,MAAtD,CAFD,EAGE;QACD;MACA;;MAED,IAAQoB,OAAR,GAAoBD,OAApB,CAAQC,OAAR;MAEA,IAAIC,aAAa,GAAG,KAApB;MACA,IAAMC,gBAA0B,GAAG,EAAnC;;MAXmD,2CAa9BF,OAb8B;MAAA;;MAAA;QAanD,oDAA8B;UAAA,IAAnBG,MAAmB;UAC7B,qBAAuBA,MAAM,CAACC,MAA9B;UAAA,IAAQC,IAAR,kBAAQA,IAAR;UAAA,IAAcC,IAAd,kBAAcA,IAAd;;UAEA,IAAI,KAAKC,6BAAL,CAAmCF,IAAnC,CAAJ,EAA8C;YAAA;;YAC7C,4BAAKlD,YAAL,4EAAmBqD,cAAnB,uBAAiDF,IAAjD;YACAL,aAAa,GAAG,IAAhB;YACAC,gBAAgB,CAACO,IAAjB,CAAsBJ,IAAtB;YACA;UACA;QACD;MAtBkD;QAAA;MAAA;QAAA;MAAA;;MAwBnD,IAAIJ,aAAJ,EAAmB;QAAA;;QAClB,IAAI,KAAKS,iBAAT,EAA4B;UAC3BC,YAAY,CAAC,KAAKD,iBAAN,CAAZ;QACA;;QAED,4BAAKvD,YAAL,4EAAmByD,mBAAnB,CAAuC,KAAKC,aAA5C;QACA,KAAKH,iBAAL,GAAyBI,UAAU,CAAC,YAAM;UACzC,IAAI,MAAI,CAACxE,SAAL,KAAmB,OAAvB,EAAgC;YAC/B,IAAMyE,WAAW,GAChB,MAAI,CAACC,8BAAL,CAAoCd,gBAApC,CADD;;YAEA,IAAIa,WAAW,CAACE,MAAZ,GAAqB,CAAzB,EAA4B;cAC3B,MAAI,CAACjD,yBAAL,CAA+B+C,WAA/B;YACA,CAFD,MAEO;cACN,MAAI,CAACG,OAAL;YACA;UACD,CARD,MAQO;YACN,MAAI,CAACA,OAAL;UACA;QACD,CAZkC,EAYhC,KAAKL,aAAL,GAAqB,IAZW,CAAnC;MAaA;IACD;;;WAED,wCAAuCX,gBAAvC,EAA2E;MAAA;;MAC1E,IAAMiB,MAAM,GAAGjB,gBAAgB,CAC7BiB,MADa,CACN,UAACC,IAAD;QAAA,OAAUA,IAAI,CAACC,MAAL,CAAY,SAAZ,IAAyB,CAAC,CAApC;MAAA,CADM,EAEbC,GAFa,CAET,UAACF,IAAD;QAAA,OAAU,MAAI,CAACG,mBAAL,CAAyBH,IAAzB,CAAV;MAAA,CAFS,EAGbI,IAHa,CAGR,GAHQ,CAAf;MAKA,OAAOL,MAAP;IACA;;;WAED,uCAAsCd,IAAtC,EAAoD;MACnD,IAAMoB,GAAG,GAAGC,iBAASC,OAAT,CAAiBtB,IAAjB,CAAZ;;MAEA,IACCA,IAAI,CAACgB,MAAL,CAAY,kBAAZ,IAAkC,CAAC,CAAnC,IACAhB,IAAI,CAACgB,MAAL,CAAY,eAAZ,IAA+B,CAAC,CAFjC,EAGE;QACD,OAAO,KAAP;MACA;;MAED,IAAII,GAAG,KAAK,KAAZ,EAAmB;QAClB,OAAO,IAAP;MACA;;MAED,OAAO,KAAP;IACA;;;WAED,6BAA4B;MAAA;;MAC3B,IAAI,KAAK3E,OAAT,EAAkB;QACjB,KAAKA,OAAL,GAAeW,SAAf;MACA,CAFD,MAEO;QACN,KAAKX,OAAL,GAAe,KAAKG,eAApB;MACA;;MAED,4BAAKE,YAAL,4EAAmByE,cAAnB,CAAkC,CAAC,CAAC,KAAK9E,OAAzC;MACA,KAAKoE,OAAL;IACA;;;WAED,qCAAoC;MACnC,IAAI,KAAK5E,SAAL,KAAmB,UAAvB,EAAmC;QAAA;;QAClC,4BAAKa,YAAL,4EAAmB0E,YAAnB,CAAgC,KAAhC;MACA,CAFD,MAEO;QACN,KAAKA,YAAL,CAAkB,UAAlB;MACA;IACD;;;WAED,kCAAiC;MAChC,IAAI,KAAKvF,SAAL,KAAmB,OAAvB,EAAgC;QAC/B,KAAKuF,YAAL,CAAkB,KAAlB;MACA,CAFD,MAEO;QACN,KAAKA,YAAL,CAAkB,OAAlB;MACA;IACD;;;WAED,sBAAoBC,IAApB,EAAqC;MAAA;;MACpC,KAAKxF,SAAL,GAAiBwF,IAAjB;MACA,4BAAK3E,YAAL,4EAAmB0E,YAAnB,CAAgCC,IAAhC;MACA,KAAK5E,uBAAL,GAA+B,IAA/B;IACA;;;WAED,mBAAkB;MACjB,KAAK0B,YAAL,GAAoB,SAApB;MACA,KAAKmD,IAAL;IACA;;;WAED,sBAAqB;MACpB,KAAKnD,YAAL,GAAoB,MAApB;MACA,KAAKmD,IAAL;IACA;;;WAED,6BAA4BX,IAA5B,EAA0C;MAAA;;MACzC,IAAMd,IAAI,GAAG,KAAKiB,mBAAL,CAAyBH,IAAzB,CAAb;MAEA,4BAAKjE,YAAL,4EAAmB6E,gBAAnB,CAAoC1B,IAApC;MACA,KAAKtC,yBAAL,CAA+BsC,IAA/B;IACA;;;WAED,6BAA4Bc,IAA5B,EAA0C;MAAA;;MACzC,IAAMa,QAAQ,GAAGP,iBACfQ,QADe,CACNd,IADM,EACA,KADA,EAEfe,OAFe,CAEP,MAFO,EAEC,EAFD,EAGfA,OAHe,CAGP,KAHO,EAGA,EAHA,CAAjB;;MAIA,IAAMC,OAAO,4BAAGV,iBAASU,OAAT,CAAiBhB,IAAjB,EAAuBiB,KAAvB,CAA6BX,iBAASY,GAAtC,EAA2CC,GAA3C,EAAH,yEAAuD,EAApE;;MAEA,IAAMjC,IAAI,GAAGoB,iBAASF,IAAT,CAAcY,OAAd,EAAuBH,QAAvB,CAAb;;MACA,OAAO3B,IAAP;IACA;;;WAED,mCAAkC9C,aAAlC,EAA0D;MAAA;;MACzD,KAAKZ,OAAL,GAAeY,aAAf;MACA,4BAAKL,YAAL,4EAAmB6E,gBAAnB,CAAoCxE,aAApC;MAEA,KAAK0D,OAAL;IACA;;;WAED,2BAA0B;MACzB,IAAI,KAAKtC,YAAL,KAAsB,MAA1B,EAAkC;QAAA;;QACjC,KAAKA,YAAL,GAAoB,KAApB;QACA,8BAAK4D,kBAAL;QACA,KAAKA,kBAAL,GAA0B/E,SAA1B;MACA,CAJD,MAIO,IAAI,KAAKmB,YAAL,KAAsB,KAA1B,EAAiC;QACvC,KAAKA,YAAL,GAAoB,MAApB;QACA,KAAKmD,IAAL;MACA;IACD;;;WAED,yBAAwB;MACvB,KAAKb,OAAL;IACA;;;WAED,gBAAc;MAAA;;MACb,yBAAKuB,UAAL,sEAAiBV,IAAjB;MACA,+BAAKS,kBAAL;MACA,KAAKA,kBAAL,GAA0B/E,SAA1B;IACA;;;;8GAED,kBAAiCiF,QAAjC;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACO,KAAKC,YAAL,CAAkBD,QAAlB,CADP;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;2GAIA,kBACCtG,OADD;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA,MAGK,KAAKwC,YAAL,KAAsB,MAH3B;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAIQ,KAAKgE,YAAL,EAJR;;cAAA;gBAAA,MAOK,KAAKhE,YAAL,KAAsB,MAP3B;kBAAA;kBAAA;gBAAA;;gBAAA,kCAQS,KAAKiE,eARd;;cAAA;gBAWC,4BAAK1F,YAAL,4EAAmB2F,SAAnB,CAA6B,OAA7B;gBACA,6BAAK3F,YAAL,8EAAmB4F,kBAAnB;gBAEA,KAAKN,UAAL,GAAkB,IAAIO,sBAAJ,CAAe;kBAChC3F,GAAG,EAAE,KAAKA,GADsB;kBAEhC4F,cAAc,EAAE,KAAKzG,OAAL,CAAa,SAAb;gBAFgB,CAAf,CAAlB;gBAKI0G,WAnBL,GAmBmB,IAnBnB;;gBAAA,KAqBK,KAAK/F,YArBV;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAsBQ,KAAKsF,UAAL,CAAgB/D,EAAhB,CAAmB,YAAnB,EAAiC,UAACqB,OAAD,EAAa;kBAAA;;kBACnD,IAAImD,WAAJ,EAAiB;oBAAA;;oBAChBA,WAAW,GAAG,KAAd;oBACA,uBAAA,MAAI,CAAC/F,YAAL,4EAAmB2F,SAAnB,CAA6B,SAA7B;oBACA,wBAAA,MAAI,CAAC3F,YAAL,8EAAmBgG,KAAnB;kBACA;;kBAED,IAAI,MAAI,CAAC7G,SAAL,KAAmB,OAAnB,IAA8ByD,OAAO,CAACqD,OAAR,CAAgB1D,WAAhB,GAA8B,CAAhE,EAAmE;oBAClE,IAAM2D,MAAM,GAAGtD,OAAO,CAACqD,OAAR,CAAgBE,SAAhB,CAA0BC,IAA1B,CACd,UAACnC,IAAD;sBAAA,OAAeA,IAAI,CAAC9D,MAAL,KAAgB,QAA/B;oBAAA,CADc,CAAf;;oBAIA,IAAI+F,MAAJ,EAAY;sBACX,IAAMzG,OAAO,GAAG,MAAI,CAAC2E,mBAAL,CAAyB8B,MAAM,CAAChD,IAAhC,CAAhB;;sBACA,IAAI,MAAI,CAACzD,OAAL,KAAiBA,OAArB,EAA8B;wBAC7B,MAAI,CAACoB,yBAAL,CAA+BpB,OAA/B;sBACA;;sBACD;oBACA;kBACD;;kBAED,wBAAA,MAAI,CAACO,YAAL,8EAAmBqG,aAAnB,CAAiCzD,OAAO,CAACqD,OAAzC;kBACA,wBAAA,MAAI,CAACjG,YAAL,8EAAmBsG,MAAnB;gBACA,CAvBK,CAtBR;;cAAA;gBAAA;gBAAA,OA+CQ,KAAKhB,UAAL,CAAgB/D,EAAhB,CAAmB,WAAnB,EAAgC,UAACqB,OAAD,EAAa;kBAAA;;kBAClD,wBAAA,MAAI,CAAC5C,YAAL,8EAAmBuG,WAAnB,CAA+B3D,OAAO,CAAC4D,OAAvC;kBACA,wBAAA,MAAI,CAACxG,YAAL,8EAAmBsG,MAAnB;gBACA,CAHK,CA/CR;;cAAA;gBAqDC,KAAK7E,YAAL,GAAoB,KAApB;gBArDD;gBAAA,OAuD4C,KAAK6D,UAAL,CAAgBmB,GAAhB,CAAoB;kBAC9DhH,OAAO,EAAE,KAAKA,OADgD;kBAE9DiH,SAAS,EAAE,KAAK/G;gBAF8C,CAApB,CAvD5C;;cAAA;gBAuDKqC,WAvDL;;gBAAA,OA6DE;gBACA,KAAKP,YAAL,KAAsB,SAAtB,KACC,CAACxC,OAAO,CAACS,wBAAT,IACA,CAAC,KAAKK,uBADN,IAEC,KAAK0B,YAAN,KAA+B,MAHhC,CA9DF;kBAAA;kBAAA;gBAAA;;gBAAA,kCAmESO,WAnET;;cAAA;gBAAA,MAuEE,KAAKP,YAAL,KAAsB,KAAtB,IACA,KAAKtC,SAAL,KAAmB,OADnB,IAEA,2BAAKmG,UAAL,wEAAiBqB,cAAjB,QAAsC,KAFtC,IAGA,uBAAC,KAAKrB,UAAN,8CAAC,kBAAiBsB,eAAjB,EAAD,CAHA,IAIA,kBAAC,KAAKnH,OAAN,yDAAiB,EAAjB,EAAqBqE,MAArB,GAA8B,CA3EhC;kBAAA;kBAAA;gBAAA;;gBA6EE,6BAAK9D,YAAL,8EAAmBqD,cAAnB,CAAkC,eAAlC;gBACA,KAAK5B,YAAL,GAAoB,SAApB;gBACA,6BAAKzB,YAAL,8EAAmByD,mBAAnB,CAAuC,CAAvC;gBA/EF;gBAAA,OAiFe,IAAIoD,OAAJ,CAAY,UAACC,OAAD,EAAa;kBACrCnD,UAAU,CAAC,YAAM;oBAAA;;oBAChB,MAAI,CAAClE,OAAL,GAAe,EAAf;oBACA,wBAAA,MAAI,CAACO,YAAL,8EAAmB6E,gBAAnB,CAAoC,EAApC;oBACAiC,OAAO,CAAC,MAAI,CAACnF,eAAL,CAAqB1C,OAArB,CAAD,CAAP;kBACA,CAJS,EAIP,IAJO,CAAV;gBAKA,CANY,CAjFf;;cAAA;gBAAA;;cAAA;gBA0FC,IAAI,KAAKwC,YAAL,KAAsB,KAA1B,EAAiC;kBAChC,KAAKA,YAAL,GAAoB,MAApB;gBACA;;gBAED,6BAAKzB,YAAL,8EAAmB2F,SAAnB,CAA6B,SAA7B;gBAEA,KAAKD,eAAL,GAAuB1D,WAAvB;gBAhGD,kCAkGQ,KAAKL,eAAL,CAAqB1C,OAArB,CAlGR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;wGAqGA;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACO,IAAI4H,OAAJ,CAAY,UAACC,OAAD,EAAkB;kBACnC,MAAI,CAACrF,YAAL,GAAoB,MAApB;kBACA,MAAI,CAAC4D,kBAAL,GAA0ByB,OAA1B;gBACA,CAHK,CADP;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;wGAOA,kBAA2BvB,QAA3B;QAAA;QAAA;UAAA;YAAA;cAAA;gBACOrC,IADP,GACc6D,2BAASC,WAAT,CAAqB,KAAK9G,GAA1B,EAA+B,KAA/B,EAAsC,WAAtC,EAAmDqF,QAAnD,CADd;gBAAA;gBAAA,OAEO,sBAAKrC,IAAL,CAFP;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;WAKA,uCAAsClB,WAAtC,EAAsE;MAAA;MAAA;;MACrE,IAAMU,MAAqB,GAAG,EAA9B;MACA,yBAAAV,WAAW,CAACmE,SAAZ,gFAAuBc,OAAvB,CAA+B,UAAChD,IAAD,EAAU;QAAA;;QACxC,eAAAA,IAAI,CAACiD,KAAL,4DAAYD,OAAZ,CAAoB,UAACpF,IAAD,EAAU;UAAA;;UAC7B,uBAAAA,IAAI,CAACsF,aAAL,4EAAoBF,OAApB,CAA4B,UAACT,OAAD,EAAa;YACxC,IAAMY,GAAG,GAAG,MAAI,CAACC,2BAAL,CAAiCxF,IAAjC,EAAuCoC,IAAvC,EAA6CuC,OAA7C,CAAZ;;YACA9D,MAAM,CAACY,IAAP,CAAY8D,GAAZ;UACA,CAHD;QAIA,CALD;MAMA,CAPD;;MAQA,IAAI1E,MAAM,CAACoB,MAAP,GAAgB,CAApB,EAAuB;QACtB,OAAOpB,MAAP;MACA;;MAED,OAAOpC,SAAP;IACA;;;WAED,qCACCuB,IADD,EAECoC,IAFD,EAGCuC,OAHD,EAIE;MACD,OAAO,IAAIc,uBAAJ,CAAgB;QACtBC,IAAI,EAAE,aADgB;QAEtBC,QAAQ,EAAE3F,IAAI,CAACsB,IAFO;QAGtBoC,QAAQ,EAAEtB,IAAI,CAACf,IAHO;QAItBuE,YAAY,EAAEjB;MAJQ,CAAhB,CAAP;IAMA;;;WAED,wBAAsB;MACrB,OAAO,KAAKrH,SAAZ;IACA;;;EA5asCuI,2B"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"test.types.js"}
1
+ {"version":3,"file":"test.types.js","names":[],"sources":["../../../src/features/test/test.types.ts"],"sourcesContent":["export type TestResultStatus = 'running' | 'passed' | 'failed'\nexport interface SpruceTestFileTest {\n\tname: string\n\tstatus: 'passed' | 'failed' | 'skipped' | 'pending' | 'todo' | 'disabled'\n\terrorMessages?: string[]\n\tduration: number\n}\n\nexport interface SpruceTestFile {\n\tpath: string\n\tstatus: TestResultStatus\n\ttests?: SpruceTestFileTest[]\n\terrorMessage?: string\n}\n\nexport interface SpruceTestResults {\n\ttotalTests?: number\n\ttotalPassed?: number\n\ttotalFailed?: number\n\ttotalSkipped?: number\n\ttotalTodo?: number\n\ttotalTestFiles: number\n\ttotalTestFilesComplete?: number\n\ttestFiles?: SpruceTestFile[]\n}\n\nexport type TestRunnerStatus = 'running' | 'stopped' | 'ready'\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/test/writers/TestWriter.ts"],"names":["TestGenerator","destinationDir","options","namePascal","filename","resolvedDestination","pathUtil","join","testContent","templates","test","writeFileIfChangedMixinResults","type","results","lint","AbstractWriter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;wGACpB,iBACCC,cADD,EAECC,OAFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAISC,gBAAAA,UAJT,GAIwBD,OAJxB,CAISC,UAJT;AAKOC,gBAAAA,QALP,aAKqBD,UALrB;AAOOE,gBAAAA,mBAPP,GAO6BC,iBAASC,IAAT,CAAcN,cAAd,EAA8BG,QAA9B,CAP7B;AAQOI,gBAAAA,WARP,GAQqB,KAAKC,SAAL,CAAeC,IAAf,CAAoBR,OAApB,CARrB;AAAA;AAAA,uBAUuB,KAAKS,8BAAL,CACrBN,mBADqB,EAErBG,WAFqB,iBAGbN,OAAO,CAACU,IAHK,YAVvB;;AAAA;AAUOC,gBAAAA,OAVP;AAAA;AAAA,uBAgBO,KAAKC,IAAL,CAAUT,mBAAV,CAhBP;;AAAA;AAAA,iDAkBQQ,OAlBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAD0CE,2B","sourcesContent":["import pathUtil from 'path'\nimport { TestOptions } from '@sprucelabs/spruce-templates'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class TestGenerator extends AbstractWriter {\n\tpublic async generateTest(\n\t\tdestinationDir: string,\n\t\toptions: TestOptions & { type: string }\n\t) {\n\t\tconst { namePascal } = options\n\t\tconst filename = `${namePascal}.test.ts`\n\n\t\tconst resolvedDestination = pathUtil.join(destinationDir, filename)\n\t\tconst testContent = this.templates.test(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\ttestContent,\n\t\t\t`Your ${options.type} test.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n}\n"],"file":"TestWriter.js"}
1
+ {"version":3,"file":"TestWriter.js","names":["TestGenerator","destinationDir","options","namePascal","filename","resolvedDestination","pathUtil","join","testContent","templates","test","writeFileIfChangedMixinResults","type","results","lint","AbstractWriter"],"sources":["../../../../src/features/test/writers/TestWriter.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { TestOptions } from '@sprucelabs/spruce-templates'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class TestGenerator extends AbstractWriter {\n\tpublic async generateTest(\n\t\tdestinationDir: string,\n\t\toptions: TestOptions & { type: string }\n\t) {\n\t\tconst { namePascal } = options\n\t\tconst filename = `${namePascal}.test.ts`\n\n\t\tconst resolvedDestination = pathUtil.join(destinationDir, filename)\n\t\tconst testContent = this.templates.test(options)\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tresolvedDestination,\n\t\t\ttestContent,\n\t\t\t`Your ${options.type} test.`\n\t\t)\n\n\t\tawait this.lint(resolvedDestination)\n\n\t\treturn results\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;wGACpB,iBACCC,cADD,EAECC,OAFD;QAAA;QAAA;UAAA;YAAA;cAAA;gBAISC,UAJT,GAIwBD,OAJxB,CAISC,UAJT;gBAKOC,QALP,aAKqBD,UALrB;gBAOOE,mBAPP,GAO6BC,iBAASC,IAAT,CAAcN,cAAd,EAA8BG,QAA9B,CAP7B;gBAQOI,WARP,GAQqB,KAAKC,SAAL,CAAeC,IAAf,CAAoBR,OAApB,CARrB;gBAAA;gBAAA,OAUuB,KAAKS,8BAAL,CACrBN,mBADqB,EAErBG,WAFqB,iBAGbN,OAAO,CAACU,IAHK,YAVvB;;cAAA;gBAUOC,OAVP;gBAAA;gBAAA,OAgBO,KAAKC,IAAL,CAAUT,mBAAV,CAhBP;;cAAA;gBAAA,iCAkBQQ,OAlBR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAD0CE,2B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/universalDevDependencies.ts"],"names":["universalDevDependencies","name","isDev"],"mappings":";;;;;;AAAA,IAAMA,wBAAwB,GAAG,CAChC;AAAEC,EAAAA,IAAI,EAAE,kCAAR;AAA4CC,EAAAA,KAAK,EAAE;AAAnD,CADgC,EAEhC;AAAED,EAAAA,IAAI,EAAE,aAAR;AAAuBC,EAAAA,KAAK,EAAE;AAA9B,CAFgC,EAGhC;AAAED,EAAAA,IAAI,EAAE,YAAR;AAAsBC,EAAAA,KAAK,EAAE;AAA7B,CAHgC,EAIhC;AAAED,EAAAA,IAAI,EAAE,QAAR;AAAkBC,EAAAA,KAAK,EAAE;AAAzB,CAJgC,EAKhC;AAAED,EAAAA,IAAI,EAAE,sBAAR;AAAgCC,EAAAA,KAAK,EAAE;AAAvC,CALgC,EAMhC;AAAED,EAAAA,IAAI,EAAE,UAAR;AAAoBC,EAAAA,KAAK,EAAE;AAA3B,CANgC,EAOhC;AAAED,EAAAA,IAAI,EAAE,cAAR;AAAwBC,EAAAA,KAAK,EAAE;AAA/B,CAPgC,EAQhC;AAAED,EAAAA,IAAI,EAAE,cAAR;AAAwBC,EAAAA,KAAK,EAAE;AAA/B,CARgC,EAShC;AAAED,EAAAA,IAAI,EAAE,WAAR;AAAqBC,EAAAA,KAAK,EAAE;AAA5B,CATgC,EAUhC;AAAED,EAAAA,IAAI,EAAE,SAAR;AAAmBC,EAAAA,KAAK,EAAE;AAA1B,CAVgC,CAAjC;eAaeF,wB","sourcesContent":["const universalDevDependencies = [\n\t{ name: '@sprucelabs/resolve-path-aliases', isDev: true },\n\t{ name: '@types/node', isDev: true },\n\t{ name: 'typescript', isDev: true },\n\t{ name: 'eslint', isDev: true },\n\t{ name: 'eslint-config-spruce', isDev: true },\n\t{ name: 'prettier', isDev: true },\n\t{ name: 'chokidar-cli', isDev: true },\n\t{ name: 'concurrently', isDev: true },\n\t{ name: 'tsc-watch', isDev: true },\n\t{ name: 'ts-node', isDev: true },\n]\n\nexport default universalDevDependencies\n"],"file":"universalDevDependencies.js"}
1
+ {"version":3,"file":"universalDevDependencies.js","names":["universalDevDependencies","name","isDev"],"sources":["../../src/features/universalDevDependencies.ts"],"sourcesContent":["const universalDevDependencies = [\n\t{ name: '@sprucelabs/resolve-path-aliases', isDev: true },\n\t{ name: '@types/node', isDev: true },\n\t{ name: 'typescript', isDev: true },\n\t{ name: 'eslint', isDev: true },\n\t{ name: 'eslint-config-spruce', isDev: true },\n\t{ name: 'prettier', isDev: true },\n\t{ name: 'chokidar-cli', isDev: true },\n\t{ name: 'concurrently', isDev: true },\n\t{ name: 'tsc-watch', isDev: true },\n\t{ name: 'ts-node', isDev: true },\n]\n\nexport default universalDevDependencies\n"],"mappings":";;;;;;AAAA,IAAMA,wBAAwB,GAAG,CAChC;EAAEC,IAAI,EAAE,kCAAR;EAA4CC,KAAK,EAAE;AAAnD,CADgC,EAEhC;EAAED,IAAI,EAAE,aAAR;EAAuBC,KAAK,EAAE;AAA9B,CAFgC,EAGhC;EAAED,IAAI,EAAE,YAAR;EAAsBC,KAAK,EAAE;AAA7B,CAHgC,EAIhC;EAAED,IAAI,EAAE,QAAR;EAAkBC,KAAK,EAAE;AAAzB,CAJgC,EAKhC;EAAED,IAAI,EAAE,sBAAR;EAAgCC,KAAK,EAAE;AAAvC,CALgC,EAMhC;EAAED,IAAI,EAAE,UAAR;EAAoBC,KAAK,EAAE;AAA3B,CANgC,EAOhC;EAAED,IAAI,EAAE,cAAR;EAAwBC,KAAK,EAAE;AAA/B,CAPgC,EAQhC;EAAED,IAAI,EAAE,cAAR;EAAwBC,KAAK,EAAE;AAA/B,CARgC,EAShC;EAAED,IAAI,EAAE,WAAR;EAAqBC,KAAK,EAAE;AAA5B,CATgC,EAUhC;EAAED,IAAI,EAAE,SAAR;EAAmBC,KAAK,EAAE;AAA1B,CAVgC,CAAjC;eAaeF,wB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/universalFileDescriptions.ts"],"names":["universalFileDescriptions","path","description","shouldOverwriteWhenChanged"],"mappings":";;;;;;AAEA,IAAMA,yBAA4C,GAAG,CACpD;AACCC,EAAAA,IAAI,EAAE,eADP;AAECC,EAAAA,WAAW,EAAE,gDAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CADoD,EAMpD;AACCF,EAAAA,IAAI,EAAE,cADP;AAECC,EAAAA,WAAW,EAAE,gCAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CANoD,EAWpD;AACCF,EAAAA,IAAI,EAAE,YADP;AAECC,EAAAA,WAAW,EAAE,qBAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CAXoD,EAgBpD;AACCF,EAAAA,IAAI,EAAE,QADP;AAECC,EAAAA,WAAW,EAAE,0BAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CAhBoD,EAqBpD;AACCF,EAAAA,IAAI,EAAE,WADP;AAECC,EAAAA,WAAW,EAAE,4CAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CArBoD,EA0BpD;AACCF,EAAAA,IAAI,EAAE,cADP;AAECC,EAAAA,WAAW,EAAE,+BAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CA1BoD,EA+BpD;AACCF,EAAAA,IAAI,EAAE,eADP;AAECC,EAAAA,WAAW,EAAE,qBAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CA/BoD,EAoCpD;AACCF,EAAAA,IAAI,EAAE,uBADP;AAECC,EAAAA,WAAW,EAAE,kDAFd;AAGCC,EAAAA,0BAA0B,EAAE;AAH7B,CApCoD,CAArD;eA2CeH,yB","sourcesContent":["import { FileDescription } from '../types/cli.types'\n\nconst universalFileDescriptions: FileDescription[] = [\n\t{\n\t\tpath: '.eslintignore',\n\t\tdescription: 'Ignore things like build and node_module dirs.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.eslintrc.js',\n\t\tdescription: 'Extends Spruce configurations.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.gitignore',\n\t\tdescription: 'The usual suspects.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: '.nvmrc',\n\t\tdescription: 'Keep node at the latest.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: 'readme.md',\n\t\tdescription: \"Don't forget to update this at some point.\",\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: 'package.json',\n\t\tdescription: 'All dependencies and scripts.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: 'tsconfig.json',\n\t\tdescription: 'Maps #spruce paths.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.spruce/settings.json',\n\t\tdescription: 'Tracks things like which features are installed.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n]\n\nexport default universalFileDescriptions\n"],"file":"universalFileDescriptions.js"}
1
+ {"version":3,"file":"universalFileDescriptions.js","names":["universalFileDescriptions","path","description","shouldOverwriteWhenChanged"],"sources":["../../src/features/universalFileDescriptions.ts"],"sourcesContent":["import { FileDescription } from '../types/cli.types'\n\nconst universalFileDescriptions: FileDescription[] = [\n\t{\n\t\tpath: '.eslintignore',\n\t\tdescription: 'Ignore things like build and node_module dirs.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.eslintrc.js',\n\t\tdescription: 'Extends Spruce configurations.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.gitignore',\n\t\tdescription: 'The usual suspects.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: '.nvmrc',\n\t\tdescription: 'Keep node at the latest.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: 'readme.md',\n\t\tdescription: \"Don't forget to update this at some point.\",\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: 'package.json',\n\t\tdescription: 'All dependencies and scripts.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n\t{\n\t\tpath: 'tsconfig.json',\n\t\tdescription: 'Maps #spruce paths.',\n\t\tshouldOverwriteWhenChanged: true,\n\t},\n\t{\n\t\tpath: '.spruce/settings.json',\n\t\tdescription: 'Tracks things like which features are installed.',\n\t\tshouldOverwriteWhenChanged: false,\n\t},\n]\n\nexport default universalFileDescriptions\n"],"mappings":";;;;;;AAEA,IAAMA,yBAA4C,GAAG,CACpD;EACCC,IAAI,EAAE,eADP;EAECC,WAAW,EAAE,gDAFd;EAGCC,0BAA0B,EAAE;AAH7B,CADoD,EAMpD;EACCF,IAAI,EAAE,cADP;EAECC,WAAW,EAAE,gCAFd;EAGCC,0BAA0B,EAAE;AAH7B,CANoD,EAWpD;EACCF,IAAI,EAAE,YADP;EAECC,WAAW,EAAE,qBAFd;EAGCC,0BAA0B,EAAE;AAH7B,CAXoD,EAgBpD;EACCF,IAAI,EAAE,QADP;EAECC,WAAW,EAAE,0BAFd;EAGCC,0BAA0B,EAAE;AAH7B,CAhBoD,EAqBpD;EACCF,IAAI,EAAE,WADP;EAECC,WAAW,EAAE,4CAFd;EAGCC,0BAA0B,EAAE;AAH7B,CArBoD,EA0BpD;EACCF,IAAI,EAAE,cADP;EAECC,WAAW,EAAE,+BAFd;EAGCC,0BAA0B,EAAE;AAH7B,CA1BoD,EA+BpD;EACCF,IAAI,EAAE,eADP;EAECC,WAAW,EAAE,qBAFd;EAGCC,0BAA0B,EAAE;AAH7B,CA/BoD,EAoCpD;EACCF,IAAI,EAAE,uBADP;EAECC,WAAW,EAAE,kDAFd;EAGCC,0BAA0B,EAAE;AAH7B,CApCoD,CAArD;eA2CeH,yB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/universalScripts.ts"],"names":["universalScripts","clean","lint","rebuild","test"],"mappings":";;;;;;AAAA,IAAMA,gBAAgB,GAAG;AACxB,cAAY,yDADY;AAExB,eAAa,sDAFW;AAGxB,sBACC,gEAJuB;AAKxB,yBACC,oEANuB;AAOxB,eAAa,8BAPW;AAQxBC,EAAAA,KAAK,EAAE,kBARiB;AASxB,eAAa,6CATW;AAUxB,iBAAe,eAVS;AAWxB,wBAAsB,kDAXE;AAYxB,cAAY,gCAZY;AAaxBC,EAAAA,IAAI,EAAE,0BAbkB;AAcxB,cAAY,mBAdY;AAexB,sBAAoB,mDAfI;AAgBxBC,EAAAA,OAAO,EAAE,0CAhBe;AAiBxB,yBAAuB,iCAjBC;AAkBxB,wBAAsB,sCAlBE;AAmBxBC,EAAAA,IAAI,EAAE,MAnBkB;AAoBxB,qBACC,uEArBuB;AAsBxB,gBACC,qEAvBuB;AAwBxB,mBAAiB,gDAxBO;AAyBxB,eAAa;AAzBW,CAAzB;eA4BeJ,gB","sourcesContent":["const universalScripts = {\n\t'build.ci': 'yarn build.tsc && yarn build.resolve-paths && yarn lint',\n\t'build.dev': 'yarn build.tsc --sourceMap ; yarn resolve-paths.lint',\n\t'build.copy-files':\n\t\t\"mkdir -p build && rsync -avzq --exclude='*.ts' ./src/ ./build/\",\n\t'build.resolve-paths':\n\t\t\"resolve-path-aliases --target build --patterns '**/*.js,**/*.d.ts'\",\n\t'build.tsc': 'yarn build.copy-files && tsc',\n\tclean: 'yarn clean.build',\n\t'clean.all': 'yarn clean.dependencies && yarn clean.build',\n\t'clean.build': 'rm -rf build/',\n\t'clean.dependencies': 'rm -rf node_modules/ package-lock.json yarn.lock',\n\t'fix.lint': \"eslint --fix --cache '**/*.ts'\",\n\tlint: \"eslint --cache '**/*.ts'\",\n\t'lint.tsc': 'tsc -p . --noEmit',\n\t'post.watch.build': 'yarn build.copy-files && yarn build.resolve-paths',\n\trebuild: 'yarn clean.all && yarn && yarn build.dev',\n\t'update.dependencies': 'yarn clean.dependencies && yarn',\n\t'resolve-paths.lint': 'yarn build.resolve-paths ; yarn lint',\n\ttest: 'jest',\n\t'watch.build.dev':\n\t\t\"tsc-watch --sourceMap --onCompilationComplete 'yarn post.watch.build'\",\n\t'watch.lint':\n\t\t\"concurrently 'yarn lint' \\\"chokidar 'src/**/*' -c 'yarn lint.tsc'\\\"\",\n\t'watch.rebuild': 'yarn clean.all && yarn && yarn watch.build.dev',\n\t'watch.tsc': 'tsc -w',\n}\n\nexport default universalScripts\n"],"file":"universalScripts.js"}
1
+ {"version":3,"file":"universalScripts.js","names":["universalScripts","clean","lint","rebuild","test"],"sources":["../../src/features/universalScripts.ts"],"sourcesContent":["const universalScripts = {\n\t'build.ci': 'yarn build.tsc && yarn build.resolve-paths && yarn lint',\n\t'build.dev': 'yarn build.tsc --sourceMap ; yarn resolve-paths.lint',\n\t'build.copy-files':\n\t\t\"mkdir -p build && rsync -avzq --exclude='*.ts' ./src/ ./build/\",\n\t'build.resolve-paths':\n\t\t\"resolve-path-aliases --target build --patterns '**/*.js,**/*.d.ts'\",\n\t'build.tsc': 'yarn build.copy-files && tsc',\n\tclean: 'yarn clean.build',\n\t'clean.all': 'yarn clean.dependencies && yarn clean.build',\n\t'clean.build': 'rm -rf build/',\n\t'clean.dependencies': 'rm -rf node_modules/ package-lock.json yarn.lock',\n\t'fix.lint': \"eslint --fix --cache '**/*.ts'\",\n\tlint: \"eslint --cache '**/*.ts'\",\n\t'lint.tsc': 'tsc -p . --noEmit',\n\t'post.watch.build': 'yarn build.copy-files && yarn build.resolve-paths',\n\trebuild: 'yarn clean.all && yarn && yarn build.dev',\n\t'update.dependencies': 'yarn clean.dependencies && yarn',\n\t'resolve-paths.lint': 'yarn build.resolve-paths ; yarn lint',\n\ttest: 'jest',\n\t'watch.build.dev':\n\t\t\"tsc-watch --sourceMap --onCompilationComplete 'yarn post.watch.build'\",\n\t'watch.lint':\n\t\t\"concurrently 'yarn lint' \\\"chokidar 'src/**/*' -c 'yarn lint.tsc'\\\"\",\n\t'watch.rebuild': 'yarn clean.all && yarn && yarn watch.build.dev',\n\t'watch.tsc': 'tsc -w',\n}\n\nexport default universalScripts\n"],"mappings":";;;;;;AAAA,IAAMA,gBAAgB,GAAG;EACxB,YAAY,yDADY;EAExB,aAAa,sDAFW;EAGxB,oBACC,gEAJuB;EAKxB,uBACC,oEANuB;EAOxB,aAAa,8BAPW;EAQxBC,KAAK,EAAE,kBARiB;EASxB,aAAa,6CATW;EAUxB,eAAe,eAVS;EAWxB,sBAAsB,kDAXE;EAYxB,YAAY,gCAZY;EAaxBC,IAAI,EAAE,0BAbkB;EAcxB,YAAY,mBAdY;EAexB,oBAAoB,mDAfI;EAgBxBC,OAAO,EAAE,0CAhBe;EAiBxB,uBAAuB,iCAjBC;EAkBxB,sBAAsB,sCAlBE;EAmBxBC,IAAI,EAAE,MAnBkB;EAoBxB,mBACC,uEArBuB;EAsBxB,cACC,qEAvBuB;EAwBxB,iBAAiB,gDAxBO;EAyBxB,aAAa;AAzBW,CAAzB;eA4BeJ,gB"}
@@ -2,8 +2,8 @@ import { Schema, SchemaPartialValues, SchemaValuesWithDefaults } from '@sprucela
2
2
  declare type StripNulls<T extends Record<string, any>> = {
3
3
  [K in keyof T]: Exclude<T[K], null>;
4
4
  };
5
- declare const validateAndNormalizeUtil: {
5
+ declare const validateAndNormalizer: {
6
6
  validateAndNormalize<S extends Schema = Schema>(schema: S, options: SchemaPartialValues<S, false>): StripNulls<SchemaValuesWithDefaults<S>>;
7
7
  stripUndefined(normalized: Record<string, any>): {};
8
8
  };
9
- export default validateAndNormalizeUtil;
9
+ export default validateAndNormalizer;
@@ -15,7 +15,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
15
15
 
16
16
  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; }
17
17
 
18
- var validateAndNormalizeUtil = {
18
+ var validateAndNormalizer = {
19
19
  validateAndNormalize: function validateAndNormalize(schema, options) {
20
20
  var values = _objectSpread(_objectSpread({}, (0, _schema.defaultSchemaValues)(schema)), this.stripUndefined(options));
21
21
 
@@ -35,6 +35,6 @@ var validateAndNormalizeUtil = {
35
35
  return noUndefined;
36
36
  }
37
37
  };
38
- var _default = validateAndNormalizeUtil;
38
+ var _default = validateAndNormalizer;
39
39
  exports["default"] = _default;
40
40
  //# sourceMappingURL=validateAndNormalize.utility.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/validateAndNormalize.utility.ts"],"names":["validateAndNormalizeUtil","validateAndNormalize","schema","options","values","stripUndefined","normalized","noUndefined","Object","keys","forEach","key","undefined"],"mappings":";;;;;;;;;;;AAAA;;;;;;AAaA,IAAMA,wBAAwB,GAAG;AAChCC,EAAAA,oBADgC,gCAE/BC,MAF+B,EAG/BC,OAH+B,EAI9B;AACD,QAAMC,MAAM,mCACR,iCAAoBF,MAApB,CADQ,GAER,KAAKG,cAAL,CAAoBF,OAApB,CAFQ,CAAZ;;AAKA,sCAAqBD,MAArB,EAA6BE,MAA7B,EAAqC,EAArC;AAEA,QAAME,UAAU,GAAG,mCAAsBJ,MAAtB,EAA8BE,MAA9B,CAAnB;AAEA,WAAO,KAAKC,cAAL,CAAoBC,UAApB,CAAP;AAGA,GAjB+B;AAmBhCD,EAAAA,cAnBgC,0BAmBjBC,UAnBiB,EAmBgB;AAC/C,QAAMC,WAAW,GAAG,EAApB;AAEAC,IAAAA,MAAM,CAACC,IAAP,CAAYH,UAAZ,EAAwBI,OAAxB,CAAgC,UAACC,GAAD,EAAiB;AAChD;AACA,UAAIL,UAAU,CAACK,GAAD,CAAV,KAAoBC,SAAxB,EAAmC;AAClC;AACAL,QAAAA,WAAW,CAACI,GAAD,CAAX,GAAmBL,UAAU,CAACK,GAAD,CAA7B;AACA;AACD,KAND;AAOA,WAAOJ,WAAP;AACA;AA9B+B,CAAjC;eAiCeP,wB","sourcesContent":["import {\n\tdefaultSchemaValues,\n\tnormalizeSchemaValues,\n\tSchema,\n\tSchemaPartialValues,\n\tSchemaValuesWithDefaults,\n\tvalidateSchemaValues,\n} from '@sprucelabs/schema'\n\ntype StripNulls<T extends Record<string, any>> = {\n\t[K in keyof T]: Exclude<T[K], null>\n}\n\nconst validateAndNormalizeUtil = {\n\tvalidateAndNormalize<S extends Schema = Schema>(\n\t\tschema: S,\n\t\toptions: SchemaPartialValues<S, false>\n\t) {\n\t\tconst values = {\n\t\t\t...defaultSchemaValues(schema),\n\t\t\t...this.stripUndefined(options),\n\t\t} as SchemaPartialValues<S, false>\n\n\t\tvalidateSchemaValues(schema, values, {})\n\n\t\tconst normalized = normalizeSchemaValues(schema, values)\n\n\t\treturn this.stripUndefined(normalized) as StripNulls<\n\t\t\tSchemaValuesWithDefaults<S>\n\t\t>\n\t},\n\n\tstripUndefined(normalized: Record<string, any>) {\n\t\tconst noUndefined = {}\n\n\t\tObject.keys(normalized).forEach((key: string) => {\n\t\t\t// @ts-ignore\n\t\t\tif (normalized[key] !== undefined) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tnoUndefined[key] = normalized[key]\n\t\t\t}\n\t\t})\n\t\treturn noUndefined\n\t},\n}\n\nexport default validateAndNormalizeUtil\n"],"file":"validateAndNormalize.utility.js"}
1
+ {"version":3,"file":"validateAndNormalize.utility.js","names":["validateAndNormalizer","validateAndNormalize","schema","options","values","stripUndefined","normalized","noUndefined","Object","keys","forEach","key","undefined"],"sources":["../../src/features/validateAndNormalize.utility.ts"],"sourcesContent":["import {\n\tdefaultSchemaValues,\n\tnormalizeSchemaValues,\n\tSchema,\n\tSchemaPartialValues,\n\tSchemaValuesWithDefaults,\n\tvalidateSchemaValues,\n} from '@sprucelabs/schema'\n\ntype StripNulls<T extends Record<string, any>> = {\n\t[K in keyof T]: Exclude<T[K], null>\n}\n\nconst validateAndNormalizer = {\n\tvalidateAndNormalize<S extends Schema = Schema>(\n\t\tschema: S,\n\t\toptions: SchemaPartialValues<S, false>\n\t) {\n\t\tconst values = {\n\t\t\t...defaultSchemaValues(schema),\n\t\t\t...this.stripUndefined(options),\n\t\t} as SchemaPartialValues<S, false>\n\n\t\tvalidateSchemaValues(schema, values, {})\n\n\t\tconst normalized = normalizeSchemaValues(schema, values)\n\n\t\treturn this.stripUndefined(normalized) as StripNulls<\n\t\t\tSchemaValuesWithDefaults<S>\n\t\t>\n\t},\n\n\tstripUndefined(normalized: Record<string, any>) {\n\t\tconst noUndefined = {}\n\n\t\tObject.keys(normalized).forEach((key: string) => {\n\t\t\t// @ts-ignore\n\t\t\tif (normalized[key] !== undefined) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tnoUndefined[key] = normalized[key]\n\t\t\t}\n\t\t})\n\t\treturn noUndefined\n\t},\n}\n\nexport default validateAndNormalizer\n"],"mappings":";;;;;;;;;;;AAAA;;;;;;AAaA,IAAMA,qBAAqB,GAAG;EAC7BC,oBAD6B,gCAE5BC,MAF4B,EAG5BC,OAH4B,EAI3B;IACD,IAAMC,MAAM,mCACR,iCAAoBF,MAApB,CADQ,GAER,KAAKG,cAAL,CAAoBF,OAApB,CAFQ,CAAZ;;IAKA,kCAAqBD,MAArB,EAA6BE,MAA7B,EAAqC,EAArC;IAEA,IAAME,UAAU,GAAG,mCAAsBJ,MAAtB,EAA8BE,MAA9B,CAAnB;IAEA,OAAO,KAAKC,cAAL,CAAoBC,UAApB,CAAP;EAGA,CAjB4B;EAmB7BD,cAnB6B,0BAmBdC,UAnBc,EAmBmB;IAC/C,IAAMC,WAAW,GAAG,EAApB;IAEAC,MAAM,CAACC,IAAP,CAAYH,UAAZ,EAAwBI,OAAxB,CAAgC,UAACC,GAAD,EAAiB;MAChD;MACA,IAAIL,UAAU,CAACK,GAAD,CAAV,KAAoBC,SAAxB,EAAmC;QAClC;QACAL,WAAW,CAACI,GAAD,CAAX,GAAmBL,UAAU,CAACK,GAAD,CAA7B;MACA;IACD,CAND;IAOA,OAAOJ,WAAP;EACA;AA9B4B,CAA9B;eAiCeP,qB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/view/ViewFeature.ts"],"names":["ViewFeature","options","diskUtil","resolvePath","__dirname","name","code","isRequired","emitter","on","payload","featureCode","actionCode","featureInstaller","isInstalled","Writer","writePlugin","cwd","files","abstractClasses","label","Service","add","id","namespace","AbstractFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,W;;;;;AA8BpB,uBAAmBC,OAAnB,EAA2C;AAAA;;AAAA;AAC1C,8BAAMA,OAAN;AAD0C,qGA7BrB,OA6BqB;AAAA,oGA5BtB,oDA4BsB;AAAA,6FA3BhB,MA2BgB;AAAA,mGA1BvBC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CA0BuB;AAAA,4GAxBS,CACnD;AACCC,MAAAA,IAAI,EAAE;AADP,KADmD,EAInD;AACCA,MAAAA,IAAI,EAAE;AADP,KAJmD,CAwBT;AAAA,qGAfA,CAC1C;AACCC,MAAAA,IAAI,EAAE,OADP;AAECC,MAAAA,UAAU,EAAE;AAFb,KAD0C,EAK1C;AACCD,MAAAA,IAAI,EAAE,QADP;AAECC,MAAAA,UAAU,EAAE;AAFb,KAL0C,EAS1C;AACCD,MAAAA,IAAI,EAAE,OADP;AAECC,MAAAA,UAAU,EAAE;AAFb,KAT0C,CAeA;AAG1C,SAAK,MAAKC,OAAL,CAAaC,EAAb,CAAgB,qBAAhB;AAAA,+FAAuC,iBAAOC,OAAP;AAAA;AAAA;AAAA;AAAA;AAAA;AACnCC,gBAAAA,WADmC,GACPD,OADO,CACnCC,WADmC,EACtBC,UADsB,GACPF,OADO,CACtBE,UADsB;AAAA;AAAA,uBAEjB,MAAKC,gBAAL,CAAsBC,WAAtB,CAAkC,MAAlC,CAFiB;;AAAA;AAErCA,gBAAAA,WAFqC;;AAAA,sBAIvCA,WAAW,IAAIH,WAAW,KAAK,MAA/B,IAAyCC,UAAU,KAAK,SAJjB;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAKtB,MAAKG,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,MAAKC,GAArC,CALsB;;AAAA;AAKpCC,gBAAAA,KALoC;AAAA,iDAMnC;AACNA,kBAAAA,KAAK,EAALA;AADM,iBANmC;;AAAA;AAAA,iDAUpC,EAVoC;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAvC;;AAAA;AAAA;AAAA;AAAA,QAAL;AAaA,SAAK,MAAKV,OAAL,CAAaC,EAAb,CAAgB,qCAAhB,6FAAuD;AAAA;AAAA;AAAA;AAAA;AAAA,gDACpD;AACNU,gBAAAA,eAAe,EAAE,CAChB;AACCd,kBAAAA,IAAI,EAAE,4BADP;AAECe,kBAAAA,KAAK,EAAE,4BAFR;AAGC,4BAAQ,gCAHT;AAICT,kBAAAA,WAAW,EAAE;AAJd,iBADgB;AADX,eADoD;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAvD,GAAL;AAhB0C;AA4B1C;;;;;+GAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACqB,KAAKI,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,KAAKC,GAArC,CADrB;;AAAA;AACOC,gBAAAA,KADP;AAGC,qBAAKG,OAAL,CAAa,YAAb,EAA2BC,GAA3B,CAA+B;AAC9BC,kBAAAA,EAAE,EAAE,IAD0B;AAE9BC,kBAAAA,SAAS,EAAE;AAFmB,iBAA/B;AAHD,kDAQQ;AAAEN,kBAAAA,KAAK,EAALA;AAAF,iBARR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EA5DwCO,4B","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tview: ViewFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tview: undefined\n\t}\n}\n\nexport default class ViewFeature extends AbstractFeature {\n\tpublic nameReadable = 'views'\n\tpublic description = 'Views: Create views using the Heartwood framework.'\n\tpublic code: FeatureCode = 'view'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/heartwood-view-controllers@latest',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-view-plugin@latest',\n\t\t},\n\t]\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'schema',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.did-execute', async (payload) => {\n\t\t\tconst { featureCode, actionCode } = payload\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('view')\n\n\t\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\t\t\t\treturn {\n\t\t\t\t\tfiles,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid this.emitter.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'AbstractViewControllerTest',\n\t\t\t\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t\t\t\t\timport: '@sprucelabs/spruce-view-plugin',\n\t\t\t\t\t\tfeatureCode: 'view',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\n\t\tthis.Service('dependency').add({\n\t\t\tid: '**',\n\t\t\tnamespace: 'heartwood',\n\t\t})\n\n\t\treturn { files }\n\t}\n}\n"],"file":"ViewFeature.js"}
1
+ {"version":3,"file":"ViewFeature.js","names":["ViewFeature","options","diskUtil","resolvePath","__dirname","name","code","isRequired","emitter","on","payload","featureCode","actionCode","featureInstaller","isInstalled","Writer","writePlugin","cwd","files","abstractClasses","label","Service","add","id","namespace","AbstractFeature"],"sources":["../../../src/features/view/ViewFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tview: ViewFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tview: undefined\n\t}\n}\n\nexport default class ViewFeature extends AbstractFeature {\n\tpublic nameReadable = 'views'\n\tpublic description = 'Views: Create views using the Heartwood framework.'\n\tpublic code: FeatureCode = 'view'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/heartwood-view-controllers@latest',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-view-plugin@latest',\n\t\t},\n\t]\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'schema',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.did-execute', async (payload) => {\n\t\t\tconst { featureCode, actionCode } = payload\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('view')\n\n\t\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\t\t\t\treturn {\n\t\t\t\t\tfiles,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid this.emitter.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'AbstractViewControllerTest',\n\t\t\t\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t\t\t\t\timport: '@sprucelabs/spruce-view-plugin',\n\t\t\t\t\t\tfeatureCode: 'view',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\n\t\tthis.Service('dependency').add({\n\t\t\tid: '**',\n\t\t\tnamespace: 'heartwood',\n\t\t})\n\n\t\treturn { files }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,W;;;;;EA8BpB,qBAAmBC,OAAnB,EAA2C;IAAA;;IAAA;IAC1C,0BAAMA,OAAN;IAD0C,iGA7BrB,OA6BqB;IAAA,gGA5BtB,oDA4BsB;IAAA,yFA3BhB,MA2BgB;IAAA,+FA1BvBC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CA0BuB;IAAA,wGAxBS,CACnD;MACCC,IAAI,EAAE;IADP,CADmD,EAInD;MACCA,IAAI,EAAE;IADP,CAJmD,CAwBT;IAAA,iGAfA,CAC1C;MACCC,IAAI,EAAE,OADP;MAECC,UAAU,EAAE;IAFb,CAD0C,EAK1C;MACCD,IAAI,EAAE,QADP;MAECC,UAAU,EAAE;IAFb,CAL0C,EAS1C;MACCD,IAAI,EAAE,OADP;MAECC,UAAU,EAAE;IAFb,CAT0C,CAeA;IAG1C,KAAK,MAAKC,OAAL,CAAaC,EAAb,CAAgB,qBAAhB;MAAA,yFAAuC,iBAAOC,OAAP;QAAA;QAAA;UAAA;YAAA;cAAA;gBACnCC,WADmC,GACPD,OADO,CACnCC,WADmC,EACtBC,UADsB,GACPF,OADO,CACtBE,UADsB;gBAAA;gBAAA,OAEjB,MAAKC,gBAAL,CAAsBC,WAAtB,CAAkC,MAAlC,CAFiB;;cAAA;gBAErCA,WAFqC;;gBAAA,MAIvCA,WAAW,IAAIH,WAAW,KAAK,MAA/B,IAAyCC,UAAU,KAAK,SAJjB;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAKtB,MAAKG,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,MAAKC,GAArC,CALsB;;cAAA;gBAKpCC,KALoC;gBAAA,iCAMnC;kBACNA,KAAK,EAALA;gBADM,CANmC;;cAAA;gBAAA,iCAUpC,EAVoC;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAAvC;;MAAA;QAAA;MAAA;IAAA,IAAL;IAaA,KAAK,MAAKV,OAAL,CAAaC,EAAb,CAAgB,qCAAhB,6FAAuD;MAAA;QAAA;UAAA;YAAA;cAAA,kCACpD;gBACNU,eAAe,EAAE,CAChB;kBACCd,IAAI,EAAE,4BADP;kBAECe,KAAK,EAAE,4BAFR;kBAGC,UAAQ,gCAHT;kBAICT,WAAW,EAAE;gBAJd,CADgB;cADX,CADoD;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAvD,GAAL;IAhB0C;EA4B1C;;;;;+GAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,KAAKI,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,KAAKC,GAArC,CADrB;;cAAA;gBACOC,KADP;gBAGC,KAAKG,OAAL,CAAa,YAAb,EAA2BC,GAA3B,CAA+B;kBAC9BC,EAAE,EAAE,IAD0B;kBAE9BC,SAAS,EAAE;gBAFmB,CAA/B;gBAHD,kCAQQ;kBAAEN,KAAK,EAALA;gBAAF,CARR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EA5DwCO,4B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/actions/CreateAction.ts"],"names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Calendar',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n\t'CalendarEvent',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"file":"CreateAction.js"}
1
+ {"version":3,"file":"CreateAction.js","names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Calendar',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n\t'CalendarEvent',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/actions/CreateThemeAction.ts"],"names":["optionsSchema","id","description","fields","CreateThemeAction","_options","writer","Writer","doesThemeFileExist","cwd","errors","SpruceError","code","events","getFeature","syncResults","hasBeenSynced","Action","execute","writeTheme","files","results","actionUtil","mergeActionResults","AbstractAction"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,aAAa,GAAG,yBAAY;AACjCC,EAAAA,EAAE,EAAE,oBAD6B;AAEjCC,EAAAA,WAAW,EAAE,gCAFoB;AAGjCC,EAAAA,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IAQqBC,iB;;;;;;;;;;;;;;;sGACGJ,a;uGACC,CAAC,cAAD,C;;;;;;;;mGAGxB,iBAAqBK,QAArB;AAAA;AAAA;AAAA;AAAA;AAAA;AACOC,gBAAAA,MADP,GACgB,KAAKC,MAAL,CAAY,MAAZ,CADhB;;AAAA,qBAGKD,MAAM,CAACE,kBAAP,CAA0B,KAAKC,GAA/B,CAHL;AAAA;AAAA;AAAA;;AAAA,iDAIS;AACNC,kBAAAA,MAAM,EAAE,CACP,IAAIC,uBAAJ,CAAgB;AACfC,oBAAAA,IAAI,EAAE;AADS,mBAAhB,CADO;AADF,iBAJT;;AAAA;AAaOC,gBAAAA,MAbP,GAagB,KAAKC,UAAL,CAAgB,OAAhB,CAbhB;AAcKC,gBAAAA,WAdL,GAcmB,EAdnB;;AAAA,oBAgBMF,MAAM,CAACG,aAAP,EAhBN;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAiBsB,KAAKC,MAAL,CAAY,OAAZ,EAAqB,MAArB,EAA6BC,OAA7B,CAAqC,EAArC,CAjBtB;;AAAA;AAiBEH,gBAAAA,WAjBF;;AAAA;AAAA;AAAA,uBAoBqBT,MAAM,CAACa,UAAP,CAAkB,KAAKV,GAAvB,CApBrB;;AAAA;AAoBOW,gBAAAA,KApBP;AAqBOC,gBAAAA,OArBP,GAqBiB;AAAED,kBAAAA,KAAK,EAALA;AAAF,iBArBjB;AAAA,iDAuBQE,mBAAWC,kBAAX,CAA8BR,WAA9B,EAA2CM,OAA3C,CAvBR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAL8CG,2B","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'createThemeOptions',\n\tdescription: 'Create a theme for your skill.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateThemeAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['create.theme']\n\tpublic invocationMessage = `Let's get pretty! 🤩`\n\n\tpublic async execute(_options: SchemaValues<OptionsSchema>) {\n\t\tconst writer = this.Writer('view')\n\n\t\tif (writer.doesThemeFileExist(this.cwd)) {\n\t\t\treturn {\n\t\t\t\terrors: [\n\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\tcode: 'THEME_EXISTS',\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}\n\t\t}\n\n\t\tconst events = this.getFeature('event')\n\t\tlet syncResults = {}\n\n\t\tif (!events.hasBeenSynced()) {\n\t\t\tsyncResults = await this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\tconst files = await writer.writeTheme(this.cwd)\n\t\tconst results = { files }\n\n\t\treturn actionUtil.mergeActionResults(syncResults, results)\n\t}\n}\n"],"file":"CreateThemeAction.js"}
1
+ {"version":3,"file":"CreateThemeAction.js","names":["optionsSchema","id","description","fields","CreateThemeAction","_options","writer","Writer","doesThemeFileExist","cwd","errors","SpruceError","code","events","getFeature","syncResults","hasBeenSynced","Action","execute","writeTheme","files","results","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateThemeAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'createThemeOptions',\n\tdescription: 'Create a theme for your skill.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateThemeAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['create.theme']\n\tpublic invocationMessage = `Let's get pretty! 🤩`\n\n\tpublic async execute(_options: SchemaValues<OptionsSchema>) {\n\t\tconst writer = this.Writer('view')\n\n\t\tif (writer.doesThemeFileExist(this.cwd)) {\n\t\t\treturn {\n\t\t\t\terrors: [\n\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\tcode: 'THEME_EXISTS',\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}\n\t\t}\n\n\t\tconst events = this.getFeature('event')\n\t\tlet syncResults = {}\n\n\t\tif (!events.hasBeenSynced()) {\n\t\t\tsyncResults = await this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\tconst files = await writer.writeTheme(this.cwd)\n\t\tconst results = { files }\n\n\t\treturn actionUtil.mergeActionResults(syncResults, results)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,aAAa,GAAG,yBAAY;EACjCC,EAAE,EAAE,oBAD6B;EAEjCC,WAAW,EAAE,gCAFoB;EAGjCC,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IAQqBC,iB;;;;;;;;;;;;;;;sGACGJ,a;uGACC,CAAC,cAAD,C;;;;;;;;mGAGxB,iBAAqBK,QAArB;QAAA;QAAA;UAAA;YAAA;cAAA;gBACOC,MADP,GACgB,KAAKC,MAAL,CAAY,MAAZ,CADhB;;gBAAA,KAGKD,MAAM,CAACE,kBAAP,CAA0B,KAAKC,GAA/B,CAHL;kBAAA;kBAAA;gBAAA;;gBAAA,iCAIS;kBACNC,MAAM,EAAE,CACP,IAAIC,uBAAJ,CAAgB;oBACfC,IAAI,EAAE;kBADS,CAAhB,CADO;gBADF,CAJT;;cAAA;gBAaOC,MAbP,GAagB,KAAKC,UAAL,CAAgB,OAAhB,CAbhB;gBAcKC,WAdL,GAcmB,EAdnB;;gBAAA,IAgBMF,MAAM,CAACG,aAAP,EAhBN;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAiBsB,KAAKC,MAAL,CAAY,OAAZ,EAAqB,MAArB,EAA6BC,OAA7B,CAAqC,EAArC,CAjBtB;;cAAA;gBAiBEH,WAjBF;;cAAA;gBAAA;gBAAA,OAoBqBT,MAAM,CAACa,UAAP,CAAkB,KAAKV,GAAvB,CApBrB;;cAAA;gBAoBOW,KApBP;gBAqBOC,OArBP,GAqBiB;kBAAED,KAAK,EAALA;gBAAF,CArBjB;gBAAA,iCAuBQE,mBAAWC,kBAAX,CAA8BR,WAA9B,EAA2CM,OAA3C,CAvBR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAL8CG,2B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/actions/SyncAction.ts"],"names":["optionsSchema","id","description","fields","SyncAction","_options","targetDir","diskUtil","resolvePath","cwd","matches","length","paths","map","m","introspect","introspectionUtil","vcTemplateItems","svcTemplateItems","forEach","classes","thisClass","mapIntrospectedClassToTemplateItem","vc","svc","push","Store","loadCurrentSkillsNamespace","namespace","Writer","writeCombinedViewsFile","namespaceKebab","namesUtil","toKebab","files","c","item","staticProperties","namePascal","className","path","classPath","endsWith","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { VcTemplateItem } from '../../../../../spruce-templates/build'\nimport introspectionUtil, {\n\tIntrospectionClass,\n} from '../../../utilities/introspection.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'syncViewsOptions',\n\tdescription: 'Keep types and generated files based on views in sync.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SyncAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['sync.views']\n\tpublic invocationMessage = 'Syncing view controller types... 🌲'\n\n\tpublic async execute(\n\t\t_options: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tconst targetDir = diskUtil.resolvePath(this.cwd, 'src')\n\t\tconst matches = await globby(['**/*.svc.ts', '**/*.vc.ts'], {\n\t\t\tcwd: targetDir,\n\t\t})\n\n\t\tif (matches.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst paths = matches.map((m) => diskUtil.resolvePath(targetDir, m))\n\t\tconst introspect = introspectionUtil.introspect(paths)\n\n\t\tconst vcTemplateItems: VcTemplateItem[] = []\n\t\tconst svcTemplateItems: VcTemplateItem[] = []\n\n\t\tintrospect.forEach(({ classes }) => {\n\t\t\tfor (const thisClass of classes) {\n\t\t\t\tconst { vc, svc } = this.mapIntrospectedClassToTemplateItem(thisClass)\n\n\t\t\t\tif (vc) {\n\t\t\t\t\tvcTemplateItems.push(vc)\n\t\t\t\t} else if (svc) {\n\t\t\t\t\tsvcTemplateItems.push(svc)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst namespace = await this.Store('skill').loadCurrentSkillsNamespace()\n\t\tconst files = await this.Writer('view').writeCombinedViewsFile(this.cwd, {\n\t\t\tnamespaceKebab: namesUtil.toKebab(namespace),\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t})\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate mapIntrospectedClassToTemplateItem(c: IntrospectionClass): {\n\t\tvc?: VcTemplateItem\n\t\tsvc?: VcTemplateItem\n\t} {\n\t\tconst item = {\n\t\t\tid: c.staticProperties.id,\n\t\t\tnamePascal: c.className,\n\t\t\tpath: c.classPath,\n\t\t}\n\n\t\tlet vc: VcTemplateItem | undefined\n\t\tlet svc: VcTemplateItem | undefined\n\n\t\tif (c.classPath.endsWith('.svc.ts')) {\n\t\t\tsvc = item\n\t\t} else {\n\t\t\tvc = item\n\t\t}\n\n\t\treturn { svc, vc }\n\t}\n}\n"],"file":"SyncAction.js"}
1
+ {"version":3,"file":"SyncAction.js","names":["optionsSchema","id","description","fields","SyncAction","_options","targetDir","diskUtil","resolvePath","cwd","matches","length","paths","map","m","introspect","introspectionUtil","vcTemplateItems","svcTemplateItems","forEach","classes","thisClass","mapIntrospectedClassToTemplateItem","vc","svc","push","Store","loadCurrentSkillsNamespace","namespace","Writer","writeCombinedViewsFile","namespaceKebab","namesUtil","toKebab","files","c","item","staticProperties","namePascal","className","path","classPath","endsWith","AbstractAction"],"sources":["../../../../src/features/view/actions/SyncAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { VcTemplateItem } from '../../../../../spruce-templates/build'\nimport introspectionUtil, {\n\tIntrospectionClass,\n} from '../../../utilities/introspection.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'syncViewsOptions',\n\tdescription: 'Keep types and generated files based on views in sync.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SyncAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['sync.views']\n\tpublic invocationMessage = 'Syncing view controller types... 🌲'\n\n\tpublic async execute(\n\t\t_options: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tconst targetDir = diskUtil.resolvePath(this.cwd, 'src')\n\t\tconst matches = await globby(['**/*.svc.ts', '**/*.vc.ts'], {\n\t\t\tcwd: targetDir,\n\t\t})\n\n\t\tif (matches.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst paths = matches.map((m) => diskUtil.resolvePath(targetDir, m))\n\t\tconst introspect = introspectionUtil.introspect(paths)\n\n\t\tconst vcTemplateItems: VcTemplateItem[] = []\n\t\tconst svcTemplateItems: VcTemplateItem[] = []\n\n\t\tintrospect.forEach(({ classes }) => {\n\t\t\tfor (const thisClass of classes) {\n\t\t\t\tconst { vc, svc } = this.mapIntrospectedClassToTemplateItem(thisClass)\n\n\t\t\t\tif (vc) {\n\t\t\t\t\tvcTemplateItems.push(vc)\n\t\t\t\t} else if (svc) {\n\t\t\t\t\tsvcTemplateItems.push(svc)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst namespace = await this.Store('skill').loadCurrentSkillsNamespace()\n\t\tconst files = await this.Writer('view').writeCombinedViewsFile(this.cwd, {\n\t\t\tnamespaceKebab: namesUtil.toKebab(namespace),\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t})\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate mapIntrospectedClassToTemplateItem(c: IntrospectionClass): {\n\t\tvc?: VcTemplateItem\n\t\tsvc?: VcTemplateItem\n\t} {\n\t\tconst item = {\n\t\t\tid: c.staticProperties.id,\n\t\t\tnamePascal: c.className,\n\t\t\tpath: c.classPath,\n\t\t}\n\n\t\tlet vc: VcTemplateItem | undefined\n\t\tlet svc: VcTemplateItem | undefined\n\n\t\tif (c.classPath.endsWith('.svc.ts')) {\n\t\t\tsvc = item\n\t\t} else {\n\t\t\tvc = item\n\t\t}\n\n\t\treturn { svc, vc }\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/actions/WatchAction.ts"],"names":["optionsSchema","id","description","fields","shouldReturnImmediately","type","hint","WatchAction","options","validateAndNormalizeOptions","watchFeature","featureInstaller","getFeature","startWatching","delay","Store","loadCurrentSkill","skill","skillName","name","boot","bootControls","emitter","on","kill","Promise","resolve","stopWatching","summaryLines","meta","bootPromise","remote","Service","getRemote","heartwoodRemoteUtil","buildUrl","bootMessage","resetUi","Action","execute","onData","msg","includes","ui","stopLoading","renderLine","trim","startLoading","onError","GraphicsTextEffect","Red","results","then","errors","clear","renderHero","renderDivider","renderLines","getPreviewUrl","pid","AbstractAction"],"mappings":"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","sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport { GraphicsTextEffect } from '@sprucelabs/spruce-skill-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { BootMeta } from '../../skill/actions/BootAction'\nimport WatchFeature from '../../watch/WatchFeature'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\thint: \"For testing so we don't wait until the process is killed to get the results.\",\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate resolve?: () => void\n\tprivate bootControls?: BootMeta\n\tprivate skillName!: string\n\tprivate bootMessage!: string\n\tprivate watchFeature!: WatchFeature\n\n\tpublic async execute(options?: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately } = this.validateAndNormalizeOptions(\n\t\t\toptions ?? {}\n\t\t)\n\n\t\tthis.watchFeature = this.featureInstaller.getFeature('watch')\n\t\tawait this.watchFeature.startWatching({ delay: 2000 })\n\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\n\t\tthis.skillName = skill.name\n\t\tthis.bootControls = await this.boot()\n\n\t\tawait this.emitter.on('watcher.did-detect-change', async () => {\n\t\t\tthis.bootControls?.kill()\n\t\t\tthis.bootControls = await this.boot(\n\t\t\t\t'Changes detected, rebooting skill...'\n\t\t\t)\n\t\t})\n\n\t\tif (!shouldReturnImmediately) {\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthis.resolve = resolve\n\t\t\t})\n\n\t\t\tawait this.watchFeature.stopWatching()\n\t\t\tthis.bootControls?.kill()\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t\tmeta: {\n\t\t\t\tbootPromise: this.bootControls.bootPromise,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate async boot(bootMessage = 'Booting skill...') {\n\t\tthis.bootMessage = bootMessage\n\t\tthis.resetUi()\n\n\t\tconst results = await this.Action('skill', 'boot').execute({\n\t\t\tshouldReturnImmediately: true,\n\t\t\tonData: (msg: string) => {\n\t\t\t\tif (!msg.includes('node build/index') && !msg.includes('yarn run')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg.trim())\n\t\t\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (msg: string) => {\n\t\t\t\tif (!msg.includes('No license field')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg, [GraphicsTextEffect.Red])\n\t\t\t\t\tthis.ui.startLoading()\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\tresults.meta?.bootPromise?.then(() => {\n\t\t\tthis.bootMessage = 'Skill booted. Waiting for changes...'\n\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\tthrow results.errors[0]\n\t\t}\n\n\t\treturn results.meta as BootMeta\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading(this.bootMessage)\n\t}\n\n\tpublic async kill() {\n\t\tawait this.watchFeature.stopWatching()\n\t\tthis.bootControls?.kill()\n\t\tthis.resolve?.()\n\t}\n\n\tpublic getPid() {\n\t\treturn this.bootControls?.pid\n\t}\n}\n"],"file":"WatchAction.js"}
1
+ {"version":3,"file":"WatchAction.js","names":["optionsSchema","id","description","fields","shouldReturnImmediately","type","hint","WatchAction","options","validateAndNormalizeOptions","watchFeature","featureInstaller","getFeature","startWatching","delay","Store","loadCurrentSkill","skill","skillName","name","boot","bootControls","emitter","on","kill","Promise","resolve","stopWatching","summaryLines","meta","bootPromise","remote","Service","getRemote","heartwoodRemoteUtil","buildUrl","bootMessage","resetUi","Action","execute","onData","msg","includes","ui","stopLoading","renderLine","trim","startLoading","onError","GraphicsTextEffect","Red","results","then","errors","clear","renderHero","renderDivider","renderLines","getPreviewUrl","pid","AbstractAction"],"sources":["../../../../src/features/view/actions/WatchAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport { GraphicsTextEffect } from '@sprucelabs/spruce-skill-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { BootMeta } from '../../skill/actions/BootAction'\nimport WatchFeature from '../../watch/WatchFeature'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\thint: \"For testing so we don't wait until the process is killed to get the results.\",\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate resolve?: () => void\n\tprivate bootControls?: BootMeta\n\tprivate skillName!: string\n\tprivate bootMessage!: string\n\tprivate watchFeature!: WatchFeature\n\n\tpublic async execute(options?: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately } = this.validateAndNormalizeOptions(\n\t\t\toptions ?? {}\n\t\t)\n\n\t\tthis.watchFeature = this.featureInstaller.getFeature('watch')\n\t\tawait this.watchFeature.startWatching({ delay: 2000 })\n\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\n\t\tthis.skillName = skill.name\n\t\tthis.bootControls = await this.boot()\n\n\t\tawait this.emitter.on('watcher.did-detect-change', async () => {\n\t\t\tthis.bootControls?.kill()\n\t\t\tthis.bootControls = await this.boot(\n\t\t\t\t'Changes detected, rebooting skill...'\n\t\t\t)\n\t\t})\n\n\t\tif (!shouldReturnImmediately) {\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthis.resolve = resolve\n\t\t\t})\n\n\t\t\tawait this.watchFeature.stopWatching()\n\t\t\tthis.bootControls?.kill()\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t\tmeta: {\n\t\t\t\tbootPromise: this.bootControls.bootPromise,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate async boot(bootMessage = 'Booting skill...') {\n\t\tthis.bootMessage = bootMessage\n\t\tthis.resetUi()\n\n\t\tconst results = await this.Action('skill', 'boot').execute({\n\t\t\tshouldReturnImmediately: true,\n\t\t\tonData: (msg: string) => {\n\t\t\t\tif (!msg.includes('node build/index') && !msg.includes('yarn run')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg.trim())\n\t\t\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (msg: string) => {\n\t\t\t\tif (!msg.includes('No license field')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg, [GraphicsTextEffect.Red])\n\t\t\t\t\tthis.ui.startLoading()\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\tresults.meta?.bootPromise?.then(() => {\n\t\t\tthis.bootMessage = 'Skill booted. Waiting for changes...'\n\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\tthrow results.errors[0]\n\t\t}\n\n\t\treturn results.meta as BootMeta\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading(this.bootMessage)\n\t}\n\n\tpublic async kill() {\n\t\tawait this.watchFeature.stopWatching()\n\t\tthis.bootControls?.kill()\n\t\tthis.resolve?.()\n\t}\n\n\tpublic getPid() {\n\t\treturn this.bootControls?.pid\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/stores/ViewStore.ts"],"names":["ViewStore","connectToApi","shouldAuthAsCurrentSkill","client","skill","Service","getCurrentSkill","SpruceError","code","friendlyMessage","emit","target","namespace","slug","results","views","eventResponseUtil","getFirstResponseOrThrow","AbstractStore"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEqBA,S;;;;;;;;;;;;;;;6FACN,M;;;;;;;2GAEd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACsB,KAAKC,YAAL,CAAkB;AAAEC,kBAAAA,wBAAwB,EAAE;AAA5B,iBAAlB,CADtB;;AAAA;AACOC,gBAAAA,MADP;AAEOC,gBAAAA,KAFP,GAEe,KAAKC,OAAL,CAAa,MAAb,EAAqBC,eAArB,EAFf;;AAAA,oBAIMF,KAJN;AAAA;AAAA;AAAA;;AAAA,sBAKQ,IAAIG,uBAAJ,CAAgB;AACrBC,kBAAAA,IAAI,EAAE,sBADe;AAErBC,kBAAAA,eAAe;AAFM,iBAAhB,CALR;;AAAA;AAAA;AAAA;AAAA,uBAYwBN,MAAM,CAACO,IAAP,CACrB,wCADqB,EAErB;AACCC,kBAAAA,MAAM,EAAE;AACPC,oBAAAA,SAAS,EAAER,KAAK,CAACS;AADV;AADT,iBAFqB,CAZxB;;AAAA;AAYQC,gBAAAA,OAZR;AAqBQC,gBAAAA,KArBR,GAqBgBC,oCAAkBC,uBAAlB,CAA0CH,OAA1C,CArBhB;AAAA,iDAuBSC,KAvBT;;AAAA;AAAA;AAAA;AAAA,iDAyBS,IAzBT;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAHsCG,0B","sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport default class ViewStore extends AbstractStore {\n\tpublic name = 'view'\n\n\tpublic async fetchSkillViews() {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_REGISTERED',\n\t\t\t\tfriendlyMessage: `You can't get skill views without being registered. Try \\`spruce register\\``,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst results = await client.emit(\n\t\t\t\t'heartwood.get-skill-views::v2021_02_11',\n\t\t\t\t{\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\tnamespace: skill.slug,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst views = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\treturn views\n\t\t} catch (err) {\n\t\t\treturn null\n\t\t}\n\t}\n}\n"],"file":"ViewStore.js"}
1
+ {"version":3,"file":"ViewStore.js","names":["ViewStore","connectToApi","shouldAuthAsCurrentSkill","client","skill","Service","getCurrentSkill","SpruceError","code","friendlyMessage","emit","target","namespace","slug","results","views","eventResponseUtil","getFirstResponseOrThrow","AbstractStore"],"sources":["../../../../src/features/view/stores/ViewStore.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport default class ViewStore extends AbstractStore {\n\tpublic name = 'view'\n\n\tpublic async fetchSkillViews() {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_REGISTERED',\n\t\t\t\tfriendlyMessage: `You can't get skill views without being registered. Try \\`spruce register\\``,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst results = await client.emit(\n\t\t\t\t'heartwood.get-skill-views::v2021_02_11',\n\t\t\t\t{\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\tnamespace: skill.slug,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst views = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\treturn views\n\t\t} catch (err) {\n\t\t\treturn null\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEqBA,S;;;;;;;;;;;;;;;6FACN,M;;;;;;;2GAEd;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACsB,KAAKC,YAAL,CAAkB;kBAAEC,wBAAwB,EAAE;gBAA5B,CAAlB,CADtB;;cAAA;gBACOC,MADP;gBAEOC,KAFP,GAEe,KAAKC,OAAL,CAAa,MAAb,EAAqBC,eAArB,EAFf;;gBAAA,IAIMF,KAJN;kBAAA;kBAAA;gBAAA;;gBAAA,MAKQ,IAAIG,uBAAJ,CAAgB;kBACrBC,IAAI,EAAE,sBADe;kBAErBC,eAAe;gBAFM,CAAhB,CALR;;cAAA;gBAAA;gBAAA;gBAAA,OAYwBN,MAAM,CAACO,IAAP,CACrB,wCADqB,EAErB;kBACCC,MAAM,EAAE;oBACPC,SAAS,EAAER,KAAK,CAACS;kBADV;gBADT,CAFqB,CAZxB;;cAAA;gBAYQC,OAZR;gBAqBQC,KArBR,GAqBgBC,oCAAkBC,uBAAlB,CAA0CH,OAA1C,CArBhB;gBAAA,iCAuBSC,KAvBT;;cAAA;gBAAA;gBAAA;gBAAA,iCAyBS,IAzBT;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAHsCG,0B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","pathUtil","relative","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: pathUtil.relative(destinationDir, i.path).replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"file":"ViewWriter.js"}
1
+ {"version":3,"file":"ViewWriter.js","names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","pathUtil","relative","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: pathUtil.relative(destinationDir, i.path).replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/vscode/VsCodeFeature.ts"],"names":["VsCodeFeature","diskUtil","resolvePath","__dirname","path","description","shouldOverwriteWhenChanged","confirmPromptOnFirstWrite","command","Service","execute","AbstractFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;;;;;IASqBA,a;;;;;;;;;;;;;;;qGACE,Q;oGACD,+C;6FACM,Q;mGACPC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;yGAEkC,CACrD;AACCC,MAAAA,IAAI,EAAE,qBADP;AAECC,MAAAA,WAAW,EAAE,kDAFd;AAGCC,MAAAA,0BAA0B,EAAE,IAH7B;AAICC,MAAAA,yBAAyB,EAAE;AAJ5B,KADqD,EAOrD;AACCH,MAAAA,IAAI,EAAE,uBADP;AAECC,MAAAA,WAAW,EAAE,yDAFd;AAGCC,MAAAA,0BAA0B,EAAE,IAH7B;AAICC,MAAAA,yBAAyB,EACxB;AALF,KAPqD,EAcrD;AACCH,MAAAA,IAAI,EAAE,oBADP;AAECC,MAAAA,WAAW,EACV,sEAHF;AAICC,MAAAA,0BAA0B,EAAE,IAJ7B;AAKCC,MAAAA,yBAAyB,EACxB;AANF,KAdqD,C;+LAwBjC;AAAA;AAAA;AAAA;AAAA;AAAA;AACdC,cAAAA,OADc,GACJ,MAAKC,OAAL,CAAa,SAAb,CADI;AAAA;AAAA;AAAA,qBAIbD,OAAO,CAACE,OAAR,CAAgB,YAAhB,CAJa;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,+CAMZ,KANY;;AAAA;AAAA,+CASb,IATa;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,K;;;;;EA9BqBC,4B","sourcesContent":["/* eslint-disable no-unreachable */\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tvscode: VsCodeFeature\n\t}\n}\n\nexport default class VsCodeFeature extends AbstractFeature {\n\tpublic nameReadable = 'VSCode'\n\tpublic description = 'Create settings and install VSCode extensions'\n\tpublic code: FeatureCode = 'vscode'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t{\n\t\t\tpath: '.vscode/launch.json',\n\t\t\tdescription: 'Sets you up for debugging in Visual Studio Code.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite: 'Want me to setup debugging for you?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/settings.json',\n\t\t\tdescription: 'Ties everything together for optimal team productivity.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to setup vscode settings for building, testing and linting on save?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/tasks.json',\n\t\t\tdescription:\n\t\t\t\t'command+shift+t to open the Test Reporter, build watch on load, etc.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to start watchers when you start vscode?',\n\t\t},\n\t]\n\n\tpublic isInstalled = async () => {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('which code')\n\t\t} catch (err) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n}\n"],"file":"VsCodeFeature.js"}
1
+ {"version":3,"file":"VsCodeFeature.js","names":["VsCodeFeature","diskUtil","resolvePath","__dirname","path","description","shouldOverwriteWhenChanged","confirmPromptOnFirstWrite","command","Service","execute","AbstractFeature"],"sources":["../../../src/features/vscode/VsCodeFeature.ts"],"sourcesContent":["/* eslint-disable no-unreachable */\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tvscode: VsCodeFeature\n\t}\n}\n\nexport default class VsCodeFeature extends AbstractFeature {\n\tpublic nameReadable = 'VSCode'\n\tpublic description = 'Create settings and install VSCode extensions'\n\tpublic code: FeatureCode = 'vscode'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t{\n\t\t\tpath: '.vscode/launch.json',\n\t\t\tdescription: 'Sets you up for debugging in Visual Studio Code.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite: 'Want me to setup debugging for you?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/settings.json',\n\t\t\tdescription: 'Ties everything together for optimal team productivity.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to setup vscode settings for building, testing and linting on save?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/tasks.json',\n\t\t\tdescription:\n\t\t\t\t'command+shift+t to open the Test Reporter, build watch on load, etc.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to start watchers when you start vscode?',\n\t\t},\n\t]\n\n\tpublic isInstalled = async () => {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('which code')\n\t\t} catch (err) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;;;;;IASqBA,a;;;;;;;;;;;;;;;qGACE,Q;oGACD,+C;6FACM,Q;mGACPC,2BAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;yGAEkC,CACrD;MACCC,IAAI,EAAE,qBADP;MAECC,WAAW,EAAE,kDAFd;MAGCC,0BAA0B,EAAE,IAH7B;MAICC,yBAAyB,EAAE;IAJ5B,CADqD,EAOrD;MACCH,IAAI,EAAE,uBADP;MAECC,WAAW,EAAE,yDAFd;MAGCC,0BAA0B,EAAE,IAH7B;MAICC,yBAAyB,EACxB;IALF,CAPqD,EAcrD;MACCH,IAAI,EAAE,oBADP;MAECC,WAAW,EACV,sEAHF;MAICC,0BAA0B,EAAE,IAJ7B;MAKCC,yBAAyB,EACxB;IANF,CAdqD,C;+LAwBjC;MAAA;MAAA;QAAA;UAAA;YAAA;cACdC,OADc,GACJ,MAAKC,OAAL,CAAa,SAAb,CADI;cAAA;cAAA;cAAA,OAIbD,OAAO,CAACE,OAAR,CAAgB,YAAhB,CAJa;;YAAA;cAAA;cAAA;;YAAA;cAAA;cAAA;cAAA,iCAMZ,KANY;;YAAA;cAAA,iCASb,IATa;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,C;;;;;EA9BqBC,4B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/vscode/actions/SetupAction.ts"],"names":["SetupAction","id","label","setupVscodeSchema","name","isDev","options","validateAndNormalizeOptions","all","ui","startLoading","getMissingExtensions","missing","choices","map","ext","value","response","summaryLines","skipConfirmExtensions","length","stopLoading","optionallyInstallVscodeExtensions","Writer","writeVsCodeConfigurations","cwd","files","packagesInstalled","optionallyInstallEsListModules","hints","m","prompt","type","isArray","answers","answer","push","Service","installExtensions","pkg","dependencies","module","isInstalled","installEsLintModules","confirm","shouldInstallPackages","install","getVSCodeExtensions","currentExtensions","missingExtensions","recommendedExtensions","filter","recommendedExtension","currentExtension","find","e","AbstractAction"],"mappings":"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","sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { Extension } from '../services/VsCodeService'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Setting up Visual Studio Codez... 👾'\n\tprivate recommendedExtensions: Extension[] = [\n\t\t{\n\t\t\tid: 'dbaeumer.vscode-eslint',\n\t\t\tlabel: 'ESLint syntax validation and fixing',\n\t\t},\n\t\t{\n\t\t\tid: 'eg2.vscode-npm-script',\n\t\t\tlabel: 'NPM package.json validation and warnings',\n\t\t},\n\t\t{\n\t\t\tid: 'christian-kohler.npm-intellisense',\n\t\t\tlabel: 'Intellisense autocompletion of installed npm modules',\n\t\t},\n\t\t{\n\t\t\tid: 'mikestead.dotenv',\n\t\t\tlabel: '.env support',\n\t\t},\n\t]\n\n\tpublic optionsSchema = setupVscodeSchema\n\tprivate dependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: 'eslint',\n\t\t\tisDev: true,\n\t\t},\n\t\t{\n\t\t\tname: 'eslint-config-spruce',\n\t\t\tisDev: true,\n\t\t},\n\t]\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { all } = this.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Checking state of vscode.')\n\n\t\tconst missing = await this.getMissingExtensions()\n\t\tconst choices = missing.map((ext) => ({ value: ext.id, label: ext.label }))\n\t\tconst response: FeatureActionResponse = {\n\t\t\tsummaryLines: [],\n\t\t}\n\n\t\tconst skipConfirmExtensions = all || missing.length === 0\n\n\t\tif (!skipConfirmExtensions) {\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\n\t\tawait this.optionallyInstallVscodeExtensions(\n\t\t\tskipConfirmExtensions,\n\t\t\tmissing,\n\t\t\tchoices,\n\t\t\tresponse\n\t\t)\n\n\t\tthis.ui.startLoading('Writing vscode configurations...')\n\n\t\tconst files = await this.Writer('vscode').writeVsCodeConfigurations(\n\t\t\tthis.cwd,\n\t\t\t!all\n\t\t)\n\n\t\tresponse.files = files\n\t\tresponse.packagesInstalled = []\n\n\t\tawait this.optionallyInstallEsListModules(response, all)\n\n\t\tresponse.hints = [\n\t\t\t\"Ok, now that that's done 😅, lets make sure Visual Studio Code can run tasks whenever you open this project.\",\n\t\t\t'',\n\t\t\t'Step 1: Open the Command Palette (View -> Command Palette or cmd+shift+p) and type \"Manage\".',\n\t\t\t'Step 2: Select \"Tasks: Manage Automatic Tasks in Folder\".',\n\t\t\t'Step 3: Allow.',\n\t\t\t'Step 4: Open the Command Palette (cmd+shift+p)).',\n\t\t\t'Step 5: Select \"Developer: Reload Window\".',\n\t\t\t'💪',\n\t\t]\n\n\t\treturn response\n\t}\n\n\tprivate async optionallyInstallVscodeExtensions(\n\t\tskipConfirmExtensions: boolean,\n\t\tmissing: Extension[],\n\t\tchoices: { value: string; label: string }[],\n\t\tresponse: FeatureActionResponse\n\t) {\n\t\tconst answers = skipConfirmExtensions\n\t\t\t? missing.map((m) => m.id)\n\t\t\t: await this.ui.prompt({\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\tlabel: 'Which extensions should I install?',\n\t\t\t\t\tisArray: true,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tchoices,\n\t\t\t\t\t},\n\t\t\t })\n\n\t\tif (answers && answers?.length > 0) {\n\t\t\tthis.ui.startLoading(`Installing ${answers.length} extensions...`)\n\n\t\t\tfor (const answer of answers) {\n\t\t\t\tresponse.summaryLines?.push(`Installed ${answer} extension.`)\n\t\t\t}\n\n\t\t\tawait this.Service('vsCode').installExtensions(answers)\n\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\t}\n\n\tprivate async optionallyInstallEsListModules(\n\t\tresponse: FeatureActionResponse,\n\t\tall: boolean | undefined\n\t) {\n\t\tconst pkg = this.Service('pkg')\n\n\t\tfor (const module of this.dependencies) {\n\t\t\tif (!pkg.isInstalled(module.name)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t\t;(response.packagesInstalled ?? []).push(module)\n\t\t\t}\n\t\t}\n\n\t\tif ((response.packagesInstalled ?? []).length > 0) {\n\t\t\tawait this.installEsLintModules(all, response, pkg)\n\t\t}\n\t}\n\n\tprivate async installEsLintModules(\n\t\tall: boolean | undefined,\n\t\tresponse: FeatureActionResponse,\n\t\tpkg: PkgService\n\t) {\n\t\tthis.ui.stopLoading()\n\t\tconst shouldInstallPackages =\n\t\t\tall ||\n\t\t\t(await this.ui.confirm(\n\t\t\t\t'Last thing! Ready for me to install eslint modules?'\n\t\t\t))\n\n\t\tthis.ui.startLoading('Installing dev dependencies')\n\t\tif (shouldInstallPackages) {\n\t\t\tfor (const module of response.packagesInstalled ?? []) {\n\t\t\t\tawait pkg.install(module.name, {\n\t\t\t\t\tisDev: module.isDev,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async getMissingExtensions() {\n\t\tconst currentExtensions = await this.Service('vsCode').getVSCodeExtensions()\n\n\t\tconst missingExtensions = this.recommendedExtensions.filter(\n\t\t\t(recommendedExtension) => {\n\t\t\t\tconst currentExtension = currentExtensions.find(\n\t\t\t\t\t(e) => e === recommendedExtension.id\n\t\t\t\t)\n\t\t\t\tif (currentExtension) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t)\n\t\treturn missingExtensions\n\t}\n}\n"],"file":"SetupAction.js"}
1
+ {"version":3,"file":"SetupAction.js","names":["SetupAction","id","label","setupVscodeSchema","name","isDev","options","validateAndNormalizeOptions","all","ui","startLoading","getMissingExtensions","missing","choices","map","ext","value","response","summaryLines","skipConfirmExtensions","length","stopLoading","optionallyInstallVscodeExtensions","Writer","writeVsCodeConfigurations","cwd","files","packagesInstalled","optionallyInstallEsListModules","hints","m","prompt","type","isArray","answers","answer","push","Service","installExtensions","pkg","dependencies","module","isInstalled","installEsLintModules","confirm","shouldInstallPackages","install","getVSCodeExtensions","currentExtensions","missingExtensions","recommendedExtensions","filter","recommendedExtension","currentExtension","find","e","AbstractAction"],"sources":["../../../../src/features/vscode/actions/SetupAction.ts"],"sourcesContent":["import { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport setupVscodeSchema from '#spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema'\nimport PkgService from '../../../services/PkgService'\nimport { NpmPackage } from '../../../types/cli.types'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { Extension } from '../services/VsCodeService'\n\ntype OptionsSchema =\n\tSpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.SetupVscodeOptions\n\nexport default class SetupAction extends AbstractAction<OptionsSchema> {\n\tpublic invocationMessage = 'Setting up Visual Studio Codez... 👾'\n\tprivate recommendedExtensions: Extension[] = [\n\t\t{\n\t\t\tid: 'dbaeumer.vscode-eslint',\n\t\t\tlabel: 'ESLint syntax validation and fixing',\n\t\t},\n\t\t{\n\t\t\tid: 'eg2.vscode-npm-script',\n\t\t\tlabel: 'NPM package.json validation and warnings',\n\t\t},\n\t\t{\n\t\t\tid: 'christian-kohler.npm-intellisense',\n\t\t\tlabel: 'Intellisense autocompletion of installed npm modules',\n\t\t},\n\t\t{\n\t\t\tid: 'mikestead.dotenv',\n\t\t\tlabel: '.env support',\n\t\t},\n\t]\n\n\tpublic optionsSchema = setupVscodeSchema\n\tprivate dependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: 'eslint',\n\t\t\tisDev: true,\n\t\t},\n\t\t{\n\t\t\tname: 'eslint-config-spruce',\n\t\t\tisDev: true,\n\t\t},\n\t]\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { all } = this.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Checking state of vscode.')\n\n\t\tconst missing = await this.getMissingExtensions()\n\t\tconst choices = missing.map((ext) => ({ value: ext.id, label: ext.label }))\n\t\tconst response: FeatureActionResponse = {\n\t\t\tsummaryLines: [],\n\t\t}\n\n\t\tconst skipConfirmExtensions = all || missing.length === 0\n\n\t\tif (!skipConfirmExtensions) {\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\n\t\tawait this.optionallyInstallVscodeExtensions(\n\t\t\tskipConfirmExtensions,\n\t\t\tmissing,\n\t\t\tchoices,\n\t\t\tresponse\n\t\t)\n\n\t\tthis.ui.startLoading('Writing vscode configurations...')\n\n\t\tconst files = await this.Writer('vscode').writeVsCodeConfigurations(\n\t\t\tthis.cwd,\n\t\t\t!all\n\t\t)\n\n\t\tresponse.files = files\n\t\tresponse.packagesInstalled = []\n\n\t\tawait this.optionallyInstallEsListModules(response, all)\n\n\t\tresponse.hints = [\n\t\t\t\"Ok, now that that's done 😅, lets make sure Visual Studio Code can run tasks whenever you open this project.\",\n\t\t\t'',\n\t\t\t'Step 1: Open the Command Palette (View -> Command Palette or cmd+shift+p) and type \"Manage\".',\n\t\t\t'Step 2: Select \"Tasks: Manage Automatic Tasks in Folder\".',\n\t\t\t'Step 3: Allow.',\n\t\t\t'Step 4: Open the Command Palette (cmd+shift+p)).',\n\t\t\t'Step 5: Select \"Developer: Reload Window\".',\n\t\t\t'💪',\n\t\t]\n\n\t\treturn response\n\t}\n\n\tprivate async optionallyInstallVscodeExtensions(\n\t\tskipConfirmExtensions: boolean,\n\t\tmissing: Extension[],\n\t\tchoices: { value: string; label: string }[],\n\t\tresponse: FeatureActionResponse\n\t) {\n\t\tconst answers = skipConfirmExtensions\n\t\t\t? missing.map((m) => m.id)\n\t\t\t: await this.ui.prompt({\n\t\t\t\t\ttype: 'select',\n\t\t\t\t\tlabel: 'Which extensions should I install?',\n\t\t\t\t\tisArray: true,\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tchoices,\n\t\t\t\t\t},\n\t\t\t })\n\n\t\tif (answers && answers?.length > 0) {\n\t\t\tthis.ui.startLoading(`Installing ${answers.length} extensions...`)\n\n\t\t\tfor (const answer of answers) {\n\t\t\t\tresponse.summaryLines?.push(`Installed ${answer} extension.`)\n\t\t\t}\n\n\t\t\tawait this.Service('vsCode').installExtensions(answers)\n\n\t\t\tthis.ui.stopLoading()\n\t\t}\n\t}\n\n\tprivate async optionallyInstallEsListModules(\n\t\tresponse: FeatureActionResponse,\n\t\tall: boolean | undefined\n\t) {\n\t\tconst pkg = this.Service('pkg')\n\n\t\tfor (const module of this.dependencies) {\n\t\t\tif (!pkg.isInstalled(module.name)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-extra-semi\n\t\t\t\t;(response.packagesInstalled ?? []).push(module)\n\t\t\t}\n\t\t}\n\n\t\tif ((response.packagesInstalled ?? []).length > 0) {\n\t\t\tawait this.installEsLintModules(all, response, pkg)\n\t\t}\n\t}\n\n\tprivate async installEsLintModules(\n\t\tall: boolean | undefined,\n\t\tresponse: FeatureActionResponse,\n\t\tpkg: PkgService\n\t) {\n\t\tthis.ui.stopLoading()\n\t\tconst shouldInstallPackages =\n\t\t\tall ||\n\t\t\t(await this.ui.confirm(\n\t\t\t\t'Last thing! Ready for me to install eslint modules?'\n\t\t\t))\n\n\t\tthis.ui.startLoading('Installing dev dependencies')\n\t\tif (shouldInstallPackages) {\n\t\t\tfor (const module of response.packagesInstalled ?? []) {\n\t\t\t\tawait pkg.install(module.name, {\n\t\t\t\t\tisDev: module.isDev,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async getMissingExtensions() {\n\t\tconst currentExtensions = await this.Service('vsCode').getVSCodeExtensions()\n\n\t\tconst missingExtensions = this.recommendedExtensions.filter(\n\t\t\t(recommendedExtension) => {\n\t\t\t\tconst currentExtension = currentExtensions.find(\n\t\t\t\t\t(e) => e === recommendedExtension.id\n\t\t\t\t)\n\t\t\t\tif (currentExtension) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t)\n\t\treturn missingExtensions\n\t}\n}\n"],"mappings":"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"}