@sprucelabs/spruce-cli 29.0.1 → 29.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.d.ts +5 -0
  3. package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.js +41 -0
  4. package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.js.map +1 -0
  5. package/build/__tests__/behavioral/skill/UnregisteringASkill.test.d.ts +23 -0
  6. package/build/__tests__/behavioral/skill/UnregisteringASkill.test.js +143 -0
  7. package/build/__tests__/behavioral/skill/UnregisteringASkill.test.js.map +1 -0
  8. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js +1 -0
  9. package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
  10. package/build/__tests__/behavioral/views/WorkingWithViewsInNodeModule.test.d.ts +10 -0
  11. package/build/__tests__/behavioral/views/WorkingWithViewsInNodeModule.test.js +78 -0
  12. package/build/__tests__/behavioral/views/WorkingWithViewsInNodeModule.test.js.map +1 -0
  13. package/build/__tests__/support/EventFaker.d.ts +7 -2
  14. package/build/__tests__/support/EventFaker.js +22 -2
  15. package/build/__tests__/support/EventFaker.js.map +1 -1
  16. package/build/errors/SpruceError.js +1 -1
  17. package/build/errors/SpruceError.js.map +1 -1
  18. package/build/features/FeatureInstaller.d.ts +1 -1
  19. package/build/features/FeatureInstallerFactory.js +3 -0
  20. package/build/features/FeatureInstallerFactory.js.map +1 -1
  21. package/build/features/global/GlobalFeature.d.ts +21 -0
  22. package/build/features/global/GlobalFeature.js +21 -0
  23. package/build/features/global/GlobalFeature.js.map +1 -0
  24. package/build/features/global/actions/UnregisterSkillAction.d.ts +18 -0
  25. package/build/features/global/actions/UnregisterSkillAction.js +59 -0
  26. package/build/features/global/actions/UnregisterSkillAction.js.map +1 -0
  27. package/build/features/permission/PermissionFeature.js +4 -0
  28. package/build/features/permission/PermissionFeature.js.map +1 -1
  29. package/build/features/permission/writers/PermissionWriter.js +1 -0
  30. package/build/features/permission/writers/PermissionWriter.js.map +1 -1
  31. package/build/features/view/ViewFeature.d.ts +2 -0
  32. package/build/features/view/ViewFeature.js +9 -1
  33. package/build/features/view/ViewFeature.js.map +1 -1
  34. package/build/features/view/writers/ViewWriter.js +1 -0
  35. package/build/features/view/writers/ViewWriter.js.map +1 -1
  36. package/package.json +3 -3
  37. package/src/__tests__/behavioral/skill/RegisteringAGoSkill.test.ts +29 -0
  38. package/src/__tests__/behavioral/skill/UnregisteringASkill.test.ts +160 -0
  39. package/src/__tests__/behavioral/upgrading/UpgradingASkill3.test.ts +1 -0
  40. package/src/__tests__/behavioral/views/WorkingWithViewsInNodeModule.test.ts +75 -0
  41. package/src/__tests__/support/EventFaker.ts +48 -4
  42. package/src/errors/SpruceError.ts +1 -1
  43. package/src/features/FeatureInstallerFactory.ts +3 -0
  44. package/src/features/global/GlobalFeature.ts +29 -0
  45. package/src/features/global/actions/UnregisterSkillAction.ts +67 -0
  46. package/src/features/permission/PermissionFeature.ts +4 -0
  47. package/src/features/permission/writers/PermissionWriter.ts +1 -0
  48. package/src/features/view/ViewFeature.ts +11 -3
  49. package/src/features/view/writers/ViewWriter.ts +1 -0
