@jujulego/jill 1.1.14 → 1.1.18

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 (69) hide show
  1. package/dist/base.command.d.ts +8 -0
  2. package/dist/base.command.js +33 -0
  3. package/dist/command.d.ts +21 -0
  4. package/dist/command.js +69 -0
  5. package/dist/commands/each.command.d.ts +17 -0
  6. package/dist/commands/each.command.js +115 -0
  7. package/dist/commands/info.command.d.ts +9 -0
  8. package/dist/commands/info.command.js +83 -0
  9. package/dist/commands/list.command.d.ts +22 -0
  10. package/dist/commands/list.command.js +177 -0
  11. package/dist/commands/run.command.d.ts +13 -0
  12. package/dist/commands/run.command.js +60 -0
  13. package/dist/filters/affected.js +3 -4
  14. package/dist/filters/filter.js +2 -1
  15. package/dist/filters/index.js +2 -1
  16. package/dist/index.d.ts +4 -9
  17. package/dist/index.js +13 -26
  18. package/dist/logger.d.ts +6 -23
  19. package/dist/logger.js +29 -119
  20. package/dist/main.js +19 -132
  21. package/dist/myr/commands/kill.command.d.ts +11 -0
  22. package/dist/myr/commands/kill.command.js +52 -0
  23. package/dist/myr/commands/list.command.d.ts +18 -0
  24. package/dist/myr/commands/list.command.js +127 -0
  25. package/dist/myr/commands/logs.command.d.ts +11 -0
  26. package/dist/myr/commands/logs.command.js +83 -0
  27. package/dist/myr/commands/spawn.command.d.ts +11 -0
  28. package/dist/myr/commands/spawn.command.js +45 -0
  29. package/dist/myr/commands/stop.command.d.ts +7 -0
  30. package/dist/myr/commands/stop.command.js +43 -0
  31. package/dist/myr/myr-client.d.ts +12 -5
  32. package/dist/myr/myr-client.js +106 -281
  33. package/dist/myr/myr.command.d.ts +8 -0
  34. package/dist/myr/myr.command.js +46 -0
  35. package/dist/myr/myr.process.js +3 -2
  36. package/dist/myr/watch.command.d.ts +13 -0
  37. package/dist/myr/watch.command.js +87 -0
  38. package/dist/pipeline.js +2 -1
  39. package/dist/plugin.d.ts +11 -0
  40. package/dist/plugin.js +40 -0
  41. package/dist/project.command.d.ts +13 -0
  42. package/dist/project.command.js +58 -0
  43. package/dist/task-logger.js +6 -5
  44. package/dist/utils/cli-list.js +2 -1
  45. package/dist/workspace.command.d.ts +12 -0
  46. package/dist/workspace.command.js +55 -0
  47. package/package.json +32 -22
  48. package/dist/commands/each.d.ts +0 -12
  49. package/dist/commands/each.js +0 -74
  50. package/dist/commands/info.d.ts +0 -5
  51. package/dist/commands/info.js +0 -42
  52. package/dist/commands/list.d.ts +0 -15
  53. package/dist/commands/list.js +0 -119
  54. package/dist/commands/run.d.ts +0 -9
  55. package/dist/commands/run.js +0 -43
  56. package/dist/myr/command.d.ts +0 -2
  57. package/dist/myr/command.js +0 -50
  58. package/dist/myr/commands/kill.d.ts +0 -5
  59. package/dist/myr/commands/kill.js +0 -34
  60. package/dist/myr/commands/list.d.ts +0 -10
  61. package/dist/myr/commands/list.js +0 -91
  62. package/dist/myr/commands/spawn.d.ts +0 -7
  63. package/dist/myr/commands/spawn.js +0 -39
  64. package/dist/myr/watch.d.ts +0 -8
  65. package/dist/myr/watch.js +0 -79
  66. package/dist/utils/deps-tree.d.ts +0 -2
  67. package/dist/utils/deps-tree.js +0 -51
  68. package/dist/wrapper.d.ts +0 -9
  69. package/dist/wrapper.js +0 -38
@@ -5,15 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.MyrClient = void 0;
7
7
 
8
+ var _jillCore = require("@jujulego/jill-core");
9
+
8
10
  var _jillMyr = require("@jujulego/jill-myr");
9
11
 
12
+ var _repeater = require("@repeaterjs/repeater");
13
+
10
14
  var _child_process = require("child_process");
11
15
 
16
+ var _graphql = require("graphql");
17
+
12
18
  var _graphqlRequest = require("graphql-request");
13
19
 
20
+ var _graphqlWs = require("graphql-ws");
21
+
22
+ var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
23
+
14
24
  var _path = _interopRequireDefault(require("path"));
15
25
 
16
- var _logger = require("../logger");
26
+ var _ws = _interopRequireDefault(require("ws"));
17
27
 
18
28
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
29
 
