@sprucelabs/spruce-cli 29.0.1 → 29.1.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.
- package/CHANGELOG.md +11 -0
- package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.d.ts +5 -0
- package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.js +41 -0
- package/build/__tests__/behavioral/skill/RegisteringAGoSkill.test.js.map +1 -0
- package/build/__tests__/behavioral/skill/UnregisteringASkill.test.d.ts +23 -0
- package/build/__tests__/behavioral/skill/UnregisteringASkill.test.js +143 -0
- package/build/__tests__/behavioral/skill/UnregisteringASkill.test.js.map +1 -0
- package/build/__tests__/support/EventFaker.d.ts +7 -2
- package/build/__tests__/support/EventFaker.js +22 -2
- package/build/__tests__/support/EventFaker.js.map +1 -1
- package/build/errors/SpruceError.js +1 -1
- package/build/errors/SpruceError.js.map +1 -1
- package/build/features/FeatureInstaller.d.ts +1 -1
- package/build/features/FeatureInstallerFactory.js +3 -0
- package/build/features/FeatureInstallerFactory.js.map +1 -1
- package/build/features/global/GlobalFeature.d.ts +21 -0
- package/build/features/global/GlobalFeature.js +21 -0
- package/build/features/global/GlobalFeature.js.map +1 -0
- package/build/features/global/actions/UnregisterSkillAction.d.ts +18 -0
- package/build/features/global/actions/UnregisterSkillAction.js +59 -0
- package/build/features/global/actions/UnregisterSkillAction.js.map +1 -0
- package/package.json +3 -3
- package/src/__tests__/behavioral/skill/RegisteringAGoSkill.test.ts +29 -0
- package/src/__tests__/behavioral/skill/UnregisteringASkill.test.ts +160 -0
- package/src/__tests__/support/EventFaker.ts +48 -4
- package/src/errors/SpruceError.ts +1 -1
- package/src/features/FeatureInstallerFactory.ts +3 -0
- package/src/features/global/GlobalFeature.ts +29 -0
- package/src/features/global/actions/UnregisterSkillAction.ts +67 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [29.1.0](https://github.com/sprucelabsai-community/spruce-cli-workspace/compare/v29.0.1...v29.1.0) (2025-11-13)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* unregister.skill command ([da2f73a](https://github.com/sprucelabsai-community/spruce-cli-workspace/commit/da2f73a))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [29.0.1](https://github.com/sprucelabsai-community/spruce-cli-workspace/compare/v29.0.0...v29.0.1) (2025-11-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @sprucelabs/spruce-cli
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const mercury_client_1 = require("@sprucelabs/mercury-client");
|
|
13
|
+
const test_utils_1 = require("@sprucelabs/test-utils");
|
|
14
|
+
const AbstractCliTest_1 = __importDefault(require("../../../tests/AbstractCliTest"));
|
|
15
|
+
class RegisteringAGoSkillTest extends AbstractCliTest_1.default {
|
|
16
|
+
static async stub() { }
|
|
17
|
+
static async canCreateRegisteringAGoSkill() {
|
|
18
|
+
mercury_client_1.MercuryClientFactory.setIsTestMode(true);
|
|
19
|
+
let wasHit = false;
|
|
20
|
+
await this.eventFaker.fakeRegisterSkill(() => {
|
|
21
|
+
wasHit = true;
|
|
22
|
+
});
|
|
23
|
+
await this.go.initGoProject();
|
|
24
|
+
await this.Action('skill', 'register', {
|
|
25
|
+
shouldAutoHandleDependencies: true,
|
|
26
|
+
}).execute({
|
|
27
|
+
nameReadable: 'My Go Skill',
|
|
28
|
+
nameKebab: 'my-go-skill',
|
|
29
|
+
description: 'A skill built with Go',
|
|
30
|
+
});
|
|
31
|
+
test_utils_1.assert.isTrue(wasHit, 'Register skill event was not hit');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = RegisteringAGoSkillTest;
|
|
35
|
+
__decorate([
|
|
36
|
+
test_utils_1.test.only()
|
|
37
|
+
], RegisteringAGoSkillTest, "stub", null);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, test_utils_1.test)()
|
|
40
|
+
], RegisteringAGoSkillTest, "canCreateRegisteringAGoSkill", null);
|
|
41
|
+
//# sourceMappingURL=RegisteringAGoSkill.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegisteringAGoSkill.test.js","sourceRoot":"","sources":["../../../../src/__tests__/behavioral/skill/RegisteringAGoSkill.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAiE;AACjE,uDAAqD;AACrD,qFAA4D;AAE5D,MAAqB,uBAAwB,SAAQ,yBAAe;IAEzC,AAAb,MAAM,CAAC,KAAK,CAAC,IAAI,KAAI,CAAC;IAGT,AAAb,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC/C,qCAAoB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,EAAE;YACzC,MAAM,GAAG,IAAI,CAAA;QACjB,CAAC,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAA;QAE7B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE;YACnC,4BAA4B,EAAE,IAAI;SACrC,CAAC,CAAC,OAAO,CAAC;YACP,YAAY,EAAE,aAAa;YAC3B,SAAS,EAAE,aAAa;YACxB,WAAW,EAAE,uBAAuB;SACvC,CAAC,CAAA;QAEF,mBAAM,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAA;IAC7D,CAAC;CACJ;AAxBD,0CAwBC;AAtB0B;IADtB,iBAAI,CAAC,IAAI,EAAE;yCACoB;AAGT;IADtB,IAAA,iBAAI,GAAE;iEAmBN"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import AbstractCliTest from '../../../tests/AbstractCliTest';
|
|
2
|
+
export default class UnregisteringASkillTest extends AbstractCliTest {
|
|
3
|
+
private static action;
|
|
4
|
+
private static lastListSkillsPayload;
|
|
5
|
+
private static fakedSkills;
|
|
6
|
+
private static executePromise;
|
|
7
|
+
private static lastUnregisterSkillTarget?;
|
|
8
|
+
protected static beforeEach(): Promise<void>;
|
|
9
|
+
protected static hasAction(): Promise<void>;
|
|
10
|
+
protected static firstThingListsSkills(): Promise<void>;
|
|
11
|
+
protected static presentsAnOptionForOnlySkillReturned(): Promise<void>;
|
|
12
|
+
protected static presentsOptionsForMultipleSkills(): Promise<void>;
|
|
13
|
+
protected static passesSelectedSkillToUnregister(idx: number): Promise<void>;
|
|
14
|
+
protected static doesNotUnRegisterIfNotConfirmed(): Promise<void>;
|
|
15
|
+
private static executeAndWaitForInput;
|
|
16
|
+
private static selectSkill;
|
|
17
|
+
private static assertProptsForAllSkills;
|
|
18
|
+
private static pressEnter;
|
|
19
|
+
private static generateExpectedSkillChoices;
|
|
20
|
+
private static pushFakedSkill;
|
|
21
|
+
private static waitUntilFinished;
|
|
22
|
+
private static execute;
|
|
23
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const mercury_client_1 = require("@sprucelabs/mercury-client");
|
|
13
|
+
const test_utils_1 = require("@sprucelabs/test-utils");
|
|
14
|
+
const AbstractCliTest_1 = __importDefault(require("../../../tests/AbstractCliTest"));
|
|
15
|
+
class UnregisteringASkillTest extends AbstractCliTest_1.default {
|
|
16
|
+
static action;
|
|
17
|
+
static lastListSkillsPayload;
|
|
18
|
+
static fakedSkills = [];
|
|
19
|
+
static executePromise;
|
|
20
|
+
static lastUnregisterSkillTarget;
|
|
21
|
+
static async beforeEach() {
|
|
22
|
+
await super.beforeEach();
|
|
23
|
+
mercury_client_1.MercuryClientFactory.setIsTestMode(true);
|
|
24
|
+
mercury_client_1.MercuryTestClient.setShouldRequireLocalListeners(true);
|
|
25
|
+
this.action = this.Action('global', 'unregisterSkill');
|
|
26
|
+
delete this.lastListSkillsPayload;
|
|
27
|
+
delete this.lastUnregisterSkillTarget;
|
|
28
|
+
this.fakedSkills = [];
|
|
29
|
+
await this.eventFaker.fakeListSkills(({ payload }) => {
|
|
30
|
+
this.lastListSkillsPayload = payload;
|
|
31
|
+
return this.fakedSkills;
|
|
32
|
+
});
|
|
33
|
+
await this.eventFaker.fakeUnregisterSkill(({ target }) => {
|
|
34
|
+
this.lastUnregisterSkillTarget = target;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
static async hasAction() {
|
|
38
|
+
test_utils_1.assert.isFunction(this.action.execute, 'Action not found');
|
|
39
|
+
}
|
|
40
|
+
static async firstThingListsSkills() {
|
|
41
|
+
await this.execute();
|
|
42
|
+
await this.waitUntilFinished();
|
|
43
|
+
test_utils_1.assert.isEqualDeep(this.lastListSkillsPayload, {
|
|
44
|
+
shouldOnlyShowMine: true,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
static async presentsAnOptionForOnlySkillReturned() {
|
|
48
|
+
this.pushFakedSkill();
|
|
49
|
+
await this.executeAndWaitForInput();
|
|
50
|
+
this.assertProptsForAllSkills();
|
|
51
|
+
await this.selectSkill(0);
|
|
52
|
+
await this.pressEnter();
|
|
53
|
+
}
|
|
54
|
+
static async presentsOptionsForMultipleSkills() {
|
|
55
|
+
this.pushFakedSkill();
|
|
56
|
+
this.pushFakedSkill();
|
|
57
|
+
this.pushFakedSkill();
|
|
58
|
+
await this.executeAndWaitForInput();
|
|
59
|
+
this.assertProptsForAllSkills();
|
|
60
|
+
await this.selectSkill(1);
|
|
61
|
+
await this.pressEnter();
|
|
62
|
+
}
|
|
63
|
+
static async passesSelectedSkillToUnregister(idx) {
|
|
64
|
+
this.pushFakedSkill();
|
|
65
|
+
this.pushFakedSkill();
|
|
66
|
+
await this.executeAndWaitForInput();
|
|
67
|
+
await this.selectSkill(idx);
|
|
68
|
+
await this.pressEnter();
|
|
69
|
+
await this.waitUntilFinished();
|
|
70
|
+
test_utils_1.assert.isEqualDeep(this.lastUnregisterSkillTarget, {
|
|
71
|
+
skillId: this.fakedSkills[idx].id,
|
|
72
|
+
}, 'Skill ID not passed to unregister skill');
|
|
73
|
+
}
|
|
74
|
+
static async doesNotUnRegisterIfNotConfirmed() {
|
|
75
|
+
this.pushFakedSkill();
|
|
76
|
+
await this.executeAndWaitForInput();
|
|
77
|
+
await this.selectSkill(0);
|
|
78
|
+
await this.ui.sendInput('n');
|
|
79
|
+
await this.waitUntilFinished();
|
|
80
|
+
test_utils_1.assert.isFalsy(this.lastUnregisterSkillTarget, 'Unregister skill was called unexpectedly');
|
|
81
|
+
}
|
|
82
|
+
static async executeAndWaitForInput() {
|
|
83
|
+
await this.execute();
|
|
84
|
+
await this.waitForInput();
|
|
85
|
+
}
|
|
86
|
+
static async selectSkill(idx) {
|
|
87
|
+
await this.ui.sendInput(this.fakedSkills[idx].id);
|
|
88
|
+
}
|
|
89
|
+
static assertProptsForAllSkills() {
|
|
90
|
+
const prompt = this.ui.getLastInvocation();
|
|
91
|
+
test_utils_1.assert.isEqualDeep(prompt.options, {
|
|
92
|
+
type: 'select',
|
|
93
|
+
isRequired: true,
|
|
94
|
+
options: {
|
|
95
|
+
choices: this.generateExpectedSkillChoices(),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
static async pressEnter() {
|
|
100
|
+
await this.ui.sendInput('\n');
|
|
101
|
+
}
|
|
102
|
+
static generateExpectedSkillChoices() {
|
|
103
|
+
return this.fakedSkills.map((skill) => ({
|
|
104
|
+
value: skill.id,
|
|
105
|
+
label: `${skill.slug}: ${skill.name}`,
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
static pushFakedSkill() {
|
|
109
|
+
this.fakedSkills.push({
|
|
110
|
+
id: (0, test_utils_1.generateId)(),
|
|
111
|
+
dateCreated: Date.now(),
|
|
112
|
+
slug: (0, test_utils_1.generateId)(),
|
|
113
|
+
name: (0, test_utils_1.generateId)(),
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
static async waitUntilFinished() {
|
|
117
|
+
await this.executePromise;
|
|
118
|
+
}
|
|
119
|
+
static async execute() {
|
|
120
|
+
this.executePromise = this.action.execute();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.default = UnregisteringASkillTest;
|
|
124
|
+
__decorate([
|
|
125
|
+
(0, test_utils_1.test)()
|
|
126
|
+
], UnregisteringASkillTest, "hasAction", null);
|
|
127
|
+
__decorate([
|
|
128
|
+
(0, test_utils_1.test)()
|
|
129
|
+
], UnregisteringASkillTest, "firstThingListsSkills", null);
|
|
130
|
+
__decorate([
|
|
131
|
+
(0, test_utils_1.test)()
|
|
132
|
+
], UnregisteringASkillTest, "presentsAnOptionForOnlySkillReturned", null);
|
|
133
|
+
__decorate([
|
|
134
|
+
(0, test_utils_1.test)()
|
|
135
|
+
], UnregisteringASkillTest, "presentsOptionsForMultipleSkills", null);
|
|
136
|
+
__decorate([
|
|
137
|
+
(0, test_utils_1.test)('can unregister first skill', 0),
|
|
138
|
+
(0, test_utils_1.test)('can unregister second skill', 1)
|
|
139
|
+
], UnregisteringASkillTest, "passesSelectedSkillToUnregister", null);
|
|
140
|
+
__decorate([
|
|
141
|
+
(0, test_utils_1.test)()
|
|
142
|
+
], UnregisteringASkillTest, "doesNotUnRegisterIfNotConfirmed", null);
|
|
143
|
+
//# sourceMappingURL=UnregisteringASkill.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UnregisteringASkill.test.js","sourceRoot":"","sources":["../../../../src/__tests__/behavioral/skill/UnregisteringASkill.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,21 @@
|
|
|
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 { ListPermContractsTargetAndPayload } from '../../features/permission/stores/PermissionStore';
|
|
4
4
|
export default class EventFaker {
|
|
5
|
+
fakeUnregisterSkill(cb?: (targetAndPayload: UnregisterSkillTargetAndPayload) => void): Promise<void>;
|
|
6
|
+
fakeRegisterSkill(cb?: (targetAndPayload: RegisterSkillTargetAndPayload) => void | Skill): Promise<void>;
|
|
5
7
|
fakeSyncPermissionContracts(): Promise<void>;
|
|
6
8
|
fakeRegisterEvents(cb?: () => void): Promise<void>;
|
|
7
9
|
fakeGetEventContracts(): Promise<void>;
|
|
8
10
|
fakeCreateOrganization(cb?: (targetAndPayload: CreateOrganizationTargetAndPayload) => void | Organization): Promise<void>;
|
|
9
11
|
generateOrganizationValues(): Organization;
|
|
10
|
-
fakeListSkills(cb?: () => void | ListSkill[]): Promise<void>;
|
|
12
|
+
fakeListSkills(cb?: (targetAndPayload: ListSkillsTargetAndPayload) => void | ListSkill[]): Promise<void>;
|
|
11
13
|
fakeListPermissionContracts(cb?: (targetAndPayload: ListPermContractsTargetAndPayload) => void | SpruceSchemas.Mercury.v2020_12_25.ListPermissionContractsResponsePayload['permissionContracts']): Promise<void>;
|
|
12
14
|
fakeRequestPin(): Promise<void>;
|
|
13
15
|
fakeConfirmPin(): Promise<void>;
|
|
14
16
|
}
|
|
15
17
|
export type ListSkill = SpruceSchemas.Mercury.v2020_12_25.ListSkillsSkill;
|
|
16
18
|
export type CreateOrganizationTargetAndPayload = SpruceSchemas.Mercury.v2020_12_25.CreateOrganizationEmitTargetAndPayload;
|
|
19
|
+
export type RegisterSkillTargetAndPayload = SpruceSchemas.Mercury.v2020_12_25.RegisterSkillEmitTargetAndPayload;
|
|
20
|
+
export type ListSkillsTargetAndPayload = SpruceSchemas.Mercury.v2020_12_25.ListSkillsEmitTargetAndPayload;
|
|
21
|
+
export type UnregisterSkillTargetAndPayload = SpruceSchemas.Mercury.v2020_12_25.UnregisterSkillEmitTargetAndPayload;
|
|
@@ -3,6 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const spruce_test_fixtures_1 = require("@sprucelabs/spruce-test-fixtures");
|
|
4
4
|
const test_utils_1 = require("@sprucelabs/test-utils");
|
|
5
5
|
class EventFaker {
|
|
6
|
+
async fakeUnregisterSkill(cb) {
|
|
7
|
+
await spruce_test_fixtures_1.eventFaker.on('unregister-skill::v2020_12_25', (targetAndPayload) => {
|
|
8
|
+
cb?.(targetAndPayload);
|
|
9
|
+
return {};
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async fakeRegisterSkill(cb) {
|
|
13
|
+
await spruce_test_fixtures_1.eventFaker.on('register-skill::v2020_12_25', (targetAndPayload) => {
|
|
14
|
+
return {
|
|
15
|
+
skill: cb?.(targetAndPayload) ?? {
|
|
16
|
+
id: (0, test_utils_1.generateId)(),
|
|
17
|
+
name: (0, test_utils_1.generateId)(),
|
|
18
|
+
slug: (0, test_utils_1.generateId)(),
|
|
19
|
+
apiKey: (0, test_utils_1.generateId)(),
|
|
20
|
+
dateCreated: Date.now(),
|
|
21
|
+
creators: [],
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
});
|
|
25
|
+
}
|
|
6
26
|
async fakeSyncPermissionContracts() {
|
|
7
27
|
await spruce_test_fixtures_1.eventFaker.on('sync-permission-contracts::v2020_12_25', () => {
|
|
8
28
|
return {
|
|
@@ -47,9 +67,9 @@ class EventFaker {
|
|
|
47
67
|
};
|
|
48
68
|
}
|
|
49
69
|
async fakeListSkills(cb) {
|
|
50
|
-
await spruce_test_fixtures_1.eventFaker.on('list-skills::v2020_12_25', () => {
|
|
70
|
+
await spruce_test_fixtures_1.eventFaker.on('list-skills::v2020_12_25', (targetAndPayload) => {
|
|
51
71
|
return {
|
|
52
|
-
skills: cb?.() ?? [],
|
|
72
|
+
skills: cb?.(targetAndPayload) ?? [],
|
|
53
73
|
};
|
|
54
74
|
});
|
|
55
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventFaker.js","sourceRoot":"","sources":["../../../src/__tests__/support/EventFaker.ts"],"names":[],"mappings":";;AAEA,2EAA6D;AAC7D,uDAAmD;AAGnD,MAAqB,UAAU;IACpB,KAAK,CAAC,2BAA2B;QACpC,MAAM,iCAAU,CAAC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAC/D,OAAO;gBACH,eAAe,EAAE,EAAE;aACtB,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IACM,KAAK,CAAC,kBAAkB,CAAC,EAAe;QAC3C,MAAM,iCAAU,CAAC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACrD,EAAE,EAAE,EAAE,CAAA;YACN,OAAO;gBACH,KAAK,EAAE,EAAE;aACZ,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IACM,KAAK,CAAC,qBAAqB;QAC9B,MAAM,iCAAU,CAAC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YACzD,OAAO;gBACH,SAAS,EAAE;oBACP;wBACI,EAAE,EAAE,IAAA,uBAAU,GAAE;wBAChB,eAAe,EAAE,EAAE;qBACtB;iBACJ;aACJ,CAAA;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IACM,KAAK,CAAC,sBAAsB,CAC/B,EAEwB;QAExB,MAAM,iCAAU,CAAC,EAAE,CACf,kCAAkC,EAClC,CAAC,gBAAgB,EAAE,EAAE;YACjB,OAAO;gBACH,YAAY,EACR,EAAE,EAAE,CAAC,gBAAgB,CAAC;oBACtB,IAAI,CAAC,0BAA0B,EAAE;aACxC,CAAA;QACL,CAAC,CACJ,CAAA;IACL,CAAC;IAEM,0BAA0B;QAC7B,OAAO;YACH,EAAE,EAAE,IAAA,uBAAU,GAAE;YAChB,IAAI,EAAE,IAAA,uBAAU,GAAE;YAClB,IAAI,EAAE,IAAA,uBAAU,GAAE;YAClB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;SAC1B,CAAA;IACL,CAAC;IAEM,KAAK,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"EventFaker.js","sourceRoot":"","sources":["../../../src/__tests__/support/EventFaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -127,7 +127,7 @@ class SpruceError extends error_1.default {
|
|
|
127
127
|
message = 'The directory you are in is not a skill!';
|
|
128
128
|
break;
|
|
129
129
|
case 'SKILL_NOT_REGISTERED':
|
|
130
|
-
message = `Dang! I can't continue until you register your skill! Run \`spruce login\` and then \`spruce register
|
|
130
|
+
message = `Dang! I can't continue until you register your skill! Run \`spruce login\` and then \`spruce register\` to get the ball rolling!`;
|
|
131
131
|
break;
|
|
132
132
|
case 'NO_ORGANIZATIONS_FOUND':
|
|
133
133
|
message =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpruceError.js","sourceRoot":"","sources":["../../src/errors/SpruceError.ts"],"names":[],"mappings":";;;;;AAAA,8DAAmD;AACnD,uEAA0D;AAC1D,mEAA0C;AAG1C,MAAqB,WAAY,SAAQ,eAAiC;IACtE,kDAAkD;IAC3C,eAAe;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,IAAI,OAAO,CAAA;QAEX,QAAQ,OAAO,EAAE,IAAI,EAAE,CAAC;YACpB,KAAK,iBAAiB;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,GAAG,wDAAwD,CAAA;gBACtE,CAAC;qBAAM,CAAC;oBACJ,OAAO,GAAG,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CACnE,GAAG,CACN,GAAG,CAAA;gBACR,CAAC;gBACD,OAAO,IAAI,8BAA8B,CAAA;gBACzC,MAAK;YAET,KAAK,SAAS;gBACV,OAAO,GAAG,OAAO,CAAC,eAAe,IAAI,cAAc,CAAA;gBAEnD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBACxB,OAAO,IAAI,OACP,OAAO,CAAC,aAAa,CAAC,KAAK;wBAC3B,OAAO,CAAC,aAAa,CAAC,IAC1B,EAAE,CAAA;gBACN,CAAC;gBACD,MAAK;YACT,KAAK,iBAAiB;gBAClB,OAAO,GAAG,EAAE,CAAA;gBACZ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,IAAI,OAAO,OAAO,CAAC,eAAe,EAAE,CAAA;gBAC/C,CAAC;gBACD,MAAK;YACT,KAAK,yBAAyB;gBAC1B,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,kCACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EACxD,EAAE,CAAA;gBACF,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,IAAI,OAAO,OAAO,CAAC,eAAe,EAAE,CAAA;gBAC/C,CAAC;gBAED,MAAK;YAET,KAAK,yBAAyB;gBAC1B,OAAO,GAAG,oBAAoB,OAAO,CAAC,IAAI,yBACtC,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,aACtC,EAAE,CAAA;gBACF,MAAK;YAET,KAAK,cAAc;gBACf,OAAO,GAAG,QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC3C,gGAAgG,CAAA;gBAEhG,MAAK;YAET,KAAK,kBAAkB;gBACnB,OAAO;oBACH,OAAO,CAAC,eAAe;wBACvB,qBAAqB,OAAO,CAAC,IAAI,yBAC7B,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,aACtC,EAAE,CAAA;gBACN,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,OAAO,CAAC,eAAe,CAAA;gBAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,OAAO,GAAG,0BAA0B,OAAO,CAAC,OAAO,GAAG,CAAA;oBAEtD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBACxB,OAAO,IAAI,sBACP,OAAO,CAAC,aAAa,CAAC,KAAK;4BAC3B,OAAO,CAAC,aAAa,CAAC,OAC1B,EAAE,CAAA;oBACN,CAAC;gBACL,CAAC;gBAED,MAAK;YAET,KAAK,0BAA0B;gBAC3B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;oBACnD,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,MAAM,CAAA;gBACjD,CAAC;qBAAM,CAAC;oBACJ,OAAO,GAAG,EAAE,CAAA;gBAChB,CAAC;gBACD,OAAO,IAAI,6BAA6B,OAAO,CAAC,GAAG,QAAQ,CAAA;gBAC3D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,IAAI,QAAQ,OAAO,CAAC,GAAG,MAAM,CAAA;gBACxC,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;gBACxD,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAA;gBAC7B,CAAC;gBAED,MAAK;YAET,KAAK,0BAA0B;gBAC3B,OAAO,GAAG,iDAAiD,CAAA;gBAC3D,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO,GAAG,kCAAkC,CAAA;gBAC5C,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,wBAAwB,CAAA;gBAClC,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO;oBACH,qPAAqP,CAAA;gBACzP,MAAK;YAET,KAAK,eAAe;gBAChB,OAAO,GAAG,mBAAmB,OAAO,CAAC,QAAQ,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAA;gBACxF,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO,GAAG,2BAA2B,CAAA;gBACrC,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,mDAAmD,OAAO,CAAC,WAAW,IAAI,CAAA;gBACpF,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,QACzB,OAAO,CAAC,QACZ,OAAO,OAAO,CAAC,YAAY;qBACtB,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;qBAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBAEjB,MAAK;YAET,KAAK,uBAAuB;gBACxB,OAAO,GAAG,KAAK,IAAA,oBAAU,EACrB,OAAO,CAAC,WAAW,CACtB,gEAAgE,CAAA;gBACjE,MAAK;YAET,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAA;gBACrC,OAAO,GAAG,OACN,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,SACvD,uBAAuB,CAAA;gBAEvB,MAAM,aAAa,GAAa,EAAE,CAAA;gBAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACnC,CAAC;gBAED,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAEnC,MAAK;YACT,CAAC;YACD,KAAK,wBAAwB;gBACzB,OAAO,GAAG,6FAA6F,CAAA;gBACvG,MAAK;YAET,KAAK,qBAAqB;gBACtB,OAAO,GAAG,0CAA0C,CAAA;gBACpD,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"SpruceError.js","sourceRoot":"","sources":["../../src/errors/SpruceError.ts"],"names":[],"mappings":";;;;;AAAA,8DAAmD;AACnD,uEAA0D;AAC1D,mEAA0C;AAG1C,MAAqB,WAAY,SAAQ,eAAiC;IACtE,kDAAkD;IAC3C,eAAe;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;QACxB,IAAI,OAAO,CAAA;QAEX,QAAQ,OAAO,EAAE,IAAI,EAAE,CAAC;YACpB,KAAK,iBAAiB;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,OAAO,GAAG,wDAAwD,CAAA;gBACtE,CAAC;qBAAM,CAAC;oBACJ,OAAO,GAAG,4CAA4C,OAAO,CAAC,IAAI,CAAC,IAAI,CACnE,GAAG,CACN,GAAG,CAAA;gBACR,CAAC;gBACD,OAAO,IAAI,8BAA8B,CAAA;gBACzC,MAAK;YAET,KAAK,SAAS;gBACV,OAAO,GAAG,OAAO,CAAC,eAAe,IAAI,cAAc,CAAA;gBAEnD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;oBACxB,OAAO,IAAI,OACP,OAAO,CAAC,aAAa,CAAC,KAAK;wBAC3B,OAAO,CAAC,aAAa,CAAC,IAC1B,EAAE,CAAA;gBACN,CAAC;gBACD,MAAK;YACT,KAAK,iBAAiB;gBAClB,OAAO,GAAG,EAAE,CAAA;gBACZ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,IAAI,OAAO,OAAO,CAAC,eAAe,EAAE,CAAA;gBAC/C,CAAC;gBACD,MAAK;YACT,KAAK,yBAAyB;gBAC1B,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,kCACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EACxD,EAAE,CAAA;gBACF,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,OAAO,IAAI,OAAO,OAAO,CAAC,eAAe,EAAE,CAAA;gBAC/C,CAAC;gBAED,MAAK;YAET,KAAK,yBAAyB;gBAC1B,OAAO,GAAG,oBAAoB,OAAO,CAAC,IAAI,yBACtC,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,aACtC,EAAE,CAAA;gBACF,MAAK;YAET,KAAK,cAAc;gBACf,OAAO,GAAG,QACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC3C,gGAAgG,CAAA;gBAEhG,MAAK;YAET,KAAK,kBAAkB;gBACnB,OAAO;oBACH,OAAO,CAAC,eAAe;wBACvB,qBAAqB,OAAO,CAAC,IAAI,yBAC7B,OAAO,CAAC,aAAa,EAAE,OAAO,IAAI,aACtC,EAAE,CAAA;gBACN,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,OAAO,CAAC,eAAe,CAAA;gBAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,OAAO,GAAG,0BAA0B,OAAO,CAAC,OAAO,GAAG,CAAA;oBAEtD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;wBACxB,OAAO,IAAI,sBACP,OAAO,CAAC,aAAa,CAAC,KAAK;4BAC3B,OAAO,CAAC,aAAa,CAAC,OAC1B,EAAE,CAAA;oBACN,CAAC;gBACL,CAAC;gBAED,MAAK;YAET,KAAK,0BAA0B;gBAC3B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;oBACnD,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,MAAM,CAAA;gBACjD,CAAC;qBAAM,CAAC;oBACJ,OAAO,GAAG,EAAE,CAAA;gBAChB,CAAC;gBACD,OAAO,IAAI,6BAA6B,OAAO,CAAC,GAAG,QAAQ,CAAA;gBAC3D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBACd,OAAO,IAAI,QAAQ,OAAO,CAAC,GAAG,MAAM,CAAA;gBACxC,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;gBACxD,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACjB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAA;gBAC7B,CAAC;gBAED,MAAK;YAET,KAAK,0BAA0B;gBAC3B,OAAO,GAAG,iDAAiD,CAAA;gBAC3D,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO,GAAG,kCAAkC,CAAA;gBAC5C,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,wBAAwB,CAAA;gBAClC,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO;oBACH,qPAAqP,CAAA;gBACzP,MAAK;YAET,KAAK,eAAe;gBAChB,OAAO,GAAG,mBAAmB,OAAO,CAAC,QAAQ,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAA;gBACxF,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO,GAAG,2BAA2B,CAAA;gBACrC,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,mDAAmD,OAAO,CAAC,WAAW,IAAI,CAAA;gBACpF,MAAK;YAET,KAAK,aAAa;gBACd,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,QACzB,OAAO,CAAC,QACZ,OAAO,OAAO,CAAC,YAAY;qBACtB,KAAK,CAAC,IAAI,CAAC;qBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;qBAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBAEjB,MAAK;YAET,KAAK,uBAAuB;gBACxB,OAAO,GAAG,KAAK,IAAA,oBAAU,EACrB,OAAO,CAAC,WAAW,CACtB,gEAAgE,CAAA;gBACjE,MAAK;YAET,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAA;gBACrC,OAAO,GAAG,OACN,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,SACvD,uBAAuB,CAAA;gBAEvB,MAAM,aAAa,GAAa,EAAE,CAAA;gBAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;oBACvB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBACnC,CAAC;gBAED,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAEnC,MAAK;YACT,CAAC;YACD,KAAK,wBAAwB;gBACzB,OAAO,GAAG,6FAA6F,CAAA;gBACvG,MAAK;YAET,KAAK,qBAAqB;gBACtB,OAAO,GAAG,0CAA0C,CAAA;gBACpD,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,kIAAkI,CAAA;gBAC5I,MAAK;YAET,KAAK,wBAAwB;gBACzB,OAAO;oBACH,mGAAmG,CAAA;gBACvG,MAAK;YAET,KAAK,wBAAwB;gBACzB,OAAO,GAAG,qBAAqB,OAAO,CAAC,uBAAuB,0BAA0B,OAAO,CAAC,cAAc,+BAA+B,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA;gBAC7K,MAAK;YAET,KAAK,YAAY;gBACb,OAAO,GAAG,8BACN,OAAO,CAAC,eAAe;oBACvB,OAAO,CAAC,aAAa,EAAE,OAAO;oBAC9B,oBACJ,EAAE,CAAA;gBACF,MAAK;YAET,KAAK,eAAe;gBAChB,OAAO,GAAG,gBAAgB,CAAA;gBAC1B,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,mDAAmD,OAAO,CAAC,YAAY;qBAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;qBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;gBACjB,MAAK;YAET,KAAK,cAAc;gBACf,OAAO,GAAG,+BAA+B,CAAA;gBACzC,MAAK;YAET,KAAK,eAAe;gBAChB,OAAO,GAAG,sCAAsC,CAAA;gBAChD,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO;oBACH,OAAO,CAAC,eAAe,IAAI,6BAA6B,CAAA;gBAC5D,MAAK;YAET,KAAK,sBAAsB;gBACvB,OAAO,GAAG,mGAAmG,CAAA;gBAC7G,MAAK;YAET,KAAK,iBAAiB;gBAClB,OAAO,GAAG,GAAG,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC,IAAI,EAAE,CAAA;gBAC1D,MAAK;YAET,KAAK,mBAAmB;gBACpB,OAAO,GAAG,gDAAgD,OAAO,CAAC,IAAI,GAAG,CAAA;gBACzE,MAAK;YAET,KAAK,cAAc;gBACf,OAAO,GAAG,6DAA6D,CAAA;gBACvE,MAAK;YAET,KAAK,mBAAmB;gBACpB,OAAO,GAAG,gDAAgD,CAAA;gBAC1D,MAAK;YAET,KAAK,oBAAoB;gBACrB,OAAO;oBACH,6JAA6J;wBAC7J,OAAO,CAAC,aAAa,EAAE,KAAK,CAAA;gBAChC,MAAK;YAET,KAAK,sCAAsC;gBACvC,OAAO,GAAG,6CAA6C,8BAAS,CAAC,QAAQ,CACrE,OAAO,CAAC,eAAe,CAC1B,IAAI,OAAO,CAAC,QAAQ,uCACjB,OAAO,CAAC,SACZ,2BAA2B,IAAI,CAAC,SAAS,CACrC,OAAO,CAAC,YAAY,CACvB,mLAAmL,CAAA;gBACpL,MAAK;YAET,KAAK,kBAAkB;gBACnB,OAAO,GAAG,mCAAmC,CAAA;gBAC7C,MAAK;YAET,KAAK,0BAA0B;gBAC3B,OAAO,GAAG,sBAAsB,OAAO,CAAC,IAAI,mBAAmB,CAAA;gBAC/D,MAAK;YAET,KAAK,mBAAmB;gBACpB,OAAO,GAAG,oBAAoB,OAAO,CAAC,SAAS,mBAAmB,CAAA;gBAClE,MAAK;YAET,KAAK,4BAA4B;gBAC7B,OAAO,GAAG,6BAA6B,OAAO,CAAC,IAAI,kBAAkB,CAAA;gBACrE,MAAK;YAET,KAAK,qBAAqB;gBACtB,OAAO,GAAG,0BAA0B,CAAA;gBACpC,MAAK;YAET,KAAK,+BAA+B;gBAChC,OAAO,GAAG,wFAAwF,CAAA;gBAClG,MAAK;YAET,KAAK,0BAA0B;gBAC3B,OAAO,GAAG,wCAAwC,OAAO,CAAC,UAAU,8DAA8D,CAAA;gBAClI,MAAK;YAET,KAAK,yBAAyB;gBAC1B,OAAO,GAAG,0CAA0C,CAAA;gBACpD,MAAK;YAET;gBACI,OAAO,GAAG,KAAK,CAAC,eAAe,EAAE,CAAA;QACzC,CAAC;QAED,OAAO,OAAO,CAAA;IAClB,CAAC;IAEO,WAAW,CAAC,MAAc;QAC9B,OAAO,MAAM;aACR,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC;aACrD,IAAI,EAAE,CAAA;IACf,CAAC;CACJ;AAtSD,8BAsSC"}
|
|
@@ -39,7 +39,7 @@ export declare class FeatureInstallerImpl implements ServiceProvider, FeatureIns
|
|
|
39
39
|
Service<S extends Service>(type: S, cwd?: string): ServiceMap[S];
|
|
40
40
|
getOptionsForFeature(code: FeatureCode): import("@sprucelabs/schema").Schema | import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema | import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptionsSchema | undefined;
|
|
41
41
|
getAllCodes(): FeatureCode[];
|
|
42
|
-
getInstalledFeatures(): Promise<(import("./schema/SchemaFeature").default | import("./test/TestFeature").default | import("./skill/SkillFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema> | import("./error/ErrorFeature").default | import("./node/NodeFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptionsSchema> | import("./dependencies/DependencyFeature").default | import("./agent/AgentFeature").default | import("./cache/CacheFeature").default | import("./conversation/ConversationFeature").default | import("./deploy/DeployFeature").default | import("./event/EventFeature").default | import("./eventContract/EventContractFeature").default | import("./log/LogFeature").default | import("./onboard/OnboardFeature").default | import("./organization/OrganizationFeature").default | import("./permission/PermissionFeature").default | import("./person/PersonFeature").default | import("./polish/PolishFeature").default | import("./sandbox/SandboxFeature").default | import("./store/StoreFeature").default | import("./view/ViewFeature").default | import("./vscode/VsCodeFeature").default | import("./watch/WatchFeature").default)[]>;
|
|
42
|
+
getInstalledFeatures(): Promise<(import("./schema/SchemaFeature").default | import("./test/TestFeature").default | import("./skill/SkillFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema> | import("./error/ErrorFeature").default | import("./node/NodeFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptionsSchema> | import("./dependencies/DependencyFeature").default | import("./agent/AgentFeature").default | import("./cache/CacheFeature").default | import("./conversation/ConversationFeature").default | import("./deploy/DeployFeature").default | import("./event/EventFeature").default | import("./eventContract/EventContractFeature").default | import("./global/GlobalFeature").default | import("./log/LogFeature").default | import("./onboard/OnboardFeature").default | import("./organization/OrganizationFeature").default | import("./permission/PermissionFeature").default | import("./person/PersonFeature").default | import("./polish/PolishFeature").default | import("./sandbox/SandboxFeature").default | import("./store/StoreFeature").default | import("./view/ViewFeature").default | import("./vscode/VsCodeFeature").default | import("./watch/WatchFeature").default)[]>;
|
|
43
43
|
}
|
|
44
44
|
export default interface FeatureInstaller {
|
|
45
45
|
isInstalled(code: FeatureCode): Promise<boolean>;
|
|
@@ -13,6 +13,7 @@ const ErrorFeature_1 = __importDefault(require("./error/ErrorFeature"));
|
|
|
13
13
|
const EventFeature_1 = __importDefault(require("./event/EventFeature"));
|
|
14
14
|
const EventContractFeature_1 = __importDefault(require("./eventContract/EventContractFeature"));
|
|
15
15
|
const FeatureInstaller_1 = require("./FeatureInstaller");
|
|
16
|
+
const GlobalFeature_1 = __importDefault(require("./global/GlobalFeature"));
|
|
16
17
|
const LogFeature_1 = __importDefault(require("./log/LogFeature"));
|
|
17
18
|
const NodeFeature_1 = __importDefault(require("./node/NodeFeature"));
|
|
18
19
|
const OnboardFeature_1 = __importDefault(require("./onboard/OnboardFeature"));
|
|
@@ -53,6 +54,7 @@ class FeatureInstallerFactory {
|
|
|
53
54
|
PolishFeature_1.default,
|
|
54
55
|
PermissionFeature_1.default,
|
|
55
56
|
AgentFeature_1.default,
|
|
57
|
+
GlobalFeature_1.default,
|
|
56
58
|
];
|
|
57
59
|
static featureCodes = [
|
|
58
60
|
'error',
|
|
@@ -78,6 +80,7 @@ class FeatureInstallerFactory {
|
|
|
78
80
|
'polish',
|
|
79
81
|
'permission',
|
|
80
82
|
'agent',
|
|
83
|
+
'global',
|
|
81
84
|
];
|
|
82
85
|
static WithAllFeatures(options) {
|
|
83
86
|
const { cwd, serviceFactory, storeFactory, ui, emitter, actionExecuter, } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInstallerFactory.js","sourceRoot":"","sources":["../../src/features/FeatureInstallerFactory.ts"],"names":[],"mappings":";;;;;AAAA,mEAAwD;AAQxD,wEAA+C;AAC/C,wEAA+C;AAC/C,6FAAoE;AACpE,yFAAgE;AAChE,2EAAkD;AAClD,wEAA+C;AAC/C,wEAA+C;AAC/C,gGAAuE;AACvE,yDAA2E;AAE3E,kEAAyC;AACzC,qEAA4C;AAC5C,8EAAqD;AACrD,6FAAoE;AACpE,uFAA8D;AAC9D,2EAAkD;AAClD,2EAAkD;AAClD,8EAAqD;AACrD,2EAAkD;AAClD,wEAA+C;AAC/C,wEAA+C;AAC/C,qEAA4C;AAC5C,qEAA4C;AAC5C,2EAAkD;AAClD,wEAA+C;AAE/C,MAAqB,uBAAuB;IAChC,MAAM,CAAU,QAAQ,GAAU;QACtC,sBAAY;QACZ,uBAAa;QACb,sBAAY;QACZ,qBAAW;QACX,uBAAa;QACb,sBAAY;QACZ,sBAAY;QACZ,qBAAW;QACX,wBAAc;QACd,uBAAa;QACb,6BAAmB;QACnB,6BAAmB;QACnB,8BAAoB;QACpB,uBAAa;QACb,wBAAc;QACd,sBAAY;QACZ,qBAAW;QACX,sBAAY;QACZ,oBAAU;QACV,2BAAiB;QACjB,uBAAa;QACb,2BAAiB;QACjB,sBAAY;
|
|
1
|
+
{"version":3,"file":"FeatureInstallerFactory.js","sourceRoot":"","sources":["../../src/features/FeatureInstallerFactory.ts"],"names":[],"mappings":";;;;;AAAA,mEAAwD;AAQxD,wEAA+C;AAC/C,wEAA+C;AAC/C,6FAAoE;AACpE,yFAAgE;AAChE,2EAAkD;AAClD,wEAA+C;AAC/C,wEAA+C;AAC/C,gGAAuE;AACvE,yDAA2E;AAE3E,2EAAkD;AAClD,kEAAyC;AACzC,qEAA4C;AAC5C,8EAAqD;AACrD,6FAAoE;AACpE,uFAA8D;AAC9D,2EAAkD;AAClD,2EAAkD;AAClD,8EAAqD;AACrD,2EAAkD;AAClD,wEAA+C;AAC/C,wEAA+C;AAC/C,qEAA4C;AAC5C,qEAA4C;AAC5C,2EAAkD;AAClD,wEAA+C;AAE/C,MAAqB,uBAAuB;IAChC,MAAM,CAAU,QAAQ,GAAU;QACtC,sBAAY;QACZ,uBAAa;QACb,sBAAY;QACZ,qBAAW;QACX,uBAAa;QACb,sBAAY;QACZ,sBAAY;QACZ,qBAAW;QACX,wBAAc;QACd,uBAAa;QACb,6BAAmB;QACnB,6BAAmB;QACnB,8BAAoB;QACpB,uBAAa;QACb,wBAAc;QACd,sBAAY;QACZ,qBAAW;QACX,sBAAY;QACZ,oBAAU;QACV,2BAAiB;QACjB,uBAAa;QACb,2BAAiB;QACjB,sBAAY;QACZ,uBAAa;KAChB,CAAA;IAEM,MAAM,CAAU,YAAY,GAAkB;QACjD,OAAO;QACP,QAAQ;QACR,OAAO;QACP,MAAM;QACN,QAAQ;QACR,OAAO;QACP,OAAO;QACP,MAAM;QACN,SAAS;QACT,QAAQ;QACR,cAAc;QACd,cAAc;QACd,eAAe;QACf,QAAQ;QACR,SAAS;QACT,OAAO;QACP,MAAM;QACN,OAAO;QACP,KAAK;QACL,YAAY;QACZ,QAAQ;QACR,YAAY;QACZ,OAAO;QACP,QAAQ;KACX,CAAA;IAEM,MAAM,CAAC,eAAe,CACzB,OAAwC;QAExC,MAAM,EACF,GAAG,EACH,cAAc,EACd,YAAY,EACZ,EAAE,EACF,OAAO,EACP,cAAc,GACjB,GAAG,OAAO,CAAA;QAEX,MAAM,gBAAgB,GAClB,OAAO,CAAC,gBAAgB;YACxB,IAAI,uCAAoB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAEjD,MAAM,cAAc,GAAmB;YACnC,GAAG;YACH,cAAc;YACd,SAAS,EAAT,4BAAS;YACT,YAAY;YACZ,gBAAgB;YAChB,EAAE;YACF,OAAO;YACP,cAAc;YACd,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC7C,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC,CAAA;YAC3C,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IAEM,MAAM,CAAC,UAAU,CAAwB,IAAO,EAAE,OAAY;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC7C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,sBAAsB,CAAC,CAAA;QAChE,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;IAClC,CAAC;;AAlGL,0CAmGC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { NpmPackage } from '@sprucelabs/spruce-skill-utils';
|
|
2
|
+
import AbstractFeature, { FeatureDependency } from '../AbstractFeature';
|
|
3
|
+
import { FeatureCode } from '../features.types';
|
|
4
|
+
export default class GlobalFeature extends AbstractFeature {
|
|
5
|
+
code: FeatureCode;
|
|
6
|
+
nameReadable: string;
|
|
7
|
+
description: string;
|
|
8
|
+
dependencies: FeatureDependency[];
|
|
9
|
+
_packageDependencies: NpmPackage[];
|
|
10
|
+
actionsDir: string;
|
|
11
|
+
scripts: {};
|
|
12
|
+
isInstalled(): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
declare module '../../features/features.types' {
|
|
15
|
+
interface FeatureMap {
|
|
16
|
+
global: GlobalFeature;
|
|
17
|
+
}
|
|
18
|
+
interface FeatureOptionsMap {
|
|
19
|
+
global: undefined;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
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 spruce_skill_utils_1 = require("@sprucelabs/spruce-skill-utils");
|
|
7
|
+
const AbstractFeature_1 = __importDefault(require("../AbstractFeature"));
|
|
8
|
+
class GlobalFeature extends AbstractFeature_1.default {
|
|
9
|
+
code = 'global';
|
|
10
|
+
nameReadable = 'Global';
|
|
11
|
+
description = 'Place for all global actions that affect your Spruce account (outside your profile).';
|
|
12
|
+
dependencies = [];
|
|
13
|
+
_packageDependencies = [];
|
|
14
|
+
actionsDir = spruce_skill_utils_1.diskUtil.resolvePath(__dirname, 'actions');
|
|
15
|
+
scripts = {};
|
|
16
|
+
async isInstalled() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.default = GlobalFeature;
|
|
21
|
+
//# sourceMappingURL=GlobalFeature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GlobalFeature.js","sourceRoot":"","sources":["../../../src/features/global/GlobalFeature.ts"],"names":[],"mappings":";;;;;AAAA,uEAAqE;AACrE,yEAAuE;AAGvE,MAAqB,aAAc,SAAQ,yBAAe;IAC/C,IAAI,GAAgB,QAAQ,CAAA;IAC5B,YAAY,GAAG,QAAQ,CAAA;IACvB,WAAW,GACd,sFAAsF,CAAA;IACnF,YAAY,GAAwB,EAAE,CAAA;IACtC,oBAAoB,GAAiB,EAAE,CAAA;IAEvC,UAAU,GAAG,6BAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IACvD,OAAO,GAAG,EAAE,CAAA;IAEZ,KAAK,CAAC,WAAW;QACpB,OAAO,IAAI,CAAA;IACf,CAAC;CACJ;AAdD,gCAcC"}
|
|
@@ -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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "29.0
|
|
7
|
+
"version": "29.1.0",
|
|
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
|
|
88
|
+
"@sprucelabs/spruce-templates": "^29.1.0",
|
|
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": "
|
|
573
|
+
"gitHead": "e113fa698f7bbcfb68fe2c42391dc7894bb2fcee"
|
|
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
|
+
}
|
|
@@ -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(
|
|
62
|
-
|
|
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
|
|
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
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { buildSchema } from '@sprucelabs/schema'
|
|
2
|
+
import { ListSkill } from '../../../__tests__/support/EventFaker'
|
|
3
|
+
import SpruceError from '../../../errors/SpruceError'
|
|
4
|
+
import AbstractAction from '../../AbstractAction'
|
|
5
|
+
import { ActionOptions, FeatureActionResponse } from '../../features.types'
|
|
6
|
+
import { SkillStore } from '../../skill/stores/SkillStore'
|
|
7
|
+
|
|
8
|
+
const optionsSchema = buildSchema({
|
|
9
|
+
id: 'unregisterSkill',
|
|
10
|
+
description: 'Unregister a skill from your account.',
|
|
11
|
+
fields: {},
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
type OptionsSchema = typeof optionsSchema
|
|
15
|
+
|
|
16
|
+
export default class UnregisterSkillAction extends AbstractAction<OptionsSchema> {
|
|
17
|
+
public optionsSchema: OptionsSchema = optionsSchema
|
|
18
|
+
public commandAliases = ['unregister.skill']
|
|
19
|
+
public invocationMessage = 'Unregistering skill... 🔧'
|
|
20
|
+
private skills: SkillStore
|
|
21
|
+
|
|
22
|
+
public constructor(options: ActionOptions) {
|
|
23
|
+
super(options)
|
|
24
|
+
this.skills = this.Store('skill')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public async execute(): Promise<FeatureActionResponse> {
|
|
28
|
+
const response: FeatureActionResponse = {}
|
|
29
|
+
|
|
30
|
+
const skills = await this.skills.fetchMySkills()
|
|
31
|
+
if (skills.length > 0) {
|
|
32
|
+
const skillId = await this.ui.prompt({
|
|
33
|
+
type: 'select',
|
|
34
|
+
isRequired: true,
|
|
35
|
+
options: {
|
|
36
|
+
choices: skills.map((skill) => this.skillToChoices(skill)),
|
|
37
|
+
},
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
const match = skills.find((s) => s.id === skillId)
|
|
41
|
+
|
|
42
|
+
const confirm = await this.ui.confirm(
|
|
43
|
+
`Are you sure you want to unregister the skill "${match?.name}"?`
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
if (confirm) {
|
|
47
|
+
await this.skills.unregisterSkill(skillId)
|
|
48
|
+
response.summaryLines = [`Unregistered ${match?.name}`]
|
|
49
|
+
} else {
|
|
50
|
+
response.summaryLines = ['Unregister cancelled.']
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
response.errors = [
|
|
54
|
+
new SpruceError({ code: 'NO_SKILLS_REGISTERED' }),
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return response
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private skillToChoices(skill: ListSkill): { value: string; label: string } {
|
|
62
|
+
return {
|
|
63
|
+
value: skill.id,
|
|
64
|
+
label: `${skill.slug}: ${skill.name}`,
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|