@sprucelabs/spruce-cli 18.1.5 → 18.1.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/__tests__/behavioral/WatchingSkillViews.test.d.ts +1 -9
  3. package/build/__tests__/behavioral/WatchingSkillViews.test.js +25 -463
  4. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
  5. package/build/features/AbstractAction.d.ts +1 -1
  6. package/build/features/AbstractAction.js +4 -4
  7. package/build/features/AbstractAction.js.map +1 -1
  8. package/build/features/dependencies/actions/AddAction.js +1 -1
  9. package/build/features/dependencies/actions/AddAction.js.map +1 -1
  10. package/build/features/deploy/actions/HerokuAction.js +2 -2
  11. package/build/features/deploy/actions/HerokuAction.js.map +1 -1
  12. package/build/features/node/actions/UpdateDependenciesAction.js +1 -1
  13. package/build/features/node/actions/UpdateDependenciesAction.js.map +1 -1
  14. package/build/features/node/actions/UpgradeAction.js +1 -1
  15. package/build/features/node/actions/UpgradeAction.js.map +1 -1
  16. package/build/features/test/actions/CreateAction.js +2 -2
  17. package/build/features/test/actions/CreateAction.js.map +1 -1
  18. package/build/features/view/actions/WatchAction.d.ts +3 -16
  19. package/build/features/view/actions/WatchAction.js +32 -165
  20. package/build/features/view/actions/WatchAction.js.map +1 -1
  21. package/build/services/CommandService.d.ts +6 -6
  22. package/build/services/CommandService.js.map +1 -1
  23. package/node_modules/@typescript-eslint/parser/package.json +5 -5
  24. package/node_modules/@typescript-eslint/scope-manager/package.json +5 -5
  25. package/node_modules/@typescript-eslint/types/package.json +2 -2
  26. package/node_modules/@typescript-eslint/typescript-estree/package.json +5 -5
  27. package/node_modules/@typescript-eslint/visitor-keys/package.json +3 -3
  28. package/package.json +3 -3
  29. package/src/__tests__/behavioral/WatchingSkillViews.test.ts +14 -227
  30. package/src/features/AbstractAction.ts +4 -4
  31. package/src/features/dependencies/actions/AddAction.ts +1 -1
  32. package/src/features/deploy/actions/HerokuAction.ts +2 -2
  33. package/src/features/node/actions/UpdateDependenciesAction.ts +1 -1
  34. package/src/features/node/actions/UpgradeAction.ts +1 -1
  35. package/src/features/test/actions/CreateAction.ts +2 -4
  36. package/src/features/view/actions/WatchAction.ts +25 -89
  37. package/src/services/CommandService.ts +7 -7
@@ -16,19 +16,13 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
17
  var _schema = require("@sprucelabs/schema");
18
18
  var _spruceEventUtils = require("@sprucelabs/spruce-event-utils");
19
- var _spruceSkillUtils = require("@sprucelabs/spruce-skill-utils");
20
19
  var _AbstractAction2 = _interopRequireDefault(require("../../AbstractAction"));
21
20
  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); }; }
22
21
  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; } }
23
22
  var optionsSchema = (0, _schema.buildSchema)({
24
23
  id: 'watchViewsOptions',
25
24
  description: 'Watch for view changes and preview them in real time.',
26
- fields: {
27
- shouldReturnImmediately: {
28
- type: 'boolean',
29
- hint: "For testing so we don't wait until the process is killed to get the results."
30
- }
31
- }
25
+ fields: {}
32
26
  });
33
27
  var WatchAction = /*#__PURE__*/function (_AbstractAction) {
34
28
  (0, _inherits2["default"])(WatchAction, _AbstractAction);
@@ -43,158 +37,63 @@ var WatchAction = /*#__PURE__*/function (_AbstractAction) {
43
37
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "commandAliases", ['watch.views']);
44
38
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "optionsSchema", optionsSchema);
45
39
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "invocationMessage", 'Watching views... 🤩');
46
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "resolve", void 0);
47
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bootControls", void 0);
48
40
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "skillName", void 0);
49
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "bootMessage", void 0);
50
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "watchFeature", void 0);
51
41
  return _this;
52
42
  }
