@sprucelabs/spruce-cli 14.21.2 → 14.21.6

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/.nvmrc CHANGED
@@ -1 +1 @@
1
- 16.8
1
+ 16
package/CHANGELOG.md CHANGED
@@ -3,6 +3,38 @@
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
+ ## [14.21.6](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.21.5...v14.21.6) (2021-10-01)
7
+
8
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
9
+
10
+
11
+
12
+
13
+
14
+ ## [14.21.5](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.21.4...v14.21.5) (2021-09-28)
15
+
16
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
17
+
18
+
19
+
20
+
21
+
22
+ ## [14.21.4](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.21.3...v14.21.4) (2021-09-28)
23
+
24
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
25
+
26
+
27
+
28
+
29
+
30
+ ## [14.21.3](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.21.2...v14.21.3) (2021-09-24)
31
+
32
+ **Note:** Version bump only for package @sprucelabs/spruce-cli
33
+
34
+
35
+
36
+
37
+
6
38
  ## [14.21.2](https://github.com/sprucelabsai/spruce-cli-workspace/compare/v14.21.1...v14.21.2) (2021-09-24)
7
39
 
8
40
  **Note:** Version bump only for package @sprucelabs/spruce-cli
@@ -1,15 +1,38 @@
1
1
  {
2
- "installed": [
2
+ "skipped": [
3
3
  "skill",
4
+ "event"
5
+ ],
6
+ "installed": [
4
7
  "schema",
5
8
  "error",
6
- "test",
7
- "event"
9
+ "test"
8
10
  ],
9
11
  "events.lastSync": {
10
12
  "contractDestinationDir": "#spruce/events",
11
13
  "schemaTypesLookupDir": "#spruce/schemas",
12
14
  "skillEventContractTypesFile": "@sprucelabs/mercury-types/build/types/mercury.types",
13
15
  "eventBuilderFile": "@sprucelabs/mercury-types"
16
+ },
17
+ "writer": {
18
+ "skipped": [
19
+ "src/index.ts",
20
+ "tsconfig.json"
21
+ ]
22
+ },
23
+ "scriptUpdater": {
24
+ "skipped": [
25
+ "build.ci",
26
+ "build.dev",
27
+ "clean.all",
28
+ "lint.tsc",
29
+ "rebuild",
30
+ "update.dependencies",
31
+ "test",
32
+ "watch.build.dev",
33
+ "watch.lint",
34
+ "watch.rebuild",
35
+ "watch.tsc"
36
+ ]
14
37
  }
15
38
  }
@@ -0,0 +1,7 @@
1
+ import AbstractCliTest from '../../../tests/AbstractCliTest';
2
+ export default class UpgradingASkill4Test extends AbstractCliTest {
3
+ protected static upgradeResetsEventCache(): Promise<void>;
4
+ protected static doesNotResetEventCacheWithOtherAction(): Promise<void>;
5
+ private static installSetListenerCacheAndBlockExecute;
6
+ private static Settings;
7
+ }
@@ -0,0 +1,171 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+
16
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor"));
25
+
26
+ var _test = require("@sprucelabs/test");
27
+
28
+ var _AbstractCliTest2 = _interopRequireDefault(require("../../../tests/AbstractCliTest"));
29
+
30
+ var _dec, _dec2, _class;
31
+
32
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
33
+
34
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
+
36
+ var UpgradingASkill4Test = (_dec = (0, _test.test)(), _dec2 = (0, _test.test)(), (_class = /*#__PURE__*/function (_AbstractCliTest) {
37
+ (0, _inherits2["default"])(UpgradingASkill4Test, _AbstractCliTest);
38
+
39
+ var _super = _createSuper(UpgradingASkill4Test);
40
+
41
+ function UpgradingASkill4Test() {
42
+ (0, _classCallCheck2["default"])(this, UpgradingASkill4Test);
43
+ return _super.apply(this, arguments);
44
+ }
45
+
46
+ (0, _createClass2["default"])(UpgradingASkill4Test, null, [{
47
+ key: "upgradeResetsEventCache",
48
+ value: function () {
49
+ var _upgradeResetsEventCache = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
50
+ var _this = this;
51
+
52
+ var value;
53
+ return _regenerator["default"].wrap(function _callee$(_context) {
54
+ while (1) {
55
+ switch (_context.prev = _context.next) {
56
+ case 0:
57
+ _context.next = 2;
58
+ return this.installSetListenerCacheAndBlockExecute();
59
+
60
+ case 2:
61
+ _context.next = 4;
62
+ return _test.assert.doesThrowAsync(function () {
63
+ return _this.Action('node', 'upgrade').execute({});
64
+ });
65
+
66
+ case 4:
67
+ value = this.Settings().getListenerCache();
68
+
69
+ _test.assert.isFalsy(value);
70
+
71
+ case 6:
72
+ case "end":
73
+ return _context.stop();
74
+ }
75
+ }
76
+ }, _callee, this);
77
+ }));
78
+
79
+ function upgradeResetsEventCache() {
80
+ return _upgradeResetsEventCache.apply(this, arguments);
81
+ }
82
+
83
+ return upgradeResetsEventCache;
84
+ }()
85
+ }, {
86
+ key: "doesNotResetEventCacheWithOtherAction",
87
+ value: function () {
88
+ var _doesNotResetEventCacheWithOtherAction = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
89
+ var _this2 = this;
90
+
91
+ var value;
92
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
93
+ while (1) {
94
+ switch (_context2.prev = _context2.next) {
95
+ case 0:
96
+ _context2.next = 2;
97
+ return this.installSetListenerCacheAndBlockExecute();
98
+
99
+ case 2:
100
+ _context2.next = 4;
101
+ return _test.assert.doesThrowAsync(function () {
102
+ return _this2.Action('schema', 'sync').execute({});
103
+ });
104
+
105
+ case 4:
106
+ value = this.Settings().getListenerCache();
107
+
108
+ _test.assert.isEqualDeep(value, {
109
+ shouldBeDeleted: true
110
+ });
111
+
112
+ case 6:
113
+ case "end":
114
+ return _context2.stop();
115
+ }
116
+ }
117
+ }, _callee2, this);
118
+ }));
119
+
120
+ function doesNotResetEventCacheWithOtherAction() {
121
+ return _doesNotResetEventCacheWithOtherAction.apply(this, arguments);
122
+ }
123
+
124
+ return doesNotResetEventCacheWithOtherAction;
125
+ }()
126
+ }, {
127
+ key: "installSetListenerCacheAndBlockExecute",
128
+ value: function () {
129
+ var _installSetListenerCacheAndBlockExecute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
130
+ var settings, emitter;
131
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
132
+ while (1) {
133
+ switch (_context3.prev = _context3.next) {
134
+ case 0:
135
+ _context3.next = 2;
136
+ return this.FeatureFixture().installCachedFeatures('events');
137
+
138
+ case 2:
139
+ settings = this.Settings();
140
+ settings.setListenerCache({
141
+ shouldBeDeleted: true
142
+ });
143
+ emitter = this.getEmitter();
144
+ void emitter.on('feature.will-execute', function () {
145
+ throw new Error('Stop!');
146
+ });
147
+
148
+ case 6:
149
+ case "end":
150
+ return _context3.stop();
151
+ }
152
+ }
153
+ }, _callee3, this);
154
+ }));
155
+
156
+ function installSetListenerCacheAndBlockExecute() {
157
+ return _installSetListenerCacheAndBlockExecute.apply(this, arguments);
158
+ }
159
+
160
+ return installSetListenerCacheAndBlockExecute;
161
+ }()
162
+ }, {
163
+ key: "Settings",
164
+ value: function Settings() {
165
+ return this.Service('eventSettings');
166
+ }
167
+ }]);
168
+ return UpgradingASkill4Test;
169
+ }(_AbstractCliTest2["default"]), ((0, _applyDecoratedDescriptor2["default"])(_class, "upgradeResetsEventCache", [_dec], Object.getOwnPropertyDescriptor(_class, "upgradeResetsEventCache"), _class), (0, _applyDecoratedDescriptor2["default"])(_class, "doesNotResetEventCacheWithOtherAction", [_dec2], Object.getOwnPropertyDescriptor(_class, "doesNotResetEventCacheWithOtherAction"), _class)), _class));
170
+ exports["default"] = UpgradingASkill4Test;
171
+ //# sourceMappingURL=UpgradingASkill4.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/skill/UpgradingASkill4.test.ts"],"names":["UpgradingASkill4Test","installSetListenerCacheAndBlockExecute","assert","doesThrowAsync","Action","execute","value","Settings","getListenerCache","isFalsy","isEqualDeep","shouldBeDeleted","FeatureFixture","installCachedFeatures","settings","setListenerCache","emitter","getEmitter","on","Error","Service","AbstractCliTest"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;IAEqBA,oB,WACnB,iB,UAYA,iB;;;;;;;;;;;;;mHAZD;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEO,KAAKC,sCAAL,EAFP;;AAAA;AAAA;AAAA,uBAIOC,aAAOC,cAAP,CAAsB;AAAA,yBAC3B,KAAI,CAACC,MAAL,CAAY,MAAZ,EAAoB,SAApB,EAA+BC,OAA/B,CAAuC,EAAvC,CAD2B;AAAA,iBAAtB,CAJP;;AAAA;AAQOC,gBAAAA,KARP,GAQe,KAAKC,QAAL,GAAgBC,gBAAhB,EARf;;AASCN,6BAAOO,OAAP,CAAeH,KAAf;;AATD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;iIAYA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEO,KAAKL,sCAAL,EAFP;;AAAA;AAAA;AAAA,uBAIOC,aAAOC,cAAP,CAAsB;AAAA,yBAAM,MAAI,CAACC,MAAL,CAAY,QAAZ,EAAsB,MAAtB,EAA8BC,OAA9B,CAAsC,EAAtC,CAAN;AAAA,iBAAtB,CAJP;;AAAA;AAMOC,gBAAAA,KANP,GAMe,KAAKC,QAAL,GAAgBC,gBAAhB,EANf;;AAOCN,6BAAOQ,WAAP,CAAmBJ,KAAnB,EAA0B;AAAEK,kBAAAA,eAAe,EAAE;AAAnB,iBAA1B;;AAPD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;kIAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACO,KAAKC,cAAL,GAAsBC,qBAAtB,CAA4C,QAA5C,CADP;;AAAA;AAGOC,gBAAAA,QAHP,GAGkB,KAAKP,QAAL,EAHlB;AAICO,gBAAAA,QAAQ,CAACC,gBAAT,CAA0B;AAAEJ,kBAAAA,eAAe,EAAE;AAAnB,iBAA1B;AAEMK,gBAAAA,OANP,GAMiB,KAAKC,UAAL,EANjB;AAOC,qBAAKD,OAAO,CAACE,EAAR,CAAW,sBAAX,EAAmC,YAAM;AAC7C,wBAAM,IAAIC,KAAJ,CAAU,OAAV,CAAN;AACA,iBAFI,CAAL;;AAPD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAYA,oBAA0B;AACzB,aAAO,KAAKC,OAAL,CAAa,eAAb,CAAP;AACA;;;EArCgDC,4B","sourcesContent":["import { test, assert } from '@sprucelabs/test'\nimport AbstractCliTest from '../../../tests/AbstractCliTest'\n\nexport default class UpgradingASkill4Test extends AbstractCliTest {\n\t@test()\n\tprotected static async upgradeResetsEventCache() {\n\t\tawait this.installSetListenerCacheAndBlockExecute()\n\n\t\tawait assert.doesThrowAsync(() =>\n\t\t\tthis.Action('node', 'upgrade').execute({})\n\t\t)\n\n\t\tconst value = this.Settings().getListenerCache()\n\t\tassert.isFalsy(value)\n\t}\n\n\t@test()\n\tprotected static async doesNotResetEventCacheWithOtherAction() {\n\t\tawait this.installSetListenerCacheAndBlockExecute()\n\n\t\tawait assert.doesThrowAsync(() => this.Action('schema', 'sync').execute({}))\n\n\t\tconst value = this.Settings().getListenerCache()\n\t\tassert.isEqualDeep(value, { shouldBeDeleted: true })\n\t}\n\n\tprivate static async installSetListenerCacheAndBlockExecute() {\n\t\tawait this.FeatureFixture().installCachedFeatures('events')\n\n\t\tconst settings = this.Settings()\n\t\tsettings.setListenerCache({ shouldBeDeleted: true })\n\n\t\tconst emitter = this.getEmitter()\n\t\tvoid emitter.on('feature.will-execute', () => {\n\t\t\tthrow new Error('Stop!')\n\t\t})\n\t}\n\n\tprivate static Settings() {\n\t\treturn this.Service('eventSettings')\n\t}\n}\n"],"file":"UpgradingASkill4.test.js"}
@@ -50,7 +50,7 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
50
50
  value:
51
51
  /** An easy to understand version of the errors */
52
52
  function friendlyMessage() {
53
- var _options$originalErro, _options$originalErro2, _options$originalErro3, _options$originalErro4, _options$originalErro5, _ref, _options$friendlyMess, _options$originalErro6, _options$friendlyMess2;
53
+ var _options$friendlyMess, _options$originalErro2, _options$originalErro3, _options$friendlyMess2, _options$originalErro4, _options$originalErro5, _options$originalErro6, _ref, _options$friendlyMess3, _options$originalErro7;
54
54
 
55
55
  var options = this.options;
56
56
  var message;
@@ -67,7 +67,14 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
67
67
  break;
68
68
 
69
69
  case 'GENERIC':
70
- message = 'Oh shoot! 🤔';
70
+ message = (_options$friendlyMess = options.friendlyMessage) !== null && _options$friendlyMess !== void 0 ? _options$friendlyMess : 'Oh shoot! 🤔';
71
+
72
+ if (options.originalError) {
73
+ var _options$originalErro;
74
+
75
+ message += "\n\n".concat((_options$originalErro = options.originalError.stack) !== null && _options$originalErro !== void 0 ? _options$originalErro : options.originalError.name);
76
+ }
77
+
71
78
  break;
72
79
 
73
80
  case 'NOT_IMPLEMENTED':
@@ -89,7 +96,7 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
89
96
  break;
90
97
 
91
98
  case 'SCHEMA_FAILED_TO_IMPORT':
92
- message = "Error importing \"".concat(options.file, "\". Original error:\n\n").concat((_options$originalErro = (_options$originalErro2 = options.originalError) === null || _options$originalErro2 === void 0 ? void 0 : _options$originalErro2.message) !== null && _options$originalErro !== void 0 ? _options$originalErro : '**MISSING**');
99
+ message = "Error importing \"".concat(options.file, "\". Original error:\n\n").concat((_options$originalErro2 = (_options$originalErro3 = options.originalError) === null || _options$originalErro3 === void 0 ? void 0 : _options$originalErro3.message) !== null && _options$originalErro2 !== void 0 ? _options$originalErro2 : '**MISSING**');
93
100
  break;
94
101
 
95
102
  case 'BUILD_FAILED':
@@ -97,7 +104,7 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
97
104
  break;
98
105
 
99
106
  case 'FAILED_TO_IMPORT':
100
- message = "Failed to import \"".concat(options.file, "\". Original error:\n\n").concat((_options$originalErro3 = (_options$originalErro4 = options.originalError) === null || _options$originalErro4 === void 0 ? void 0 : _options$originalErro4.message) !== null && _options$originalErro3 !== void 0 ? _options$originalErro3 : '**MISSING**');
107
+ message = (_options$friendlyMess2 = options.friendlyMessage) !== null && _options$friendlyMess2 !== void 0 ? _options$friendlyMess2 : "Failed to import \"".concat(options.file, "\". Original error:\n\n").concat((_options$originalErro4 = (_options$originalErro5 = options.originalError) === null || _options$originalErro5 === void 0 ? void 0 : _options$originalErro5.message) !== null && _options$originalErro4 !== void 0 ? _options$originalErro4 : '**MISSING**');
101
108
  break;
102
109
 
103
110
  case 'LINT_FAILED':
@@ -136,7 +143,7 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
136
143
  break;
137
144
 
138
145
  case 'FILE_EXISTS':
139
- message = 'A fileExists just happened!';
146
+ message = 'A fail already exists.';
140
147
  break;
141
148
 
142
149
  case 'VSCODE_NOT_INSTALLED':
@@ -206,11 +213,11 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
206
213
  break;
207
214
 
208
215
  case 'INVALID_EVENT_CONTRACT':
209
- message = "The event named `".concat(options.fullyQualifiedEventName, "` is not valid. Check ").concat(options.brokenProperty, ". The original error is:\n\n").concat((_options$originalErro5 = options.originalError) === null || _options$originalErro5 === void 0 ? void 0 : _options$originalErro5.message);
216
+ message = "The event named `".concat(options.fullyQualifiedEventName, "` is not valid. Check ").concat(options.brokenProperty, ". The original error is:\n\n").concat((_options$originalErro6 = options.originalError) === null || _options$originalErro6 === void 0 ? void 0 : _options$originalErro6.message);
210
217
  break;
211
218
 
212
219
  case 'BOOT_ERROR':
213
- message = "Booting your skill failed: ".concat((_ref = (_options$friendlyMess = options.friendlyMessage) !== null && _options$friendlyMess !== void 0 ? _options$friendlyMess : (_options$originalErro6 = options.originalError) === null || _options$originalErro6 === void 0 ? void 0 : _options$originalErro6.message) !== null && _ref !== void 0 ? _ref : 'Not sure why, tho.');
220
+ message = "Booting your skill failed: ".concat((_ref = (_options$friendlyMess3 = options.friendlyMessage) !== null && _options$friendlyMess3 !== void 0 ? _options$friendlyMess3 : (_options$originalErro7 = options.originalError) === null || _options$originalErro7 === void 0 ? void 0 : _options$originalErro7.message) !== null && _ref !== void 0 ? _ref : 'Not sure why, tho.');
214
221
  break;
215
222
 
216
223
  case 'DEPLOY_FAILED':
@@ -275,8 +282,7 @@ var SpruceError = /*#__PURE__*/function (_AbstractSpruceError) {
275
282
  message = (0, _get2["default"])((0, _getPrototypeOf2["default"])(SpruceError.prototype), "friendlyMessage", this).call(this);
276
283
  }
277
284
 
278
- var fullMessage = (_options$friendlyMess2 = options.friendlyMessage) !== null && _options$friendlyMess2 !== void 0 ? _options$friendlyMess2 : message;
279
- return fullMessage;
285
+ return message;
280
286
  }