@@ -0,0 +1,18 @@
1
+ import AbstractAction from '../../AbstractAction';
2
+ import { ActionOptions, FeatureActionResponse } from '../../features.types';
3
+ declare const optionsSchema: {
4
+ id: string;
5
+ description: string;
6
+ fields: {};
7
+ };
8
+ type OptionsSchema = typeof optionsSchema;
9
+ export default class UnregisterSkillAction extends AbstractAction<OptionsSchema> {
10
+ optionsSchema: OptionsSchema;
11
+ commandAliases: string[];
12
+ invocationMessage: string;
13
+ private skills;
14
+ constructor(options: ActionOptions);
15
+ execute(): Promise<FeatureActionResponse>;
16
+ private skillToChoices;
17
+ }
18
+ export {};
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = require("@sprucelabs/schema");
7
+ const SpruceError_1 = __importDefault(require("../../../errors/SpruceError"));
8
+ const AbstractAction_1 = __importDefault(require("../../AbstractAction"));
9
+ const optionsSchema = (0, schema_1.buildSchema)({
10
+ id: 'unregisterSkill',
11
+ description: 'Unregister a skill from your account.',
12
+ fields: {},
13
+ });
14
+ class UnregisterSkillAction extends AbstractAction_1.default {
15
+ optionsSchema = optionsSchema;
16
+ commandAliases = ['unregister.skill'];
17
+ invocationMessage = 'Unregistering skill... 🔧';
18
+ skills;
19
+ constructor(options) {
20
+ super(options);
21
+ this.skills = this.Store('skill');
22
+ }
23
+ async execute() {
24
+ const response = {};
25
+ const skills = await this.skills.fetchMySkills();
26
+ if (skills.length > 0) {
27
+ const skillId = await this.ui.prompt({
28
+ type: 'select',
29
+ isRequired: true,
30
+ options: {
31
+ choices: skills.map((skill) => this.skillToChoices(skill)),
32
+ },
33
+ });
34
+ const match = skills.find((s) => s.id === skillId);
35
+ const confirm = await this.ui.confirm(`Are you sure you want to unregister the skill "${match?.name}"?`);
36
+ if (confirm) {
37
+ await this.skills.unregisterSkill(skillId);
38
+ response.summaryLines = [`Unregistered ${match?.name}`];
39
+ }
40
+ else {
41
+ response.summaryLines = ['Unregister cancelled.'];
42
+ }
43
+ }
44
+ else {
45
+ response.errors = [
46
+ new SpruceError_1.default({ code: 'NO_SKILLS_REGISTERED' }),
47
+ ];
48
+ }
49
+ return response;
50
+ }
51
+ skillToChoices(skill) {
52
+ return {
53
+ value: skill.id,
54
+ label: `${skill.slug}: ${skill.name}`,
55
+ };
56
+ }
57
+ }
58
+ exports.default = UnregisterSkillAction;
59
+ //# sourceMappingURL=UnregisterSkillAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnregisterSkillAction.js","sourceRoot":"","sources":["../../../../src/features/global/actions/UnregisterSkillAction.ts"],"names":[],"mappings":";;;;;AAAA,+CAAgD;AAEhD,8EAAqD;AACrD,0EAAiD;AAIjD,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC;IAC9B,EAAE,EAAE,iBAAiB;IACrB,WAAW,EAAE,uCAAuC;IACpD,MAAM,EAAE,EAAE;CACb,CAAC,CAAA;AAIF,MAAqB,qBAAsB,SAAQ,wBAA6B;IACrE,aAAa,GAAkB,aAAa,CAAA;IAC5C,cAAc,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACrC,iBAAiB,GAAG,2BAA2B,CAAA;IAC9C,MAAM,CAAY;IAE1B,YAAmB,OAAsB;QACrC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,QAAQ,GAA0B,EAAE,CAAA;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;QAChD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;gBACjC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE;oBACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC7D;aACJ,CAAC,CAAA;YAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;YAElD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,OAAO,CACjC,kDAAkD,KAAK,EAAE,IAAI,IAAI,CACpE,CAAA;YAED,IAAI,OAAO,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;gBAC1C,QAAQ,CAAC,YAAY,GAAG,CAAC,gBAAgB,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACJ,QAAQ,CAAC,YAAY,GAAG,CAAC,uBAAuB,CAAC,CAAA;YACrD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,MAAM,GAAG;gBACd,IAAI,qBAAW,CAAC,EAAE,IAAI,EAAE,sBAAsB,EAAE,CAAC;aACpD,CAAA;QACL,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC;IAEO,cAAc,CAAC,KAAgB;QACnC,OAAO;YACH,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;SACxC,CAAA;IACL,CAAC;CACJ;AAnDD,wCAmDC"}
@@ -37,6 +37,10 @@ class PermissionFeature extends AbstractFeature_1.default {
37
37
  return {};
38
38
  }