53
43
  (0, _createClass2["default"])(WatchAction, [{
54
44
  key: "execute",
55
45
  value: function () {
56
- var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(options) {
46
+ var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
57
47
  var _this2 = this;
58
- var _this$validateAndNorm, shouldReturnImmediately, skill, _this$bootControls;
59
- return _regenerator["default"].wrap(function _callee2$(_context2) {
48
+ var skill, commands;
49
+ return _regenerator["default"].wrap(function _callee$(_context) {
60
50
  while (1) {
61
- switch (_context2.prev = _context2.next) {
51
+ switch (_context.prev = _context.next) {
62
52
  case 0:
63
- _this$validateAndNorm = this.validateAndNormalizeOptions(options !== null && options !== void 0 ? options : {}), shouldReturnImmediately = _this$validateAndNorm.shouldReturnImmediately;
64
- this.watchFeature = this.featureInstaller.getFeature('watch');
65
- _context2.next = 4;
66
- return this.watchFeature.startWatching({
67
- delay: 2000
68
- });
69
- case 4:
70
- _context2.next = 6;
53
+ _context.next = 2;
71
54
  return this.Store('skill').loadCurrentSkill();
72
- case 6:
73
- skill = _context2.sent;
55
+ case 2:
56
+ skill = _context.sent;
74
57
  this.skillName = skill.name;
75
- _context2.next = 10;
76
- return this.boot();
77
- case 10:
78
- this.bootControls = _context2.sent;
79
- _context2.next = 13;
80
- return this.emitter.on('watcher.did-detect-change', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
81
- var _this2$bootControls;
82
- return _regenerator["default"].wrap(function _callee$(_context) {
83
- while (1) {
84
- switch (_context.prev = _context.next) {
85
- case 0:
86
- (_this2$bootControls = _this2.bootControls) === null || _this2$bootControls === void 0 ? void 0 : _this2$bootControls.kill();
87
- _context.next = 3;
88
- return _this2.boot('Changes detected, rebooting skill...');
89
- case 3:
90
- _this2.bootControls = _context.sent;
91
- case 4:
92
- case "end":
93
- return _context.stop();
94
- }
95
- }
96
- }, _callee);
97
- })));
98
- case 13:
99
- if (shouldReturnImmediately) {
100
- _context2.next = 19;
101
- break;
102
- }
103
- _context2.next = 16;
104
- return new Promise(function (resolve) {
105
- //@ts-ignore
106
- _this2.resolve = resolve;
107
- });
108
- case 16:
109
- _context2.next = 18;
110
- return this.watchFeature.stopWatching();
111
- case 18:
112
- (_this$bootControls = this.bootControls) === null || _this$bootControls === void 0 ? void 0 : _this$bootControls.kill();
113
- case 19:
114
- return _context2.abrupt("return", {
115
- summaryLines: ["Done watching..."],
116
- meta: {
117
- bootPromise: this.bootControls.bootPromise
58
+ this.resetUi();
59
+ commands = this.Service('command');
60
+ _context.next = 8;
61
+ return commands.execute('ENABLED_SKILL_FEATURES=view,event SHOULD_REGISTER_EVENTS_AND_LISTENERS=false SHOULD_WATCH_VIEWS=true MAXIMUM_LOG_PREFIXES_LENGTH=0 yarn boot', {
62
+ onData: function onData(data) {
63
+ var line = _this2.popLastLine(data);
64
+ _this2.ui.startLoading(line);
118
65
  }
119
66
  });
120
- case 20:
67
+ case 8:
68
+ return _context.abrupt("return", {
69
+ summaryLines: ["Done watching..."]
70
+ });
71
+ case 9:
121
72
  case "end":
122
- return _context2.stop();
73
+ return _context.stop();
123
74
  }
124
75
  }
125
- }, _callee2, this);
76
+ }, _callee, this);
126
77
  }));
127
- function execute(_x) {
78
+ function execute() {
128
79
  return _execute.apply(this, arguments);
129
80
  }
130
81
  return execute;
131
82
  }()
83
+ }, {
84
+ key: "popLastLine",
85
+ value: function popLastLine(data) {
86
+ var line = data.trim().split('\n').filter(function (s) {
87
+ return !!s;
88
+ }).pop();
89
+ return line && line.length > 0 ? line.trim() : 'Waiting for changes';
90
+ }
132
91
  }, {
133
92
  key: "getPreviewUrl",
134
93
  value: function getPreviewUrl() {
135
94
  var remote = this.Service('remote').getRemote();
136
95
  return _spruceEventUtils.heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch';
137
96
  }
138
- }, {
139
- key: "boot",
140
- value: function () {
141
- var _boot = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
142
- var _this3 = this,
143
- _results$meta,
144
- _results$meta$bootPro;
145
- var bootMessage,
146
- results,
147
- _args3 = arguments;
148
- return _regenerator["default"].wrap(function _callee3$(_context3) {
149
- while (1) {
150
- switch (_context3.prev = _context3.next) {
151
- case 0:
152
- bootMessage = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : 'Booting skill...';
153
- this.bootMessage = bootMessage;
154
- this.resetUi();
155
- _context3.next = 5;
156
- return this.Action('skill', 'boot').execute({
157
- shouldReturnImmediately: true,
158
- onData: function onData(msg) {
159
- if (!msg.includes('node build/index') && !msg.includes('yarn run')) {
160
- _this3.ui.stopLoading();
161
- _this3.ui.renderLine(msg.trim());
162
- _this3.ui.startLoading(_this3.bootMessage);
163
- }
164
- },
165
- onError: function onError(msg) {
166
- if (!msg.includes('No license field')) {
167
- _this3.ui.stopLoading();
168
- _this3.ui.renderLine(msg, [_spruceSkillUtils.GraphicsTextEffect.Red]);
169
- _this3.ui.startLoading();
170
- }
171
- }
172
- });
173
- case 5:
174
- results = _context3.sent;
175
- (_results$meta = results.meta) === null || _results$meta === void 0 ? void 0 : (_results$meta$bootPro = _results$meta.bootPromise) === null || _results$meta$bootPro === void 0 ? void 0 : _results$meta$bootPro.then(function () {
176
- _this3.bootMessage = 'Skill booted. Waiting for changes...';
177
- _this3.ui.startLoading(_this3.bootMessage);
178
- });
179
- if (!results.errors) {
180
- _context3.next = 9;
181
- break;
182
- }
183
- throw results.errors[0];
184
- case 9:
185
- return _context3.abrupt("return", results.meta);
186
- case 10:
187
- case "end":
188
- return _context3.stop();
189
- }
190
- }
191
- }, _callee3, this);
192
- }));
193
- function boot() {
194
- return _boot.apply(this, arguments);
195
- }
196
- return boot;
197
- }()
198
97
  }, {
199
98
  key: "resetUi",
200
99
  value: function resetUi() {
@@ -204,39 +103,7 @@ var WatchAction = /*#__PURE__*/function (_AbstractAction) {
204
103
  this.ui.renderLines(['', "Skill: ".concat(this.skillName), "Preview: ".concat(this.getPreviewUrl()), '']);
205
104
  this.ui.renderDivider();
206
105
  this.ui.renderLine('');
207
- this.ui.startLoading(this.bootMessage);
208
- }
209
- }, {
210
- key: "kill",
211
- value: function () {
212
- var _kill = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
213
- var _this$bootControls2, _this$resolve;
214
- return _regenerator["default"].wrap(function _callee4$(_context4) {
215
- while (1) {
216
- switch (_context4.prev = _context4.next) {
217
- case 0:
218
- _context4.next = 2;
219
- return this.watchFeature.stopWatching();
220
- case 2:
221
- (_this$bootControls2 = this.bootControls) === null || _this$bootControls2 === void 0 ? void 0 : _this$bootControls2.kill();
222
- (_this$resolve = this.resolve) === null || _this$resolve === void 0 ? void 0 : _this$resolve.call(this);
223
- case 4:
224
- case "end":
225
- return _context4.stop();
226
- }
227
- }
228
- }, _callee4, this);
229
- }));
230
- function kill() {
231
- return _kill.apply(this, arguments);
232
- }
233
- return kill;
234
- }()
235
- }, {
236
- key: "getPid",
237
- value: function getPid() {
238
- var _this$bootControls3;
239
- return (_this$bootControls3 = this.bootControls) === null || _this$bootControls3 === void 0 ? void 0 : _this$bootControls3.pid;
106
+ this.ui.startLoading('Watching for changes');
240
107
  }
241
108
  }]);
242
109
  return WatchAction;