281
287
  }, {
282
288
  key: "cleanStdErr",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","command","file","originalError","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","name","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","fullMessage","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = 'Oh shoot! 🤔'\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fileExists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\tconst fullMessage = options.friendlyMessage ?? message\n\t\treturn fullMessage\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
1
+ {"version":3,"sources":["../../src/errors/SpruceError.ts"],"names":["SpruceError","options","message","code","args","length","join","friendlyMessage","originalError","stack","name","command","file","pattern","cmd","cwd","stderr","cleanStdErr","stdout","schemaId","destination","featureCode","fileName","testName","errorMessage","split","map","line","errors","responseErrors","errorMessages","err","push","fullyQualifiedEventName","brokenProperty","dependencies","d","hint","namesUtil","toPascal","schemaNamespace","fieldName","JSON","stringify","fieldOptions","replace","trim","AbstractSpruceError"],"mappings":"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","sourcesContent":["import AbstractSpruceError from '@sprucelabs/error'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport upperFirst from 'lodash/upperFirst'\nimport ErrorOptions from '#spruce/errors/options.types'\n\nexport default class SpruceError extends AbstractSpruceError<ErrorOptions> {\n\t/** An easy to understand version of the errors */\n\tpublic friendlyMessage(): string {\n\t\tconst { options } = this\n\t\tlet message\n\n\t\tswitch (options?.code) {\n\t\t\tcase 'INVALID_COMMAND':\n\t\t\t\tif (!options.args || options.args.length === 0) {\n\t\t\t\t\tmessage = `Hey friend 👋.. I don't support the command you tried.`\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `Hey friend 👋. I don't know the command: ${options.args.join(\n\t\t\t\t\t\t' '\n\t\t\t\t\t)}.`\n\t\t\t\t}\n\t\t\t\tmessage += ' Try running `spruce --help`'\n\t\t\t\tbreak\n\n\t\t\tcase 'GENERIC':\n\t\t\t\tmessage = options.friendlyMessage ?? 'Oh shoot! 🤔'\n\n\t\t\t\tif (options.originalError) {\n\t\t\t\t\tmessage += `\\n\\n${\n\t\t\t\t\t\toptions.originalError.stack ?? options.originalError.name\n\t\t\t\t\t}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'NOT_IMPLEMENTED':\n\t\t\t\tmessage = ''\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'COMMAND_NOT_IMPLEMENTED':\n\t\t\t\tmessage = `${options.command} has not yet been implemented. ${\n\t\t\t\t\toptions.args ? `Args: ${options.args.join(', ')}` : ''\n\t\t\t\t}`\n\t\t\t\tif (options.friendlyMessage) {\n\t\t\t\t\tmessage += `\\n\\n${options.friendlyMessage}`\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_FAILED_TO_IMPORT':\n\t\t\t\tmessage = `Error importing \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BUILD_FAILED':\n\t\t\t\tmessage = `Build${\n\t\t\t\t\toptions.file ? `ing ${options.file}` : ''\n\t\t\t\t} failed. It looks like you're not running 'yarn watch'. Run it and then run 'spruce all:sync'.`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FAILED_TO_IMPORT':\n\t\t\t\tmessage =\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\t`Failed to import \"${options.file}\". Original error:\\n\\n${\n\t\t\t\t\t\toptions.originalError?.message ?? '**MISSING**'\n\t\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'LINT_FAILED':\n\t\t\t\tmessage = `Lint failed on pattern ${options.pattern}.`\n\t\t\t\tbreak\n\n\t\t\tcase 'EXECUTING_COMMAND_FAILED':\n\t\t\t\tif (this.originalError && this.originalError.message) {\n\t\t\t\t\tmessage = this.originalError.message + '\\n\\n'\n\t\t\t\t} else {\n\t\t\t\t\tmessage = ''\n\t\t\t\t}\n\t\t\t\tmessage += `Executing command failed '${options.cmd}'.\\n\\n`\n\t\t\t\tif (options.cwd) {\n\t\t\t\t\tmessage += `cwd: ${options.cwd}\\n\\n`\n\t\t\t\t}\n\n\t\t\t\tif (options.stderr) {\n\t\t\t\t\tmessage += this.cleanStdErr(options.stderr) + '\\n\\n'\n\t\t\t\t}\n\n\t\t\t\tif (options.stdout) {\n\t\t\t\t\tmessage += options.stdout\n\t\t\t\t}\n\n\t\t\t\tbreak\n\n\t\t\tcase 'CREATE_AUTOLOADER_FAILED':\n\t\t\t\tmessage = 'A Could not create an autoloader just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_EMPTY':\n\t\t\t\tmessage = 'A directory empty just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'FILE_EXISTS':\n\t\t\t\tmessage = 'A fail already exists.'\n\t\t\t\tbreak\n\n\t\t\tcase 'VSCODE_NOT_INSTALLED':\n\t\t\t\tmessage =\n\t\t\t\t\t\"vscode's 'code' is not installed.\\n\\nMac instructions: https://code.visualstudio.com/docs/setup/mac\\n\\nLinux instructions: https://code.visualstudio.com/docs/setup/linux\\n\\nWindows instructions: https://code.visualstudio.com/docs/setup/windows\"\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_EXISTS':\n\t\t\t\tmessage = `A schema called ${options.schemaId} already exists at ${options.destination}`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_ABORTED':\n\t\t\t\tmessage = 'Aborted! See ya later! ✌️'\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_FEATURE_CODE':\n\t\t\t\tmessage = `Oh no! I couldn't find a feature with the code '${options.featureCode}'.`\n\t\t\t\tbreak\n\n\t\t\tcase 'TEST_FAILED':\n\t\t\t\tmessage = `${options.fileName}\\n - ${\n\t\t\t\t\toptions.testName\n\t\t\t\t}\\n\\n${options.errorMessage\n\t\t\t\t\t.split('\\n')\n\t\t\t\t\t.map((line) => ` ${line}`)\n\t\t\t\t\t.join('\\n')}`\n\n\t\t\t\tbreak\n\n\t\t\tcase 'FEATURE_NOT_INSTALLED':\n\t\t\t\tmessage = `\\`${upperFirst(\n\t\t\t\t\toptions.featureCode\n\t\t\t\t)}\\` feature is not installed. Install it first, then try again.`\n\t\t\t\tbreak\n\n\t\t\tcase 'MERCURY_RESPONSE_ERROR': {\n\t\t\t\tconst errors = options.responseErrors\n\t\t\t\tmessage = `Got ${\n\t\t\t\t\terrors.length === 1 ? 'an error' : `${errors.length} errors`\n\t\t\t\t} from the server:\\n\\n`\n\n\t\t\t\tconst errorMessages: string[] = []\n\t\t\t\tfor (const err of errors) {\n\t\t\t\t\terrorMessages.push(err.message)\n\t\t\t\t}\n\n\t\t\t\tmessage += errorMessages.join('\\n')\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'INVALID_TEST_DIRECTORY':\n\t\t\t\tmessage = `You are missing dependencies I need to run tests. Try \\`spruce test.install\\` to reinstall.`\n\t\t\t\tbreak\n\n\t\t\tcase 'DIRECTORY_NOT_SKILL':\n\t\t\t\tmessage = 'The directory you are in is not a skill!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_REGISTERED':\n\t\t\t\tmessage = `Dang! I can't continue until you register your skill! Run \\`spruce login\\` and then \\`spruce register.skill\\` to get the ball rolling!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_ORGANIZATIONS_FOUND':\n\t\t\t\tmessage =\n\t\t\t\t\t\"It looks like you don't have any organizations setup yet. Try `spruce create.organization` first.\"\n\t\t\t\tbreak\n\n\t\t\tcase 'INVALID_EVENT_CONTRACT':\n\t\t\t\tmessage = `The event named \\`${options.fullyQualifiedEventName}\\` is not valid. Check ${options.brokenProperty}. The original error is:\\n\\n${options.originalError?.message}`\n\t\t\t\tbreak\n\n\t\t\tcase 'BOOT_ERROR':\n\t\t\t\tmessage = `Booting your skill failed: ${\n\t\t\t\t\toptions.friendlyMessage ??\n\t\t\t\t\toptions.originalError?.message ??\n\t\t\t\t\t'Not sure why, tho.'\n\t\t\t\t}`\n\t\t\t\tbreak\n\n\t\t\tcase 'DEPLOY_FAILED':\n\t\t\t\tmessage = 'Deploy halted!'\n\t\t\t\tbreak\n\n\t\t\tcase 'MISSING_DEPENDENCIES':\n\t\t\t\tmessage = `Looks like you're missing some dependencies:\\n\\n${options.dependencies\n\t\t\t\t\t.map((d) => `${d.name}: ${d.hint}`)\n\t\t\t\t\t.join('\\n')}`\n\t\t\t\tbreak\n\n\t\t\tcase 'STORE_EXISTS':\n\t\t\t\tmessage = 'A Store exists just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'NOT_LOGGED_IN':\n\t\t\t\tmessage = 'You have to be logged in to do that!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_NOT_FOUND':\n\t\t\t\tmessage = `I couldn't find that skill!`\n\t\t\t\tbreak\n\n\t\t\tcase 'NO_SKILLS_REGISTERED':\n\t\t\t\tmessage = `Whoa! Looks like you haven't registered your skill yet! Try \\`spruce register\\` to get that done!`\n\t\t\t\tbreak\n\n\t\t\tcase 'COMMAND_BLOCKED':\n\t\t\t\tmessage = `${options.command} is blocked! ${options.hint}`\n\t\t\t\tbreak\n\n\t\t\tcase 'SKILL_VIEW_EXISTS':\n\t\t\t\tmessage = `A skill view controller already exists named ${options.name}!`\n\t\t\t\tbreak\n\n\t\t\tcase 'THEME_EXISTS':\n\t\t\t\tmessage = `Yikes! You can't create a new theme. One per skill for now.`\n\t\t\t\tbreak\n\n\t\t\tcase 'CACHE_NOT_ENABLED':\n\t\t\t\tmessage = \"Cache is not enabled, so it can't be disabled!\"\n\t\t\t\tbreak\n\n\t\t\tcase 'DOCKER_NOT_STARTED':\n\t\t\t\tmessage = 'Docker has not been started! Start it and try again!'\n\t\t\t\tbreak\n\n\t\t\tcase 'SCHEMA_TEMPLATE_ITEM_BUILDING_FAILED':\n\t\t\t\tmessage = `Failed to build schema template item for '${namesUtil.toPascal(\n\t\t\t\t\toptions.schemaNamespace\n\t\t\t\t)}.${options.schemaId}'. The field I had an issue on was '${\n\t\t\t\t\toptions.fieldName\n\t\t\t\t}'. It's options are:\\n\\n${JSON.stringify(\n\t\t\t\t\toptions.fieldOptions\n\t\t\t\t)}.\\n\\nChances are you have a circular reference in your schemas. You'll need to extract shared fields to a new file and have your schemas mix those in, vs referencing eath other.`\n\t\t\t\tbreak\n\n\t\t\tcase 'ACTION_CANCELLED':\n\t\t\t\tmessage = 'A Action cancelled just happened!'\n\t\t\t\tbreak\n\n\t\t\tcase 'TRANSPORT_ALREADY_EXISTS':\n\t\t\t\tmessage = `A transport named '${options.name}' already exists!`\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tmessage = super.friendlyMessage()\n\t\t}\n\n\t\treturn message\n\t}\n\n\tprivate cleanStdErr(stderr: string) {\n\t\treturn stderr.replace('warning package.json: No license field', '').trim()\n\t}\n}\n"],"file":"SpruceError.js"}
@@ -57,16 +57,20 @@ var ActionFactory = /*#__PURE__*/function () {
57
57
  var classPath = _spruceSkillUtils.diskUtil.resolvePath(feature.actionsDir, "".concat(_spruceSkillUtils.namesUtil.toPascal(actionCode), "Action"));
58
58
 
59
59
  var Class;
60
+ var originalError;
60
61
 
61
62
  try {
62
63
  Class = require(classPath)["default"]; // eslint-disable-next-line no-empty
63
- } catch (_unused) {} //@ts-ignore
64
+ } catch (err) {
65
+ originalError = err;
66
+ } //@ts-ignore
64
67
 
65
68
 
66
69
  if (!Class) {
67
70
  throw new _SpruceError["default"]({
68
71
  code: 'GENERIC',
69
- friendlyMessage: "I could not find any action named '".concat(actionCode, "' for the ").concat(feature.code, " feature. Make sure it's the default export and extends AbstractAction.")
72
+ friendlyMessage: "I could not find any action named '".concat(actionCode, "' for the ").concat(feature.code, " feature. Make sure it's the default export and extends AbstractAction."),
73
+ originalError: originalError
70
74
  });
71
75
  }
72
76
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/features/ActionFactory.ts"],"names":["ActionFactory","options","blockedCommands","optionOverrides","actionOptions","featureCode","actionCode","actionExecuter","featureInstaller","feature","getFeature","actionsDir","Error","classPath","diskUtil","resolvePath","namesUtil","toPascal","Class","require","SpruceError","code","friendlyMessage","action","parent","execute","actionDecorator","OverrideActionDecorator","ui"],"mappings":";;;;;;;;;;;;;;;;;AACA;;AAEA;;AAWA;;;;;;;;IAYqBA,a;AAKpB,yBAAmBC,OAAnB,EAAyD;AAAA;AAAA;AAAA;AAAA;AACxD,QAAQC,eAAR,GAA+DD,OAA/D,CAAQC,eAAR;AAAA,QAAyBC,eAAzB,GAA+DF,OAA/D,CAAyBE,eAAzB;AAAA,QAA6CC,aAA7C,6CAA+DH,OAA/D;AACA,SAAKG,aAAL,GAAqBA,aAArB;AACA,SAAKF,eAAL,GAAuBA,eAAvB;AACA,SAAKC,eAAL,GAAuBA,eAAvB;AACA;;;;WAED,gBAAgEF,OAAhE,EAKqB;AACpB,UAAQI,WAAR,GACCJ,OADD,CAAQI,WAAR;AAAA,UAAqBC,UAArB,GACCL,OADD,CAAqBK,UAArB;AAAA,UAAiCC,cAAjC,GACCN,OADD,CAAiCM,cAAjC;AAAA,UAAiDC,gBAAjD,GACCP,OADD,CAAiDO,gBAAjD;AAGA,UAAMC,OAAO,GAAGD,gBAAgB,CAACE,UAAjB,CAA4BL,WAA5B,CAAhB;;AAEA,UAAI,CAACI,OAAO,CAACE,UAAb,EAAyB;AACxB,cAAM,IAAIC,KAAJ,gBACGP,WADH,sFAAN;AAGA;;AAED,UAAMQ,SAAS,GAAGC,2BAASC,WAAT,CACjBN,OAAO,CAACE,UADS,YAEdK,4BAAUC,QAAV,CAAmBX,UAAnB,CAFc,YAAlB;;AAKA,UAAIY,KAAJ;;AAEA,UAAI;AACHA,QAAAA,KAAK,GAAGC,OAAO,CAACN,SAAD,CAAP,WAAR,CADG,CAEH;AACA,OAHD,CAGE,gBAAM,CAAE,CAtBU,CAwBpB;;;AACA,UAAI,CAACK,KAAL,EAAY;AACX,cAAM,IAAIE,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,+CAAwChB,UAAxC,uBAA+DG,OAAO,CAACY,IAAvE;AAFM,SAAhB,CAAN;AAIA;;AAED,UAAME,MAAM,GAAG,IAAIL,KAAJ,iCACX,KAAKd,aADM;AAEdG,QAAAA,cAAc,EAAdA,cAFc;AAGdiB,QAAAA,MAAM,EAAEf,OAHM;AAIdD,QAAAA,gBAAgB,EAAhBA;AAJc,SAAf;;AAOA,UAAI,CAACe,MAAL,EAAa;AACZ,cAAM,IAAIH,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,oCAA6BhB,UAA7B,wBAAqDG,OAAO,CAACY,IAA7D;AAFM,SAAhB,CAAN;AAIA;;AAED,UAAI,CAACE,MAAM,CAACE,OAAZ,EAAqB;AACpB,cAAM,IAAIL,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,8BAAuBb,OAAO,CAACY,IAA/B,yBAAkDf,UAAlD;AAFM,SAAhB,CAAN;AAIA;;AAED,UAAMoB,eAAe,GAAG,IAAIC,mCAAJ,CAA4B;AACnDJ,QAAAA,MAAM,EAANA,MADmD;AAEnDd,QAAAA,OAAO,EAAPA,OAFmD;AAGnDP,QAAAA,eAAe,EAAE,KAAKA,eAH6B;AAInDC,QAAAA,eAAe,EAAE,KAAKA,eAJ6B;AAKnDyB,QAAAA,EAAE,EAAE,KAAKxB,aAAL,CAAmBwB,EAL4B;AAMnDtB,QAAAA,UAAU,EAAVA;AANmD,OAA5B,CAAxB;AASA,aAAOoB,eAAP;AACA","sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport {\n\tFeatureAction,\n\tActionOptions,\n\tFeatureCode,\n} from '../features/features.types'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractAction from './AbstractAction'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport OverrideActionDecorator from './OverrideActionDecorator'\n\nexport interface FeatureActionFactoryOptions\n\textends Omit<\n\t\tActionOptions,\n\t\t'parent' | 'actionExecuter' | 'featureInstaller'\n\t> {\n\temitter: GlobalEmitter\n\tblockedCommands?: BlockedCommands\n\toptionOverrides?: OptionOverrides\n}\n\nexport default class ActionFactory {\n\tprivate actionOptions: FeatureActionFactoryOptions\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\n\tpublic constructor(options: FeatureActionFactoryOptions) {\n\t\tconst { blockedCommands, optionOverrides, ...actionOptions } = options\n\t\tthis.actionOptions = actionOptions\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t}\n\n\tpublic Action<F extends FeatureCode, S extends Schema = Schema>(options: {\n\t\tfeatureCode: F\n\t\tactionCode: string\n\t\tactionExecuter: ActionExecuter\n\t\tfeatureInstaller: FeatureInstaller\n\t}): FeatureAction<S> {\n\t\tconst { featureCode, actionCode, actionExecuter, featureInstaller } =\n\t\t\toptions\n\n\t\tconst feature = featureInstaller.getFeature(featureCode)\n\n\t\tif (!feature.actionsDir) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your ${featureCode} features needs \\`public actionsDir = diskUtil.resolvePath(__dirname, 'actions')\\``\n\t\t\t)\n\t\t}\n\n\t\tconst classPath = diskUtil.resolvePath(\n\t\t\tfeature.actionsDir,\n\t\t\t`${namesUtil.toPascal(actionCode)}Action`\n\t\t)\n\n\t\tlet Class: new (options: ActionOptions) => AbstractAction | undefined\n\n\t\ttry {\n\t\t\tClass = require(classPath).default\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\t//@ts-ignore\n\t\tif (!Class) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not find any action named '${actionCode}' for the ${feature.code} feature. Make sure it's the default export and extends AbstractAction.`,\n\t\t\t})\n\t\t}\n\n\t\tconst action = new Class({\n\t\t\t...this.actionOptions,\n\t\t\tactionExecuter,\n\t\t\tparent: feature,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tif (!action) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not instantiate ${actionCode} action on ${feature.code} feature.`,\n\t\t\t})\n\t\t}\n\n\t\tif (!action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `It looks like the ${feature.code} feature's '${actionCode}' action does not properly extend AbstractAction.`,\n\t\t\t})\n\t\t}\n\n\t\tconst actionDecorator = new OverrideActionDecorator({\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tblockedCommands: this.blockedCommands,\n\t\t\toptionOverrides: this.optionOverrides,\n\t\t\tui: this.actionOptions.ui,\n\t\t\tactionCode,\n\t\t})\n\n\t\treturn actionDecorator as FeatureAction<S>\n\t}\n}\n"],"file":"ActionFactory.js"}
1
+ {"version":3,"sources":["../../src/features/ActionFactory.ts"],"names":["ActionFactory","options","blockedCommands","optionOverrides","actionOptions","featureCode","actionCode","actionExecuter","featureInstaller","feature","getFeature","actionsDir","Error","classPath","diskUtil","resolvePath","namesUtil","toPascal","Class","originalError","require","err","SpruceError","code","friendlyMessage","action","parent","execute","actionDecorator","OverrideActionDecorator","ui"],"mappings":";;;;;;;;;;;;;;;;;AACA;;AAEA;;AAWA;;;;;;;;IAYqBA,a;AAKpB,yBAAmBC,OAAnB,EAAyD;AAAA;AAAA;AAAA;AAAA;AACxD,QAAQC,eAAR,GAA+DD,OAA/D,CAAQC,eAAR;AAAA,QAAyBC,eAAzB,GAA+DF,OAA/D,CAAyBE,eAAzB;AAAA,QAA6CC,aAA7C,6CAA+DH,OAA/D;AACA,SAAKG,aAAL,GAAqBA,aAArB;AACA,SAAKF,eAAL,GAAuBA,eAAvB;AACA,SAAKC,eAAL,GAAuBA,eAAvB;AACA;;;;WAED,gBAAgEF,OAAhE,EAKqB;AACpB,UAAQI,WAAR,GACCJ,OADD,CAAQI,WAAR;AAAA,UAAqBC,UAArB,GACCL,OADD,CAAqBK,UAArB;AAAA,UAAiCC,cAAjC,GACCN,OADD,CAAiCM,cAAjC;AAAA,UAAiDC,gBAAjD,GACCP,OADD,CAAiDO,gBAAjD;AAGA,UAAMC,OAAO,GAAGD,gBAAgB,CAACE,UAAjB,CAA4BL,WAA5B,CAAhB;;AAEA,UAAI,CAACI,OAAO,CAACE,UAAb,EAAyB;AACxB,cAAM,IAAIC,KAAJ,gBACGP,WADH,sFAAN;AAGA;;AAED,UAAMQ,SAAS,GAAGC,2BAASC,WAAT,CACjBN,OAAO,CAACE,UADS,YAEdK,4BAAUC,QAAV,CAAmBX,UAAnB,CAFc,YAAlB;;AAKA,UAAIY,KAAJ;AACA,UAAIC,aAAJ;;AAEA,UAAI;AACHD,QAAAA,KAAK,GAAGE,OAAO,CAACP,SAAD,CAAP,WAAR,CADG,CAEH;AACA,OAHD,CAGE,OAAOQ,GAAP,EAAiB;AAClBF,QAAAA,aAAa,GAAGE,GAAhB;AACA,OAzBmB,CA2BpB;;;AACA,UAAI,CAACH,KAAL,EAAY;AACX,cAAM,IAAII,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,+CAAwClB,UAAxC,uBAA+DG,OAAO,CAACc,IAAvE,4EAFM;AAGrBJ,UAAAA,aAAa,EAAbA;AAHqB,SAAhB,CAAN;AAKA;;AAED,UAAMM,MAAM,GAAG,IAAIP,KAAJ,iCACX,KAAKd,aADM;AAEdG,QAAAA,cAAc,EAAdA,cAFc;AAGdmB,QAAAA,MAAM,EAAEjB,OAHM;AAIdD,QAAAA,gBAAgB,EAAhBA;AAJc,SAAf;;AAOA,UAAI,CAACiB,MAAL,EAAa;AACZ,cAAM,IAAIH,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,oCAA6BlB,UAA7B,wBAAqDG,OAAO,CAACc,IAA7D;AAFM,SAAhB,CAAN;AAIA;;AAED,UAAI,CAACE,MAAM,CAACE,OAAZ,EAAqB;AACpB,cAAM,IAAIL,uBAAJ,CAAgB;AACrBC,UAAAA,IAAI,EAAE,SADe;AAErBC,UAAAA,eAAe,8BAAuBf,OAAO,CAACc,IAA/B,yBAAkDjB,UAAlD;AAFM,SAAhB,CAAN;AAIA;;AAED,UAAMsB,eAAe,GAAG,IAAIC,mCAAJ,CAA4B;AACnDJ,QAAAA,MAAM,EAANA,MADmD;AAEnDhB,QAAAA,OAAO,EAAPA,OAFmD;AAGnDP,QAAAA,eAAe,EAAE,KAAKA,eAH6B;AAInDC,QAAAA,eAAe,EAAE,KAAKA,eAJ6B;AAKnD2B,QAAAA,EAAE,EAAE,KAAK1B,aAAL,CAAmB0B,EAL4B;AAMnDxB,QAAAA,UAAU,EAAVA;AANmD,OAA5B,CAAxB;AASA,aAAOsB,eAAP;AACA","sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport {\n\tFeatureAction,\n\tActionOptions,\n\tFeatureCode,\n} from '../features/features.types'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractAction from './AbstractAction'\nimport ActionExecuter from './ActionExecuter'\nimport FeatureInstaller from './FeatureInstaller'\nimport OverrideActionDecorator from './OverrideActionDecorator'\n\nexport interface FeatureActionFactoryOptions\n\textends Omit<\n\t\tActionOptions,\n\t\t'parent' | 'actionExecuter' | 'featureInstaller'\n\t> {\n\temitter: GlobalEmitter\n\tblockedCommands?: BlockedCommands\n\toptionOverrides?: OptionOverrides\n}\n\nexport default class ActionFactory {\n\tprivate actionOptions: FeatureActionFactoryOptions\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\n\tpublic constructor(options: FeatureActionFactoryOptions) {\n\t\tconst { blockedCommands, optionOverrides, ...actionOptions } = options\n\t\tthis.actionOptions = actionOptions\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t}\n\n\tpublic Action<F extends FeatureCode, S extends Schema = Schema>(options: {\n\t\tfeatureCode: F\n\t\tactionCode: string\n\t\tactionExecuter: ActionExecuter\n\t\tfeatureInstaller: FeatureInstaller\n\t}): FeatureAction<S> {\n\t\tconst { featureCode, actionCode, actionExecuter, featureInstaller } =\n\t\t\toptions\n\n\t\tconst feature = featureInstaller.getFeature(featureCode)\n\n\t\tif (!feature.actionsDir) {\n\t\t\tthrow new Error(\n\t\t\t\t`Your ${featureCode} features needs \\`public actionsDir = diskUtil.resolvePath(__dirname, 'actions')\\``\n\t\t\t)\n\t\t}\n\n\t\tconst classPath = diskUtil.resolvePath(\n\t\t\tfeature.actionsDir,\n\t\t\t`${namesUtil.toPascal(actionCode)}Action`\n\t\t)\n\n\t\tlet Class: new (options: ActionOptions) => AbstractAction | undefined\n\t\tlet originalError: Error | undefined\n\n\t\ttry {\n\t\t\tClass = require(classPath).default\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (err: any) {\n\t\t\toriginalError = err\n\t\t}\n\n\t\t//@ts-ignore\n\t\tif (!Class) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not find any action named '${actionCode}' for the ${feature.code} feature. Make sure it's the default export and extends AbstractAction.`,\n\t\t\t\toriginalError,\n\t\t\t})\n\t\t}\n\n\t\tconst action = new Class({\n\t\t\t...this.actionOptions,\n\t\t\tactionExecuter,\n\t\t\tparent: feature,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tif (!action) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `I could not instantiate ${actionCode} action on ${feature.code} feature.`,\n\t\t\t})\n\t\t}\n\n\t\tif (!action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `It looks like the ${feature.code} feature's '${actionCode}' action does not properly extend AbstractAction.`,\n\t\t\t})\n\t\t}\n\n\t\tconst actionDecorator = new OverrideActionDecorator({\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tblockedCommands: this.blockedCommands,\n\t\t\toptionOverrides: this.optionOverrides,\n\t\t\tui: this.actionOptions.ui,\n\t\t\tactionCode,\n\t\t})\n\n\t\treturn actionDecorator as FeatureAction<S>\n\t}\n}\n"],"file":"ActionFactory.js"}
@@ -25,6 +25,7 @@ export default class EventFeature extends AbstractFeature {
25
25
  afterPackageInstall(): Promise<{}>;
26
26
  private handleDidExecute;
27
27
  private handleWillExecute;
28
+ private appendRemoteToResultsOrPrompt;
28
29
  private handleDidFetchSchemas;
29
30
  getEventContractBuilder(): EventContractBuilder;
30
31
  hasBeenSynced(): boolean;
@@ -146,7 +146,7 @@ var EventFeature = /*#__PURE__*/function (_AbstractFeature) {
146
146
  key: "handleWillExecute",
147
147
  value: function () {
148
148
  var _handleWillExecute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(payload) {
149
- var featureCode, actionCode, isInstalled, remote, r, results;
149
+ var featureCode, actionCode, isInstalled, settings;
150
150
  return _regenerator["default"].wrap(function _callee3$(_context3) {
151
151
  while (1) {
152
152
  switch (_context3.prev = _context3.next) {
@@ -158,101 +158,131 @@ var EventFeature = /*#__PURE__*/function (_AbstractFeature) {
158
158
  case 3:
159
159
  isInstalled = _context3.sent;
160
160
 
161
+ if (featureCode === 'node' || featureCode === 'upgrade') {
162
+ settings = this.Service('eventSettings');
163
+ settings.clearListenerCache();
164
+ }
165
+
161
166
  if (!(isInstalled && (featureCode === 'event' || featureCode === 'eventContract') && actionCode !== 'setRemote')) {
162
- _context3.next = 19;
167
+ _context3.next = 7;
163
168
  break;
164
169
  }
165
170
 
171
+ return _context3.abrupt("return", this.appendRemoteToResultsOrPrompt());
172
+
173
+ case 7:
174
+ return _context3.abrupt("return", {});
175
+
176
+ case 8:
177
+ case "end":
178
+ return _context3.stop();
179
+ }
180
+ }
181
+ }, _callee3, this);
182
+ }));
183
+
184
+ function handleWillExecute(_x2) {
185
+ return _handleWillExecute.apply(this, arguments);
186
+ }
187
+
188
+ return handleWillExecute;
189
+ }()
190
+ }, {
191
+ key: "appendRemoteToResultsOrPrompt",
192
+ value: function () {
193
+ var _appendRemoteToResultsOrPrompt = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
194
+ var remote, r, results;
195
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
196
+ while (1) {
197
+ switch (_context4.prev = _context4.next) {
198
+ case 0:
166
199
  remote = this.Service('remote');
167
200
  r = remote.getRemote();
168
201
 
169
202
  if (r) {
170
- _context3.next = 18;
203
+ _context4.next = 13;
171
204
  break;
172
205
  }
173
206
 
174
207
  if (_TerminalInterface["default"].doesSupportColor()) {
175
- _context3.next = 10;
208
+ _context4.next = 5;
176
209
  break;
177
210
  }
178
211
 
179
212
  throw new Error("Dang! I couldn't find env.HOST. Once that is set, lets try again!");
180
213
 
181
- case 10:
214
+ case 5:
182
215
  this.ui.stopLoading();
183
216
  this.ui.renderLine("Uh oh! It looks like you haven't configured your remote! We gotta do that.");
184
- _context3.next = 14;
217
+ _context4.next = 9;
185
218
  return this.Action('event', 'setRemote').execute({});
186
219
 
187
- case 14:
188
- results = _context3.sent;
189
- return _context3.abrupt("return", results);
220
+ case 9:
221
+ results = _context4.sent;
222
+ return _context4.abrupt("return", results);
190
223
 
191
- case 18:
192
- return _context3.abrupt("return", {
224
+ case 13:
225
+ return _context4.abrupt("return", {
193
226
  summaryLines: ["Remote: ".concat(r), "Host: ".concat(remote.getHost())]
194
227
  });
195
228
 
196
- case 19:
197
- return _context3.abrupt("return", {});
198
-
199
- case 20:
229
+ case 14:
200
230
  case "end":
201
- return _context3.stop();
231
+ return _context4.stop();
202
232
  }
203
233
  }
204
- }, _callee3, this);
234
+ }, _callee4, this);
205
235
  }));