39
39
  async afterPackageInstall() {
40
+ const isInstalled = await this.features.isInstalled('skill');
41
+ if (!isInstalled) {
42
+ return {};
43
+ }
40
44
  const files = await this.writePlugin();
41
45
  const combinedFile = await this.writeTypesFile();
42
46
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionFeature.js","sourceRoot":"","sources":["../../../src/features/permission/PermissionFeature.ts"],"names":[],"mappings":";;;;;AACA,uEAAqE;AACrE,yEAG2B;AAI3B,MAAqB,iBAAkB,SAAQ,yBAAe;IACnD,IAAI,GAAgB,YAAY,CAAA;IAChC,YAAY,GAAG,YAAY,CAAA;IAC3B,WAAW,GAAG,mCAAmC,CAAA;IACjD,UAAU,GAAG,6BAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACvD,oBAAoB,GAAiB;QACxC;YACI,IAAI,EAAE,6CAA6C;SACtD;KACJ,CAAA;IACO,MAAM,CAAkB;IAEhC,YAAmB,OAAuB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAEvC,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAChB,qBAAqB,EACrB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,EAChC,WAAW,EACX,UAAU,GAIb;QACG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjE,MAAM,WAAW,GAAG,WAAW,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,CAAA;QACtE,MAAM,eAAe,GAAG,WAAW,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,CAAA;QAExE,IAAI,WAAW,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,gBAAgB;gBACjC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE;gBAC1B,CAAC,CAAC,EAAE,CAAA;YACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAEnE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,CAAA;YAC3D,OAAO,OAAO,CAAA;QAClB,CAAC;QAED,OAAO,EAAE,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAEhD,OAAO;YACH,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,YAAY,CAAC;SACrC,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACnC,IAAI,CAAC,GAAG,EACR,EAA2B,CAC9B,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;CACJ;AAlED,oCAkEC"}
1
+ {"version":3,"file":"PermissionFeature.js","sourceRoot":"","sources":["../../../src/features/permission/PermissionFeature.ts"],"names":[],"mappings":";;;;;AACA,uEAAqE;AACrE,yEAG2B;AAI3B,MAAqB,iBAAkB,SAAQ,yBAAe;IACnD,IAAI,GAAgB,YAAY,CAAA;IAChC,YAAY,GAAG,YAAY,CAAA;IAC3B,WAAW,GAAG,mCAAmC,CAAA;IACjD,UAAU,GAAG,6BAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACvD,oBAAoB,GAAiB;QACxC;YACI,IAAI,EAAE,6CAA6C;SACtD;KACJ,CAAA;IACO,MAAM,CAAkB;IAEhC,YAAmB,OAAuB;QACtC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAEvC,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAChB,qBAAqB,EACrB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,EAChC,WAAW,EACX,UAAU,GAIb;QACG,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QACjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACjE,MAAM,WAAW,GAAG,WAAW,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS,CAAA;QACtE,MAAM,eAAe,GAAG,WAAW,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,CAAA;QAExE,IAAI,WAAW,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,gBAAgB;gBACjC,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE;gBAC1B,CAAC,CAAC,EAAE,CAAA;YACR,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAEnE,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC,CAAA;YAC3D,OAAO,OAAO,CAAA;QAClB,CAAC;QAED,OAAO,EAAE,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC5B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC5D,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,EAAE,CAAA;QACb,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;QAEhD,OAAO;YACH,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,YAAY,CAAC;SACrC,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CACnC,IAAI,CAAC,GAAG,EACR,EAA2B,CAC9B,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,CAAC;CACJ;AAtED,oCAsEC"}
@@ -46,6 +46,7 @@ class PermissionWriter extends AbstractWriter_1.default {
46
46
  return files;
47
47
  }
48
48
  writePlugin(cwd) {
49
+ debugger;
49
50
  const destination = spruce_skill_utils_1.diskUtil.resolveHashSprucePath(cwd, 'features', 'permission.plugin.ts');
50
51
  const pluginContents = this.templates.permissionPlugin();
51
52
  const results = this.writeFileIfChangedMixinResults(destination, pluginContents, 'Enable permission support in your skill.');
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionWriter.js","sourceRoot":"","sources":["../../../../src/features/permission/writers/PermissionWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PermissionWriter.js","sourceRoot":"","sources":["../../../../src/features/permission/writers/PermissionWriter.ts"],"names":[],"mappings":";;;;;AACA,uEAAoE;AACpE,qFAA4D;AAG5D,MAAqB,gBAAiB,SAAQ,wBAAc;IACjD,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,GAA0B;QAC/D,MAAM,WAAW,GAAG,6BAAQ,CAAC,qBAAqB,CAC9C,GAAG,EACH,aAAa,EACb,sBAAsB,CACzB,CAAA;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAA;QACX,MAAM,MAAM,GAAmC,EAAE,CAAA;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;YAC5C,SAAS,EAAE,MAA+B;SAC7C,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACnD,WAAW,EACX,QAAQ,EACR,mEAAmE,CACtE,CAAA;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC1B,cAAsB,EACtB,OAEC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;QAE7B,MAAM,eAAe,GAAG,6BAAQ,CAAC,qBAAqB,CAClD,cAAc,EACd,aAAa,CAChB,CAAA;QACD,MAAM,eAAe,GAAG,6BAAQ,CAAC,WAAW,CACxC,eAAe,EACf,gBAAgB,CACnB,CAAA;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,SAAS,EAAE,8BAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,EAAE,6BAAQ,CAAC,mBAAmB,CAC9B,eAAe,EACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B;SACJ,CAAC,CAAC,CAAA;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QAEhE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACnD,eAAe,EACf,OAAO,EACP,yDAAyD,CAC5D,CAAA;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,aAAa,CACtB,cAAsB,EACtB,OAKC;QAED,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,OAAO,CAAA;QAEnE,MAAM,WAAW,GAAG,6BAAQ,CAAC,WAAW,CACpC,cAAc,EACd,GAAG,SAAS,iBAAiB,CAChC,CAAA;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC;YACrD,SAAS;YACT,SAAS;YACT,WAAW;YACX,YAAY;SACf,CAAC,CAAA;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,8BAA8B,CACnD,WAAW,EACX,OAAO,EACP,sCAAsC,CACzC,CAAA;QAED,OAAO,KAAK,CAAA;IAChB,CAAC;IAEM,WAAW,CAAC,GAAW;QAC1B,QAAQ,CAAA;QACR,MAAM,WAAW,GAAG,6BAAQ,CAAC,qBAAqB,CAC9C,GAAG,EACH,UAAU,EACV,sBAAsB,CACzB,CAAA;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAA;QAExD,MAAM,OAAO,GAAG,IAAI,CAAC,8BAA8B,CAC/C,WAAW,EACX,cAAc,EACd,0CAA0C,CAC7C,CAAA;QAED,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ;AAnHD,mCAmHC"}
@@ -11,6 +11,8 @@ export default class ViewFeature extends AbstractFeature {
11
11
  constructor(options: ActionOptions);
12
12
  private handleDidExecuteUpgrade;
13
13
  afterPackageInstall(): Promise<{
14
+ files?: undefined;
15
+ } | {
14
16
  files: import("../../writers/AbstractWriter").WriteResults;
15
17
  }>;
16
18
  }
@@ -61,11 +61,19 @@ class ViewFeature extends AbstractFeature_1.default {
61
61
  });
62
62
  }