@@ -1 +1 @@
1
- {"version":3,"file":"WatchAction.js","names":["optionsSchema","buildSchema","id","description","fields","shouldReturnImmediately","type","hint","WatchAction","options","validateAndNormalizeOptions","watchFeature","featureInstaller","getFeature","startWatching","delay","Store","loadCurrentSkill","skill","skillName","name","boot","bootControls","emitter","on","kill","Promise","resolve","stopWatching","summaryLines","meta","bootPromise","remote","Service","getRemote","heartwoodRemoteUtil","buildUrl","bootMessage","resetUi","Action","execute","onData","msg","includes","ui","stopLoading","renderLine","trim","startLoading","onError","GraphicsTextEffect","Red","results","then","errors","clear","renderHero","renderDivider","renderLines","getPreviewUrl","pid","AbstractAction"],"sources":["../../../../src/features/view/actions/WatchAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport { GraphicsTextEffect } from '@sprucelabs/spruce-skill-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { BootMeta } from '../../skill/actions/BootAction'\nimport WatchFeature from '../../watch/WatchFeature'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\thint: \"For testing so we don't wait until the process is killed to get the results.\",\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate resolve?: () => void\n\tprivate bootControls?: BootMeta\n\tprivate skillName!: string\n\tprivate bootMessage!: string\n\tprivate watchFeature!: WatchFeature\n\n\tpublic async execute(options?: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately } = this.validateAndNormalizeOptions(\n\t\t\toptions ?? {}\n\t\t)\n\n\t\tthis.watchFeature = this.featureInstaller.getFeature('watch')\n\t\tawait this.watchFeature.startWatching({ delay: 2000 })\n\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\n\t\tthis.skillName = skill.name\n\t\tthis.bootControls = await this.boot()\n\n\t\tawait this.emitter.on('watcher.did-detect-change', async () => {\n\t\t\tthis.bootControls?.kill()\n\t\t\tthis.bootControls = await this.boot(\n\t\t\t\t'Changes detected, rebooting skill...'\n\t\t\t)\n\t\t})\n\n\t\tif (!shouldReturnImmediately) {\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthis.resolve = resolve\n\t\t\t})\n\n\t\t\tawait this.watchFeature.stopWatching()\n\t\t\tthis.bootControls?.kill()\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t\tmeta: {\n\t\t\t\tbootPromise: this.bootControls.bootPromise,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate async boot(bootMessage = 'Booting skill...') {\n\t\tthis.bootMessage = bootMessage\n\t\tthis.resetUi()\n\n\t\tconst results = await this.Action('skill', 'boot').execute({\n\t\t\tshouldReturnImmediately: true,\n\t\t\tonData: (msg: string) => {\n\t\t\t\tif (!msg.includes('node build/index') && !msg.includes('yarn run')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg.trim())\n\t\t\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (msg: string) => {\n\t\t\t\tif (!msg.includes('No license field')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg, [GraphicsTextEffect.Red])\n\t\t\t\t\tthis.ui.startLoading()\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\tresults.meta?.bootPromise?.then(() => {\n\t\t\tthis.bootMessage = 'Skill booted. Waiting for changes...'\n\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\tthrow results.errors[0]\n\t\t}\n\n\t\treturn results.meta as BootMeta\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading(this.bootMessage)\n\t}\n\n\tpublic async kill() {\n\t\tawait this.watchFeature.stopWatching()\n\t\tthis.bootControls?.kill()\n\t\tthis.resolve?.()\n\t}\n\n\tpublic getPid() {\n\t\treturn this.bootControls?.pid\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WatchAction.js","names":["optionsSchema","buildSchema","id","description","fields","WatchAction","Store","loadCurrentSkill","skill","skillName","name","resetUi","commands","Service","execute","onData","data","line","popLastLine","ui","startLoading","summaryLines","trim","split","filter","s","pop","length","remote","getRemote","heartwoodRemoteUtil","buildUrl","clear","renderHero","renderDivider","renderLines","getPreviewUrl","renderLine","AbstractAction"],"sources":["../../../../src/features/view/actions/WatchAction.ts"],"sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate skillName!: string\n\n\tpublic async execute(): Promise<FeatureActionResponse> {\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\t\tthis.skillName = skill.name\n\n\t\tthis.resetUi()\n\t\tconst commands = this.Service('command')\n\t\tawait commands.execute(\n\t\t\t'ENABLED_SKILL_FEATURES=view,event SHOULD_REGISTER_EVENTS_AND_LISTENERS=false SHOULD_WATCH_VIEWS=true MAXIMUM_LOG_PREFIXES_LENGTH=0 yarn boot',\n\t\t\t{\n\t\t\t\tonData: (data) => {\n\t\t\t\t\tconst line = this.popLastLine(data)\n\t\t\t\t\tthis.ui.startLoading(line)\n\t\t\t\t},\n\t\t\t}\n\t\t)\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t}\n\t}\n\n\tprivate popLastLine(data: string) {\n\t\tconst line = data\n\t\t\t.trim()\n\t\t\t.split('\\n')\n\t\t\t.filter((s) => !!s)\n\t\t\t.pop()\n\n\t\treturn line && line.length > 0 ? line.trim() : 'Waiting for changes'\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading('Watching for changes')\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAiD;AAAA;AAGjD,IAAMA,aAAa,GAAG,IAAAC,mBAAW,EAAC;EACjCC,EAAE,EAAE,mBAAmB;EACvBC,WAAW,EAAE,uDAAuD;EACpEC,MAAM,EAAE,CAAC;AACV,CAAC,CAAC;AAAA,IAImBC,WAAW;EAAA;EAAA;EAAA;IAAA;IAAA;IAAA;MAAA;IAAA;IAAA;IAAA,mGACP,CAAC,aAAa,CAAC;IAAA,kGACDL,aAAa;IAAA,sGACxB,sBAAsB;IAAA;IAAA;EAAA;EAAA;IAAA;IAAA;MAAA,6FAGjD;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,IAAI,CAACM,KAAK,CAAC,OAAO,CAAC,CAACC,gBAAgB,EAAE;cAAA;gBAApDC,KAAK;gBACX,IAAI,CAACC,SAAS,GAAGD,KAAK,CAACE,IAAI;gBAE3B,IAAI,CAACC,OAAO,EAAE;gBACRC,QAAQ,GAAG,IAAI,CAACC,OAAO,CAAC,SAAS,CAAC;gBAAA;gBAAA,OAClCD,QAAQ,CAACE,OAAO,CACrB,8IAA8I,EAC9I;kBACCC,MAAM,EAAE,gBAACC,IAAI,EAAK;oBACjB,IAAMC,IAAI,GAAG,MAAI,CAACC,WAAW,CAACF,IAAI,CAAC;oBACnC,MAAI,CAACG,EAAE,CAACC,YAAY,CAACH,IAAI,CAAC;kBAC3B;gBACD,CAAC,CACD;cAAA;gBAAA,iCAEM;kBACNI,YAAY,EAAE;gBACf,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACD;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAED,qBAAoBL,IAAY,EAAE;MACjC,IAAMC,IAAI,GAAGD,IAAI,CACfM,IAAI,EAAE,CACNC,KAAK,CAAC,IAAI,CAAC,CACXC,MAAM,CAAC,UAACC,CAAC;QAAA,OAAK,CAAC,CAACA,CAAC;MAAA,EAAC,CAClBC,GAAG,EAAE;MAEP,OAAOT,IAAI,IAAIA,IAAI,CAACU,MAAM,GAAG,CAAC,GAAGV,IAAI,CAACK,IAAI,EAAE,GAAG,qBAAqB;IACrE;EAAC;IAAA;IAAA,OAED,yBAAwB;MACvB,IAAMM,MAAM,GAAG,IAAI,CAACf,OAAO,CAAC,QAAQ,CAAC,CAACgB,SAAS,EAAS;MACxD,OAAOC,qCAAmB,CAACC,QAAQ,CAACH,MAAM,CAAC,GAAG,yBAAyB;IACxE;EAAC;IAAA;IAAA,OAED,mBAAkB;MACjB,IAAI,CAACT,EAAE,CAACa,KAAK,EAAE;MACf,IAAI,CAACb,EAAE,CAACc,UAAU,CAAC,WAAW,CAAC;MAC/B,IAAI,CAACd,EAAE,CAACe,aAAa,EAAE;MACvB,IAAI,CAACf,EAAE,CAACgB,WAAW,CAAC,CACnB,EAAE,mBACQ,IAAI,CAAC1B,SAAS,sBACZ,IAAI,CAAC2B,aAAa,EAAE,GAChC,EAAE,CACF,CAAC;MACF,IAAI,CAACjB,EAAE,CAACe,aAAa,EAAE;MACvB,IAAI,CAACf,EAAE,CAACkB,UAAU,CAAC,EAAE,CAAC;MACtB,IAAI,CAAClB,EAAE,CAACC,YAAY,CAAC,sBAAsB,CAAC;IAC7C;EAAC;EAAA;AAAA,EAvDuCkB,2BAAc;AAAA"}
@@ -2,12 +2,6 @@
2
2
  /// <reference types="node" />
3
3
  import { SpawnOptions } from 'child_process';
4
4
  import { Writable } from 'stream';
5
- interface MockResponse {
6
- code: number;
7
- stdout?: string;
8
- stderr?: string;
9
- callback?: (executable: string, args: any[]) => void;
10
- }
11
5
  export default class CommandService {
12
6
  cwd: string;
13
7
  private activeChildProcess;
@@ -34,4 +28,10 @@ export default class CommandService {
34
28
  static fakeCommand(command: string | RegExp, response: MockResponse): void;
35
29
  static clearMockResponses(): void;
36
30
  }
31
+ interface MockResponse {
32
+ code: number;
33
+ stdout?: string;
34
+ stderr?: string;
35
+ callback?: (executable: string, args: any[]) => void;
36
+ }
37
37
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"CommandService.js","names":["process","setMaxListeners","CommandService","cwd","activeChildProcess","pid","ignoreCloseErrors","treeKill","cmd","options","args","stringArgv","executable","shift","boundKill","kill","bind","Error","getMockResponse","mockResponse","mockKey","commandsRunCapturedByMockResponses","push","callback","code","SpruceError","join","stdout","stderr","on","Promise","resolve","reject","spawnOptions","shouldStream","stdio","env","PATH","IS_CLI","FORCE_COLOR","forceColor","shell","child","spawn","outStream","pipe","addListener","data","onData","toString","onError","closeHandler","off","undefined","setTimeout","removeAllListeners","ignoreErrors","search","escapeRegExp","ERROR_DIVIDER","stderrParts","split","err","AbstractSpruceError","parse","trim","commands","mockResponses","match","find","r","command","RegExp","replace","response","unshift"],"sources":["../../src/services/CommandService.ts"],"sourcesContent":["import { spawn, SpawnOptions, ChildProcess } from 'child_process'\nimport { Writable } from 'stream'\nimport AbstractSpruceError from '@sprucelabs/error'\nimport { ERROR_DIVIDER } from '@sprucelabs/spruce-skill-utils'\nimport escapeRegExp from 'lodash/escapeRegExp'\nimport stringArgv from 'string-argv'\nimport treeKill from 'tree-kill'\nimport SpruceError from '../errors/SpruceError'\n\nprocess.setMaxListeners(100)\n\ninterface MockResponse {\n\tcode: number\n\tstdout?: string\n\tstderr?: string\n\tcallback?: (executable: string, args: any[]) => void\n}\n\nexport default class CommandService {\n\tpublic cwd: string\n\tprivate activeChildProcess: ChildProcess | undefined\n\tprivate ignoreCloseErrors = false\n\tprivate static mockResponses: {\n\t\tcommand: string | RegExp\n\t\tresponse: MockResponse\n\t}[] = []\n\tprivate static commandsRunCapturedByMockResponses: string[] = []\n\n\tpublic constructor(cwd: string) {\n\t\tthis.cwd = cwd\n\t}\n\n\tpublic async execute(\n\t\tcmd: string,\n\t\toptions?: {\n\t\t\tignoreErrors?: boolean\n\t\t\targs?: string[]\n\t\t\tshouldStream?: boolean\n\t\t\toutStream?: Writable\n\t\t\tonError?: (error: string) => void\n\t\t\tonData?: (data: string) => void\n\t\t\tspawnOptions?: SpawnOptions\n\t\t\tforceColor?: boolean\n\t\t\tenv?: Record<string, any>\n\t\t}\n\t): Promise<{\n\t\tstdout: string\n\t}> {\n\t\tconst cwd = this.cwd\n\t\tconst args = options?.args || stringArgv(cmd)\n\t\tconst executable = options?.args ? cmd : args.shift()\n\t\tconst boundKill = this.kill.bind(this)\n\n\t\tif (!executable) {\n\t\t\tthrow new Error('Bad params sent to command service')\n\t\t}\n\n\t\tconst { mockResponse, mockKey } = this.getMockResponse(executable, args)\n\n\t\tif (mockResponse) {\n\t\t\tCommandService.commandsRunCapturedByMockResponses.push(mockKey)\n\t\t\tmockResponse.callback?.(executable, args)\n\n\t\t\tif (mockResponse.code !== 0) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\tcmd: `${executable} ${args.join(' ')}`,\n\t\t\t\t\tcwd,\n\t\t\t\t\tstdout: mockResponse.stdout,\n\t\t\t\t\tstderr: mockResponse.stderr,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn { stdout: mockResponse.stdout ?? '' }\n\t\t}\n\n\t\tprocess.on('exit', boundKill)\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet stdout = ''\n\t\t\tlet stderr = ''\n\t\t\tconst spawnOptions: SpawnOptions = options?.shouldStream\n\t\t\t\t? {\n\t\t\t\t\t\tstdio: 'inherit',\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tPATH: process.env.PATH,\n\t\t\t\t\t\t\tIS_CLI: 'true',\n\t\t\t\t\t\t\tFORCE_COLOR: options?.forceColor ? '1' : '0',\n\t\t\t\t\t\t\t...options?.env,\n\t\t\t\t\t\t},\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tPATH: process.env.PATH,\n\t\t\t\t\t\t\tIS_CLI: 'true',\n\t\t\t\t\t\t\tFORCE_COLOR: options?.forceColor ? '1' : '0',\n\t\t\t\t\t\t\t...options?.env,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshell: true,\n\t\t\t\t\t\t...options?.spawnOptions,\n\t\t\t\t }\n\n\t\t\tconst child = spawn(executable, args, spawnOptions)\n\t\t\tthis.activeChildProcess = child\n\n\t\t\tif (options?.outStream) {\n\t\t\t\tchild.stdout?.pipe(options.outStream)\n\t\t\t}\n\n\t\t\tchild.stdout?.addListener('data', (data) => {\n\t\t\t\toptions?.onData?.(data.toString())\n\t\t\t\tstdout += data\n\t\t\t})\n\n\t\t\tchild.stderr?.addListener('data', (data) => {\n\t\t\t\toptions?.onError?.(data.toString())\n\t\t\t\tstderr += data\n\t\t\t})\n\n\t\t\tconst closeHandler = (code: number) => {\n\t\t\t\tprocess.off('exit', boundKill)\n\n\t\t\t\tif (!this.activeChildProcess) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.activeChildProcess = undefined\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tchild.stdout?.removeAllListeners()\n\t\t\t\t\tchild.stderr?.removeAllListeners()\n\t\t\t\t\tchild.removeAllListeners()\n\n\t\t\t\t\tif (code === 0 || this.ignoreCloseErrors || options?.ignoreErrors) {\n\t\t\t\t\t\tresolve({ stdout })\n\t\t\t\t\t\tthis.ignoreCloseErrors = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (stderr.search(escapeRegExp(ERROR_DIVIDER)) > -1) {\n\t\t\t\t\t\t\tconst stderrParts = stderr.split(ERROR_DIVIDER)\n\t\t\t\t\t\t\tconst err = AbstractSpruceError.parse(stderrParts[1], SpruceError)\n\t\t\t\t\t\t\treject(err)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\t\tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\t\t\t\tcmd: `${executable} ${args.join(' ')}`,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\tstdout,\n\t\t\t\t\t\t\t\tstderr,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}, 0)\n\t\t\t}\n\n\t\t\tchild.addListener('close', closeHandler)\n\t\t\tchild.addListener('exit', closeHandler)\n\t\t})\n\t}\n\n\tpublic kill = () => {\n\t\tif (this.activeChildProcess?.pid) {\n\t\t\tthis.ignoreCloseErrors = true\n\t\t\ttreeKill(this.activeChildProcess.pid, 'SIGTERM')\n\t\t}\n\t}\n\n\tpublic pid = () => {\n\t\treturn this.activeChildProcess?.pid\n\t}\n\n\tprivate getMockResponse(executable: string, args: string[]) {\n\t\tconst mockKey = `${executable} ${args.join(' ')}`.trim()\n\t\tconst commands = CommandService.mockResponses\n\t\tconst match = commands.find((r) =>\n\t\t\tr.command instanceof RegExp\n\t\t\t\t? mockKey.search(r.command) > -1\n\t\t\t\t: r.command.replace(/ +/gis, '') === mockKey.replace(/ +/gis, '')\n\t\t)\n\n\t\treturn { mockResponse: match?.response, mockKey }\n\t}\n\n\tpublic static fakeCommand(command: string | RegExp, response: MockResponse) {\n\t\tthis.mockResponses.unshift({\n\t\t\tcommand,\n\t\t\tresponse,\n\t\t})\n\t}\n\n\tpublic static clearMockResponses() {\n\t\tthis.mockResponses = []\n\t}\n}\n"],"mappings":";;;;;;;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AAA+C;AAAA;AAE/CA,OAAO,CAACC,eAAe,CAAC,GAAG,CAAC;AAAA,IASPC,cAAc;EAUlC,wBAAmBC,GAAW,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA,4DAPJ,KAAK;IAAA,+CA8InB,YAAM;MAAA;MACnB,6BAAI,KAAI,CAACC,kBAAkB,kDAAvB,sBAAyBC,GAAG,EAAE;QACjC,KAAI,CAACC,iBAAiB,GAAG,IAAI;QAC7B,IAAAC,oBAAQ,EAAC,KAAI,CAACH,kBAAkB,CAACC,GAAG,EAAE,SAAS,CAAC;MACjD;IACD,CAAC;IAAA,8CAEY,YAAM;MAAA;MAClB,iCAAO,KAAI,CAACD,kBAAkB,2DAAvB,uBAAyBC,GAAG;IACpC,CAAC;IA/IA,IAAI,CAACF,GAAG,GAAGA,GAAG;EACf;EAAC;IAAA;IAAA;MAAA,6FAED,iBACCK,GAAW,EACXC,OAUC;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAIKN,GAAG,GAAG,IAAI,CAACA,GAAG;gBACdO,IAAI,GAAG,CAAAD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEC,IAAI,KAAI,IAAAC,sBAAU,EAACH,GAAG,CAAC;gBACvCI,UAAU,GAAGH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEC,IAAI,GAAGF,GAAG,GAAGE,IAAI,CAACG,KAAK,EAAE;gBAC/CC,SAAS,GAAG,IAAI,CAACC,IAAI,CAACC,IAAI,CAAC,IAAI,CAAC;gBAAA,IAEjCJ,UAAU;kBAAA;kBAAA;gBAAA;gBAAA,MACR,IAAIK,KAAK,CAAC,oCAAoC,CAAC;cAAA;gBAAA,wBAGpB,IAAI,CAACC,eAAe,CAACN,UAAU,EAAEF,IAAI,CAAC,EAAhES,YAAY,yBAAZA,YAAY,EAAEC,OAAO,yBAAPA,OAAO;gBAAA,KAEzBD,YAAY;kBAAA;kBAAA;gBAAA;gBACfjB,cAAc,CAACmB,kCAAkC,CAACC,IAAI,CAACF,OAAO,CAAC;gBAC/D,yBAAAD,YAAY,CAACI,QAAQ,0DAArB,2BAAAJ,YAAY,EAAYP,UAAU,EAAEF,IAAI,CAAC;gBAAA,MAErCS,YAAY,CAACK,IAAI,KAAK,CAAC;kBAAA;kBAAA;gBAAA;gBAAA,MACpB,IAAIC,uBAAW,CAAC;kBACrBD,IAAI,EAAE,0BAA0B;kBAChChB,GAAG,YAAKI,UAAU,cAAIF,IAAI,CAACgB,IAAI,CAAC,GAAG,CAAC,CAAE;kBACtCvB,GAAG,EAAHA,GAAG;kBACHwB,MAAM,EAAER,YAAY,CAACQ,MAAM;kBAC3BC,MAAM,EAAET,YAAY,CAACS;gBACtB,CAAC,CAAC;cAAA;gBAAA,iCAGI;kBAAED,MAAM,0BAAER,YAAY,CAACQ,MAAM,uEAAI;gBAAG,CAAC;cAAA;gBAG7C3B,OAAO,CAAC6B,EAAE,CAAC,MAAM,EAAEf,SAAS,CAAC;gBAAA,iCAEtB,IAAIgB,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;kBAAA;kBACvC,IAAIL,MAAM,GAAG,EAAE;kBACf,IAAIC,MAAM,GAAG,EAAE;kBACf,IAAMK,YAA0B,GAAGxB,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEyB,YAAY,GACrD;oBACAC,KAAK,EAAE,SAAS;oBAChBhC,GAAG,EAAHA,GAAG;oBACHiC,GAAG;sBACFC,IAAI,EAAErC,OAAO,CAACoC,GAAG,CAACC,IAAI;sBACtBC,MAAM,EAAE,MAAM;sBACdC,WAAW,EAAE9B,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE+B,UAAU,GAAG,GAAG,GAAG;oBAAG,GACzC/B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE2B,GAAG;kBAEhB,CAAC;oBAEDjC,GAAG,EAAHA,GAAG;oBACHiC,GAAG;sBACFC,IAAI,EAAErC,OAAO,CAACoC,GAAG,CAACC,IAAI;sBACtBC,MAAM,EAAE,MAAM;sBACdC,WAAW,EAAE9B,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE+B,UAAU,GAAG,GAAG,GAAG;oBAAG,GACzC/B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAE2B,GAAG,CACf;oBACDK,KAAK,EAAE;kBAAI,GACRhC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEwB,YAAY,CACvB;kBAEJ,IAAMS,KAAK,GAAG,IAAAC,oBAAK,EAAC/B,UAAU,EAAEF,IAAI,EAAEuB,YAAY,CAAC;kBACnD,MAAI,CAAC7B,kBAAkB,GAAGsC,KAAK;kBAE/B,IAAIjC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEmC,SAAS,EAAE;oBAAA;oBACvB,iBAAAF,KAAK,CAACf,MAAM,kDAAZ,cAAckB,IAAI,CAACpC,OAAO,CAACmC,SAAS,CAAC;kBACtC;kBAEA,kBAAAF,KAAK,CAACf,MAAM,mDAAZ,eAAcmB,WAAW,CAAC,MAAM,EAAE,UAACC,IAAI,EAAK;oBAAA;oBAC3CtC,OAAO,aAAPA,OAAO,0CAAPA,OAAO,CAAEuC,MAAM,oDAAf,qBAAAvC,OAAO,EAAWsC,IAAI,CAACE,QAAQ,EAAE,CAAC;oBAClCtB,MAAM,IAAIoB,IAAI;kBACf,CAAC,CAAC;kBAEF,iBAAAL,KAAK,CAACd,MAAM,kDAAZ,cAAckB,WAAW,CAAC,MAAM,EAAE,UAACC,IAAI,EAAK;oBAAA;oBAC3CtC,OAAO,aAAPA,OAAO,2CAAPA,OAAO,CAAEyC,OAAO,qDAAhB,sBAAAzC,OAAO,EAAYsC,IAAI,CAACE,QAAQ,EAAE,CAAC;oBACnCrB,MAAM,IAAImB,IAAI;kBACf,CAAC,CAAC;kBAEF,IAAMI,YAAY,GAAG,SAAfA,YAAY,CAAI3B,IAAY,EAAK;oBACtCxB,OAAO,CAACoD,GAAG,CAAC,MAAM,EAAEtC,SAAS,CAAC;oBAE9B,IAAI,CAAC,MAAI,CAACV,kBAAkB,EAAE;sBAC7B;oBACD;oBACA,MAAI,CAACA,kBAAkB,GAAGiD,SAAS;oBAEnCC,UAAU,CAAC,YAAM;sBAAA;sBAChB,kBAAAZ,KAAK,CAACf,MAAM,mDAAZ,eAAc4B,kBAAkB,EAAE;sBAClC,kBAAAb,KAAK,CAACd,MAAM,mDAAZ,eAAc2B,kBAAkB,EAAE;sBAClCb,KAAK,CAACa,kBAAkB,EAAE;sBAE1B,IAAI/B,IAAI,KAAK,CAAC,IAAI,MAAI,CAAClB,iBAAiB,IAAIG,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE+C,YAAY,EAAE;wBAClEzB,OAAO,CAAC;0BAAEJ,MAAM,EAANA;wBAAO,CAAC,CAAC;wBACnB,MAAI,CAACrB,iBAAiB,GAAG,KAAK;sBAC/B,CAAC,MAAM;wBACN,IAAIsB,MAAM,CAAC6B,MAAM,CAAC,IAAAC,wBAAY,EAACC,+BAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;0BACpD,IAAMC,WAAW,GAAGhC,MAAM,CAACiC,KAAK,CAACF,+BAAa,CAAC;0BAC/C,IAAMG,GAAG,GAAGC,iBAAmB,CAACC,KAAK,CAACJ,WAAW,CAAC,CAAC,CAAC,EAAEnC,uBAAW,CAAC;0BAClEO,MAAM,CAAC8B,GAAG,CAAC;0BACX;wBACD;wBAEA9B,MAAM,CACL,IAAIP,uBAAW,CAAC;0BACfD,IAAI,EAAE,0BAA0B;0BAChChB,GAAG,YAAKI,UAAU,cAAIF,IAAI,CAACgB,IAAI,CAAC,GAAG,CAAC,CAAE;0BACtCvB,GAAG,EAAHA,GAAG;0BACHwB,MAAM,EAANA,MAAM;0BACNC,MAAM,EAANA;wBACD,CAAC,CAAC,CACF;sBACF;oBACD,CAAC,EAAE,CAAC,CAAC;kBACN,CAAC;kBAEDc,KAAK,CAACI,WAAW,CAAC,OAAO,EAAEK,YAAY,CAAC;kBACxCT,KAAK,CAACI,WAAW,CAAC,MAAM,EAAEK,YAAY,CAAC;gBACxC,CAAC,CAAC;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CACF;MAAA;QAAA;MAAA;MAAA;IAAA;EAAA;IAAA;IAAA,OAaD,yBAAwBvC,UAAkB,EAAEF,IAAc,EAAE;MAC3D,IAAMU,OAAO,GAAG,UAAGR,UAAU,cAAIF,IAAI,CAACgB,IAAI,CAAC,GAAG,CAAC,EAAGuC,IAAI,EAAE;MACxD,IAAMC,QAAQ,GAAGhE,cAAc,CAACiE,aAAa;MAC7C,IAAMC,KAAK,GAAGF,QAAQ,CAACG,IAAI,CAAC,UAACC,CAAC;QAAA,OAC7BA,CAAC,CAACC,OAAO,YAAYC,MAAM,GACxBpD,OAAO,CAACqC,MAAM,CAACa,CAAC,CAACC,OAAO,CAAC,GAAG,CAAC,CAAC,GAC9BD,CAAC,CAACC,OAAO,CAACE,OAAO,CAAC,MAAO,EAAE,EAAE,CAAC,KAAKrD,OAAO,CAACqD,OAAO,CAAC,MAAO,EAAE,EAAE,CAAC;MAAA,EAClE;MAED,OAAO;QAAEtD,YAAY,EAAEiD,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEM,QAAQ;QAAEtD,OAAO,EAAPA;MAAQ,CAAC;IAClD;EAAC;IAAA;IAAA,OAED,qBAA0BmD,OAAwB,EAAEG,QAAsB,EAAE;MAC3E,IAAI,CAACP,aAAa,CAACQ,OAAO,CAAC;QAC1BJ,OAAO,EAAPA,OAAO;QACPG,QAAQ,EAARA;MACD,CAAC,CAAC;IACH;EAAC;IAAA;IAAA,OAED,8BAAmC;MAClC,IAAI,CAACP,aAAa,GAAG,EAAE;IACxB;EAAC;EAAA;AAAA;AAAA;AAAA,iCAjLmBjE,cAAc,mBAO5B,EAAE;AAAA,iCAPYA,cAAc,wCAQ4B,EAAE"}
1
+ {"version":3,"file":"CommandService.js","names":["process","setMaxListeners","CommandService","cwd","activeChildProcess","pid","ignoreCloseErrors","treeKill","cmd","options","args","stringArgv","executable","shift","boundKill","kill","bind","Error","getMockResponse","mockResponse","mockKey","commandsRunCapturedByMockResponses","push","callback","code","SpruceError","join","stdout","stderr","on","Promise","resolve","reject","spawnOptions","shouldStream","stdio","env","PATH","IS_CLI","FORCE_COLOR","forceColor","shell","child","spawn","outStream","pipe","addListener","data","onData","toString","onError","closeHandler","off","undefined","setTimeout","removeAllListeners","ignoreErrors","search","escapeRegExp","ERROR_DIVIDER","stderrParts","split","err","AbstractSpruceError","parse","trim","commands","mockResponses","match","find","r","command","RegExp","replace","response","unshift"],"sources":["../../src/services/CommandService.ts"],"sourcesContent":["import { spawn, SpawnOptions, ChildProcess } from 'child_process'\nimport { Writable } from 'stream'\nimport AbstractSpruceError from '@sprucelabs/error'\nimport { ERROR_DIVIDER } from '@sprucelabs/spruce-skill-utils'\nimport escapeRegExp from 'lodash/escapeRegExp'\nimport stringArgv from 'string-argv'\nimport treeKill from 'tree-kill'\nimport SpruceError from '../errors/SpruceError'\n\nprocess.setMaxListeners(100)\n\nexport default class CommandService {\n\tpublic cwd: string\n\tprivate activeChildProcess: ChildProcess | undefined\n\tprivate ignoreCloseErrors = false\n\tprivate static mockResponses: {\n\t\tcommand: string | RegExp\n\t\tresponse: MockResponse\n\t}[] = []\n\tprivate static commandsRunCapturedByMockResponses: string[] = []\n\n\tpublic constructor(cwd: string) {\n\t\tthis.cwd = cwd\n\t}\n\n\tpublic async execute(\n\t\tcmd: string,\n\t\toptions?: {\n\t\t\tignoreErrors?: boolean\n\t\t\targs?: string[]\n\t\t\tshouldStream?: boolean\n\t\t\toutStream?: Writable\n\t\t\tonError?: (error: string) => void\n\t\t\tonData?: (data: string) => void\n\t\t\tspawnOptions?: SpawnOptions\n\t\t\tforceColor?: boolean\n\t\t\tenv?: Record<string, any>\n\t\t}\n\t): Promise<{\n\t\tstdout: string\n\t}> {\n\t\tconst cwd = this.cwd\n\t\tconst args = options?.args || stringArgv(cmd)\n\t\tconst executable = options?.args ? cmd : args.shift()\n\t\tconst boundKill = this.kill.bind(this)\n\n\t\tif (!executable) {\n\t\t\tthrow new Error('Bad params sent to command service')\n\t\t}\n\n\t\tconst { mockResponse, mockKey } = this.getMockResponse(executable, args)\n\n\t\tif (mockResponse) {\n\t\t\tCommandService.commandsRunCapturedByMockResponses.push(mockKey)\n\t\t\tmockResponse.callback?.(executable, args)\n\n\t\t\tif (mockResponse.code !== 0) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\tcmd: `${executable} ${args.join(' ')}`,\n\t\t\t\t\tcwd,\n\t\t\t\t\tstdout: mockResponse.stdout,\n\t\t\t\t\tstderr: mockResponse.stderr,\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn { stdout: mockResponse.stdout ?? '' }\n\t\t}\n\n\t\tprocess.on('exit', boundKill)\n\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet stdout = ''\n\t\t\tlet stderr = ''\n\t\t\tconst spawnOptions: SpawnOptions = options?.shouldStream\n\t\t\t\t? {\n\t\t\t\t\t\tstdio: 'inherit',\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tPATH: process.env.PATH,\n\t\t\t\t\t\t\tIS_CLI: 'true',\n\t\t\t\t\t\t\tFORCE_COLOR: options?.forceColor ? '1' : '0',\n\t\t\t\t\t\t\t...options?.env,\n\t\t\t\t\t\t},\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tPATH: process.env.PATH,\n\t\t\t\t\t\t\tIS_CLI: 'true',\n\t\t\t\t\t\t\tFORCE_COLOR: options?.forceColor ? '1' : '0',\n\t\t\t\t\t\t\t...options?.env,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tshell: true,\n\t\t\t\t\t\t...options?.spawnOptions,\n\t\t\t\t }\n\n\t\t\tconst child = spawn(executable, args, spawnOptions)\n\t\t\tthis.activeChildProcess = child\n\n\t\t\tif (options?.outStream) {\n\t\t\t\tchild.stdout?.pipe(options.outStream)\n\t\t\t}\n\n\t\t\tchild.stdout?.addListener('data', (data) => {\n\t\t\t\toptions?.onData?.(data.toString())\n\t\t\t\tstdout += data\n\t\t\t})\n\n\t\t\tchild.stderr?.addListener('data', (data) => {\n\t\t\t\toptions?.onError?.(data.toString())\n\t\t\t\tstderr += data\n\t\t\t})\n\n\t\t\tconst closeHandler = (code: number) => {\n\t\t\t\tprocess.off('exit', boundKill)\n\n\t\t\t\tif (!this.activeChildProcess) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.activeChildProcess = undefined\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tchild.stdout?.removeAllListeners()\n\t\t\t\t\tchild.stderr?.removeAllListeners()\n\t\t\t\t\tchild.removeAllListeners()\n\n\t\t\t\t\tif (code === 0 || this.ignoreCloseErrors || options?.ignoreErrors) {\n\t\t\t\t\t\tresolve({ stdout })\n\t\t\t\t\t\tthis.ignoreCloseErrors = false\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (stderr.search(escapeRegExp(ERROR_DIVIDER)) > -1) {\n\t\t\t\t\t\t\tconst stderrParts = stderr.split(ERROR_DIVIDER)\n\t\t\t\t\t\t\tconst err = AbstractSpruceError.parse(stderrParts[1], SpruceError)\n\t\t\t\t\t\t\treject(err)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\t\t\tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\t\t\t\tcmd: `${executable} ${args.join(' ')}`,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t\tstdout,\n\t\t\t\t\t\t\t\tstderr,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}, 0)\n\t\t\t}\n\n\t\t\tchild.addListener('close', closeHandler)\n\t\t\tchild.addListener('exit', closeHandler)\n\t\t})\n\t}\n\n\tpublic kill = () => {\n\t\tif (this.activeChildProcess?.pid) {\n\t\t\tthis.ignoreCloseErrors = true\n\t\t\ttreeKill(this.activeChildProcess.pid, 'SIGTERM')\n\t\t}\n\t}\n\n\tpublic pid = () => {\n\t\treturn this.activeChildProcess?.pid\n\t}\n\n\tprivate getMockResponse(executable: string, args: string[]) {\n\t\tconst mockKey = `${executable} ${args.join(' ')}`.trim()\n\t\tconst commands = CommandService.mockResponses\n\t\tconst match = commands.find((r) =>\n\t\t\tr.command instanceof RegExp\n\t\t\t\t? mockKey.search(r.command) > -1\n\t\t\t\t: r.command.replace(/ +/gis, '') === mockKey.replace(/ +/gis, '')\n\t\t)\n\n\t\treturn { mockResponse: match?.response, mockKey }\n\t}\n\n\tpublic static fakeCommand(command: string | RegExp, response: MockResponse) {\n\t\tthis.mockResponses.unshift({\n\t\t\tcommand,\n\t\t\tresponse,\n\t\t})\n\t}\n\n\tpublic static clearMockResponses() {\n\t\tthis.mockResponses = []\n\t}\n}\n\ninterface MockResponse {\n\tcode: number\n\tstdout?: string\n\tstderr?: string\n\tcallback?: (executable: string, args: any[]) => void\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/parser",
3
- "version": "5.42.1",
3
+ "version": "5.43.0",
4
4
  "description": "An ESLint custom parser which leverages TypeScript ESTree",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -45,9 +45,9 @@
45
45
  "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
46
46
  },
47
47
  "dependencies": {
48
- "@typescript-eslint/scope-manager": "5.42.1",
49
- "@typescript-eslint/types": "5.42.1",
50
- "@typescript-eslint/typescript-estree": "5.42.1",
48
+ "@typescript-eslint/scope-manager": "5.43.0",
49
+ "@typescript-eslint/types": "5.43.0",
50
+ "@typescript-eslint/typescript-estree": "5.43.0",
51
51
  "debug": "^4.3.4"
52
52
  },
53
53
  "devDependencies": {
@@ -71,5 +71,5 @@
71
71
  ]
72
72
  }
73
73
  },
