@sprucelabs/spruce-cli 18.2.0 → 18.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/.spruce/events/events.contract.d.ts +159 -0
  3. package/build/.spruce/events/events.contract.js +5 -1
  4. package/build/.spruce/events/events.contract.js.map +1 -1
  5. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.d.ts +46 -0
  6. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.js +57 -0
  7. package/build/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.js.map +1 -0
  8. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.d.ts +68 -0
  9. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.js +78 -0
  10. package/build/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.js.map +1 -0
  11. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.d.ts +40 -0
  12. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.js +51 -0
  13. package/build/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.js.map +1 -0
  14. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.d.ts +9 -0
  15. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.js +17 -0
  16. package/build/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.js.map +1 -0
  17. package/build/.spruce/schemas/schemas.types.d.ts +158 -55
  18. package/build/.spruce/schemas/schemas.types.js.map +1 -1
  19. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.d.ts +3 -0
  20. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.js +70 -0
  21. package/build/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.js.map +1 -0
  22. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.d.ts +3 -0
  23. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.js +35 -0
  24. package/build/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.js.map +1 -0
  25. package/build/.spruce/settings.json +2 -1
  26. package/build/GlobalEmitter.d.ts +13 -38
  27. package/build/GlobalEmitter.js +3 -6
  28. package/build/GlobalEmitter.js.map +1 -1
  29. package/build/__tests__/behavioral/TestingAConversation.test.d.ts +2 -1
  30. package/build/__tests__/behavioral/TestingAConversation.test.js +74 -84
  31. package/build/__tests__/behavioral/TestingAConversation.test.js.map +1 -1
  32. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js +38 -13
  33. package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js.map +1 -1
  34. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.d.ts +1 -0
  35. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js +16 -9
  36. package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
  37. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.d.ts +2 -2
  38. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js +7 -7
  39. package/build/__tests__/behavioral/permissions/CreatingPermissions.test.js.map +1 -1
  40. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.d.ts +6 -0
  41. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js +85 -0
  42. package/build/__tests__/behavioral/permissions/PermissionPlugin.test.js.map +1 -0
  43. package/build/__tests__/behavioral/permissions/PermissionStore.test.d.ts +5 -4
  44. package/build/__tests__/behavioral/permissions/PermissionStore.test.js +96 -63
  45. package/build/__tests__/behavioral/permissions/PermissionStore.test.js.map +1 -1
  46. package/build/__tests__/behavioral/permissions/PermissionWriter.test.d.ts +5 -0
  47. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js +88 -0
  48. package/build/__tests__/behavioral/permissions/PermissionWriter.test.js.map +1 -0
  49. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.d.ts +15 -4
  50. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js +325 -28
  51. package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js.map +1 -1
  52. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.d.ts +11 -0
  53. package/build/__tests__/behavioral/permissions/{AbstractPermissionsTest.js → support/AbstractPermissionsTest.js} +34 -2
  54. package/build/__tests__/behavioral/permissions/support/AbstractPermissionsTest.js.map +1 -0
  55. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.d.ts +1 -0
  56. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js +11 -0
  57. package/build/__tests__/behavioral/permissions/support/generateShortAlphaId.js.map +1 -0
  58. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.d.ts +1 -0
  59. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js +17 -0
  60. package/build/__tests__/behavioral/permissions/support/renderPermissionTestFile.js.map +1 -0
  61. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.d.ts +5 -0
  62. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js +10 -0
  63. package/build/__tests__/behavioral/permissions/support/sortPermissionContracts.js.map +1 -0
  64. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.d.ts +1 -1
  65. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js +46 -46
  66. package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js.map +1 -1
  67. package/build/__tests__/behavioral/tests/CreatingATest.test.js +2 -2
  68. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  69. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js +7 -3
  70. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
  71. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js +2 -2
  72. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
  73. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js +1 -1
  74. package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js.map +1 -1
  75. package/build/__tests__/implementation/ActionExecuter2.test.d.ts +1 -1
  76. package/build/__tests__/implementation/ActionExecuter2.test.js +23 -11
  77. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  78. package/build/__tests__/implementation/GlobalEmitter.test.d.ts +1 -0
  79. package/build/__tests__/implementation/GlobalEmitter.test.js +40 -3
  80. package/build/__tests__/implementation/GlobalEmitter.test.js.map +1 -1
  81. package/build/__tests__/implementation/SkillStore.test.js +3 -4
  82. package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
  83. package/build/features/AbstractAction.d.ts +1 -1
  84. package/build/features/AbstractAction.js.map +1 -1
  85. package/build/features/AbstractFeature.d.ts +3 -3
  86. package/build/features/AbstractFeature.js +8 -8
  87. package/build/features/AbstractFeature.js.map +1 -1
  88. package/build/features/ActionExecuter.d.ts +1 -1
  89. package/build/features/ActionExecuter.js +3 -4
  90. package/build/features/ActionExecuter.js.map +1 -1
  91. package/build/features/ActionFactory.d.ts +12 -5
  92. package/build/features/ActionFactory.js +27 -6
  93. package/build/features/ActionFactory.js.map +1 -1
  94. package/build/features/ActionQuestionAsker.d.ts +1 -1
  95. package/build/features/ActionQuestionAsker.js +6 -6
  96. package/build/features/ActionQuestionAsker.js.map +1 -1
  97. package/build/features/conversation/ConversationFeature.js +1 -1
  98. package/build/features/conversation/ConversationFeature.js.map +1 -1
  99. package/build/features/dependencies/DependencyFeature.js +1 -1
  100. package/build/features/dependencies/DependencyFeature.js.map +1 -1
  101. package/build/features/deploy/actions/HerokuAction.js +31 -33
  102. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  103. package/build/features/error/ErrorFeature.js +4 -4
  104. package/build/features/error/ErrorFeature.js.map +1 -1
  105. package/build/features/event/EventFeature.d.ts +8 -8
  106. package/build/features/event/EventFeature.js +7 -4
  107. package/build/features/event/EventFeature.js.map +1 -1
  108. package/build/features/event/actions/CreateAction.js.map +1 -1
  109. package/build/features/event/actions/ListenAction.js.map +1 -1
  110. package/build/features/event/stores/EventStore.d.ts +9 -9
  111. package/build/features/event/stores/EventStore.js +26 -26
  112. package/build/features/event/stores/EventStore.js.map +1 -1
  113. package/build/features/eventContract/EventContractFeature.js +4 -1
  114. package/build/features/eventContract/EventContractFeature.js.map +1 -1
  115. package/build/features/eventContract/actions/PullAction.js +10 -5
  116. package/build/features/eventContract/actions/PullAction.js.map +1 -1
  117. package/build/features/features.types.d.ts +2 -37
  118. package/build/features/features.types.js +0 -41
  119. package/build/features/features.types.js.map +1 -1
  120. package/build/features/log/LogFeature.js +1 -1
  121. package/build/features/log/LogFeature.js.map +1 -1
  122. package/build/features/node/NodeFeature.js.map +1 -1
  123. package/build/features/organization/actions/InstallAction.js.map +1 -1
  124. package/build/features/permission/PermissionFeature.d.ts +12 -2
  125. package/build/features/permission/PermissionFeature.js +140 -15
  126. package/build/features/permission/PermissionFeature.js.map +1 -1
  127. package/build/features/permission/actions/CreateAction.js +4 -1
  128. package/build/features/permission/actions/CreateAction.js.map +1 -1
  129. package/build/features/permission/actions/SyncAction.d.ts +5 -1
  130. package/build/features/permission/actions/SyncAction.js +28 -10
  131. package/build/features/permission/actions/SyncAction.js.map +1 -1
  132. package/build/features/permission/stores/PermissionStore.d.ts +6 -1
  133. package/build/features/permission/stores/PermissionStore.js +43 -31
  134. package/build/features/permission/stores/PermissionStore.js.map +1 -1
  135. package/build/features/permission/writers/PermissionWriter.d.ts +7 -1
  136. package/build/features/permission/writers/PermissionWriter.js +66 -17
  137. package/build/features/permission/writers/PermissionWriter.js.map +1 -1
  138. package/build/features/person/PersonFeature.js +1 -1
  139. package/build/features/person/PersonFeature.js.map +1 -1
  140. package/build/features/sandbox/SandboxFeature.js +1 -1
  141. package/build/features/sandbox/SandboxFeature.js.map +1 -1
  142. package/build/features/schema/SchemaFeature.d.ts +8 -8
  143. package/build/features/schema/SchemaFeature.js +4 -4
  144. package/build/features/schema/SchemaFeature.js.map +1 -1
  145. package/build/features/schema/writers/SchemaWriter.d.ts +12 -12
  146. package/build/features/schema/writers/SchemaWriter.js.map +1 -1
  147. package/build/features/skill/SkillFeature.d.ts +11 -11
  148. package/build/features/skill/SkillFeature.js +2 -2
  149. package/build/features/skill/SkillFeature.js.map +1 -1
  150. package/build/features/skill/actions/RebuildAction.js.map +1 -1
  151. package/build/features/skill/actions/RegisterAction.js.map +1 -1
  152. package/build/features/skill/stores/SkillStore.js +1 -2
  153. package/build/features/skill/stores/SkillStore.js.map +1 -1
  154. package/build/features/store/StoreFeature.js +1 -1
  155. package/build/features/store/StoreFeature.js.map +1 -1
  156. package/build/features/store/actions/SyncAction.d.ts +1 -1
  157. package/build/features/store/actions/SyncAction.js.map +1 -1
  158. package/build/features/test/TestFeature.js +1 -1
  159. package/build/features/test/TestFeature.js.map +1 -1
  160. package/build/features/view/ViewFeature.js +1 -1
  161. package/build/features/view/ViewFeature.js.map +1 -1
  162. package/build/schemas/v2020_07_22/actionResponse.builder.d.ts +85 -0
  163. package/build/schemas/v2020_07_22/actionResponse.builder.js +70 -0
  164. package/build/schemas/v2020_07_22/actionResponse.builder.js.map +1 -0
  165. package/build/schemas/v2020_07_22/generatedFile.builder.d.ts +27 -0
  166. package/build/schemas/v2020_07_22/generatedFile.builder.js +45 -0
  167. package/build/schemas/v2020_07_22/generatedFile.builder.js.map +1 -0
  168. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js +4 -40
  169. package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js.map +1 -1
  170. package/build/services/CommandService.d.ts +2 -2
  171. package/build/services/CommandService.js +6 -6
  172. package/build/services/CommandService.js.map +1 -1
  173. package/build/services/PkgService.d.ts +1 -0
  174. package/build/services/PkgService.js +5 -0
  175. package/build/services/PkgService.js.map +1 -1
  176. package/build/tests/AbstractCliTest.d.ts +7 -3
  177. package/build/tests/AbstractCliTest.js +81 -45
  178. package/build/tests/AbstractCliTest.js.map +1 -1
  179. package/build/tests/buildTestCache.js +7 -0
  180. package/build/tests/buildTestCache.js.map +1 -1
  181. package/build/tests/fixtures/FeatureFixture.js +1 -0
  182. package/build/tests/fixtures/FeatureFixture.js.map +1 -1
  183. package/build/tests/utilities/test.utility.d.ts +2 -0
  184. package/build/tests/utilities/test.utility.js +6 -0
  185. package/build/tests/utilities/test.utility.js.map +1 -1
  186. package/node_modules/@typescript-eslint/parser/package.json +5 -5
  187. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts +4 -2
  188. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.d.ts.map +1 -1
  189. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js +13 -5
  190. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/ClassVisitor.js.map +1 -1
  191. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts +2 -1
  192. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.d.ts.map +1 -1
  193. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js +3 -0
  194. package/node_modules/@typescript-eslint/scope-manager/dist/referencer/Referencer.js.map +1 -1
  195. package/node_modules/@typescript-eslint/scope-manager/package.json +5 -5
  196. package/node_modules/@typescript-eslint/types/_ts3.4/dist/generated/ast-spec.d.ts +20 -2
  197. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts +20 -2
  198. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.d.ts.map +1 -1
  199. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js +2 -0
  200. package/node_modules/@typescript-eslint/types/dist/generated/ast-spec.js.map +1 -1
  201. package/node_modules/@typescript-eslint/types/package.json +2 -2
  202. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/estree-to-ts-node-types.d.ts +2 -0
  203. package/node_modules/@typescript-eslint/typescript-estree/_ts3.4/dist/ts-estree/ts-nodes.d.ts +2 -0
  204. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.d.ts.map +1 -1
  205. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js +15 -3
  206. package/node_modules/@typescript-eslint/typescript-estree/dist/convert.js.map +1 -1
  207. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts +2 -0
  208. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/estree-to-ts-node-types.d.ts.map +1 -1
  209. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts +2 -0
  210. package/node_modules/@typescript-eslint/typescript-estree/dist/ts-estree/ts-nodes.d.ts.map +1 -1
  211. package/node_modules/@typescript-eslint/typescript-estree/package.json +5 -5
  212. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.d.ts.map +1 -1
  213. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js +63 -49
  214. package/node_modules/@typescript-eslint/visitor-keys/dist/visitor-keys.js.map +1 -1
  215. package/node_modules/@typescript-eslint/visitor-keys/package.json +3 -3
  216. package/package.json +65 -33
  217. package/src/.spruce/events/events.contract.ts +24 -0
  218. package/src/.spruce/events/heartwood/getActiveTheme.v2021_02_11.contract.ts +54 -0
  219. package/src/.spruce/events/heartwood/registerDashboardCards.v2021_02_11.contract.ts +79 -0
  220. package/src/.spruce/events/heartwood/upsertTheme.v2021_02_11.contract.ts +48 -0
  221. package/src/.spruce/events/spruceCli/registerSkillViews.v2021_04_11.contract.ts +13 -0
  222. package/src/.spruce/schemas/schemas.types.ts +171 -52
  223. package/src/.spruce/schemas/spruceCli/v2020_07_22/actionResponse.schema.ts +58 -0
  224. package/src/.spruce/schemas/spruceCli/v2020_07_22/npmPackage.schema.ts +33 -0
  225. package/src/.spruce/settings.json +2 -1
  226. package/src/GlobalEmitter.ts +2 -7
  227. package/src/__tests__/behavioral/TestingAConversation.test.ts +20 -37
  228. package/src/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.ts +14 -2
  229. package/src/__tests__/behavioral/events/SkillEmitsBootEvents.test.ts +6 -0
  230. package/src/__tests__/behavioral/permissions/CreatingPermissions.test.ts +2 -2
  231. package/src/__tests__/behavioral/permissions/PermissionPlugin.test.ts +24 -0
  232. package/src/__tests__/behavioral/permissions/PermissionStore.test.ts +95 -38
  233. package/src/__tests__/behavioral/permissions/PermissionWriter.test.ts +23 -0
  234. package/src/__tests__/behavioral/permissions/SyncingPermissions.test.ts +125 -8
  235. package/src/__tests__/behavioral/permissions/support/AbstractPermissionsTest.ts +38 -0
  236. package/src/__tests__/behavioral/permissions/support/generateShortAlphaId.ts +5 -0
  237. package/src/__tests__/behavioral/permissions/support/renderPermissionTestFile.ts +27 -0
  238. package/src/__tests__/behavioral/permissions/support/sortPermissionContracts.ts +3 -0
  239. package/src/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.ts +12 -12
  240. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +2 -2
  241. package/src/__tests__/behavioral/upgrading/UpgradingANodeModule.test.ts +3 -0
  242. package/src/__tests__/behavioral/upgrading/UpgradingASkill3.test.ts +3 -2
  243. package/src/__tests__/behavioral/upgrading/UpgradingASkill4.test.ts +1 -1
  244. package/src/__tests__/implementation/ActionExecuter2.test.ts +13 -6
  245. package/src/__tests__/implementation/GlobalEmitter.test.ts +22 -1
  246. package/src/__tests__/implementation/SkillStore.test.ts +1 -2
  247. package/src/features/AbstractAction.ts +2 -2
  248. package/src/features/AbstractFeature.ts +8 -8
  249. package/src/features/ActionExecuter.ts +4 -5
  250. package/src/features/ActionFactory.ts +44 -20
  251. package/src/features/ActionQuestionAsker.ts +17 -17
  252. package/src/features/conversation/ConversationFeature.ts +1 -1
  253. package/src/features/dependencies/DependencyFeature.ts +1 -1
  254. package/src/features/deploy/actions/HerokuAction.ts +2 -2
  255. package/src/features/error/ErrorFeature.ts +4 -4
  256. package/src/features/event/EventFeature.ts +15 -14
  257. package/src/features/event/actions/CreateAction.ts +1 -1
  258. package/src/features/event/actions/ListenAction.ts +1 -1
  259. package/src/features/event/stores/EventStore.ts +37 -37
  260. package/src/features/eventContract/EventContractFeature.ts +6 -1
  261. package/src/features/eventContract/actions/PullAction.ts +7 -3
  262. package/src/features/features.types.ts +4 -41
  263. package/src/features/log/LogFeature.ts +1 -1
  264. package/src/features/node/NodeFeature.ts +1 -1
  265. package/src/features/organization/actions/InstallAction.ts +1 -1
  266. package/src/features/permission/PermissionFeature.ts +66 -11
  267. package/src/features/permission/actions/CreateAction.ts +2 -0
  268. package/src/features/permission/actions/SyncAction.ts +22 -3
  269. package/src/features/permission/stores/PermissionStore.ts +27 -8
  270. package/src/features/permission/writers/PermissionWriter.ts +64 -3
  271. package/src/features/person/PersonFeature.ts +1 -1
  272. package/src/features/sandbox/SandboxFeature.ts +1 -3
  273. package/src/features/schema/SchemaFeature.ts +14 -14
  274. package/src/features/schema/writers/SchemaWriter.ts +14 -15
  275. package/src/features/skill/SkillFeature.ts +18 -18
  276. package/src/features/skill/actions/RebuildAction.ts +1 -1
  277. package/src/features/skill/actions/RegisterAction.ts +1 -1
  278. package/src/features/skill/stores/SkillStore.ts +1 -2
  279. package/src/features/store/StoreFeature.ts +1 -1
  280. package/src/features/store/actions/SyncAction.ts +1 -1
  281. package/src/features/test/TestFeature.ts +1 -1
  282. package/src/features/view/ViewFeature.ts +1 -1
  283. package/src/schemas/v2020_07_22/actionResponse.builder.ts +62 -0
  284. package/src/schemas/v2020_07_22/generatedFile.builder.ts +44 -0
  285. package/src/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.ts +3 -46
  286. package/src/services/CommandService.ts +5 -5
  287. package/src/services/PkgService.ts +4 -0
  288. package/src/tests/AbstractCliTest.ts +31 -13
  289. package/src/tests/buildTestCache.ts +7 -0
  290. package/src/tests/fixtures/FeatureFixture.ts +2 -0
  291. package/src/tests/utilities/test.utility.ts +13 -0
  292. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.d.ts +0 -8
  293. package/build/__tests__/behavioral/permissions/AbstractPermissionsTest.js.map +0 -1
  294. package/src/__tests__/behavioral/permissions/AbstractPermissionsTest.ts +0 -20
