@sprucelabs/spruce-cli 14.26.16 → 14.27.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 (97) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/.spruce/errors/errors.types.d.ts +19 -0
  3. package/build/.spruce/errors/options.types.d.ts +4 -1
  4. package/build/.spruce/errors/spruceCli/dependencyExists.schema.d.ts +3 -0
  5. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js +28 -0
  6. package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -0
  7. package/build/__tests__/behavioral/AddingADependency.test.d.ts +6 -3
  8. package/build/__tests__/behavioral/AddingADependency.test.js +116 -44
  9. package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
  10. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js +2 -2
  11. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
  12. package/build/__tests__/behavioral/LoggingInAsASkill.test.js +4 -4
  13. package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
  14. package/build/__tests__/behavioral/ManagingDependencies.test.js +3 -3
  15. package/build/__tests__/behavioral/ManagingDependencies.test.js.map +1 -1
  16. package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js +1 -1
  17. package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
  18. package/build/__tests__/behavioral/SettingRemote.test.js +1 -1
  19. package/build/__tests__/behavioral/SettingRemote.test.js.map +1 -1
  20. package/build/__tests__/behavioral/SettingUpVscode.test.js +3 -3
  21. package/build/__tests__/behavioral/SettingUpVscode.test.js.map +1 -1
  22. package/build/__tests__/behavioral/TestingDataStores.test.js +2 -2
  23. package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
  24. package/build/__tests__/behavioral/events/CreatingAListener.test.js +2 -2
  25. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  26. package/build/__tests__/behavioral/events/CreatingAnEvent.test.d.ts +3 -2
  27. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js +156 -106
  28. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
  29. package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js +6 -9
  30. package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
  31. package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js +7 -4
  32. package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
  33. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js +7 -7
  34. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js.map +1 -1
  35. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js +2 -2
  36. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js.map +1 -1
  37. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +1 -1
  38. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  39. package/build/__tests__/behavioral/views/CreatingASkillView.test.js +3 -3
  40. package/build/__tests__/behavioral/views/CreatingASkillView.test.js.map +1 -1
  41. package/build/__tests__/behavioral/views/TestingViewControllers.test.js +2 -2
  42. package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
  43. package/build/__tests__/implementation/ActionExecuter2.test.js +3 -3
  44. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  45. package/build/errors/SpruceError.js +4 -0
  46. package/build/errors/SpruceError.js.map +1 -1
  47. package/build/errors/dependencyExists.builder.d.ts +11 -0
  48. package/build/errors/dependencyExists.builder.js +22 -0
  49. package/build/errors/dependencyExists.builder.js.map +1 -0
  50. package/build/features/AbstractAction.js +1 -1
  51. package/build/features/AbstractAction.js.map +1 -1
  52. package/build/features/dependencies/actions/AddAction.js +22 -15
  53. package/build/features/dependencies/actions/AddAction.js.map +1 -1
  54. package/build/features/event/actions/CreateAction.js +1 -1
  55. package/build/features/event/actions/CreateAction.js.map +1 -1
  56. package/build/interfaces/SpyInterface.d.ts +1 -1
  57. package/build/interfaces/SpyInterface.js +2 -2
  58. package/build/interfaces/SpyInterface.js.map +1 -1
  59. package/build/services/DependencyService.d.ts +1 -0
  60. package/build/services/DependencyService.js +18 -0
  61. package/build/services/DependencyService.js.map +1 -1
  62. package/build/tests/AbstractCliTest.js +1 -1
  63. package/build/tests/AbstractCliTest.js.map +1 -1
  64. package/build/tests/utilities/uiAssert.utility.d.ts +6 -0
  65. package/build/tests/utilities/uiAssert.utility.js +51 -0
  66. package/build/tests/utilities/uiAssert.utility.js.map +1 -0
  67. package/package.json +30 -28
  68. package/src/.spruce/errors/errors.types.ts +29 -0
  69. package/src/.spruce/errors/options.types.ts +4 -1
  70. package/src/.spruce/errors/spruceCli/dependencyExists.schema.ts +22 -0
  71. package/src/__tests__/behavioral/AddingADependency.test.ts +45 -8
  72. package/src/__tests__/behavioral/InstallingASkillAtAnOrg.test.ts +3 -3
  73. package/src/__tests__/behavioral/LoggingInAsASkill.test.ts +4 -4
  74. package/src/__tests__/behavioral/ManagingDependencies.test.ts +3 -3
  75. package/src/__tests__/behavioral/RememberingUpgradeSelections.test.ts +1 -1
  76. package/src/__tests__/behavioral/SettingRemote.test.ts +1 -1
  77. package/src/__tests__/behavioral/SettingUpVscode.test.ts +3 -3
  78. package/src/__tests__/behavioral/TestingDataStores.test.ts +2 -2
  79. package/src/__tests__/behavioral/events/CreatingAListener.test.ts +2 -2
  80. package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +44 -22
  81. package/src/__tests__/behavioral/events/KeepingEventsInSync2.test.ts +1 -1
  82. package/src/__tests__/behavioral/schemas/KeepingSchemasInSync.test.ts +2 -0
  83. package/src/__tests__/behavioral/skill/UpgradingASkill.test.ts +7 -7
  84. package/src/__tests__/behavioral/skill/UpgradingASkill3.test.ts +2 -2
  85. package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
  86. package/src/__tests__/behavioral/views/CreatingASkillView.test.ts +3 -3
  87. package/src/__tests__/behavioral/views/TestingViewControllers.test.ts +2 -2
  88. package/src/__tests__/implementation/ActionExecuter2.test.ts +3 -3
  89. package/src/errors/SpruceError.ts +4 -0
  90. package/src/errors/dependencyExists.builder.ts +12 -0
  91. package/src/features/AbstractAction.ts +1 -4
  92. package/src/features/dependencies/actions/AddAction.ts +12 -5
  93. package/src/features/event/actions/CreateAction.ts +4 -1
  94. package/src/interfaces/SpyInterface.ts +1 -1
  95. package/src/services/DependencyService.ts +14 -0
  96. package/src/tests/AbstractCliTest.ts +1 -1
  97. package/src/tests/utilities/uiAssert.utility.ts +29 -0