74
- "gitHead": "b8b24c211695c00317c93e1da1bf80b6d9c6837c"
74
+ "gitHead": "8af1b4d970438b27ea041717bddadc41af8fc72a"
75
75
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/scope-manager",
3
- "version": "5.42.1",
3
+ "version": "5.43.0",
4
4
  "description": "TypeScript scope analyser for ESLint",
5
5
  "keywords": [
6
6
  "eslint",
@@ -38,12 +38,12 @@
38
38
  "typecheck": "cd ../../ && nx typecheck @typescript-eslint/scope-manager"
39
39
  },
40
40
  "dependencies": {
41
- "@typescript-eslint/types": "5.42.1",
42
- "@typescript-eslint/visitor-keys": "5.42.1"
41
+ "@typescript-eslint/types": "5.43.0",
42
+ "@typescript-eslint/visitor-keys": "5.43.0"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/glob": "*",
46
- "@typescript-eslint/typescript-estree": "5.42.1",
46
+ "@typescript-eslint/typescript-estree": "5.43.0",
47
47
  "glob": "*",
48
48
  "jest-specific-snapshot": "*",
49
49
  "make-dir": "*",
@@ -63,5 +63,5 @@
63
63
  ]
64
64
  }
65
65
  },
66
- "gitHead": "b8b24c211695c00317c93e1da1bf80b6d9c6837c"
66
+ "gitHead": "8af1b4d970438b27ea041717bddadc41af8fc72a"
67
67
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/types",
3
- "version": "5.42.1",
3
+ "version": "5.43.0",
4
4
  "description": "Types for the TypeScript-ESTree AST spec",