63
63
  async handleDidExecuteUpgrade() {
64
- const files = await this.Writer('view').writePlugin(this.cwd);
64
+ const isInstalled = await this.features.isInstalled('skill');
65
+ let files = [];
66
+ if (isInstalled) {
67
+ files = await this.Writer('view').writePlugin(this.cwd);
68
+ }
65
69
  const results = await this.Action('view', 'sync').execute({});
66
70
  return [...files, ...(results?.files ?? [])];
67
71
  }
68
72
  async afterPackageInstall() {
73
+ const isInstalled = await this.features.isInstalled('skill');
74
+ if (!isInstalled) {
75
+ return {};
76
+ }
69
77
  const files = await this.Writer('view').writePlugin(this.cwd);
70
78
  this.Service('dependency').add({
71
79
  id: '**',
@@ -1 +1 @@
1
- {"version":3,"file":"ViewFeature.js","sourceRoot":"","sources":["../../../src/features/view/ViewFeature.ts"],"names":[],"mappings":";;;;;AAAA,uEAAyD;AAEzD,yEAAuE;AAGvE,MAAqB,WAAY,SAAQ,yBAAe;IAC7C,YAAY,GAAG,OAAO,CAAA;IACtB,WAAW,GAAG,oDAAoD,CAAA;IAClE,IAAI,GAAgB,MAAM,CAAA;IAC1B,UAAU,GAAG,6BAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAE9C,oBAAoB,GAAiB;QACjD;YACI,IAAI,EAAE,+CAA+C;SACxD;QACD;YACI,IAAI,EAAE,uCAAuC;SAChD;KACJ,CAAA;IAEM,YAAY,GAAwB;QACvC;YACI,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,IAAI;SACnB;QACD;YACI,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,IAAI;SACnB;QACD;YACI,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,IAAI;SACnB;KACJ,CAAA;IAED,YAAmB,OAAsB;QACrC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC1D,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;YAC3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;YAE3D,IACI,WAAW;gBACX,WAAW,KAAK,MAAM;gBACtB,UAAU,KAAK,SAAS,EAC1B,CAAC;gBACC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAA;gBAClD,OAAO;oBACH,KAAK;iBACR,CAAA;YACL,CAAC;YACD,OAAO,EAAE,CAAA;QACb,CAAC,CAAC,CAAA;QAEF,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAChB,qCAAqC,EACrC,KAAK,IAAI,EAAE;YACP,OAAO;gBACH,eAAe,EAAE;oBACb;wBACI,IAAI,EAAE,4BAA4B;wBAClC,KAAK,EAAE,4BAA4B;wBACnC,MAAM,EAAE,gCAAgC;wBACxC,WAAW,EAAE,MAAM;qBACtB;iBACJ;aACJ,CAAA;QACL,CAAC,CACJ,CAAA;IACL,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE7D,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAEM,KAAK,CAAC,mBAAmB;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAE7D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC;YAC3B,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,WAAW;SACzB,CAAC,CAAA;QAEF,OAAO,EAAE,KAAK,EAAE,CAAA;IACpB,CAAC;CACJ;AApFD,8BAoFC"}
1
+ {"version":3,"file":"ViewFeature.js","sourceRoot":"","sources":["../../../src/features/view/ViewFeature.ts"],"names":[],"mappings":"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"}
@@ -89,6 +89,7 @@ class ViewWriter extends AbstractWriter_1.default {
89
89
  return this.writeFileIfChangedMixinResults(destination, contents, `Your new view plugin!`);
90
90
  }
91
91
  writePlugin(cwd) {
92
+ debugger;
92
93
  const destination = spruce_skill_utils_1.diskUtil.resolveHashSprucePath(cwd, 'features', 'view.plugin.ts');
93
94
  const pluginContents = this.templates.viewPlugin();
94
95
  const results = this.writeFileIfChangedMixinResults(destination, pluginContents, 'Supports your skill with rendering views.');
@@ -1 +1 @@
1
- {"version":3,"file":"ViewWriter.js","sourceRoot":"","sources":["../../../../src/features/view/writers/ViewWriter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ViewWriter.js","sourceRoot":"","sources":["../../../../src/features/view/writers/ViewWriter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
- "version": "29.0.1",
7
+ "version": "29.1.1",
8
8
  "skill": {
9
9
  "namespace": "spruce-cli",
10
10
  "upgradeIgnoreList": [
@@ -85,7 +85,7 @@
85
85
  "@sprucelabs/spruce-core-schemas": "^41.3.41",
86
86
  "@sprucelabs/spruce-event-utils": "^41.0.160",
87
87
  "@sprucelabs/spruce-skill-utils": "^32.1.16",
88
- "@sprucelabs/spruce-templates": "^29.0.1",
88
+ "@sprucelabs/spruce-templates": "^29.1.1",
89
89
  "@typescript-eslint/eslint-plugin": "^8.46.2",
90
90
  "@typescript-eslint/parser": "^8.46.2",
91
91
  "cfonts": "^3.3.1",
@@ -570,5 +570,5 @@
570
570
  "conventional-changelog-sprucelabs"
571
571
  ]
572
572
  },
573
- "gitHead": "356fd4d0649e4e5f6d5dbee4474ca6a1671ec740"
573
+ "gitHead": "845fd4d6d04a29f5f4d0d045e572b9285b5c9ad0"
574
574
  }
@@ -0,0 +1,29 @@
1
+ import { MercuryClientFactory } from '@sprucelabs/mercury-client'
2
+ import { test, assert } from '@sprucelabs/test-utils'
3
+ import AbstractCliTest from '../../../tests/AbstractCliTest'
4
+
5
+ export default class RegisteringAGoSkillTest extends AbstractCliTest {
6
+ @test.only()
7
+ protected static async stub() {}
8
+
9
+ @test()
10
+ protected static async canCreateRegisteringAGoSkill() {
11
+ MercuryClientFactory.setIsTestMode(true)
12
+ let wasHit = false
13
+ await this.eventFaker.fakeRegisterSkill(() => {
14
+ wasHit = true
15
+ })
16
+
17
+ await this.go.initGoProject()
18
+
19
+ await this.Action('skill', 'register', {
20
+ shouldAutoHandleDependencies: true,
21
+ }).execute({
22
+ nameReadable: 'My Go Skill',
23
+ nameKebab: 'my-go-skill',
24
+ description: 'A skill built with Go',
25
+ })
26
+
27
+ assert.isTrue(wasHit, 'Register skill event was not hit')
28
+ }
29
+ }
@@ -0,0 +1,160 @@
1
+ import {
2
+ MercuryClientFactory,
3
+ MercuryTestClient,
4
+ } from '@sprucelabs/mercury-client'
5
+ import { test, assert, generateId } from '@sprucelabs/test-utils'
6
+ import { FeatureActionResponse } from '../../../features/features.types'
7
+ import UnregisterSkillAction from '../../../features/global/actions/UnregisterSkillAction'
8
+ import AbstractCliTest from '../../../tests/AbstractCliTest'
9
+ import {
10
+ ListSkill,
11
+ ListSkillsTargetAndPayload,
12
+ UnregisterSkillTargetAndPayload,
13
+ } from '../../support/EventFaker'
14
+
15
+ export default class UnregisteringASkillTest extends AbstractCliTest {
16
+ private static action: UnregisterSkillAction
17
+ private static lastListSkillsPayload: ListSkillsTargetAndPayload['payload']
18
+ private static fakedSkills: ListSkill[] = []
19
+ private static executePromise: Promise<FeatureActionResponse>
20
+ private static lastUnregisterSkillTarget?: UnregisterSkillTargetAndPayload['target']
21
+
22
+ protected static async beforeEach(): Promise<void> {
23
+ await super.beforeEach()
24
+ MercuryClientFactory.setIsTestMode(true)
25
+ MercuryTestClient.setShouldRequireLocalListeners(true)
26
+ this.action = this.Action('global', 'unregisterSkill')
27
+
28
+ delete this.lastListSkillsPayload
29
+ delete this.lastUnregisterSkillTarget
30
+
31
+ this.fakedSkills = []
32
+
33
+ await this.eventFaker.fakeListSkills(({ payload }) => {
34
+ this.lastListSkillsPayload = payload
35
+ return this.fakedSkills
36
+ })
37
+
38
+ await this.eventFaker.fakeUnregisterSkill(({ target }) => {
39
+ this.lastUnregisterSkillTarget = target
40
+ })
41
+ }
42
+
43
+ @test()
44
+ protected static async hasAction() {
45
+ assert.isFunction(this.action.execute, 'Action not found')
46
+ }
47
+
48
+ @test()
49
+ protected static async firstThingListsSkills() {
50
+ await this.execute()
51
+ await this.waitUntilFinished()
52
+
53
+ assert.isEqualDeep(this.lastListSkillsPayload, {
54
+ shouldOnlyShowMine: true,
55
+ })
56
+ }
57
+
58
+ @test()
59
+ protected static async presentsAnOptionForOnlySkillReturned() {
60
+ this.pushFakedSkill()
61
+
62
+ await this.executeAndWaitForInput()
63
+ this.assertProptsForAllSkills()
64
+ await this.selectSkill(0)
65
+ await this.pressEnter()
66
+ }
67
+
68
+ @test()
69
+ protected static async presentsOptionsForMultipleSkills() {
70
+ this.pushFakedSkill()
71
+ this.pushFakedSkill()
72
+ this.pushFakedSkill()
73
+
74
+ await this.executeAndWaitForInput()
75
+ this.assertProptsForAllSkills()
76
+
77
+ await this.selectSkill(1)
78
+ await this.pressEnter()
79
+ }
80
+
81
+ @test('can unregister first skill', 0)
82
+ @test('can unregister second skill', 1)
83
+ protected static async passesSelectedSkillToUnregister(idx: number) {
84
+ this.pushFakedSkill()
85
+ this.pushFakedSkill()
86
+ await this.executeAndWaitForInput()
87
+ await this.selectSkill(idx)
88
+ await this.pressEnter()
89
+ await this.waitUntilFinished()
90
+
91
+ assert.isEqualDeep(
92
+ this.lastUnregisterSkillTarget,
93
+ {
94
+ skillId: this.fakedSkills[idx].id,
95
+ },
96
+ 'Skill ID not passed to unregister skill'
97
+ )
98
+ }
99
+
100
+ @test()
101
+ protected static async doesNotUnRegisterIfNotConfirmed() {
102
+ this.pushFakedSkill()
103
+ await this.executeAndWaitForInput()
104
+ await this.selectSkill(0)
105
+ await this.ui.sendInput('n')
106
+ await this.waitUntilFinished()
107
+ assert.isFalsy(
108
+ this.lastUnregisterSkillTarget,
109
+ 'Unregister skill was called unexpectedly'
110
+ )
111
+ }
112
+
113
+ private static async executeAndWaitForInput() {
114
+ await this.execute()
115
+ await this.waitForInput()
116
+ }
117
+
118
+ private static async selectSkill(idx: number) {
119
+ await this.ui.sendInput(this.fakedSkills[idx].id)
120
+ }
121
+
122
+ private static assertProptsForAllSkills() {
123
+ const prompt = this.ui.getLastInvocation()
124
+ assert.isEqualDeep(prompt.options, {
125
+ type: 'select',
126
+ isRequired: true,
127
+ options: {
128
+ choices: this.generateExpectedSkillChoices(),
129
+ },
130
+ })
131
+ }
132
+
133
+ private static async pressEnter() {
134
+ await this.ui.sendInput('\n')
135
+ }
136
+
137
+ private static generateExpectedSkillChoices() {
138
+ return this.fakedSkills.map((skill) => ({
139
+ value: skill.id,
140
+ label: `${skill.slug}: ${skill.name}`,
141
+ }))
142
+ }
143
+
144
+ private static pushFakedSkill() {
145
+ this.fakedSkills.push({
146
+ id: generateId(),
147
+ dateCreated: Date.now(),
148
+ slug: generateId(),
149
+ name: generateId(),
150
+ })
151
+ }
152
+
153
+ private static async waitUntilFinished() {
154
+ await this.executePromise
155
+ }
156
+
157
+ private static async execute() {
158
+ this.executePromise = this.action.execute()
159
+ }
160
+ }
@@ -207,6 +207,7 @@ export default class UpgradingASkill3Test extends AbstractCliTest {
207
207
  }
208
208
 
209
209
  private static getViewsPluginPath() {
210
+ debugger
210
211
  return this.resolveHashSprucePath('features', 'view.plugin.ts')
211
212
  }
212
213
 
@@ -0,0 +1,75 @@
1
+ import globby from '@sprucelabs/globby'
2
+ import { diskUtil } from '@sprucelabs/spruce-skill-utils'
3
+ import { test, assert } from '@sprucelabs/test-utils'
4
+ import CommandServiceImpl from '../../../services/CommandService'
5
+ import AbstractSkillTest from '../../../tests/AbstractSkillTest'
6
+
7
+ export default class WorkingWithViewsInNodeModuleTest extends AbstractSkillTest {
8
+ public static skillCacheKey = 'node'
9
+
10
+ protected static async beforeEach() {
11
+ await super.beforeEach()
12
+ CommandServiceImpl.fakeCommand(new RegExp(/^(?!code\b).*/), {
13
+ code: 0,
14
+ })
15
+ }
16
+
17
+ @test()
18
+ protected static async creatingViewDoesNotWritePlugins() {
19
+ const promise = this.Action('view', 'create', {
20
+ shouldAutoHandleDependencies: true,
21
+ }).execute({
22
+ viewType: 'view',
23
+ nameReadable: 'My Test View',
24
+ viewModel: 'Card',
25
+ })
26
+
27
+ await this.waitForInput()
28
+ await this.ui.sendInput('n')
29
+ await this.waitForInput()
30
+ await this.ui.sendInput('y')
31
+ await this.waitForInput()
32
+ await this.ui.sendInput('y')
33
+ await this.waitForInput()
34
+ await this.ui.sendInput('y')
35
+ await this.waitForInput()
36
+ await this.ui.sendInput('')
37
+ await promise
38
+
39
+ await this.assertNoPluginsWritten()
40
+ }
41
+
42
+ @test()
43
+ protected static async upgradingDoesNotWritePlugins() {
44
+ await this.upgrade()
45
+ await this.assertNoPluginsWritten()
46
+ }
47
+
48
+ @test()
49
+ protected static async upgradeDoesRecreateViewsTs() {
50
+ const file = this.resolvePath('src/.spruce/views/views.ts')
51
+ const contents = diskUtil.readFile(file)
52
+ diskUtil.deleteFile(file)
53
+
54
+ await this.upgrade()
55
+
56
+ const newContents = diskUtil.readFile(file)
57
+ assert.isEqual(newContents, contents, 'views.ts should be rewritten.')
58
+ }
59
+
60
+ private static async upgrade() {
61
+ await this.Action('node', 'upgrade').execute({})
62
+ }
63
+
64
+ private static async assertNoPluginsWritten() {
65
+ const matches = await globby('src/.spruce/features/*.plugin.ts', {
66
+ cwd: this.skillDir,
67
+ })
68
+
69
+ assert.isLength(
70
+ matches,
71
+ 0,
72
+ `Should not create plugin files ${JSON.stringify(matches, null, 2)}.`
73
+ )
74
+ }
75
+ }
@@ -1,10 +1,41 @@
1
1
  import { SpruceSchemas } from '@sprucelabs/mercury-types'
2
- import { Organization } from '@sprucelabs/spruce-core-schemas'
2
+ import { Organization, Skill } from '@sprucelabs/spruce-core-schemas'
3
3
  import { eventFaker } from '@sprucelabs/spruce-test-fixtures'
4
4
  import { generateId } from '@sprucelabs/test-utils'
5
5
  import { ListPermContractsTargetAndPayload } from '../../features/permission/stores/PermissionStore'
6
6
 
7
7
  export default class EventFaker {
8
+ public async fakeUnregisterSkill(
9
+ cb?: (targetAndPayload: UnregisterSkillTargetAndPayload) => void
10
+ ) {
11
+ await eventFaker.on(
12
+ 'unregister-skill::v2020_12_25',
13
+ (targetAndPayload) => {
14
+ cb?.(targetAndPayload)
15
+ return {}
16
+ }
17
+ )
18
+ }
19
+ public async fakeRegisterSkill(
20
+ cb?: (targetAndPayload: RegisterSkillTargetAndPayload) => void | Skill
21
+ ) {
22
+ await eventFaker.on(
23
+ 'register-skill::v2020_12_25',
24
+ (targetAndPayload) => {
25
+ return {
26
+ skill: cb?.(targetAndPayload) ?? {
27
+ id: generateId(),
28
+ name: generateId(),
29
+ slug: generateId(),
30
+ apiKey: generateId(),
31
+ dateCreated: Date.now(),
32
+ creators: [],
33
+ },
34
+ }
35
+ }
36
+ )
37
+ }
38
+
8
39
  public async fakeSyncPermissionContracts() {
9
40
  await eventFaker.on('sync-permission-contracts::v2020_12_25', () => {
10
41
  return {
@@ -58,10 +89,14 @@ export default class EventFaker {
58
89
  }
59
90
  }
60
91
 
61
- public async fakeListSkills(cb?: () => void | ListSkill[]) {
62
- await eventFaker.on('list-skills::v2020_12_25', () => {
92
+ public async fakeListSkills(
93
+ cb?: (
94
+ targetAndPayload: ListSkillsTargetAndPayload
95
+ ) => void | ListSkill[]
96
+ ) {
97
+ await eventFaker.on('list-skills::v2020_12_25', (targetAndPayload) => {
63
98
  return {
64
- skills: cb?.() ?? [],
99
+ skills: cb?.(targetAndPayload) ?? [],
65
100
  }
66
101
  })
67
102
  }
@@ -108,3 +143,12 @@ export default class EventFaker {
108
143
  export type ListSkill = SpruceSchemas.Mercury.v2020_12_25.ListSkillsSkill
109
144
  export type CreateOrganizationTargetAndPayload =
110
145
  SpruceSchemas.Mercury.v2020_12_25.CreateOrganizationEmitTargetAndPayload
146
+
147
+ export type RegisterSkillTargetAndPayload =
148
+ SpruceSchemas.Mercury.v2020_12_25.RegisterSkillEmitTargetAndPayload
149
+
150
+ export type ListSkillsTargetAndPayload =
151
+ SpruceSchemas.Mercury.v2020_12_25.ListSkillsEmitTargetAndPayload
152
+
153
+ export type UnregisterSkillTargetAndPayload =
154
+ SpruceSchemas.Mercury.v2020_12_25.UnregisterSkillEmitTargetAndPayload
@@ -174,7 +174,7 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
174
174
  break
175
175
 
176
176
  case 'SKILL_NOT_REGISTERED':
177
- message = `Dang! I can't continue until you register your skill! Run \`spruce login\` and then \`spruce register.skill\` to get the ball rolling!`
177
+ message = `Dang! I can't continue until you register your skill! Run \`spruce login\` and then \`spruce register\` to get the ball rolling!`
178
178
  break
179
179
 
180
180
  case 'NO_ORGANIZATIONS_FOUND':
@@ -16,6 +16,7 @@ import EventFeature from './event/EventFeature'
16
16
  import EventContractFeature from './eventContract/EventContractFeature'
17
17
  import FeatureInstaller, { FeatureInstallerImpl } from './FeatureInstaller'
18
18
  import { FeatureCode } from './features.types'
19
+ import GlobalFeature from './global/GlobalFeature'
19
20
  import LogFeature from './log/LogFeature'
20
21
  import NodeFeature from './node/NodeFeature'
21
22
  import OnboardFeature from './onboard/OnboardFeature'
@@ -57,6 +58,7 @@ export default class FeatureInstallerFactory {
57
58
  PolishFeature,
58
59
  PermissionFeature,
59
60
  AgentFeature,
61
+ GlobalFeature,
60
62
  ]
61
63
 
62
64
  public static readonly featureCodes: FeatureCode[] = [
@@ -83,6 +85,7 @@ export default class FeatureInstallerFactory {
83
85
  'polish',
84
86
  'permission',
85
87
  'agent',
88
+ 'global',
86
89
  ]
87
90
 
88
91
  public static WithAllFeatures(
@@ -0,0 +1,29 @@
1
+ import { diskUtil, NpmPackage } from '@sprucelabs/spruce-skill-utils'
2
+ import AbstractFeature, { FeatureDependency } from '../AbstractFeature'
3
+ import { FeatureCode } from '../features.types'
4
+
5
+ export default class GlobalFeature extends AbstractFeature {
6
+ public code: FeatureCode = 'global'
7
+ public nameReadable = 'Global'
8
+ public description =
9
+ 'Place for all global actions that affect your Spruce account (outside your profile).'
10
+ public dependencies: FeatureDependency[] = []
11
+ public _packageDependencies: NpmPackage[] = []
12
+
13
+ public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
14
+ public scripts = {}
15
+
16
+ public async isInstalled(): Promise<boolean> {
17
+ return true
18
+ }
19
+ }
20
+
21
+ declare module '../../features/features.types' {
22
+ interface FeatureMap {
23
+ global: GlobalFeature
24
+ }
25
+
26
+ interface FeatureOptionsMap {
27
+ global: undefined
28
+ }
29
+ }