206
236
 
207
- function handleWillExecute(_x2) {
208
- return _handleWillExecute.apply(this, arguments);
237
+ function appendRemoteToResultsOrPrompt() {
238
+ return _appendRemoteToResultsOrPrompt.apply(this, arguments);
209
239
  }
210
240
 
211
- return handleWillExecute;
241
+ return appendRemoteToResultsOrPrompt;
212
242
  }()
213
243
  }, {
214
244
  key: "handleDidFetchSchemas",
215
245
  value: function () {
216
- var _handleDidFetchSchemas = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(payload) {
246
+ var _handleDidFetchSchemas = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(payload) {
217
247
  var isInstalled, lastSync, _payload$schemas, _uniqueSchemas$schema, writer, uniqueSchemas;
218
248
 
219
- return _regenerator["default"].wrap(function _callee4$(_context4) {
249
+ return _regenerator["default"].wrap(function _callee5$(_context5) {
220
250
  while (1) {
221
- switch (_context4.prev = _context4.next) {
251
+ switch (_context5.prev = _context5.next) {
222
252
  case 0:
223
- _context4.next = 2;
253
+ _context5.next = 2;
224
254
  return this.featureInstaller.isInstalled(this.code);
225
255
 
226
256
  case 2:
227
- isInstalled = _context4.sent;
257
+ isInstalled = _context5.sent;
228
258
  lastSync = this.Service('eventSettings').getLastSyncOptions();
229
259
 
230
260
  if (!(lastSync && isInstalled)) {
231
- _context4.next = 10;
261
+ _context5.next = 10;
232
262
  break;
233
263
  }
234
264
 
235
265
  writer = this.getEventContractBuilder();
236
- _context4.next = 8;
266
+ _context5.next = 8;
237
267
  return writer.fetchContractsAndGenerateUniqueSchemas((_payload$schemas = payload.schemas) !== null && _payload$schemas !== void 0 ? _payload$schemas : [], lastSync.shouldSyncOnlyCoreEvents);
238
268
 
239
269
  case 8:
240
- uniqueSchemas = _context4.sent;
241
- return _context4.abrupt("return", {
270
+ uniqueSchemas = _context5.sent;
271
+ return _context5.abrupt("return", {
242
272
  schemas: (_uniqueSchemas$schema = uniqueSchemas.schemas) !== null && _uniqueSchemas$schema !== void 0 ? _uniqueSchemas$schema : []
243
273
  });
244
274
 
245
275
  case 10:
246
- return _context4.abrupt("return", {
276
+ return _context5.abrupt("return", {
247
277
  schemas: []
248
278
  });
249
279
 
250
280
  case 11:
251
281
  case "end":
252
- return _context4.stop();
282
+ return _context5.stop();
253
283
  }
254
284
  }
255
- }, _callee4, this);
285
+ }, _callee5, this);
256
286
  }));
257
287
 
258
288
  function handleDidFetchSchemas(_x3) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/event/EventFeature.ts"],"names":["EventFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidFetchSchemas","bind","handleWillExecute","handleDidExecute","createDir","cwd","payload","featureCode","actionCode","featureInstaller","isInstalled","Action","execute","remote","Service","r","getRemote","TerminalInterface","doesSupportColor","Error","ui","stopLoading","renderLine","results","summaryLines","getHost","lastSync","getLastSyncOptions","writer","getEventContractBuilder","fetchContractsAndGenerateUniqueSchemas","schemas","shouldSyncOnlyCoreEvents","uniqueSchemas","contractBuilder","EventContractBuilder","optionsSchema","syncEventActionSchema","eventGenerator","Writer","eventStore","Store","skillStore","doesHashSprucePathExist","hasCombinedContractBeenWritten","AbstractFeature"],"mappings":"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","sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport syncEventActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/syncEventOptions.schema'\nimport TerminalInterface from '../../interfaces/TerminalInterface'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n} from '../AbstractFeature'\nimport { FeatureActionResponse, FeatureCode } from '../features.types'\nimport EventContractBuilder from './builders/EventContractBuilder'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tevent: EventFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tevent: undefined\n\t}\n}\n\nexport default class EventFeature extends AbstractFeature {\n\tpublic code: FeatureCode = 'event'\n\tpublic nameReadable = 'Events'\n\tpublic description = 'Connect to the Mercury Event Engine.'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t]\n\tpublic packageDependencies = [\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-client',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-types',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-event-utils',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-event-plugin',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-core-events',\n\t\t},\n\t]\n\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = []\n\tprivate contractBuilder?: EventContractBuilder\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'schema.did-fetch-schemas',\n\t\t\tthis.handleDidFetchSchemas.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecute.bind(this)\n\t\t)\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tdiskUtil.createDir(diskUtil.resolvePath(this.cwd, 'src', 'events'))\n\t\treturn {}\n\t}\n\n\tprivate async handleDidExecute(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('event')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\treturn this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}): Promise<FeatureActionResponse> {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('event')\n\n\t\tif (\n\t\t\tisInstalled &&\n\t\t\t(featureCode === 'event' || featureCode === 'eventContract') &&\n\t\t\tactionCode !== 'setRemote'\n\t\t) {\n\t\t\tconst remote = this.Service('remote')\n\t\t\tconst r = remote.getRemote()\n\n\t\t\tif (!r) {\n\t\t\t\tif (!TerminalInterface.doesSupportColor()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Dang! I couldn't find env.HOST. Once that is set, lets try again!`\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t\tthis.ui.renderLine(\n\t\t\t\t\t`Uh oh! It looks like you haven't configured your remote! We gotta do that.`\n\t\t\t\t)\n\n\t\t\t\tconst results = await this.Action('event', 'setRemote').execute({})\n\n\t\t\t\treturn results\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tsummaryLines: [`Remote: ${r}`, `Host: ${remote.getHost()}`],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tprivate async handleDidFetchSchemas(payload: { schemas?: Schema[] | null }) {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled(this.code)\n\n\t\tconst lastSync = this.Service('eventSettings').getLastSyncOptions()\n\n\t\tif (lastSync && isInstalled) {\n\t\t\tconst writer = this.getEventContractBuilder()\n\n\t\t\tconst uniqueSchemas = await writer.fetchContractsAndGenerateUniqueSchemas(\n\t\t\t\tpayload.schemas ?? [],\n\t\t\t\tlastSync.shouldSyncOnlyCoreEvents\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tschemas: uniqueSchemas.schemas ?? [],\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tschemas: [],\n\t\t}\n\t}\n\n\tpublic getEventContractBuilder() {\n\t\tif (!this.contractBuilder) {\n\t\t\tthis.contractBuilder = new EventContractBuilder({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\toptionsSchema: syncEventActionSchema,\n\t\t\t\tui: this.ui,\n\t\t\t\teventGenerator: this.Writer('event'),\n\t\t\t\teventStore: this.Store('event'),\n\t\t\t\tskillStore: this.Store('skill'),\n\t\t\t})\n\t\t}\n\n\t\treturn this.contractBuilder\n\t}\n\n\tpublic hasBeenSynced() {\n\t\tif (diskUtil.doesHashSprucePathExist(this.cwd)) {\n\t\t\tconst writer = this.Writer('event')\n\n\t\t\treturn writer.hasCombinedContractBeenWritten(this.cwd)\n\t\t}\n\n\t\treturn false\n\t}\n}\n"],"file":"EventFeature.js"}
1
+ {"version":3,"sources":["../../../src/features/event/EventFeature.ts"],"names":["EventFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidFetchSchemas","bind","handleWillExecute","handleDidExecute","createDir","cwd","payload","featureCode","actionCode","featureInstaller","isInstalled","Action","execute","settings","Service","clearListenerCache","appendRemoteToResultsOrPrompt","remote","r","getRemote","TerminalInterface","doesSupportColor","Error","ui","stopLoading","renderLine","results","summaryLines","getHost","lastSync","getLastSyncOptions","writer","getEventContractBuilder","fetchContractsAndGenerateUniqueSchemas","schemas","shouldSyncOnlyCoreEvents","uniqueSchemas","contractBuilder","EventContractBuilder","optionsSchema","syncEventActionSchema","eventGenerator","Writer","eventStore","Store","skillStore","doesHashSprucePathExist","hasCombinedContractBeenWritten","AbstractFeature"],"mappings":"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","sourcesContent":["import { Schema } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport syncEventActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/syncEventOptions.schema'\nimport TerminalInterface from '../../interfaces/TerminalInterface'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n} from '../AbstractFeature'\nimport { FeatureActionResponse, FeatureCode } from '../features.types'\nimport EventContractBuilder from './builders/EventContractBuilder'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tevent: EventFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tevent: undefined\n\t}\n}\n\nexport default class EventFeature extends AbstractFeature {\n\tpublic code: FeatureCode = 'event'\n\tpublic nameReadable = 'Events'\n\tpublic description = 'Connect to the Mercury Event Engine.'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t]\n\tpublic packageDependencies = [\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-client',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-types',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-event-utils',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-event-plugin',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/mercury-core-events',\n\t\t},\n\t]\n\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = []\n\tprivate contractBuilder?: EventContractBuilder\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'schema.did-fetch-schemas',\n\t\t\tthis.handleDidFetchSchemas.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecute.bind(this)\n\t\t)\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tdiskUtil.createDir(diskUtil.resolvePath(this.cwd, 'src', 'events'))\n\t\treturn {}\n\t}\n\n\tprivate async handleDidExecute(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('event')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\treturn this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}): Promise<FeatureActionResponse> {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('event')\n\n\t\tif (featureCode === 'node' || featureCode === 'upgrade') {\n\t\t\tconst settings = this.Service('eventSettings')\n\t\t\tsettings.clearListenerCache()\n\t\t}\n\n\t\tif (\n\t\t\tisInstalled &&\n\t\t\t(featureCode === 'event' || featureCode === 'eventContract') &&\n\t\t\tactionCode !== 'setRemote'\n\t\t) {\n\t\t\treturn this.appendRemoteToResultsOrPrompt()\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tprivate async appendRemoteToResultsOrPrompt(): Promise<FeatureActionResponse> {\n\t\tconst remote = this.Service('remote')\n\t\tconst r = remote.getRemote()\n\n\t\tif (!r) {\n\t\t\tif (!TerminalInterface.doesSupportColor()) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Dang! I couldn't find env.HOST. Once that is set, lets try again!`\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tthis.ui.stopLoading()\n\t\t\tthis.ui.renderLine(\n\t\t\t\t`Uh oh! It looks like you haven't configured your remote! We gotta do that.`\n\t\t\t)\n\n\t\t\tconst results = await this.Action('event', 'setRemote').execute({})\n\n\t\t\treturn results\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tsummaryLines: [`Remote: ${r}`, `Host: ${remote.getHost()}`],\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async handleDidFetchSchemas(payload: { schemas?: Schema[] | null }) {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled(this.code)\n\n\t\tconst lastSync = this.Service('eventSettings').getLastSyncOptions()\n\n\t\tif (lastSync && isInstalled) {\n\t\t\tconst writer = this.getEventContractBuilder()\n\n\t\t\tconst uniqueSchemas = await writer.fetchContractsAndGenerateUniqueSchemas(\n\t\t\t\tpayload.schemas ?? [],\n\t\t\t\tlastSync.shouldSyncOnlyCoreEvents\n\t\t\t)\n\n\t\t\treturn {\n\t\t\t\tschemas: uniqueSchemas.schemas ?? [],\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tschemas: [],\n\t\t}\n\t}\n\n\tpublic getEventContractBuilder() {\n\t\tif (!this.contractBuilder) {\n\t\t\tthis.contractBuilder = new EventContractBuilder({\n\t\t\t\tcwd: this.cwd,\n\t\t\t\toptionsSchema: syncEventActionSchema,\n\t\t\t\tui: this.ui,\n\t\t\t\teventGenerator: this.Writer('event'),\n\t\t\t\teventStore: this.Store('event'),\n\t\t\t\tskillStore: this.Store('skill'),\n\t\t\t})\n\t\t}\n\n\t\treturn this.contractBuilder\n\t}\n\n\tpublic hasBeenSynced() {\n\t\tif (diskUtil.doesHashSprucePathExist(this.cwd)) {\n\t\t\tconst writer = this.Writer('event')\n\n\t\t\treturn writer.hasCombinedContractBeenWritten(this.cwd)\n\t\t}\n\n\t\treturn false\n\t}\n}\n"],"file":"EventFeature.js"}
@@ -6,4 +6,7 @@ export default class EventSettingsService {
6
6
  setLastSyncOptions(options: {
7
7
  shouldSyncOnlyCoreEvents?: boolean | null;
8
8
  }): void;
9
+ setListenerCache(value: Record<string, any>): void;
10
+ clearListenerCache(): void;
11
+ getListenerCache(): any;
9
12
  }
@@ -30,6 +30,21 @@ var EventSettingsService = /*#__PURE__*/function () {
30
30
  value: function setLastSyncOptions(options) {
31
31
  this.settings.set('events.lastSync', options);
32
32
  }
33
+ }, {
34
+ key: "setListenerCache",
35
+ value: function setListenerCache(value) {
36
+ this.settings.set('events.listenerCacheKeys', value);
37
+ }
38
+ }, {
39
+ key: "clearListenerCache",
40
+ value: function clearListenerCache() {
41
+ this.settings.unset('events.listenerCacheKeys');
42
+ }
43
+ }, {
44
+ key: "getListenerCache",
45
+ value: function getListenerCache() {
46
+ return this.settings.get('events.listenerCacheKeys');
47
+ }
33
48
  }]);
34
49
  return EventSettingsService;
35
50
  }();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/event/services/EventSettingsService.ts"],"names":["EventSettingsService","settings","get","options","set"],"mappings":";;;;;;;;;;;;;;;IAEqBA,oB;AAEpB,gCAAmBC,QAAnB,EAA8C;AAAA;AAAA;AAC7C,SAAKA,QAAL,GAAgBA,QAAhB;AACA;;;;WAED,8BAA4B;AAC3B,aAAO,KAAKA,QAAL,CAAcC,GAAd,CAAkB,iBAAlB,CAAP;AACA;;;WAED,4BAA0BC,OAA1B,EAEG;AACF,WAAKF,QAAL,CAAcG,GAAd,CAAkB,iBAAlB,EAAqCD,OAArC;AACA","sourcesContent":["import { SettingsService } from '@sprucelabs/spruce-skill-utils'\n\nexport default class EventSettingsService {\n\tprivate settings: SettingsService<string>\n\tpublic constructor(settings: SettingsService) {\n\t\tthis.settings = settings\n\t}\n\n\tpublic getLastSyncOptions() {\n\t\treturn this.settings.get('events.lastSync')\n\t}\n\n\tpublic setLastSyncOptions(options: {\n\t\tshouldSyncOnlyCoreEvents?: boolean | null\n\t}) {\n\t\tthis.settings.set('events.lastSync', options)\n\t}\n}\n"],"file":"EventSettingsService.js"}
1
+ {"version":3,"sources":["../../../../src/features/event/services/EventSettingsService.ts"],"names":["EventSettingsService","settings","get","options","set","value","unset"],"mappings":";;;;;;;;;;;;;;;IAEqBA,oB;AAEpB,gCAAmBC,QAAnB,EAA8C;AAAA;AAAA;AAC7C,SAAKA,QAAL,GAAgBA,QAAhB;AACA;;;;WAED,8BAA4B;AAC3B,aAAO,KAAKA,QAAL,CAAcC,GAAd,CAAkB,iBAAlB,CAAP;AACA;;;WAED,4BAA0BC,OAA1B,EAEG;AACF,WAAKF,QAAL,CAAcG,GAAd,CAAkB,iBAAlB,EAAqCD,OAArC;AACA;;;WAED,0BAAwBE,KAAxB,EAAoD;AACnD,WAAKJ,QAAL,CAAcG,GAAd,CAAkB,0BAAlB,EAA8CC,KAA9C;AACA;;;WAED,8BAA4B;AAC3B,WAAKJ,QAAL,CAAcK,KAAd,CAAoB,0BAApB;AACA;;;WAED,4BAA0B;AACzB,aAAO,KAAKL,QAAL,CAAcC,GAAd,CAAkB,0BAAlB,CAAP;AACA","sourcesContent":["import { SettingsService } from '@sprucelabs/spruce-skill-utils'\n\nexport default class EventSettingsService {\n\tprivate settings: SettingsService<string>\n\tpublic constructor(settings: SettingsService) {\n\t\tthis.settings = settings\n\t}\n\n\tpublic getLastSyncOptions() {\n\t\treturn this.settings.get('events.lastSync')\n\t}\n\n\tpublic setLastSyncOptions(options: {\n\t\tshouldSyncOnlyCoreEvents?: boolean | null\n\t}) {\n\t\tthis.settings.set('events.lastSync', options)\n\t}\n\n\tpublic setListenerCache(value: Record<string, any>) {\n\t\tthis.settings.set('events.listenerCacheKeys', value)\n\t}\n\n\tpublic clearListenerCache() {\n\t\tthis.settings.unset('events.listenerCacheKeys')\n\t}\n\n\tpublic getListenerCache() {\n\t\treturn this.settings.get('events.listenerCacheKeys')\n\t}\n}\n"],"file":"EventSettingsService.js"}
package/package.json CHANGED
@@ -5,10 +5,19 @@
5
5
  "access": "public"
6
6
  },
7
7
  "skill": {
8
- "namespace": "spruce-cli"
8
+ "namespace": "spruce-cli",
9
+ "upgradeIgnoreList": [
10
+ "emphasize",
11
+ "gifwrap",
12
+ "globby",
13
+ "terminal-kit",
14
+ "terminal-image",
15
+ "commander",
16
+ "ora"
17
+ ]
9
18
  },
10
19
  "license": "MIT",
11
- "version": "14.21.2",
20
+ "version": "14.21.6",
12
21
  "bin": {
13
22
  "spruce": "./build/index.js"
14
23
  },
@@ -62,33 +71,35 @@
62
71
  "watch.tsc": "tsc -w --sourceMap"
63
72
  },