5
5
  "keywords": [
6
6
  "eslint",
@@ -80,5 +80,5 @@
80
80
  "devDependencies": {
81
81
  "typescript": "*"
82
82
  },
83
- "gitHead": "b8b24c211695c00317c93e1da1bf80b6d9c6837c"
83
+ "gitHead": "8af1b4d970438b27ea041717bddadc41af8fc72a"
84
84
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/typescript-estree",
3
- "version": "5.42.1",
3
+ "version": "5.43.0",
4
4
  "description": "A parser that converts TypeScript source code into an ESTree compatible form",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -42,8 +42,8 @@
42
42
  "typecheck": "tsc -p tsconfig.json --noEmit"
43
43
  },
44
44
  "dependencies": {
45
- "@typescript-eslint/types": "5.42.1",
46
- "@typescript-eslint/visitor-keys": "5.42.1",
45
+ "@typescript-eslint/types": "5.43.0",
46
+ "@typescript-eslint/visitor-keys": "5.43.0",
47
47
  "debug": "^4.3.4",
48
48
  "globby": "^11.1.0",
49
49
  "is-glob": "^4.0.3",
@@ -59,7 +59,7 @@
59
59
  "@types/is-glob": "*",
60
60
  "@types/semver": "*",
61
61
  "@types/tmp": "*",
62
- "@typescript-eslint/shared-fixtures": "5.42.1",
62
+ "@typescript-eslint/shared-fixtures": "5.43.0",
63
63
  "glob": "*",
64
64
  "jest-specific-snapshot": "*",
65
65
  "make-dir": "*",
@@ -82,5 +82,5 @@
82
82
  ]