@@ -1,6 +1,5 @@
1
1
  import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'
2
2
  import { versionUtil } from '@sprucelabs/spruce-skill-utils'
3
- import { diskUtil } from '@sprucelabs/spruce-skill-utils'
4
3
  import { Templates } from '@sprucelabs/spruce-templates'
5
4
  import { GlobalEmitter } from '../GlobalEmitter'
6
5
  import ServiceFactory, {
@@ -132,9 +131,7 @@ export default abstract class AbstractAction<S extends Schema = Schema>
132
131
  resolvedDestination: string,
133
132
  fallbackVersion: string
134
133
  ) {
135
- const versions = diskUtil.doesDirExist(resolvedDestination)
136
- ? versionUtil.getAllVersions(resolvedDestination)
137
- : []
134
+ const versions = versionUtil.getAllVersions(resolvedDestination)
138
135
  const todaysVersion = versionUtil.generateVersion()
139
136
 
140
137
  let version = fallbackVersion
@@ -27,17 +27,24 @@ export default class DeployAction extends AbstractAction<OptionsSchema> {
27
27
  let { namespace } = this.validateAndNormalizeOptions(options)
28
28
 
29
29
  const skills = await this.Store('skill').fetchAllSkills()
30
+ const dependencyService = this.Service('dependency')
30
31
 
31
32
  if (!namespace) {
33
+ const dependencies = dependencyService.get().map((d) => d.namespace)
34
+
35
+ const choices = skills
36
+ .filter((s) => dependencies.indexOf(s.slug) === -1)
37
+ .map((s) => ({
38
+ value: s.slug,
39
+ label: s.name,
40
+ }))
41
+
32
42
  namespace = await this.ui.prompt({
33
43
  type: 'select',
34
44
  label: 'Which skill would you like to add as a dependency?',
35
45
  isRequired: true,
36
46
  options: {
37
- choices: skills.map((s) => ({
38
- value: s.slug,
39
- label: s.name,
40
- })),
47
+ choices,
41
48
  },
42
49
  })
43
50
  }
@@ -51,7 +58,7 @@ export default class DeployAction extends AbstractAction<OptionsSchema> {
51
58
  })
52
59
  }