@@ -26,13 +36,19 @@ class MyrClient {
26
36
  constructor(project) {
27
37
  this.project = project;
28
38
 
29
- _defineProperty(this, "_logger", _logger.logger.child({
39
+ _defineProperty(this, "_logger", _jillCore.logger.child({
30
40
  context: MyrClient.name
31
41
  }));
32
42
 
33
43
  _defineProperty(this, "_endpoint", 'http://localhost:5001/graphql');
34
44
 
35
45
  _defineProperty(this, "_qclient", new _graphqlRequest.GraphQLClient(this._endpoint));
46
+
47
+ _defineProperty(this, "_sclient", (0, _graphqlWs.createClient)({
48
+ url: this._endpoint.replace(/^http/, 'ws'),
49
+ webSocketImpl: _ws.default,
50
+ lazy: true
51
+ }));
36
52
  } // Methods
37
53
 
38
54
 
@@ -50,6 +66,28 @@ class MyrClient {
50
66
  }
51
67
  }
52
68
 
69
+ _subscription(query, variables) {
70
+ return new _repeater.Repeater((push, stop) => {
71
+ this._sclient.subscribe({
72
+ query: (0, _graphql.print)(query),
73
+ variables
74
+ }, {
75
+ next(value) {
76
+ push(value.data).then();
77
+ },
78
+
79
+ error(error) {
80
+ stop(error);
81
+ },
82
+
83
+ complete() {
84
+ stop();
85
+ }
86
+
87
+ });
88
+ });
89
+ }
90
+
53
91
  start() {
54
92
  const child = (0, _child_process.fork)(_path.default.resolve(__dirname, './myr.process'), [], {
55
93
  cwd: this.project.root,
@@ -66,11 +104,11 @@ class MyrClient {
66
104
  ...meta
67
105
  } = JSON.parse(line);
68
106
 
69
- _logger.logger.log(level, message, meta);
107
+ _jillCore.logger.log(level, message, meta);
70
108
  }
71
109
  });
72
110
  child.stderr?.on('data', msg => {
73
- _logger.logger.error(msg.toString('utf-8'));
111
+ _jillCore.logger.error(msg.toString('utf-8'));
74
112
  }); // Start server
75
113
 
76
114
  return new Promise((resolve, reject) => {
@@ -88,58 +126,33 @@ class MyrClient {
88
126
  });
89
127
  }
90
128
 
129
+ async stop() {
130
+ try {
131
+ await this._qclient.request((0, _graphqlTag.default)`
132
+ mutation Shutdown {
133
+ shutdown
134
+ }
135
+ `);
136
+ return true;
137
+ } catch (error) {
138
+ if (error.code !== 'ECONNREFUSED') throw error;
139
+ return false;
140
+ }
141
+ }
142
+
91
143
  async tasks() {
92
144
  return await this._autoStart(async () => {
93
145
  const {
94
146
  tasks
95
- } = await this._qclient.request({
96
- "kind": "Document",
97
- "definitions": [{
98
- "kind": "OperationDefinition",
99
- "operation": "query",
100
- "name": {
101
- "kind": "Name",
102
- "value": "Tasks"
103
- },
104
- "variableDefinitions": [],
105
- "directives": [],
106
- "selectionSet": {
107
- "kind": "SelectionSet",
108
- "selections": [{
109
- "kind": "Field",
110
- "name": {
111
- "kind": "Name",
112
- "value": "tasks"
113
- },
114
- "arguments": [],
115
- "directives": [],
116
- "selectionSet": {
117
- "kind": "SelectionSet",
118
- "selections": [{
119
- "kind": "FragmentSpread",
120
- "name": {
121
- "kind": "Name",
122
- "value": "Task"
123
- },
124
- "directives": []
125
- }]
147
+ } = await this._qclient.request((0, _graphqlTag.default)`
148
+ query Tasks {
149
+ tasks {
150
+ ...Task
126
151
  }
127
- }]
128
- }
129
- }].concat(_jillMyr.TaskFragment.definitions).reduce((acc, definition) => definition.kind === 'FragmentDefinition' && acc.find(curDef => curDef.kind === 'FragmentDefinition' && curDef.name.value === definition.name.value) ? acc : acc.concat(definition), []),
130
- "loc": {
131
- "start": 0,
132
- "end": 119,
133
- "source": {
134
- "body": "\n query Tasks {\n tasks {\n ...Task\n }\n }\n\n \n ",
135
- "name": "GraphQL request",
136
- "locationOffset": {
137
- "line": 1,
138
- "column": 1
139
- }
140
152
  }
141
- }
142
- });
153
+
154
+ ${_jillMyr.TaskFragment}
155
+ `);
143
156
  return tasks;
144
157
  });
145
158
  }
@@ -148,159 +161,15 @@ class MyrClient {
148
161
  return await this._autoStart(async () => {
149
162
  const {
150
163
  spawn
151
- } = await this._qclient.request({
152
- "kind": "Document",
153
- "definitions": [{
154
- "kind": "OperationDefinition",
155
- "operation": "mutation",
156
- "name": {
157
- "kind": "Name",
158
- "value": "Spawn"
159
- },
160
- "variableDefinitions": [{
161
- "kind": "VariableDefinition",
162
- "variable": {
163
- "kind": "Variable",
164
- "name": {
165
- "kind": "Name",
166
- "value": "cwd"
167
- }
168
- },
169
- "type": {
170
- "kind": "NonNullType",
171
- "type": {
172
- "kind": "NamedType",
173
- "name": {
174
- "kind": "Name",
175
- "value": "String"
176
- }
164
+ } = await this._qclient.request((0, _graphqlTag.default)`
165
+ mutation Spawn($cwd: String!, $cmd: String!, $args: [String!]!) {
166
+ spawn(cwd: $cwd, cmd: $cmd, args: $args) {
167
+ ...Task
177
168
  }
178
- },
179
- "directives": []
180
- }, {
181
- "kind": "VariableDefinition",
182
- "variable": {
183
- "kind": "Variable",
184
- "name": {
185
- "kind": "Name",
186
- "value": "cmd"
187
- }
188
- },
189
- "type": {
190
- "kind": "NonNullType",
191
- "type": {
192
- "kind": "NamedType",
193
- "name": {
194
- "kind": "Name",
195
- "value": "String"
196
- }
197
- }
198
- },
199
- "directives": []
200
- }, {
201
- "kind": "VariableDefinition",
202
- "variable": {
203
- "kind": "Variable",
204
- "name": {
205
- "kind": "Name",
206
- "value": "args"
207
- }
208
- },
209
- "type": {
210
- "kind": "NonNullType",
211
- "type": {
212
- "kind": "ListType",
213
- "type": {
214
- "kind": "NonNullType",
215
- "type": {
216
- "kind": "NamedType",
217
- "name": {
218
- "kind": "Name",
219
- "value": "String"
220
- }
221
- }
222
- }
223
- }
224
- },
225
- "directives": []
226
- }],
227
- "directives": [],
228
- "selectionSet": {
229
- "kind": "SelectionSet",
230
- "selections": [{
231
- "kind": "Field",
232
- "name": {
233
- "kind": "Name",
234
- "value": "spawn"
235
- },
236
- "arguments": [{
237
- "kind": "Argument",
238
- "name": {
239
- "kind": "Name",
240
- "value": "cwd"
241
- },
242
- "value": {
243
- "kind": "Variable",
244
- "name": {
245
- "kind": "Name",
246
- "value": "cwd"
247
- }
248
- }
249
- }, {
250
- "kind": "Argument",
251
- "name": {
252
- "kind": "Name",
253
- "value": "cmd"
254
- },
255
- "value": {
256
- "kind": "Variable",
257
- "name": {
258
- "kind": "Name",
259
- "value": "cmd"
260
- }
261
- }
262
- }, {
263
- "kind": "Argument",
264
- "name": {
265
- "kind": "Name",
266
- "value": "args"
267
- },
268
- "value": {
269
- "kind": "Variable",
270
- "name": {
271
- "kind": "Name",
272
- "value": "args"
273
- }
274
- }
275
- }],
276
- "directives": [],
277
- "selectionSet": {
278
- "kind": "SelectionSet",
279
- "selections": [{
280
- "kind": "FragmentSpread",
281
- "name": {
282
- "kind": "Name",
283
- "value": "Task"
284
- },
285
- "directives": []
286
- }]
287
- }
288
- }]
289
- }
290
- }].concat(_jillMyr.TaskFragment.definitions).reduce((acc, definition) => definition.kind === 'FragmentDefinition' && acc.find(curDef => curDef.kind === 'FragmentDefinition' && curDef.name.value === definition.name.value) ? acc : acc.concat(definition), []),
291
- "loc": {
292
- "start": 0,
293
- "end": 206,
294
- "source": {
295
- "body": "\n mutation Spawn($cwd: String!, $cmd: String!, $args: [String!]!) {\n spawn(cwd: $cwd, cmd: $cmd, args: $args) {\n ...Task\n }\n }\n\n \n ",
296
- "name": "GraphQL request",
297
- "locationOffset": {
298
- "line": 1,
299
- "column": 1
300
- }
301
169
  }
302
- }
303
- }, {
170
+
171
+ ${_jillMyr.TaskFragment}
172
+ `, {
304
173
  cwd,
305
174
  cmd,
306
175
  args
@@ -313,91 +182,46 @@ class MyrClient {
313
182
  return await this.spawn(wks.cwd, await wks.project.packageManager(), [script, ...args]);
314
183
  }
315
184
 
185
+ async logs() {
186
+ try {
187
+ const res = await this._qclient.request((0, _graphqlTag.default)`
188
+ query Logs {
189
+ logs
190
+ }
191
+ `);
192
+ return res.logs;
193
+ } catch (error) {
194
+ if (error.code !== 'ECONNREFUSED') throw error;
195
+ return [];
196
+ }
197
+ }
198
+
199
+ async *logs$() {
200
+ try {
201
+ for await (const {
202
+ log
203
+ } of this._subscription((0, _graphqlTag.default)`subscription Logs { log }`, {})) {
204
+ yield log;
205
+ }
206
+ } catch (error) {
207
+ if (error.code !== 'ECONNREFUSED') throw error;
208
+ return;
209
+ }
210
+ }
211
+
316
212
  async kill(id) {
317
213
  return await this._autoStart(async () => {
318
214
  const {
319
215
  kill
320
- } = await this._qclient.request({
321
- "kind": "Document",
322
- "definitions": [{
323
- "kind": "OperationDefinition",
324
- "operation": "mutation",
325
- "name": {
326
- "kind": "Name",
327
- "value": "Kill"
328
- },
329
- "variableDefinitions": [{
330
- "kind": "VariableDefinition",
331
- "variable": {
332
- "kind": "Variable",
333
- "name": {
334
- "kind": "Name",
335
- "value": "id"
216
+ } = await this._qclient.request((0, _graphqlTag.default)`
217
+ mutation Kill($id: ID!) {
218
+ kill(id: $id) {
219
+ ...Task
336
220
  }
337
- },
338
- "type": {
339
- "kind": "NonNullType",
340
- "type": {
341
- "kind": "NamedType",
342
- "name": {
343
- "kind": "Name",
344
- "value": "ID"
345
- }
346
- }
347
- },
348
- "directives": []
349
- }],
350
- "directives": [],
351
- "selectionSet": {
352
- "kind": "SelectionSet",
353
- "selections": [{
354
- "kind": "Field",
355
- "name": {
356
- "kind": "Name",
357
- "value": "kill"
358
- },
359
- "arguments": [{
360
- "kind": "Argument",
361
- "name": {
362
- "kind": "Name",
363
- "value": "id"
364
- },
365
- "value": {
366
- "kind": "Variable",
367
- "name": {
368
- "kind": "Name",
369
- "value": "id"
370
- }
371
- }
372
- }],
373
- "directives": [],
374
- "selectionSet": {
375
- "kind": "SelectionSet",
376
- "selections": [{
377
- "kind": "FragmentSpread",
378
- "name": {
379
- "kind": "Name",
380
- "value": "Task"
381
- },
382
- "directives": []
383
- }]
384
- }
385
- }]
386
- }
387
- }].concat(_jillMyr.TaskFragment.definitions).reduce((acc, definition) => definition.kind === 'FragmentDefinition' && acc.find(curDef => curDef.kind === 'FragmentDefinition' && curDef.name.value === definition.name.value) ? acc : acc.concat(definition), []),
388
- "loc": {
389
- "start": 0,
390
- "end": 139,
391
- "source": {
392
- "body": "\n mutation Kill($id: ID!) {\n kill(id: $id) {\n ...Task\n }\n }\n\n \n ",
393
- "name": "GraphQL request",
394
- "locationOffset": {
395
- "line": 1,
396
- "column": 1
397
- }
398
221
  }
399
- }
400
- }, {
222
+
223
+ ${_jillMyr.TaskFragment}
224
+ `, {
401
225
  id
402
226
  });
403
227
  return kill;
@@ -406,4 +230,5 @@ class MyrClient {
406
230
 
407
231
  }
408
232
 
409
- exports.MyrClient = MyrClient;
233
+ exports.MyrClient = MyrClient;
234
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm15ci9teXItY2xpZW50LnRzIl0sIm5hbWVzIjpbIk15ckNsaWVudCIsImNvbnN0cnVjdG9yIiwicHJvamVjdCIsImxvZ2dlciIsImNoaWxkIiwiY29udGV4dCIsIm5hbWUiLCJHcmFwaFFMQ2xpZW50IiwiX2VuZHBvaW50IiwidXJsIiwicmVwbGFjZSIsIndlYlNvY2tldEltcGwiLCJXZWJTb2NrZXQiLCJsYXp5IiwiX2F1dG9TdGFydCIsImZuIiwiZXJyb3IiLCJjb2RlIiwiX2xvZ2dlciIsInZlcmJvc2UiLCJzdGFydCIsIl9zdWJzY3JpcHRpb24iLCJxdWVyeSIsInZhcmlhYmxlcyIsIlJlcGVhdGVyIiwicHVzaCIsInN0b3AiLCJfc2NsaWVudCIsInN1YnNjcmliZSIsIm5leHQiLCJ2YWx1ZSIsImRhdGEiLCJ0aGVuIiwiY29tcGxldGUiLCJwYXRoIiwicmVzb2x2ZSIsIl9fZGlybmFtZSIsImN3ZCIsInJvb3QiLCJkZXRhY2hlZCIsInN0ZGlvIiwic3Rkb3V0Iiwib24iLCJtc2ciLCJsaW5lIiwidG9TdHJpbmciLCJzcGxpdCIsImxldmVsIiwibWVzc2FnZSIsIm1ldGEiLCJKU09OIiwicGFyc2UiLCJsb2ciLCJzdGRlcnIiLCJQcm9taXNlIiwicmVqZWN0Iiwic2lnbmFsIiwiRXJyb3IiLCJzZW5kIiwiX3FjbGllbnQiLCJyZXF1ZXN0IiwidGFza3MiLCJUYXNrRnJhZ21lbnQiLCJzcGF3biIsImNtZCIsImFyZ3MiLCJzcGF3blNjcmlwdCIsIndrcyIsInNjcmlwdCIsInBhY2thZ2VNYW5hZ2VyIiwibG9ncyIsInJlcyIsImxvZ3MkIiwia2lsbCIsImlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQVVBO0FBQ08sTUFBTUEsU0FBTixDQUFnQjtBQUNyQjtBQVVBO0FBQ0FDLEVBQUFBLFdBQVcsQ0FDQUMsT0FEQSxFQUVUO0FBQUEsU0FE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O0FBQ2QsVUFBSUEsS0FBSyxDQUFDQyxJQUFOLEtBQWUsY0FBbkIsRUFBbUMsTUFBTUQsS0FBTjtBQUVuQyxhQUFPLEVBQVA7QUFDRDtBQUNGOztBQUVXLFNBQUx3RCxLQUFLLEdBQXdCO0FBQ2xDLFFBQUk7QUFDRixpQkFBVyxNQUFNO0FBQUVwQixRQUFBQTtBQUFGLE9BQWpCLElBQTRCLEtBQUsvQixhQUFMLENBQWlDLHdCQUFJLDJCQUFyQyxFQUFpRSxFQUFqRSxDQUE1QixFQUFrRztBQUNoRyxjQUFNK0IsR0FBTjtBQUNEO0FBQ0YsS0FKRCxDQUlFLE9BQU9wQyxLQUFQLEVBQWM7QUFDZCxVQUFJQSxLQUFLLENBQUNDLElBQU4sS0FBZSxjQUFuQixFQUFtQyxNQUFNRCxLQUFOO0FBRW5DO0FBQ0Q7QUFDRjs7QUFFUyxRQUFKeUQsSUFBSSxDQUFDQyxFQUFELEVBQXdDO0FBQ2hELFdBQU8sTUFBTSxLQUFLNUQsVUFBTCxDQUFnQixZQUFZO0FBQ3ZDLFlBQU07QUFBRTJELFFBQUFBO0FBQUYsVUFBVyxNQUFNLEtBQUtkLFFBQUwsQ0FBY0MsT0FBZCxDQUFrRCx3QkFBSTtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZRSxxQkFBYTtBQUN6QixPQVI2QixFQVFwQjtBQUFFWSxRQUFBQTtBQUFGLE9BUm9CLENBQXZCO0FBVUEsYUFBT0QsSUFBUDtBQUNELEtBWlksQ0FBYjtBQWFEOztBQXJMb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIsIFByb2plY3QsIFdvcmtzcGFjZSB9IGZyb20gJ0BqdWp1bGVnby9qaWxsLWNvcmUnO1xuaW1wb3J0IHsgU3Bhd25BcmdzLCBUYXNrLCBUYXNrRnJhZ21lbnQgfSBmcm9tICdAanVqdWxlZ28vamlsbC1teXInO1xuaW1wb3J0IHsgUmVwZWF0ZXIgfSBmcm9tICdAcmVwZWF0ZXJqcy9yZXBlYXRlcic7XG5pbXBvcnQgeyBmb3JrIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBEb2N1bWVudE5vZGUsIHByaW50IH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBHcmFwaFFMQ2xpZW50IH0gZnJvbSAnZ3JhcGhxbC1yZXF1ZXN0JztcbmltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ2dyYXBocWwtd3MnO1xuaW1wb3J0IGdxbCBmcm9tICdncmFwaHFsLXRhZyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuXG5cbi8vIFR5cGVzXG50eXBlIElMb2cgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHtcbiAgLy8gQXR0cmlidXRlc1xuICBsZXZlbDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG4vLyBDbGFzc1xuZXhwb3J0IGNsYXNzIE15ckNsaWVudCB7XG4gIC8vIEF0dHJpYnV0ZXNcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyID0gbG9nZ2VyLmNoaWxkKHsgY29udGV4dDogTXlyQ2xpZW50Lm5hbWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VuZHBvaW50ID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6NTAwMS9ncmFwaHFsJztcbiAgcHJpdmF0ZSByZWFkb25seSBfcWNsaWVudCA9IG5ldyBHcmFwaFFMQ2xpZW50KHRoaXMuX2VuZHBvaW50KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2NsaWVudCA9IGNyZWF0ZUNsaWVudCh7XG4gICAgdXJsOiB0aGlzLl9lbmRwb2ludC5yZXBsYWNlKC9eaHR0cC8sICd3cycpLFxuICAgIHdlYlNvY2tldEltcGw6IFdlYlNvY2tldCxcbiAgICBsYXp5OiB0cnVlXG4gIH0pO1xuXG4gIC8vIENvbnN0cnVjdG9yXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHByb2plY3Q6IFByb2plY3QsXG4gICkge31cblxuICAvLyBNZXRob2RzXG4gIHByb3RlY3RlZCBhc3luYyBfYXV0b1N0YXJ0PFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuY29kZSAhPT0gJ0VDT05OUkVGVVNFRCcpIHRocm93IGVycm9yO1xuXG4gICAgICAvLyBTdGFydCBteXIgaWYgY29ubmVjdGlvbiBpbXBvc3NpYmxlXG4gICAgICB0aGlzLl9sb2dnZXIudmVyYm9zZSgnVW5hYmxlIHRvIGNvbm5lY3QgdG8gbXlyIHNlcnZlciwgdHJ5aW5nIHRvIHN0YXJ0IGl0Jyk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KCk7XG5cbiAgICAgIC8vIFJldHJ5XG4gICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgX3N1YnNjcmlwdGlvbjxUPihxdWVyeTogRG9jdW1lbnROb2RlLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVwZWF0ZXI8VD4ge1xuICAgIHJldHVybiBuZXcgUmVwZWF0ZXI8VD4oKHB1c2gsIHN0b3ApID0+IHtcbiAgICAgIHRoaXMuX3NjbGllbnQuc3Vic2NyaWJlPFQ+KHsgcXVlcnk6IHByaW50KHF1ZXJ5KSwgdmFyaWFibGVzIH0sIHtcbiAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgIHB1c2godmFsdWUuZGF0YSEpLnRoZW4oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IoZXJyb3IpIHtcbiAgICAgICAgICBzdG9wKGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgc3RvcCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkID0gZm9yayhwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi9teXIucHJvY2VzcycpLCBbXSwge1xuICAgICAgY3dkOiB0aGlzLnByb2plY3Qucm9vdCxcbiAgICAgIGRldGFjaGVkOiB0cnVlLFxuICAgICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZScsICdpcGMnXSxcbiAgICB9KTtcblxuICAgIC8vIFRyYW5zbWl0IGxvZ3MgdG8gbG9nZ2VyXG4gICAgY2hpbGQuc3Rkb3V0Py5vbignZGF0YScsIChtc2c6IEJ1ZmZlcikgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG1zZy50b1N0cmluZygndXRmLTgnKS5zcGxpdCgnXFxuJykpIHtcbiAgICAgICAgaWYgKCFsaW5lKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCB7IGxldmVsLCBtZXNzYWdlLCAuLi5tZXRhIH0gPSBKU09OLnBhcnNlKGxpbmUpIGFzIElMb2c7XG4gICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hpbGQuc3RkZXJyPy5vbignZGF0YScsIChtc2c6IEJ1ZmZlcikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKG1zZy50b1N0cmluZygndXRmLTgnKSk7XG4gICAgfSk7XG5cbiAgICAvLyBTdGFydCBzZXJ2ZXJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2hpbGQub24oJ21lc3NhZ2UnLCAobXNnOiAnc3RhcnRlZCcgfCBFcnJvcikgPT4ge1xuICAgICAgICBpZiAobXNnID09PSAnc3RhcnRlZCcpIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGlsZC5vbignY2xvc2UnLCAoY29kZSwgc2lnbmFsKSA9PiB7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE15ciBwcm9jZXNzIGVuZGVkIHdpdGggY29kZSAke2NvZGV9IGJ5IHNpZ25hbCAke3NpZ25hbH1gKSk7XG4gICAgICB9KTtcblxuICAgICAgY2hpbGQuc2VuZCgnc3RhcnQnKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHN0b3AoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3FjbGllbnQucmVxdWVzdChncWxgXG4gICAgICAgIG11dGF0aW9uIFNodXRkb3duIHtcbiAgICAgICAgICAgIHNodXRkb3duXG4gICAgICAgIH1cbiAgICBgKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRUNPTk5SRUZVU0VEJykgdGhyb3cgZXJyb3I7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0YXNrcygpOiBQcm9taXNlPFRhc2tbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9hdXRvU3RhcnQoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgeyB0YXNrcyB9ID0gYXdhaXQgdGhpcy5fcWNsaWVudC5yZXF1ZXN0PHsgdGFza3M6IFRhc2tbXSB9PihncWxgXG4gICAgICAgICAgcXVlcnkgVGFza3Mge1xuICAgICAgICAgICAgICB0YXNrcyB7XG4gICAgICAgICAgICAgICAgICAuLi5UYXNrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAke1Rhc2tGcmFnbWVudH1cbiAgICAgIGApO1xuXG4gICAgICByZXR1cm4gdGFza3M7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzcGF3bihjd2Q6IHN0cmluZywgY21kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPFRhc2s+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fYXV0b1N0YXJ0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc3Bhd24gfSA9IGF3YWl0IHRoaXMuX3FjbGllbnQucmVxdWVzdDx7IHNwYXduOlRhc2sgfSxTcGF3bkFyZ3M+KGdxbGBcbiAgICAgICAgICBtdXRhdGlvbiBTcGF3bigkY3dkOiBTdHJpbmchLCAkY21kOiBTdHJpbmchLCAkYXJnczogW1N0cmluZyFdISkge1xuICAgICAgICAgICAgICBzcGF3bihjd2Q6ICRjd2QsIGNtZDogJGNtZCwgYXJnczogJGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgIC4uLlRhc2tcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7VGFza0ZyYWdtZW50fVxuICAgICAgYCwgeyBjd2QsIGNtZCwgYXJncyB9KTtcblxuICAgICAgcmV0dXJuIHNwYXduO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3Bhd25TY3JpcHQod2tzOiBXb3Jrc3BhY2UsIHNjcmlwdDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSA9IFtdKTogUHJvbWlzZTxUYXNrPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc3Bhd24od2tzLmN3ZCwgYXdhaXQgd2tzLnByb2plY3QucGFja2FnZU1hbmFnZXIoKSwgW3NjcmlwdCwgLi4uYXJnc10pO1xuICB9XG5cbiAgYXN5bmMgbG9ncygpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuX3FjbGllbnQucmVxdWVzdDx7IGxvZ3M6IGFueVtdIH0+KGdxbGBcbiAgICAgICAgICBxdWVyeSBMb2dzIHtcbiAgICAgICAgICAgICAgbG9nc1xuICAgICAgICAgIH1cbiAgICAgIGApO1xuXG4gICAgICByZXR1cm4gcmVzLmxvZ3M7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRUNPTk5SRUZVU0VEJykgdGhyb3cgZXJyb3I7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyogbG9ncyQoKTogQXN5bmNHZW5lcmF0b3I8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgeyBsb2cgfSBvZiB0aGlzLl9zdWJzY3JpcHRpb248eyBsb2c6IGFueSB9PihncWxgc3Vic2NyaXB0aW9uIExvZ3MgeyBsb2cgfWAsIHt9KSkge1xuICAgICAgICB5aWVsZCBsb2c7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5jb2RlICE9PSAnRUNPTk5SRUZVU0VEJykgdGhyb3cgZXJyb3I7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBraWxsKGlkOiBzdHJpbmcpOiBQcm9taXNlPFRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fYXV0b1N0YXJ0KGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHsga2lsbCB9ID0gYXdhaXQgdGhpcy5fcWNsaWVudC5yZXF1ZXN0PHsga2lsbDogVGFzayB8IHVuZGVmaW5lZCB9PihncWxgXG4gICAgICAgICAgbXV0YXRpb24gS2lsbCgkaWQ6IElEISkge1xuICAgICAgICAgICAgICBraWxsKGlkOiAkaWQpIHtcbiAgICAgICAgICAgICAgICAgIC4uLlRhc2tcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICR7VGFza0ZyYWdtZW50fVxuICAgICAgYCwgeyBpZCB9KTtcblxuICAgICAgcmV0dXJuIGtpbGw7XG4gICAgfSk7XG4gIH1cbn0iXSwiZmlsZSI6Im15ci9teXItY2xpZW50LmpzIn0=
@@ -0,0 +1,8 @@
1
+ import { Builder, Command } from '../command';
2
+ export declare class MyrCommand extends Command {
3
+ readonly name = "myr";
4
+ readonly description = "Interact with myr server";
5
+ readonly commands: readonly Command[];
6
+ protected define<T, U>(builder: Builder<T, U>): Builder<T, U>;
7
+ protected run(): number;
8
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MyrCommand = void 0;
7
+
8
+ var _command = require("../command");
9
+
10
+ var _kill = require("./commands/kill.command");
11
+
12
+ var _list = require("./commands/list.command");
13
+
14
+ var _logs = require("./commands/logs.command");
15
+
16
+ var _spawn = require("./commands/spawn.command");
17
+
18
+ var _stop = require("./commands/stop.command");
19
+
20
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
+
22
+ // Command
23
+ class MyrCommand extends _command.Command {
24
+ constructor(...args) {
25
+ super(...args);
26
+
27
+ _defineProperty(this, "name", 'myr');
28
+
29
+ _defineProperty(this, "description", 'Interact with myr server');
30
+
31
+ _defineProperty(this, "commands", [new _kill.KillCommand(), new _list.ListCommand(), new _logs.LogsCommand(), new _spawn.SpawnCommand(), new _stop.StopCommand()]);
32
+ }
33
+
34
+ // Methods
35
+ define(builder) {
36
+ return yargs => this.commands.reduce((y, cmd) => cmd.setup(y), builder(yargs));
37
+ }
38
+
39
+ run() {
40
+ return 0;
41
+ }
42
+
43
+ }
44
+
45
+ exports.MyrCommand = MyrCommand;
46
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm15ci9teXIuY29tbWFuZC50cyJdLCJuYW1lcyI6WyJNeXJDb21tYW5kIiwiQ29tbWFuZCIsIktpbGxDb21tYW5kIiwiTGlzdENvbW1hbmQiLCJMb2dzQ29tbWFuZCIsIlNwYXduQ29tbWFuZCIsIlN0b3BDb21tYW5kIiwiZGVmaW5lIiwiYnVpbGRlciIsInlhcmdzIiwiY29tbWFuZHMiLCJyZWR1Y2UiLCJ5IiwiY21kIiwic2V0dXAiLCJydW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBO0FBQ08sTUFBTUEsVUFBTixTQUF5QkMsZ0JBQXpCLENBQWlDO0FBQUE7QUFBQTs7QUFBQSxrQ0FFdEIsS0FGc0I7O0FBQUEseUNBR2YsMEJBSGU7O0FBQUEsc0NBS0UsQ0FDdEMsSUFBSUMsaUJBQUosRUFEc0MsRUFFdEMsSUFBSUMsaUJBQUosRUFGc0MsRUFHdEMsSUFBSUMsaUJBQUosRUFIc0MsRUFJdEMsSUFBSUMsbUJBQUosRUFKc0MsRUFLdEMsSUFBSUMsaUJBQUosRUFMc0MsQ0FMRjtBQUFBOztBQWF0QztBQUNVQyxFQUFBQSxNQUFNLENBQU9DLE9BQVAsRUFBOEM7QUFDNUQsV0FBT0MsS0FBSyxJQUFJLEtBQUtDLFFBQUwsQ0FBY0MsTUFBZCxDQUFxQixDQUFDQyxDQUFELEVBQUlDLEdBQUosS0FBWUEsR0FBRyxDQUFDQyxLQUFKLENBQVVGLENBQVYsQ0FBakMsRUFBK0NKLE9BQU8sQ0FBQ0MsS0FBRCxDQUF0RCxDQUFoQjtBQUNEOztBQUVTTSxFQUFBQSxHQUFHLEdBQVc7QUFDdEIsV0FBTyxDQUFQO0FBQ0Q7O0FBcEJxQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkZXIsIENvbW1hbmQgfSBmcm9tICcuLi9jb21tYW5kJztcbmltcG9ydCB7IEtpbGxDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9raWxsLmNvbW1hbmQnO1xuaW1wb3J0IHsgTGlzdENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2xpc3QuY29tbWFuZCc7XG5pbXBvcnQgeyBMb2dzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbG9ncy5jb21tYW5kJztcbmltcG9ydCB7IFNwYXduQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvc3Bhd24uY29tbWFuZCc7XG5pbXBvcnQgeyBTdG9wQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvc3RvcC5jb21tYW5kJztcblxuLy8gQ29tbWFuZFxuZXhwb3J0IGNsYXNzIE15ckNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kIHtcbiAgLy8gUHJvcGVydGllc1xuICByZWFkb25seSBuYW1lID0gJ215cic7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gJ0ludGVyYWN0IHdpdGggbXlyIHNlcnZlcic7XG5cbiAgcmVhZG9ubHkgY29tbWFuZHM6IHJlYWRvbmx5IENvbW1hbmRbXSA9IFtcbiAgICBuZXcgS2lsbENvbW1hbmQoKSxcbiAgICBuZXcgTGlzdENvbW1hbmQoKSxcbiAgICBuZXcgTG9nc0NvbW1hbmQoKSxcbiAgICBuZXcgU3Bhd25Db21tYW5kKCksXG4gICAgbmV3IFN0b3BDb21tYW5kKCksXG4gIF07XG5cbiAgLy8gTWV0aG9kc1xuICBwcm90ZWN0ZWQgZGVmaW5lPFQsIFU+KGJ1aWxkZXI6IEJ1aWxkZXI8VCwgVT4pOiBCdWlsZGVyPFQsIFU+IHtcbiAgICByZXR1cm4geWFyZ3MgPT4gdGhpcy5jb21tYW5kcy5yZWR1Y2UoKHksIGNtZCkgPT4gY21kLnNldHVwKHkpLCBidWlsZGVyKHlhcmdzKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcnVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn0iXSwiZmlsZSI6Im15ci9teXIuY29tbWFuZC5qcyJ9
@@ -26,7 +26,7 @@ _jillCore.logger.add(trans); // Start server when parent is ready
26
26
  process.once('message', async () => {
27
27
  try {
28
28
  // Start server
29
- const server = new _jillMyr.MyrServer();
29
+ const server = await _jillMyr.MyrServer.createServer();
30
30
  await server.start();
31
31
 
32
32
  _jillCore.logger.remove(trans);
@@ -39,4 +39,5 @@ process.once('message', async () => {
39
39
  });
40
40
  process.exit(1);
41
41
  }
42
- });
42
+ });
43
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm15ci9teXIucHJvY2Vzcy50cyJdLCJuYW1lcyI6WyJ0cmFucyIsIndpbnN0b24iLCJ0cmFuc3BvcnRzIiwiQ29uc29sZSIsImxldmVsIiwiZm9ybWF0IiwiY29tYmluZSIsInRpbWVzdGFtcCIsIkRhdGUiLCJ0b0xvY2FsZVN0cmluZyIsImVycm9ycyIsImpzb24iLCJjb25zb2xlV2FybkxldmVscyIsInN0ZGVyckxldmVscyIsImxvZ2dlciIsImFkZCIsInByb2Nlc3MiLCJvbmNlIiwic2VydmVyIiwiTXlyU2VydmVyIiwiY3JlYXRlU2VydmVyIiwic3RhcnQiLCJyZW1vdmUiLCJzZW5kIiwiZXJyb3IiLCJuYW1lIiwibWVzc2FnZSIsImV4aXQiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBO0FBQ0EsTUFBTUEsS0FBSyxHQUFHLElBQUlDLGlCQUFRQyxVQUFSLENBQW1CQyxPQUF2QixDQUErQjtBQUMzQ0MsRUFBQUEsS0FBSyxFQUFFLE9BRG9DO0FBRTNDQyxFQUFBQSxNQUFNLEVBQUVBLGdCQUFPQyxPQUFQLENBQ05ELGdCQUFPRSxTQUFQLENBQWlCO0FBQUVGLElBQUFBLE1BQU0sRUFBRSxNQUFNLElBQUlHLElBQUosR0FBV0MsY0FBWDtBQUFoQixHQUFqQixDQURNLEVBRU5KLGdCQUFPSyxNQUFQLEVBRk0sRUFHTkwsZ0JBQU9NLElBQVAsRUFITSxDQUZtQztBQU8zQ0MsRUFBQUEsaUJBQWlCLEVBQUUsRUFQd0I7QUFRM0NDLEVBQUFBLFlBQVksRUFBRTtBQVI2QixDQUEvQixDQUFkOztBQVVBQyxpQkFBT0MsR0FBUCxDQUFXZixLQUFYLEUsQ0FFQTs7O0FBQ0FnQixPQUFPLENBQUNDLElBQVIsQ0FBYSxTQUFiLEVBQXdCLFlBQVk7QUFDbEMsTUFBSTtBQUNGO0FBQ0EsVUFBTUMsTUFBTSxHQUFHLE1BQU1DLG1CQUFVQyxZQUFWLEVBQXJCO0FBQ0EsVUFBTUYsTUFBTSxDQUFDRyxLQUFQLEVBQU47O0FBRUFQLHFCQUFPUSxNQUFQLENBQWN0QixLQUFkOztBQUNBZ0IsSUFBQUEsT0FBTyxDQUFDTyxJQUFSLEdBQWUsU0FBZjtBQUNELEdBUEQsQ0FPRSxPQUFPQyxLQUFQLEVBQWM7QUFDZFIsSUFBQUEsT0FBTyxDQUFDTyxJQUFSLEdBQWU7QUFBRUUsTUFBQUEsSUFBSSxFQUFFRCxLQUFLLENBQUNDLElBQWQ7QUFBb0JDLE1BQUFBLE9BQU8sRUFBRUYsS0FBSyxDQUFDRTtBQUFuQyxLQUFmO0FBQ0FWLElBQUFBLE9BQU8sQ0FBQ1csSUFBUixDQUFhLENBQWI7QUFDRDtBQUNGLENBWkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAanVqdWxlZ28vamlsbC1jb3JlJztcbmltcG9ydCB7IE15clNlcnZlciB9IGZyb20gJ0BqdWp1bGVnby9qaWxsLW15cic7XG5pbXBvcnQgd2luc3RvbiwgeyBmb3JtYXQgfSBmcm9tICd3aW5zdG9uJztcblxuLy8gU2V0dXAgbG9nZ2VyXG5jb25zdCB0cmFucyA9IG5ldyB3aW5zdG9uLnRyYW5zcG9ydHMuQ29uc29sZSh7XG4gIGxldmVsOiAnZGVidWcnLFxuICBmb3JtYXQ6IGZvcm1hdC5jb21iaW5lKFxuICAgIGZvcm1hdC50aW1lc3RhbXAoeyBmb3JtYXQ6ICgpID0+IG5ldyBEYXRlKCkudG9Mb2NhbGVTdHJpbmcoKSB9KSxcbiAgICBmb3JtYXQuZXJyb3JzKCksXG4gICAgZm9ybWF0Lmpzb24oKVxuICApLFxuICBjb25zb2xlV2FybkxldmVsczogW10sXG4gIHN0ZGVyckxldmVsczogW11cbn0pO1xubG9nZ2VyLmFkZCh0cmFucyk7XG5cbi8vIFN0YXJ0IHNlcnZlciB3aGVuIHBhcmVudCBpcyByZWFkeVxucHJvY2Vzcy5vbmNlKCdtZXNzYWdlJywgYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIC8vIFN0YXJ0IHNlcnZlclxuICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IE15clNlcnZlci5jcmVhdGVTZXJ2ZXIoKTtcbiAgICBhd2FpdCBzZXJ2ZXIuc3RhcnQoKTtcblxuICAgIGxvZ2dlci5yZW1vdmUodHJhbnMpO1xuICAgIHByb2Nlc3Muc2VuZD8uKCdzdGFydGVkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJvY2Vzcy5zZW5kPy4oeyBuYW1lOiBlcnJvci5uYW1lLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufSk7Il0sImZpbGUiOiJteXIvbXlyLnByb2Nlc3MuanMifQ==
@@ -0,0 +1,13 @@
1
+ import { Arguments, Builder } from '../command';
2
+ import { WorkspaceArgs, WorkspaceCommand } from '../workspace.command';
3
+ export interface WatchArgs extends WorkspaceArgs {
4
+ script: string;
5
+ daemon: boolean;
6
+ }
7
+ export declare class WatchCommand extends WorkspaceCommand<WatchArgs> {
8
+ readonly name = "watch <script>";
9
+ readonly description = "Run script with watcher inside workspace and watch over deps";
10
+ private spawnDepsTree;
11
+ protected define<T, U>(builder: Builder<T, U>): Builder<T, U & WatchArgs>;
12
+ protected run(args: Arguments<WatchArgs>): Promise<number>;
13
+ }