83
83
  }
84
84
  },
85
- "gitHead": "b8b24c211695c00317c93e1da1bf80b6d9c6837c"
85
+ "gitHead": "8af1b4d970438b27ea041717bddadc41af8fc72a"
86
86
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-eslint/visitor-keys",
3
- "version": "5.42.1",
3
+ "version": "5.43.0",
4
4
  "description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
5
5
  "keywords": [
6
6
  "eslint",
@@ -39,7 +39,7 @@
39
39
  "typecheck": "tsc -p tsconfig.json --noEmit"
40
40
  },
41
41
  "dependencies": {
42
- "@typescript-eslint/types": "5.42.1",
42
+ "@typescript-eslint/types": "5.43.0",
43
43
  "eslint-visitor-keys": "^3.3.0"
44
44
  },
45
45
  "devDependencies": {
@@ -56,5 +56,5 @@
56
56
  ]
57
57
  }
58
58
  },
59
- "gitHead": "b8b24c211695c00317c93e1da1bf80b6d9c6837c"
59
+ "gitHead": "8af1b4d970438b27ea041717bddadc41af8fc72a"
60
60
  }
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  },
20
20
  "license": "MIT",
21
- "version": "18.1.5",
21
+ "version": "18.1.6",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -86,7 +86,7 @@
86
86
  "@sprucelabs/spruce-core-schemas": "^35.1.51",
87
87
  "@sprucelabs/spruce-event-utils": "^29.1.54",
88
88
  "@sprucelabs/spruce-skill-utils": "^28.0.47",
89
- "@sprucelabs/spruce-templates": "^18.1.5",
89
+ "@sprucelabs/spruce-templates": "^18.1.6",
90
90
  "@typescript-eslint/eslint-plugin": "^5.27.1",
91
91
  "@typescript-eslint/parser": "^5.27.1",
92
92
  "cfonts": "^3.1.1",
@@ -561,5 +561,5 @@
561
561
  "terminal-kit"
562
562
  ]
563
563
  },
564
- "gitHead": "79c031341a14adef0924d8cef423bbc99400ddbd"
564
+ "gitHead": "29344d4c0e5571279c2c87dc7c036a2d7dec5a97"
565
565
  }