53
60
 
54
- this.Service('dependency').add({
61
+ dependencyService.add({
55
62
  id: skill.id,
56
63
  namespace: skill.slug,
57
64
  })
@@ -68,7 +68,10 @@ export default class CreateAction extends AbstractAction<OptionsSchema> {
68
68
 
69
69
  try {
70
70
  const destinationDir = diskUtil.resolvePath(this.cwd, 'src', 'events')
71
- const resolvedVersion = await this.resolveVersion(version, destinationDir)
71
+ const resolvedVersion = await this.resolveVersion(
72
+ version,
73
+ diskUtil.resolvePath(destinationDir, '**', '*')
74
+ )
72
75
 
73
76
  const files = await this.Writer('event').writeEvent(destinationDir, {
74
77
  nameKebab,
@@ -80,7 +80,7 @@ export default class SpyInterface implements GraphicsInterface {
80
80
  clearTimeout(this.promptTimeout)
81
81
  }
82
82
 
83
- public lastInvocation() {
83
+ public getLastInvocation() {
84
84
  return this.invocations[this.invocations.length - 1]
85
85
  }
86
86
 
@@ -1,4 +1,5 @@
1
1
  import { SettingsService } from '@sprucelabs/spruce-skill-utils'
2
+ import SpruceError from '../errors/SpruceError'
2
3
 
3
4
  interface Dependency {
4
5
  id: string
@@ -16,10 +17,23 @@ export default class DependencyService {
16
17
  }
17
18
 
18
19
  public add(dependency: Dependency) {
20
+ this.assertDependencyDoesNotExist(dependency.namespace)
21
+
19
22
  const dependencies = this.settings.get('dependencies') ?? []
20
23
  dependencies.push(dependency)
21
24
  this.settings.set('dependencies', dependencies)
22
25
  }
26
+ private assertDependencyDoesNotExist(namespace: string) {
27
+ const dependencies = this.get()
28
+ const match = dependencies.find((d) => d.namespace === namespace)
29
+
30
+ if (match) {
31
+ throw new SpruceError({
32
+ code: 'DEPENDENCY_EXISTS',
33
+ namespace,
34
+ })
35
+ }
36
+ }
23
37
 
24
38
  public get(): Dependency[] {
25
39
  return this.settings.get('dependencies') ?? []
@@ -465,7 +465,7 @@ export default abstract class AbstractCliTest extends AbstractSpruceTest {
465
465
  }
466
466
 
467
467
  protected static selectOptionBasedOnLabel(label: string) {
468
- const last = this.ui.lastInvocation()
468
+ const last = this.ui.getLastInvocation()
469
469
  assert.doesInclude(last.options.options.choices, {
470
470
  label,
471
471
  })
@@ -0,0 +1,29 @@
1
+ import { assert } from '@sprucelabs/test'
2
+ import SpyInterface from '../../interfaces/SpyInterface'
3
+
4
+ const uiAssertUtil = {
5
+ async assertRendersSelect(ui: SpyInterface) {
6
+ await ui.waitForInput()
7
+
8
+ const last = ui.getLastInvocation()
9
+ assert.isTruthy(
10
+ last.options.options.choices,
11
+ `I expected a select, I did not find one!`
12
+ )
13
+ },
14
+
15
+ assertSelectDidNotRenderChoice(
16
+ ui: SpyInterface,
17
+ value: string,
18
+ label: string
19
+ ) {
20
+ const last = ui.getLastInvocation()
21
+
22
+ assert.doesNotInclude(last.options.options.choices, {
23
+ value,
24
+ label,
25
+ })
26
+ },
27
+ }
28
+
29
+ export default uiAssertUtil