@@ -1,24 +1,79 @@
1
- import { diskUtil } from '@sprucelabs/spruce-skill-utils'
2
- import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
1
+ import { diskUtil, NpmPackage } from '@sprucelabs/spruce-skill-utils'
2
+ import AbstractFeature, {
3
+ FeatureDependency,
4
+ FeatureOptions,
5
+ InstallResults,
6
+ } from '../AbstractFeature'
3
7
  import { FeatureCode } from '../features.types'
8
+ import PermissionWriter from './writers/PermissionWriter'
4
9
 
5
10
  export default class PermissionFeature extends AbstractFeature {
6
11
  public code: FeatureCode = 'permission'
7
12
  public nameReadable = 'permission'
8
13
  public description = 'Manage permissions for your skill'
9
- public dependencies: FeatureDependency[] = [
10
- {
11
- code: 'skill',
12
- isRequired: true,
13
- },
14
+ public dependencies: FeatureDependency[] = []
15
+ public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
16
+ public packageDependencies: NpmPackage[] = [
14
17
  {
15
- code: 'event',
16
- isRequired: true,
18
+ name: '@sprucelabs/spruce-permission-plugin@latest',
17
19
  },
18
20
  ]
19
- public packageDependencies = []
21
+ private writer: PermissionWriter
20
22
 
21
- public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
23
+ public constructor(options: FeatureOptions) {
24
+ super(options)
25
+ this.writer = this.Writer('permission')
26
+
27
+ void this.emitter.on(
28
+ 'feature.did-execute',
29
+ this.handleDidExecuteAction.bind(this)
30
+ )
31
+ }
32
+
33
+ public async handleDidExecuteAction({
34
+ featureCode,
35
+ actionCode,
36
+ }: {
37
+ featureCode: string
38
+ actionCode: string
39
+ }) {
40
+ const isInstalled = await this.features.isInstalled('permission')
41
+ const isSkillInstalled = await this.features.isInstalled('skill')
42
+
43
+ if (
44
+ isSkillInstalled &&
45
+ isInstalled &&
46
+ featureCode === 'node' &&
47
+ actionCode === 'upgrade'
48
+ ) {
49
+ const combinedFile = await this.writePlugin()
50
+ const results = await this.Action('permission', 'sync').execute({})
51
+
52
+ results.files = [...(results.files ?? []), ...combinedFile]
53
+ return results
54
+ }
55
+
56
+ return {}
57
+ }
58
+
59
+ public async afterPackageInstall(): Promise<InstallResults> {
60
+ const files = await this.writePlugin()
61
+ const combinedFile = await this.writeTypesFile()
62
+
63
+ return {
64
+ files: [...files, ...combinedFile],
65
+ }
66
+ }
67
+
68
+ private async writeTypesFile() {
69
+ return await this.writer.writeTypesFile(this.cwd, {
70
+ contracts: [],
71
+ })
72
+ }
73
+
74
+ private async writePlugin() {
75
+ return this.writer.writePlugin(this.cwd)
76
+ }
22
77
  }
23
78
 
24
79
  declare module '../../features/features.types' {
@@ -26,6 +26,8 @@ export default class CreateAction extends AbstractAction<OptionsSchema> {
26
26
  description,
27
27
  })
28
28
 
29
+ await this.Action('permission', 'sync').execute({})
30
+
29
31
  return {
30
32
  files,
31
33
  }
@@ -1,16 +1,35 @@
1
1
  import { buildSchema } from '@sprucelabs/schema'
2
2
  import AbstractAction from '../../AbstractAction'
3
- import { FeatureActionResponse } from '../../features.types'
3
+ import { ActionOptions, FeatureActionResponse } from '../../features.types'
4
+ import PermissionStore from '../stores/PermissionStore'
5
+ import PermissionWriter from '../writers/PermissionWriter'
4
6
 
5
7
  export default class SyncAction extends AbstractAction<OptionsSchema> {
6
8
  public invocationMessage = 'Syncing permissions... 🛡'
7
9
  public optionsSchema = schema
10
+ public readonly commandAliases: string[] = ['sync.permissions']
11
+
12
+ private permissions: PermissionStore
13
+ private writer: PermissionWriter
14
+
15
+ public constructor(options: ActionOptions) {
16
+ super(options)
17
+ this.permissions = this.Store('permission')
18
+ this.writer = this.Writer('permission')
19
+ }
8
20
 
9
21
  public async execute(): Promise<FeatureActionResponse> {
10
- const files = await this.Writer('permission').writeTypesFile(this.cwd)
22
+ const map = await this.permissions.fetchContracts()
23
+ const typesFiles = await this.writer.writeTypesFile(this.cwd, map)
24
+
25
+ const local = await this.permissions.loadLocalPermissions()
26
+ const combinedFiles = await this.writer.writeCombinedFile(this.cwd, {
27
+ contracts: local,
28
+ })
11
29
 
12
30
  return {
13
- files,
31
+ files: [...typesFiles, ...combinedFiles],
32
+ summaryLines: ['Permissions synced'],
14
33
  }
15
34
  }
16
35
  }
@@ -9,28 +9,43 @@ import AbstractStore from '../../../stores/AbstractStore'
9
9
  export default class PermissionStore extends AbstractStore {
10
10
  public name = 'permission'
11
11
 
12
- private async loadLocalPermissions() {
12
+ public async loadLocalPermissions() {
13
13
  const matches = await globby('**/*.permissions.ts', {
14
14
  cwd: this.cwd,
15
15
  })
16
16
 
17
- const map: PermissionContractMap = {}
17
+ const namespace = this.Service('pkg').getSkillNamespace()
18
+ const imported: ImportedPermission[] = []
18
19
 
19
20
  for (const file of matches) {
21
+ const path = diskUtil.resolvePath(this.cwd, file)
20
22
  const contract = (await this.Service('import').importDefault(
21
- diskUtil.resolvePath(this.cwd, file)
23
+ path
22
24
  )) as PermissionContract
23
25
 
24
- map[contract.id] = contract.permissions.map((p) => p.id)
26
+ imported.push({
27
+ id: `${namespace}.${contract.id}`,
28
+ permissions: contract.permissions.map((p) => p.id),
29
+ path,
30
+ })
25
31
  }
26
32
 
27
- return map
33
+ return imported
28
34
  }
29
35
 
30
36
  public async fetchContracts() {
31
- const client = await this.connectToApi()
37
+ const client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })
32
38
  const deps = this.Service('dependency').get()
33
39
 
40
+ const local = await this.loadLocalPermissions()
41
+ const map: PermissionContractMap = local.reduce<PermissionContractMap>(
42
+ (map, local) => {
43
+ map[local.id] = local.permissions
44
+ return map
45
+ },
46
+ {}
47
+ )
48
+
34
49
  const [{ permissionContracts }] = await client.emitAndFlattenResponses(
35
50
  'list-permission-contracts::v2020_12_25',
36
51
  {
@@ -40,8 +55,6 @@ export default class PermissionStore extends AbstractStore {
40
55
  }
41
56
  )
42
57
 
43
- const map: PermissionContractMap = await this.loadLocalPermissions()
44
-
45
58
  for (const result of permissionContracts) {
46
59
  map[result.contract.id] = result.contract.permissions.map((p) => p.id)
47
60
  }
@@ -49,3 +62,9 @@ export default class PermissionStore extends AbstractStore {
49
62
  return map
50
63
  }
51
64
  }
65
+
66
+ export interface ImportedPermission {
67
+ id: string
68
+ permissions: string[]
69
+ path: string
70
+ }
@@ -1,23 +1,66 @@
1
- import { diskUtil } from '@sprucelabs/spruce-skill-utils'
1
+ import { PermissionContractMap } from '@sprucelabs/mercury-types'
2
+ import { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'
2
3
  import AbstractWriter from '../../../writers/AbstractWriter'
4
+ import { ImportedPermission } from '../stores/PermissionStore'
3
5
 
4
6
  export default class PermissionWriter extends AbstractWriter {
5
- public async writeTypesFile(destinationDir: string) {
7
+ public async writeTypesFile(
8
+ destinationDir: string,
9
+ map: PermissionContractMap
10
+ ) {
6
11
  const destination = diskUtil.resolveHashSprucePath(
7
12
  destinationDir,
8
13
  'permissions',
9
14
  'permissions.types.ts'
10
15
  )
11
16
 
17
+ const contents = this.templates.permissionTypes({ contracts: map })
18
+
12
19
  const files = await this.writeFileIfChangedMixinResults(
13
20
  destination,
14
- '',
21
+ contents,
15
22
  'Types file for any permission contracts you created or depend on.'
16
23
  )
17
24
 
18
25
  return files
19
26
  }
20
27
 
28
+ public async writeCombinedFile(
29
+ destinationDir: string,
30
+ options: {
31
+ contracts: ImportedPermission[]
32
+ }
33
+ ) {
34
+ const { contracts } = options
35
+
36
+ const destinationPath = diskUtil.resolveHashSprucePath(
37
+ destinationDir,
38
+ 'permissions'
39
+ )
40
+ const destinationFile = diskUtil.resolvePath(
41
+ destinationPath,
42
+ 'permissions.ts'
43
+ )
44
+
45
+ const local = contracts.map((c) => ({
46
+ nameCamel: namesUtil.toCamel(c.id),
47
+ path: diskUtil.resolveRelativePath(
48
+ destinationPath,
49
+ c.path.replace('.ts', '')
50
+ ),
51
+ }))
52
+
53
+ const content = this.templates.permissions({ contracts: local })
54
+
55
+ const files = await this.writeFileIfChangedMixinResults(
56
+ destinationFile,
57
+ content,
58
+ 'Import of all permission contracts for loading on boot!'
59
+ )
60
+
61
+ return files
62
+ }
63
+
21
64
  public async writeContract(
22
65
  destinationDir: string,
23
66
  options: {
@@ -51,4 +94,22 @@ export default class PermissionWriter extends AbstractWriter {
51
94
 
52
95
  return files
53
96
  }
97
+
98
+ public writePlugin(cwd: string) {
99
+ const destination = diskUtil.resolveHashSprucePath(
100
+ cwd,
101
+ 'features',
102
+ 'permission.plugin.ts'
103
+ )
104
+
105
+ const pluginContents = this.templates.permissionPlugin()
106
+
107
+ const results = this.writeFileIfChangedMixinResults(
108
+ destination,
109
+ pluginContents,
110
+ 'Enable permission support in your skill.'
111
+ )
112
+
113
+ return results
114
+ }
54
115
  }
@@ -17,7 +17,7 @@ export default class PersonFeature extends AbstractFeature {
17
17
  public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
18
18
 
19
19
  public isInstalled = () => {
20
- return this.featureInstaller.isInstalled('skill')
20
+ return this.features.isInstalled('skill')
21
21
  }
22
22
  }
23
23
 
@@ -27,9 +27,7 @@ export default class SandboxFeature extends AbstractFeature {
27
27
  super(options)
28
28
 
29
29
  void this.emitter.on('feature.will-execute', async (payload) => {
30
- const isSkillInstalled = await this.featureInstaller.isInstalled(
31
- 'sandbox'
32
- )
30
+ const isSkillInstalled = await this.features.isInstalled('sandbox')
33
31
  if (
34
32
  isSkillInstalled &&
35
33
  payload.featureCode === 'node' &&
@@ -7,16 +7,6 @@ import AbstractFeature, {
7
7
  } from '../AbstractFeature'
8
8
  import { FeatureCode } from '../features.types'
9
9
 
10
- declare module '../../features/features.types' {
11
- interface FeatureMap {
12
- schema: SchemaFeature
13
- }
14
-
15
- interface FeatureOptionsMap {
16
- schema: undefined
17
- }
18
- }
19
-
20
10
  export default class SchemaFeature extends AbstractFeature {
21
11
  public nameReadable = 'Schema'
22
12
  public description = 'Define, validate, and normalize everything.'
@@ -59,8 +49,8 @@ export default class SchemaFeature extends AbstractFeature {
59
49
  actionCode: string
60
50
  featureCode: string
61
51
  }) {
62
- const isInstalled = await this.featureInstaller.isInstalled('schema')
63
- const isSkillInstalled = await this.featureInstaller.isInstalled('skill')
52
+ const isInstalled = await this.features.isInstalled('schema')
53
+ const isSkillInstalled = await this.features.isInstalled('skill')
64
54
 
65
55
  if (
66
56
  payload.featureCode === 'node' &&
@@ -79,7 +69,7 @@ export default class SchemaFeature extends AbstractFeature {
79
69
  actionCode: string
80
70
  featureCode: string
81
71
  }) {
82
- const isInstalled = await this.featureInstaller.isInstalled('schema')
72
+ const isInstalled = await this.features.isInstalled('schema')
83
73
 
84
74
  if (
85
75
  payload.featureCode === 'node' &&
@@ -98,7 +88,7 @@ export default class SchemaFeature extends AbstractFeature {
98
88
  }
99
89
 
100
90
  public async afterPackageInstall(): Promise<InstallResults> {
101
- const isSkillInstalled = await this.featureInstaller.isInstalled('skill')
91
+ const isSkillInstalled = await this.features.isInstalled('skill')
102
92
 
103
93
  if (!isSkillInstalled) {
104
94
  return {}
@@ -115,3 +105,13 @@ export default class SchemaFeature extends AbstractFeature {
115
105
  return this.Writer('schema').writePlugin(this.cwd)
116
106
  }
117
107
  }
108
+
109
+ declare module '../../features/features.types' {
110
+ interface FeatureMap {
111
+ schema: SchemaFeature
112
+ }
113
+
114
+ interface FeatureOptionsMap {
115
+ schema: undefined
116
+ }
117
+ }
@@ -15,21 +15,6 @@ import SpruceError from '../../../errors/SpruceError'
15
15
  import AbstractWriter, { WriteResults } from '../../../writers/AbstractWriter'
16
16
  import schemaDiskUtil from '../utilities/schemaDisk.utility'
17
17
 
18
- interface WriteFieldTypesOptions {
19
- fieldTemplateItems: FieldTemplateItem[]
20
- }
21
-
22
- // eslint-disable-next-line no-redeclare
23
- export interface GenerateSchemaTypesOptions {
24
- fieldTemplateItems: FieldTemplateItem[]
25
- schemaTemplateItems: SchemaTemplateItem[]
26
- valueTypes: ValueTypes
27
- globalSchemaNamespace?: string
28
- typesTemplate?: string
29
- registerBuiltSchemas?: boolean
30
- shouldImportCoreSchemas: boolean
31
- }
32
-
33
18
  export default class SchemaWriter extends AbstractWriter {
34
19
  private readonly fieldTemplates: {
35
20
  filename: string
@@ -289,3 +274,17 @@ export default class SchemaWriter extends AbstractWriter {
289
274
  return results
290
275
  }
291
276
  }
277
+
278
+ interface WriteFieldTypesOptions {
279
+ fieldTemplateItems: FieldTemplateItem[]
280
+ }
281
+
282
+ export interface GenerateSchemaTypesOptions {
283
+ fieldTemplateItems: FieldTemplateItem[]
284
+ schemaTemplateItems: SchemaTemplateItem[]
285
+ valueTypes: ValueTypes
286
+ globalSchemaNamespace?: string
287
+ typesTemplate?: string
288
+ registerBuiltSchemas?: boolean
289
+ shouldImportCoreSchemas: boolean
290
+ }
@@ -11,22 +11,6 @@ import universalFileDescriptions from '../universalFileDescriptions'
11
11
  import universalScripts from '../universalScripts'
12
12
  import Updater from './updaters/Updater'
13
13
 
14
- type SkillFeatureOptionsSchema =
15
- SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema
16
- type SkillFeatureOptions = SpruceSchemas.SpruceCli.v2020_07_22.SkillFeature
17
-
18
- declare module '../../features/features.types' {
19
- interface FeatureMap {
20
- skill: SkillFeature
21
- }
22
-
23
- interface FeatureOptionsMap {
24
- skill: SchemaValues<SkillFeatureOptionsSchema>
25
- }
26
- }
27
-
28
- type UpgradeOptions = SpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptions
29
-
30
14
  export default class SkillFeature<
31
15
  S extends SkillFeatureOptionsSchema = SkillFeatureOptionsSchema
32
16
  > extends AbstractFeature<S> {
@@ -120,7 +104,7 @@ export default class SkillFeature<
120
104
  name: 'AbstractSpruceFixtureTest',
121
105
  label: 'AbstractSpruceFixtureTest',
122
106
  import: '@sprucelabs/spruce-test-fixtures',
123
- featureCode: 'skill',
107
+ featureCode: 'node',
124
108
  },
125
109
  ],
126
110
  }
@@ -191,7 +175,7 @@ export default class SkillFeature<
191
175
  options?: UpgradeOptions
192
176
  }) {
193
177
  const { featureCode, actionCode, options: upgradeOptions } = options
194
- const isInstalled = await this.featureInstaller.isInstalled('skill')
178
+ const isInstalled = await this.features.isInstalled('skill')
195
179
 
196
180
  if (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {
197
181
  const updater = new Updater(this, this.emitter)
@@ -204,3 +188,19 @@ export default class SkillFeature<
204
188
  return {}
205
189
  }
206
190
  }
191
+
192
+ type SkillFeatureOptionsSchema =
193
+ SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema
194
+ type SkillFeatureOptions = SpruceSchemas.SpruceCli.v2020_07_22.SkillFeature
195
+
196
+ declare module '../../features/features.types' {
197
+ interface FeatureMap {
198
+ skill: SkillFeature
199
+ }
200
+
201
+ interface FeatureOptionsMap {
202
+ skill: SchemaValues<SkillFeatureOptionsSchema>
203
+ }
204
+ }
205
+
206
+ type UpgradeOptions = SpruceSchemas.SpruceCli.v2020_07_22.UpgradeSkillOptions
@@ -43,7 +43,7 @@ export default class RebuildAction extends AbstractAction<OptionsSchema> {
43
43
  InFlightEntertainment?.writeStatus(data)
44
44
  },
45
45
  })
46
- } catch (err) {
46
+ } catch (err: any) {
47
47
  this.resetUi()
48
48
 
49
49
  return {
@@ -67,7 +67,7 @@ export default class RegisterAction extends AbstractAction<OptionsSchema> {
67
67
  skill,
68
68
  },
69
69
  }
70
- } catch (err) {
70
+ } catch (err: any) {
71
71
  return {
72
72
  hints: [
73
73
  `If you've already registered your skill, try 'spruce login.skill'!`,
@@ -99,8 +99,7 @@ export default class SkillStore extends AbstractStore {
99
99
  }
100
100
 
101
101
  private getNamespaceFromPkg() {
102
- const pkg = this.Service('pkg')
103
- const nameFromPackage = pkg.get('skill.namespace')
102
+ const nameFromPackage = this.Service('pkg').getSkillNamespace()
104
103
  if (!nameFromPackage) {
105
104
  throw new Error(
106
105
  'You need need to set skill.namespace in the package.json'
@@ -59,7 +59,7 @@ export default class StoreFeature extends AbstractFeature {
59
59
  featureCode: string
60
60
  actionCode: string
61
61
  }) {
62
- const isInstalled = await this.featureInstaller.isInstalled('store')
62
+ const isInstalled = await this.features.isInstalled('store')
63
63
 
64
64
  const isUpgrade =
65
65
  isInstalled &&
@@ -40,7 +40,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
40
40
  return {
41
41
  files,
42
42
  }
43
- } catch (err) {
43
+ } catch (err: any) {
44
44
  return {
45
45
  errors: [err],
46
46
  }
@@ -123,7 +123,7 @@ export default class TestFeature extends AbstractFeature {
123
123
  const a = { ...ac, isDefaultExport: false }
124
124
 
125
125
  if (ac.featureCode) {
126
- const isInstalled = await this.featureInstaller.isInstalled(
126
+ const isInstalled = await this.features.isInstalled(
127
127
  ac.featureCode as any
128
128
  )
129
129
 
@@ -48,7 +48,7 @@ export default class ViewFeature extends AbstractFeature {
48
48
 
49
49
  void this.emitter.on('feature.did-execute', async (payload) => {
50
50
  const { featureCode, actionCode } = payload
51
- const isInstalled = await this.featureInstaller.isInstalled('view')
51
+ const isInstalled = await this.features.isInstalled('view')
52
52
 
53
53
  if (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {
54
54
  const files = await this.Writer('view').writePlugin(this.cwd)
@@ -0,0 +1,62 @@
1
+ import { buildSchema } from '@sprucelabs/schema'
2
+ import generatedFileBuilder from './generatedFile.builder'
3
+
4
+ export default buildSchema({
5
+ id: 'actionResponse',
6
+ name: 'Action response',
7
+ importsWhenLocal: [`import AbstractSpruceError from '@sprucelabs/error'`],
8
+ fields: {
9
+ files: {
10
+ type: 'schema',
11
+ isArray: true,
12
+ options: {
13
+ schema: generatedFileBuilder,
14
+ },
15
+ },
16
+ headline: {
17
+ type: 'text',
18
+ },
19
+ hints: {
20
+ type: 'text',
21
+ isArray: true,
22
+ },
23
+ summaryLines: {
24
+ type: 'text',
25
+ isArray: true,
26
+ },
27
+ errors: {
28
+ type: 'raw',
29
+ isArray: true,
30
+ options: {
31
+ valueType: 'AbstractSpruceError<any>',
32
+ },
33
+ },
34
+ meta: {
35
+ type: 'raw',
36
+ options: {
37
+ valueType: 'Record<string, any>',
38
+ },
39
+ },
40
+ packagesInstalled: {
41
+ type: 'schema',
42
+ isArray: true,
43
+ options: {
44
+ schema: buildSchema({
45
+ id: 'npmPackage',
46
+ fields: {
47
+ name: {
48
+ type: 'text',
49
+ isRequired: true,
50
+ },
51
+ version: {
52
+ type: 'text',
53
+ },
54
+ isDev: {
55
+ type: 'boolean',
56
+ },
57
+ },
58
+ }),
59
+ },
60
+ },
61
+ },
62
+ })
@@ -0,0 +1,44 @@
1
+ import { buildSchema } from '@sprucelabs/schema'
2
+
3
+ const generatedFileBuilder = buildSchema({
4
+ id: 'generatedFile',
5
+ fields: {
6
+ name: {
7
+ type: 'text',
8
+ isRequired: true,
9
+ },
10
+ path: {
11
+ type: 'text',
12
+ isRequired: true,
13
+ },
14
+ description: {
15
+ type: 'text',
16
+ },
17
+ action: {
18
+ type: 'select',
19
+ isRequired: true,
20
+ options: {
21
+ choices: [
22
+ {
23
+ label: 'Skipped',
24
+ value: 'skipped',
25
+ },
26
+ {
27
+ label: 'Generated',
28
+ value: 'generated',
29
+ },
30
+ {
31
+ label: 'Updated',
32
+ value: 'updated',
33
+ },
34
+ {
35
+ label: 'Deleted',
36
+ value: 'deleted',
37
+ },
38
+ ],
39
+ },
40
+ },
41
+ },
42
+ })
43
+
44
+ export default generatedFileBuilder