64
73
  "dependencies": {
65
- "@babel/runtime": "^7.14.8",
66
- "@jest/reporters": "^27.0.6",
67
- "@sprucelabs/error": "latest",
68
- "@sprucelabs/heartwood-view-controllers": "latest",
69
- "@sprucelabs/jest-json-reporter": "latest",
70
- "@sprucelabs/mercury-client": "latest",
71
- "@sprucelabs/mercury-event-emitter": "latest",
72
- "@sprucelabs/mercury-types": "latest",
73
- "@sprucelabs/schema": "latest",
74
- "@sprucelabs/spruce-core-schemas": "latest",
75
- "@sprucelabs/spruce-event-plugin": "latest",
76
- "@sprucelabs/spruce-event-utils": "latest",
77
- "@sprucelabs/spruce-skill-booter": "latest",
78
- "@sprucelabs/spruce-skill-utils": "latest",
79
- "@sprucelabs/spruce-templates": "^14.21.2",
80
- "cfonts": "^2.9.3",
74
+ "@babel/cli": "^7.15.7",
75
+ "@babel/plugin-proposal-decorators": "^7.15.4",
76
+ "@babel/runtime": "^7.15.4",
77
+ "@jest/reporters": "^27.2.4",
78
+ "@sprucelabs/error": "^5.0.142",
79
+ "@sprucelabs/heartwood-view-controllers": "^33.0.412",
80
+ "@sprucelabs/jest-json-reporter": "^6.0.122",
81
+ "@sprucelabs/mercury-client": "^16.10.143",
82
+ "@sprucelabs/mercury-event-emitter": "^16.10.143",
83
+ "@sprucelabs/mercury-types": "^26.1.247",
84
+ "@sprucelabs/schema": "^25.3.189",
85
+ "@sprucelabs/spruce-core-schemas": "^22.5.256",
86
+ "@sprucelabs/spruce-event-plugin": "^5.4.117",
87
+ "@sprucelabs/spruce-event-utils": "^16.0.282",
88
+ "@sprucelabs/spruce-skill-booter": "^5.4.117",
89
+ "@sprucelabs/spruce-skill-utils": "^20.6.124",
90
+ "@sprucelabs/spruce-templates": "^14.21.6",
91
+ "cfonts": "^2.10.0",
81
92
  "chalk": "^4.1.2",
82
93
  "chokidar": "^3.5.2",
83
94
  "cli-table3": "^0.6.0",
84
95
  "commander": "^7.2.0",
85
- "core-js": "^3.16.1",
96
+ "core-js": "^3.18.1",
86
97
  "emphasize": "^4.2.0",
87
98
  "fs-extra": "^10.0.0",
88
99
  "gifwrap": "SimenB/gifwrap#patch-1",
89
100
  "globby": "^11.0.4",
90
101
  "inflection": "^1.13.1",
91
- "inquirer": "^8.1.2",
102
+ "inquirer": "^8.1.5",
92
103
  "inquirer-file-tree-selection-prompt": "^1.0.12",
93
104
  "js-tetris-cli": "^0.0.3",
94
105
  "jsonwebtoken": "^8.5.1",
@@ -102,56 +113,57 @@
102
113
  "terminal-kit": "sprucelabsai/terminal-kit",
103
114
  "tree-kill": "^1.2.2",
104
115
  "tsutils": "^3.21.0",
105
- "typescript": "^4.4.2",
106
116
  "uuid": "^8.3.2"
107
117
  },
108
118
  "devDependencies": {
109
- "@sprucelabs/data-stores": "latest",
110
- "@sprucelabs/jest-sheets-reporter": "latest",
111
- "@sprucelabs/mercury-core-events": "latest",
112
- "@sprucelabs/resolve-path-aliases": "latest",
113
- "@sprucelabs/spruce-conversation-plugin": "latest",
114
- "@sprucelabs/spruce-deploy-plugin": "latest",
115
- "@sprucelabs/spruce-store-plugin": "latest",
116
- "@sprucelabs/spruce-test-fixtures": "latest",
117
- "@sprucelabs/test": "latest",
118
- "@sprucelabs/test-utils": "latest",
119
+ "@sprucelabs/data-stores": "^6.1.164",
120
+ "@sprucelabs/jest-sheets-reporter": "^1.2.141",
121
+ "@sprucelabs/mercury-core-events": "^1.2.289",
122
+ "@sprucelabs/resolve-path-aliases": "^1.0.146",
123
+ "@sprucelabs/spruce-conversation-plugin": "^5.4.117",
124
+ "@sprucelabs/spruce-deploy-plugin": "^5.4.117",
125
+ "@sprucelabs/spruce-store-plugin": "^5.4.117",
126
+ "@sprucelabs/spruce-test-fixtures": "^5.4.117",
127
+ "@sprucelabs/test": "^7.7.124",
128
+ "@sprucelabs/test-utils": "^3.0.108",
119
129
  "@types/blessed": "^0.1.19",
120
130
  "@types/eslint": "^7.28.0",
121
- "@types/fs-extra": "^9.0.12",
122
- "@types/inflection": "^1.5.28",
123
- "@types/inquirer": "^7.3.3",
124
- "@types/jsonwebtoken": "^8.5.4",
125
- "@types/lodash": "^4.14.172",
131
+ "@types/fs-extra": "^9.0.13",
132
+ "@types/inflection": "^1.13.0",
133
+ "@types/inquirer": "^8.1.3",
134
+ "@types/jsonwebtoken": "^8.5.5",
135
+ "@types/lodash": "^4.14.175",
126
136
  "@types/md5": "^2.3.1",
127
137
  "@types/mkdirp": "^1.0.2",
128
- "@types/node": "^16.4.13",
138
+ "@types/node": "^16.10.2",
129
139
  "@types/promise.allsettled": "^1.0.3",
130
140
  "@types/ps-node": "^0.1.1",
131
- "@types/rimraf": "^3.0.1",
141
+ "@types/rimraf": "^3.0.2",
132
142
  "@types/semver": "^7.3.8",
133
143
  "@types/sha1": "^1.1.3",
134
144
  "@types/slug": "^5.0.2",
135
- "@types/superagent": "^4.1.12",
145
+ "@types/superagent": "^4.1.13",
136
146
  "@types/terminal-kit": "^1.28.4",
137
147
  "@types/uuid": "^8.3.1",
138
148
  "chokidar-cli": "^3.0.0",
139
- "concurrently": "^6.2.1",
149
+ "concurrently": "^6.2.2",
140
150
  "conventional-changelog-sprucelabs": "^1.1.2",
141
151
  "dotenv": "^10.0.0",
142
152
  "eslint": "^7.32.0",
143
- "eslint-config-spruce": "^10.10.10",
144
- "find-process": "^1.4.4",
145
- "jest": "^27.0.6",
146
- "jest-circus": "^27.0.6",
147
- "jest-junit": "^12.2.0",
153
+ "eslint-config-spruce": "^10.10.13",
154
+ "find-process": "^1.4.5",
155
+ "jest": "^27.2.4",
156
+ "jest-circus": "^27.2.4",
157
+ "jest-junit": "^12.3.0",
148
158
  "jest-reporters": "^0.0.2",
149
- "prettier": "^2.3.2",
159
+ "prettier": "^2.4.1",
150
160
  "ps-node": "^0.1.6",
151
161
  "rimraf": "^3.0.2",
152
- "ts-jest": "^27.0.4",
153
- "ts-node": "^10.2.0",
154
- "tsconfig-paths": "^3.10.1"
162
+ "ts-jest": "^27.0.5",
163
+ "ts-node": "^10.2.1",
164
+ "tsc-watch": "^4.5.0",
165
+ "tsconfig-paths": "^3.11.0",
166
+ "typescript": "^4.4.3"
155
167
  },
156
168
  "testSkillCache": {
157
169
  "everything": [
@@ -569,35 +581,14 @@
569
581
  },
570
582
  "yarn-upgrade-all": {
571
583
  "ignore": [
572
- "socket.io",
573
- "socket.io-client",
574
- "@sprucelabs/resolve-path-aliases",
575
- "@sprucelabs/error",
576
- "@sprucelabs/jest-sheets-reporter",
577
- "@sprucelabs/mercury",
578
- "@sprucelabs/mercury-client",
579
- "@sprucelabs/mercury-event-emitter",
580
- "@sprucelabs/mercury-types",
581
- "@sprucelabs/schema",
582
- "@sprucelabs/semantic-release",
583
- "@sprucelabs/spruce-core-schemas",
584
- "@sprucelabs/spruce-skill-utils",
585
- "@sprucelabs/spruce-event-utils",
586
- "@sprucelabs/test",
587
- "@sprucelabs/test-utils",
588
- "@sprucelabs/spruce-conversation-plugin",
589
- "@sprucelabs/spruce-deploy-plugin",
590
- "@sprucelabs/jest-json-reporter",
591
- "@sprucelabs/data-stores",
592
- "@sprucelabs/spruce-store-plugin",
593
584
  "emphasize",
594
585
  "gifwrap",
595
586
  "globby",
596
587
  "terminal-kit",
597
588
  "terminal-image",
598
589
  "commander",
599
- "@sprucelabs/heartwood-view-controllers"
590
+ "ora"
600
591
  ]
601
592
  },
602
- "gitHead": "50eff86808206c17bee63258d8b38490a40801ee"
593
+ "gitHead": "7830f62c3a185916c42cca8ef130a4114efc6373"
603
594
  }
@@ -1,15 +1,38 @@
1
1
  {
2
- "installed": [
2
+ "skipped": [
3
3
  "skill",
4
+ "event"
5
+ ],
6
+ "installed": [
4
7
  "schema",
5
8
  "error",
6
- "test",
7
- "event"
9
+ "test"
8
10
  ],
9
11
  "events.lastSync": {
10
12
  "contractDestinationDir": "#spruce/events",
11
13
  "schemaTypesLookupDir": "#spruce/schemas",
12
14
  "skillEventContractTypesFile": "@sprucelabs/mercury-types/build/types/mercury.types",
13
15
  "eventBuilderFile": "@sprucelabs/mercury-types"
16
+ },
17
+ "writer": {
18
+ "skipped": [
19
+ "src/index.ts",
20
+ "tsconfig.json"
21
+ ]
22
+ },
23
+ "scriptUpdater": {
24
+ "skipped": [
25
+ "build.ci",
26
+ "build.dev",
27
+ "clean.all",
28
+ "lint.tsc",
29
+ "rebuild",
30
+ "update.dependencies",
31
+ "test",
32
+ "watch.build.dev",
33
+ "watch.lint",
34
+ "watch.rebuild",
35
+ "watch.tsc"
36
+ ]
14
37
  }
15
38
  }
@@ -0,0 +1,42 @@
1
+ import { test, assert } from '@sprucelabs/test'
2
+ import AbstractCliTest from '../../../tests/AbstractCliTest'
3
+
4
+ export default class UpgradingASkill4Test extends AbstractCliTest {
5
+ @test()
6
+ protected static async upgradeResetsEventCache() {
7
+ await this.installSetListenerCacheAndBlockExecute()
8
+
9
+ await assert.doesThrowAsync(() =>
10
+ this.Action('node', 'upgrade').execute({})
11
+ )
12
+
13
+ const value = this.Settings().getListenerCache()
14
+ assert.isFalsy(value)
15
+ }
16
+
17
+ @test()
18
+ protected static async doesNotResetEventCacheWithOtherAction() {
19
+ await this.installSetListenerCacheAndBlockExecute()
20
+
21
+ await assert.doesThrowAsync(() => this.Action('schema', 'sync').execute({}))
22
+
23
+ const value = this.Settings().getListenerCache()
24
+ assert.isEqualDeep(value, { shouldBeDeleted: true })
25
+ }
26
+
27
+ private static async installSetListenerCacheAndBlockExecute() {
28
+ await this.FeatureFixture().installCachedFeatures('events')
29
+
30
+ const settings = this.Settings()
31
+ settings.setListenerCache({ shouldBeDeleted: true })
32
+
33
+ const emitter = this.getEmitter()
34
+ void emitter.on('feature.will-execute', () => {
35
+ throw new Error('Stop!')
36
+ })
37
+ }
38
+
39
+ private static Settings() {
40
+ return this.Service('eventSettings')
41
+ }
42
+ }
@@ -22,7 +22,13 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
22
22
  break
23
23
 
24
24
  case 'GENERIC':
25
- message = 'Oh shoot! 🤔'
25
+ message = options.friendlyMessage ?? 'Oh shoot! 🤔'
26
+
27
+ if (options.originalError) {
28
+ message += `\n\n${
29
+ options.originalError.stack ?? options.originalError.name
30
+ }`
31
+ }
26
32
  break
27
33
  case 'NOT_IMPLEMENTED':
28
34
  message = ''
@@ -54,9 +60,11 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
54
60
  break
55
61
 
56
62
  case 'FAILED_TO_IMPORT':
57
- message = `Failed to import "${options.file}". Original error:\n\n${
58
- options.originalError?.message ?? '**MISSING**'
59
- }`
63
+ message =
64
+ options.friendlyMessage ??
65
+ `Failed to import "${options.file}". Original error:\n\n${
66
+ options.originalError?.message ?? '**MISSING**'
67
+ }`
60
68
  break
61
69
 
62
70
  case 'LINT_FAILED':
@@ -93,7 +101,7 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
93
101
  break
94
102
 
95
103
  case 'FILE_EXISTS':
96
- message = 'A fileExists just happened!'
104
+ message = 'A fail already exists.'
97
105
  break
98
106
 
99
107
  case 'VSCODE_NOT_INSTALLED':
@@ -241,8 +249,7 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
241
249
  message = super.friendlyMessage()
242
250
  }
243
251
 
244
- const fullMessage = options.friendlyMessage ?? message
245
- return fullMessage
252
+ return message
246
253
  }
247
254
 
248
255
  private cleanStdErr(stderr: string) {
@@ -59,17 +59,21 @@ export default class ActionFactory {
59
59
  )
60
60
 
61
61
  let Class: new (options: ActionOptions) => AbstractAction | undefined
62
+ let originalError: Error | undefined
62
63
 
63
64
  try {
64
65
  Class = require(classPath).default
65
66
  // eslint-disable-next-line no-empty
66
- } catch {}
67
+ } catch (err: any) {
68
+ originalError = err
69
+ }
67
70
 
68
71
  //@ts-ignore
69
72
  if (!Class) {
70
73
  throw new SpruceError({
71
74
  code: 'GENERIC',
72
75
  friendlyMessage: `I could not find any action named '${actionCode}' for the ${feature.code} feature. Make sure it's the default export and extends AbstractAction.`,
76
+ originalError,
73
77
  })
74
78
  }
75
79
 
@@ -96,37 +96,46 @@ export default class EventFeature extends AbstractFeature {
96
96
 
97
97
  const isInstalled = await this.featureInstaller.isInstalled('event')
98
98
 
99
+ if (featureCode === 'node' || featureCode === 'upgrade') {
100
+ const settings = this.Service('eventSettings')
101
+ settings.clearListenerCache()
102
+ }
103
+
99
104
  if (
100
105
  isInstalled &&
101
106
  (featureCode === 'event' || featureCode === 'eventContract') &&
102
107
  actionCode !== 'setRemote'
103
108
  ) {
104
- const remote = this.Service('remote')
105
- const r = remote.getRemote()
106
-
107
- if (!r) {
108
- if (!TerminalInterface.doesSupportColor()) {
109
- throw new Error(
110
- `Dang! I couldn't find env.HOST. Once that is set, lets try again!`
111
- )
112
- }
113
-
114
- this.ui.stopLoading()
115
- this.ui.renderLine(
116
- `Uh oh! It looks like you haven't configured your remote! We gotta do that.`
109
+ return this.appendRemoteToResultsOrPrompt()
110
+ }
111
+
112
+ return {}
113
+ }
114
+
115
+ private async appendRemoteToResultsOrPrompt(): Promise<FeatureActionResponse> {
116
+ const remote = this.Service('remote')
117
+ const r = remote.getRemote()
118
+
119
+ if (!r) {
120
+ if (!TerminalInterface.doesSupportColor()) {
121
+ throw new Error(
122
+ `Dang! I couldn't find env.HOST. Once that is set, lets try again!`
117
123
  )
124
+ }
125
+
126
+ this.ui.stopLoading()
127
+ this.ui.renderLine(
128
+ `Uh oh! It looks like you haven't configured your remote! We gotta do that.`
129
+ )
118
130
 
119
- const results = await this.Action('event', 'setRemote').execute({})
131
+ const results = await this.Action('event', 'setRemote').execute({})
120
132
 
121
- return results
122
- } else {
123
- return {
124
- summaryLines: [`Remote: ${r}`, `Host: ${remote.getHost()}`],
125
- }
133
+ return results
134
+ } else {
135
+ return {
136
+ summaryLines: [`Remote: ${r}`, `Host: ${remote.getHost()}`],
126
137
  }
127
138
  }
128
-
129
- return {}
130
139
  }
131
140
 
132
141
  private async handleDidFetchSchemas(payload: { schemas?: Schema[] | null }) {
@@ -15,4 +15,16 @@ export default class EventSettingsService {
15
15
  }) {
16
16
  this.settings.set('events.lastSync', options)
17
17
  }
18
+
19
+ public setListenerCache(value: Record<string, any>) {
20
+ this.settings.set('events.listenerCacheKeys', value)
21
+ }
22
+
23
+ public clearListenerCache() {
24
+ this.settings.unset('events.listenerCacheKeys')
25
+ }
26
+
27
+ public getListenerCache() {
28
+ return this.settings.get('events.listenerCacheKeys')
29
+ }
18
30
  }
package/tsconfig.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "noUnusedLocals": true,
18
18
  "resolveJsonModule": true,
19
19
  "moduleResolution": "node",
20
- "sourceMap": true,
20
+ "sourceMap": false,
21
21
  "outDir": "build",
22
22
  "baseUrl": "src",
23
23
  "experimentalDecorators": true,
@@ -30,8 +30,8 @@
30
30
  }
31
31
  },
32
32
  "include": [
33
- "./*.ts",
34
- "./**/*.ts",
33
+ "./src/*.ts",
34
+ "./src/**/*.ts",
35
35
  "./src/.spruce/**/*"
36
36
  ],
37
37
  "exclude": [