@jujulego/jill 1.1.15 → 1.1.19

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 (98) hide show
  1. package/dist/commands/each.command.d.ts +16 -0
  2. package/dist/commands/each.command.d.ts.map +1 -0
  3. package/dist/commands/each.command.js +203 -0
  4. package/dist/commands/each.command.js.map +1 -0
  5. package/dist/commands/info.command.d.ts +8 -0
  6. package/dist/commands/info.command.d.ts.map +1 -0
  7. package/dist/commands/info.command.js +178 -0
  8. package/dist/commands/info.command.js.map +1 -0
  9. package/dist/commands/list.command.d.ts +21 -0
  10. package/dist/commands/list.command.d.ts.map +1 -0
  11. package/dist/commands/list.command.js +251 -0
  12. package/dist/commands/list.command.js.map +1 -0
  13. package/dist/commands/run.command.d.ts +12 -0
  14. package/dist/commands/run.command.d.ts.map +1 -0
  15. package/dist/commands/run.command.js +111 -0
  16. package/dist/commands/run.command.js.map +1 -0
  17. package/dist/index.d.ts +4 -9
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +13 -26
  20. package/dist/index.js.map +1 -0
  21. package/dist/main.d.ts.map +1 -0
  22. package/dist/main.js +53 -134
  23. package/dist/main.js.map +1 -0
  24. package/dist/myr/commands/kill.command.d.ts +10 -0
  25. package/dist/myr/commands/kill.command.d.ts.map +1 -0
  26. package/dist/myr/commands/kill.command.js +89 -0
  27. package/dist/myr/commands/kill.command.js.map +1 -0
  28. package/dist/myr/commands/list.command.d.ts +17 -0
  29. package/dist/myr/commands/list.command.d.ts.map +1 -0
  30. package/dist/myr/commands/list.command.js +167 -0
  31. package/dist/myr/commands/list.command.js.map +1 -0
  32. package/dist/myr/commands/logs.command.d.ts +10 -0
  33. package/dist/myr/commands/logs.command.d.ts.map +1 -0
  34. package/dist/myr/commands/logs.command.js +165 -0
  35. package/dist/myr/commands/logs.command.js.map +1 -0
  36. package/dist/myr/commands/spawn.command.d.ts +10 -0
  37. package/dist/myr/commands/spawn.command.d.ts.map +1 -0
  38. package/dist/myr/commands/spawn.command.js +84 -0
  39. package/dist/myr/commands/spawn.command.js.map +1 -0
  40. package/dist/myr/commands/stop.command.d.ts +6 -0
  41. package/dist/myr/commands/stop.command.d.ts.map +1 -0
  42. package/dist/myr/commands/stop.command.js +80 -0
  43. package/dist/myr/commands/stop.command.js.map +1 -0
  44. package/dist/myr/myr-client.d.ts +11 -5
  45. package/dist/myr/myr-client.d.ts.map +1 -0
  46. package/dist/myr/myr-client.js +291 -368
  47. package/dist/myr/myr-client.js.map +1 -0
  48. package/dist/myr/myr.command.d.ts +8 -0
  49. package/dist/myr/myr.command.d.ts.map +1 -0
  50. package/dist/myr/myr.command.js +42 -0
  51. package/dist/myr/myr.command.js.map +1 -0
  52. package/dist/myr/myr.process.d.ts.map +1 -0
  53. package/dist/myr/myr.process.js +41 -6
  54. package/dist/myr/myr.process.js.map +1 -0
  55. package/dist/myr/watch.command.d.ts +12 -0
  56. package/dist/myr/watch.command.d.ts.map +1 -0
  57. package/dist/myr/watch.command.js +169 -0
  58. package/dist/myr/watch.command.js.map +1 -0
  59. package/dist/task-logger.d.ts.map +1 -0
  60. package/dist/task-logger.js +28 -17
  61. package/dist/task-logger.js.map +1 -0
  62. package/package.json +29 -23
  63. package/dist/commands/each.d.ts +0 -12
  64. package/dist/commands/each.js +0 -74
  65. package/dist/commands/info.d.ts +0 -5
  66. package/dist/commands/info.js +0 -42
  67. package/dist/commands/list.d.ts +0 -15
  68. package/dist/commands/list.js +0 -119
  69. package/dist/commands/run.d.ts +0 -9
  70. package/dist/commands/run.js +0 -43
  71. package/dist/filters/affected.d.ts +0 -10
  72. package/dist/filters/affected.js +0 -81
  73. package/dist/filters/filter.d.ts +0 -8
  74. package/dist/filters/filter.js +0 -35
  75. package/dist/filters/index.d.ts +0 -2
  76. package/dist/filters/index.js +0 -21
  77. package/dist/logger.d.ts +0 -32
  78. package/dist/logger.js +0 -189
  79. package/dist/myr/command.d.ts +0 -2
  80. package/dist/myr/command.js +0 -52
  81. package/dist/myr/commands/kill.d.ts +0 -5
  82. package/dist/myr/commands/kill.js +0 -34
  83. package/dist/myr/commands/list.d.ts +0 -10
  84. package/dist/myr/commands/list.js +0 -91
  85. package/dist/myr/commands/spawn.d.ts +0 -7
  86. package/dist/myr/commands/spawn.js +0 -39
  87. package/dist/myr/commands/stop.d.ts +0 -2
  88. package/dist/myr/commands/stop.js +0 -31
  89. package/dist/myr/watch.d.ts +0 -8
  90. package/dist/myr/watch.js +0 -79
  91. package/dist/pipeline.d.ts +0 -9
  92. package/dist/pipeline.js +0 -52
  93. package/dist/utils/cli-list.d.ts +0 -15
  94. package/dist/utils/cli-list.js +0 -86
  95. package/dist/utils/deps-tree.d.ts +0 -2
  96. package/dist/utils/deps-tree.js +0 -51
  97. package/dist/wrapper.d.ts +0 -9
  98. package/dist/wrapper.js +0 -38
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LogsCommand = void 0;
7
+
8
+ var _jillCommon = require("@jujulego/jill-common");
9
+
10
+ var _winston = require("winston");
11
+
12
+ var _chalk = _interopRequireDefault(require("chalk"));
13
+
14
+ var _myrClient = require("../myr-client");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
19
+ function adopt(value) {
20
+ return value instanceof P ? value : new P(function (resolve) {
21
+ resolve(value);
22
+ });
23
+ }
24
+
25
+ return new (P || (P = Promise))(function (resolve, reject) {
26
+ function fulfilled(value) {
27
+ try {
28
+ step(generator.next(value));
29
+ } catch (e) {
30
+ reject(e);
31
+ }
32
+ }
33
+
34
+ function rejected(value) {
35
+ try {
36
+ step(generator["throw"](value));
37
+ } catch (e) {
38
+ reject(e);
39
+ }
40
+ }
41
+
42
+ function step(result) {
43
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
44
+ }
45
+
46
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
47
+ });
48
+ };
49
+
50
+ var __asyncValues = void 0 && (void 0).__asyncValues || function (o) {
51
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
52
+ var m = o[Symbol.asyncIterator],
53
+ i;
54
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
55
+ return this;
56
+ }, i);
57
+
58
+ function verb(n) {
59
+ i[n] = o[n] && function (v) {
60
+ return new Promise(function (resolve, reject) {
61
+ v = o[n](v), settle(resolve, reject, v.done, v.value);
62
+ });
63
+ };
64
+ }
65
+
66
+ function settle(resolve, reject, d, v) {
67
+ Promise.resolve(v).then(function (v) {
68
+ resolve({
69
+ value: v,
70
+ done: d
71
+ });
72
+ }, reject);
73
+ }
74
+ };
75
+
76
+ // Utils
77
+ const printLog = _winston.format.combine({
78
+ transform: info => Object.assign(info, {
79
+ [Symbol.for('level')]: info.level
80
+ })
81
+ }, {
82
+ transform: info => {
83
+ var _a;
84
+
85
+ return Object.assign(info, {
86
+ context: ((_a = info.task) === null || _a === void 0 ? void 0 : _a.substr(0, 8)) || info.context
87
+ });
88
+ }
89
+ }, _winston.format.printf(({
90
+ context,
91
+ message,
92
+ timestamp
93
+ }) => context ? (0, _chalk.default)`[jill-myr] {white ${new Date(timestamp).toLocaleString()}} {grey [${context}]} ${message}` : (0, _chalk.default)`[jill-myr] {white ${new Date(timestamp).toLocaleString()}} ${message}`), _winston.format.colorize({
94
+ all: true
95
+ })); // Command
96
+
97
+
98
+ class LogsCommand extends _jillCommon.ProjectCommand {
99
+ constructor() {
100
+ super(...arguments); // Attributes
101
+
102
+ this.name = 'logs';
103
+ this.description = 'Request myr logs';
104
+ } // Methods
105
+
106
+
107
+ define(builder) {
108
+ return super.define(y => builder(y).option('follow', {
109
+ alias: 'f',
110
+ type: 'boolean',
111
+ default: false,
112
+ description: 'Subscribe to logs stream'
113
+ }));
114
+ }
115
+
116
+ run(args) {
117
+ const _super = Object.create(null, {
118
+ run: {
119
+ get: () => super.run
120
+ }
121
+ });
122
+
123
+ var e_1, _a;
124
+
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ yield _super.run.call(this, args); // Spawn task
127
+
128
+ this.spinner.start('Connecting to myr');
129
+ const client = new _myrClient.MyrClient(this.project);
130
+ this.spinner.start('Requesting logs');
131
+ const logs = yield client.logs();
132
+ this.spinner.stop();
133
+
134
+ for (const log of logs) {
135
+ printLog.transform(log);
136
+ this.log(log[Symbol.for('message')]);
137
+ } // Follow
138
+
139
+
140
+ if (args.follow) {
141
+ try {
142
+ for (var _b = __asyncValues(client.logs$()), _c; _c = yield _b.next(), !_c.done;) {
143
+ const log = _c.value;
144
+ printLog.transform(log);
145
+ this.log(log[Symbol.for('message')]);
146
+ }
147
+ } catch (e_1_1) {
148
+ e_1 = {
149
+ error: e_1_1
150
+ };
151
+ } finally {
152
+ try {
153
+ if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);
154
+ } finally {
155
+ if (e_1) throw e_1.error;
156
+ }
157
+ }
158
+ }
159
+ });
160
+ }
161
+
162
+ }
163
+
164
+ exports.LogsCommand = LogsCommand;
165
+ //# sourceMappingURL=logs.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/commands/logs.command.ts","myr/commands/logs.command.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__asyncValues","o","Symbol","asyncIterator","TypeError","m","i","call","__values","iterator","verb","n","v","settle","d","printLog","format","combine","transform","info","Object","assign","for","level","_a","context","task","substr","printf","message","timestamp","Date","toLocaleString","colorize","all","LogsCommand","ProjectCommand","constructor","arguments","name","description","define","builder","y","option","alias","type","default","run","args","_super","create","get","e_1","spinner","start","client","MyrClient","project","logs","stop","log","follow","_b","logs$","_c","e_1_1","error","return"],"mappings":"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","file":"logs.command.js","sourcesContent":["import { Arguments, Builder, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';\nimport { format } from 'winston';\nimport chalk from 'chalk';\n\nimport { MyrClient } from '../myr-client';\n\n// Types\nexport interface LogsArgs extends ProjectArgs {\n follow: boolean;\n}\n\n// Utils\nconst printLog = format.combine(\n { transform: (info) => Object.assign(info, { [Symbol.for('level')]: info.level }) },\n { transform: (info) => Object.assign(info, { context: info.task?.substr(0, 8) || info.context }) },\n format.printf(({ context, message, timestamp }) => context\n ? chalk`[jill-myr] {white ${new Date(timestamp).toLocaleString()}} {grey [${context}]} ${message}`\n : chalk`[jill-myr] {white ${new Date(timestamp).toLocaleString()}} ${message}`\n ),\n format.colorize({ all: true }),\n);\n\n// Command\nexport class LogsCommand extends ProjectCommand<LogsArgs> {\n // Attributes\n readonly name = 'logs';\n readonly description = 'Request myr logs';\n\n // Methods\n protected define<T, U>(builder: Builder<T, U>): Builder<T, U & LogsArgs> {\n return super.define(y => builder(y)\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n description: 'Subscribe to logs stream'\n })\n );\n }\n\n protected async run(args: Arguments<LogsArgs>): Promise<void> {\n await super.run(args);\n\n // Spawn task\n this.spinner.start('Connecting to myr');\n const client = new MyrClient(this.project);\n\n this.spinner.start('Requesting logs');\n const logs = await client.logs();\n this.spinner.stop();\n\n for (const log of logs) {\n printLog.transform(log);\n this.log(log[Symbol.for('message')]);\n }\n\n // Follow\n if (args.follow) {\n for await (const log of client.logs$()) {\n printLog.transform(log);\n this.log(log[Symbol.for('message')]);\n }\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nimport { ProjectCommand } from '@jujulego/jill-common';\nimport { format } from 'winston';\nimport chalk from 'chalk';\nimport { MyrClient } from '../myr-client';\n// Utils\nconst printLog = format.combine({ transform: (info) => Object.assign(info, { [Symbol.for('level')]: info.level }) }, { transform: (info) => { var _a; return Object.assign(info, { context: ((_a = info.task) === null || _a === void 0 ? void 0 : _a.substr(0, 8)) || info.context }); } }, format.printf(({ context, message, timestamp }) => context\n ? chalk `[jill-myr] {white ${new Date(timestamp).toLocaleString()}} {grey [${context}]} ${message}`\n : chalk `[jill-myr] {white ${new Date(timestamp).toLocaleString()}} ${message}`), format.colorize({ all: true }));\n// Command\nexport class LogsCommand extends ProjectCommand {\n constructor() {\n super(...arguments);\n // Attributes\n this.name = 'logs';\n this.description = 'Request myr logs';\n }\n // Methods\n define(builder) {\n return super.define(y => builder(y)\n .option('follow', {\n alias: 'f',\n type: 'boolean',\n default: false,\n description: 'Subscribe to logs stream'\n }));\n }\n run(args) {\n const _super = Object.create(null, {\n run: { get: () => super.run }\n });\n var e_1, _a;\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.run.call(this, args);\n // Spawn task\n this.spinner.start('Connecting to myr');\n const client = new MyrClient(this.project);\n this.spinner.start('Requesting logs');\n const logs = yield client.logs();\n this.spinner.stop();\n for (const log of logs) {\n printLog.transform(log);\n this.log(log[Symbol.for('message')]);\n }\n // Follow\n if (args.follow) {\n try {\n for (var _b = __asyncValues(client.logs$()), _c; _c = yield _b.next(), !_c.done;) {\n const log = _c.value;\n printLog.transform(log);\n this.log(log[Symbol.for('message')]);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n });\n }\n}"]}
@@ -0,0 +1,10 @@
1
+ import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';
2
+ export interface SpawnArgs extends WorkspaceArgs {
3
+ command: string;
4
+ }
5
+ export declare class SpawnCommand extends WorkspaceCommand<SpawnArgs> {
6
+ readonly name = "spawn <command>";
7
+ readonly description = "Spawn new task";
8
+ protected define<T, U>(builder: Builder<T, U>): Builder<T, U & SpawnArgs>;
9
+ protected run(args: Arguments<SpawnArgs>): Promise<number | void>;
10
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/commands/spawn.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI5F,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,qBAAa,YAAa,SAAQ,gBAAgB,CAAC,SAAS,CAAC;IAE3D,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,WAAW,oBAAoB;IAGxC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;cAMzD,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAYxE","file":"spawn.command.d.ts","sourcesContent":["import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';\nimport { MyrClient } from '../myr-client';\n\n// Types\nexport interface SpawnArgs extends WorkspaceArgs {\n command: string;\n}\n\n// Command\nexport class SpawnCommand extends WorkspaceCommand<SpawnArgs> {\n // Attributes\n readonly name = 'spawn <command>';\n readonly description = 'Spawn new task';\n\n // Methods\n protected define<T, U>(builder: Builder<T, U>): Builder<T, U & SpawnArgs> {\n return super.define(y => builder(y)\n .positional('command', { type: 'string', demandOption: true })\n );\n }\n\n protected async run(args: Arguments<SpawnArgs>): Promise<number | void> {\n await super.run(args);\n\n // Spawn task\n this.spinner.start('Connecting to myr');\n const client = new MyrClient(this.project);\n\n this.spinner.start('Spawning task');\n const task = await client.spawn(this.workspace.cwd, args.command, args['--']?.map(arg => arg.toString()));\n\n this.spinner.succeed(`Task ${task.id} spawned`);\n }\n}\n"]}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SpawnCommand = void 0;
7
+
8
+ var _jillCommon = require("@jujulego/jill-common");
9
+
10
+ var _myrClient = require("../myr-client");
11
+
12
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) {
14
+ return value instanceof P ? value : new P(function (resolve) {
15
+ resolve(value);
16
+ });
17
+ }
18
+
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) {
21
+ try {
22
+ step(generator.next(value));
23
+ } catch (e) {
24
+ reject(e);
25
+ }
26
+ }
27
+
28
+ function rejected(value) {
29
+ try {
30
+ step(generator["throw"](value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ }
35
+
36
+ function step(result) {
37
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
38
+ }
39
+
40
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
41
+ });
42
+ };
43
+
44
+ // Command
45
+ class SpawnCommand extends _jillCommon.WorkspaceCommand {
46
+ constructor() {
47
+ super(...arguments); // Attributes
48
+
49
+ this.name = 'spawn <command>';
50
+ this.description = 'Spawn new task';
51
+ } // Methods
52
+
53
+
54
+ define(builder) {
55
+ return super.define(y => builder(y).positional('command', {
56
+ type: 'string',
57
+ demandOption: true
58
+ }));
59
+ }
60
+
61
+ run(args) {
62
+ const _super = Object.create(null, {
63
+ run: {
64
+ get: () => super.run
65
+ }
66
+ });
67
+
68
+ var _a;
69
+
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ yield _super.run.call(this, args); // Spawn task
72
+
73
+ this.spinner.start('Connecting to myr');
74
+ const client = new _myrClient.MyrClient(this.project);
75
+ this.spinner.start('Spawning task');
76
+ const task = yield client.spawn(this.workspace.cwd, args.command, (_a = args['--']) === null || _a === void 0 ? void 0 : _a.map(arg => arg.toString()));
77
+ this.spinner.succeed(`Task ${task.id} spawned`);
78
+ });
79
+ }
80
+
81
+ }
82
+
83
+ exports.SpawnCommand = SpawnCommand;
84
+ //# sourceMappingURL=spawn.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/commands/spawn.command.ts","myr/commands/spawn.command.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","SpawnCommand","WorkspaceCommand","constructor","arguments","name","description","define","builder","y","positional","type","demandOption","run","args","_super","Object","create","get","_a","call","spinner","start","client","MyrClient","project","task","spawn","workspace","cwd","command","map","arg","toString","succeed","id"],"mappings":"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","file":"spawn.command.js","sourcesContent":["import { Arguments, Builder, WorkspaceArgs, WorkspaceCommand } from '@jujulego/jill-common';\nimport { MyrClient } from '../myr-client';\n\n// Types\nexport interface SpawnArgs extends WorkspaceArgs {\n command: string;\n}\n\n// Command\nexport class SpawnCommand extends WorkspaceCommand<SpawnArgs> {\n // Attributes\n readonly name = 'spawn <command>';\n readonly description = 'Spawn new task';\n\n // Methods\n protected define<T, U>(builder: Builder<T, U>): Builder<T, U & SpawnArgs> {\n return super.define(y => builder(y)\n .positional('command', { type: 'string', demandOption: true })\n );\n }\n\n protected async run(args: Arguments<SpawnArgs>): Promise<number | void> {\n await super.run(args);\n\n // Spawn task\n this.spinner.start('Connecting to myr');\n const client = new MyrClient(this.project);\n\n this.spinner.start('Spawning task');\n const task = await client.spawn(this.workspace.cwd, args.command, args['--']?.map(arg => arg.toString()));\n\n this.spinner.succeed(`Task ${task.id} spawned`);\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { WorkspaceCommand } from '@jujulego/jill-common';\nimport { MyrClient } from '../myr-client';\n// Command\nexport class SpawnCommand extends WorkspaceCommand {\n constructor() {\n super(...arguments);\n // Attributes\n this.name = 'spawn <command>';\n this.description = 'Spawn new task';\n }\n // Methods\n define(builder) {\n return super.define(y => builder(y)\n .positional('command', { type: 'string', demandOption: true }));\n }\n run(args) {\n const _super = Object.create(null, {\n run: { get: () => super.run }\n });\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.run.call(this, args);\n // Spawn task\n this.spinner.start('Connecting to myr');\n const client = new MyrClient(this.project);\n this.spinner.start('Spawning task');\n const task = yield client.spawn(this.workspace.cwd, args.command, (_a = args['--']) === null || _a === void 0 ? void 0 : _a.map(arg => arg.toString()));\n this.spinner.succeed(`Task ${task.id} spawned`);\n });\n }\n}"]}
@@ -0,0 +1,6 @@
1
+ import { Arguments, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';
2
+ export declare class StopCommand extends ProjectCommand {
3
+ readonly name = "stop";
4
+ readonly description = "Stop myr server. This will kill all running tasks";
5
+ protected run(argv: Arguments<ProjectArgs>): Promise<void>;
6
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/commands/stop.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAK/E,qBAAa,WAAY,SAAQ,cAAc;IAE7C,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,uDAAuD;cAG3D,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAejE","file":"stop.command.d.ts","sourcesContent":["import { Arguments, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';\n\nimport { MyrClient } from '../myr-client';\n\n// Command\nexport class StopCommand extends ProjectCommand {\n // Attributes\n readonly name = 'stop';\n readonly description = 'Stop myr server. This will kill all running tasks';\n\n // Methods\n protected async run(argv: Arguments<ProjectArgs>): Promise<void> {\n await super.run(argv);\n\n // Spawn task\n this.spinner.start('Stopping myr');\n const client = new MyrClient(this.project);\n const ok = await client.stop();\n\n if (ok) {\n this.spinner.succeed('myr stopped');\n } else {\n this.spinner.stop();\n this.logger.warn('myr was not running');\n }\n }\n}\n"]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StopCommand = void 0;
7
+
8
+ var _jillCommon = require("@jujulego/jill-common");
9
+
10
+ var _myrClient = require("../myr-client");
11
+
12
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) {
14
+ return value instanceof P ? value : new P(function (resolve) {
15
+ resolve(value);
16
+ });
17
+ }
18
+
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) {
21
+ try {
22
+ step(generator.next(value));
23
+ } catch (e) {
24
+ reject(e);
25
+ }
26
+ }
27
+
28
+ function rejected(value) {
29
+ try {
30
+ step(generator["throw"](value));
31
+ } catch (e) {
32
+ reject(e);
33
+ }
34
+ }
35
+
36
+ function step(result) {
37
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
38
+ }
39
+
40
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
41
+ });
42
+ };
43
+
44
+ // Command
45
+ class StopCommand extends _jillCommon.ProjectCommand {
46
+ constructor() {
47
+ super(...arguments); // Attributes
48
+
49
+ this.name = 'stop';
50
+ this.description = 'Stop myr server. This will kill all running tasks';
51
+ } // Methods
52
+
53
+
54
+ run(argv) {
55
+ const _super = Object.create(null, {
56
+ run: {
57
+ get: () => super.run
58
+ }
59
+ });
60
+
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ yield _super.run.call(this, argv); // Spawn task
63
+
64
+ this.spinner.start('Stopping myr');
65
+ const client = new _myrClient.MyrClient(this.project);
66
+ const ok = yield client.stop();
67
+
68
+ if (ok) {
69
+ this.spinner.succeed('myr stopped');
70
+ } else {
71
+ this.spinner.stop();
72
+ this.logger.warn('myr was not running');
73
+ }
74
+ });
75
+ }
76
+
77
+ }
78
+
79
+ exports.StopCommand = StopCommand;
80
+ //# sourceMappingURL=stop.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/commands/stop.command.ts","myr/commands/stop.command.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","StopCommand","ProjectCommand","constructor","arguments","name","description","run","argv","_super","Object","create","get","call","spinner","start","client","MyrClient","project","ok","stop","succeed","logger","warn"],"mappings":";;;;;;;AAAA;;AAEA;;ACFA,IAAIA,SAAS,GAAI,UAAQ,SAAKA,SAAd,IAA4B,UAAUC,OAAV,EAAmBC,UAAnB,EAA+BC,CAA/B,EAAkCC,SAAlC,EAA6C;AACrF,WAASC,KAAT,CAAeC,KAAf,EAAsB;AAAE,WAAOA,KAAK,YAAYH,CAAjB,GAAqBG,KAArB,GAA6B,IAAIH,CAAJ,CAAM,UAAUI,OAAV,EAAmB;AAAEA,MAAAA,OAAO,CAACD,KAAD,CAAP;AAAiB,KAA5C,CAApC;AAAoF;;AAC5G,SAAO,KAAKH,CAAC,KAAKA,CAAC,GAAGK,OAAT,CAAN,EAAyB,UAAUD,OAAV,EAAmBE,MAAnB,EAA2B;AACvD,aAASC,SAAT,CAAmBJ,KAAnB,EAA0B;AAAE,UAAI;AAAEK,QAAAA,IAAI,CAACP,SAAS,CAACQ,IAAV,CAAeN,KAAf,CAAD,CAAJ;AAA8B,OAApC,CAAqC,OAAOO,CAAP,EAAU;AAAEJ,QAAAA,MAAM,CAACI,CAAD,CAAN;AAAY;AAAE;;AAC3F,aAASC,QAAT,CAAkBR,KAAlB,EAAyB;AAAE,UAAI;AAAEK,QAAAA,IAAI,CAACP,SAAS,CAAC,OAAD,CAAT,CAAmBE,KAAnB,CAAD,CAAJ;AAAkC,OAAxC,CAAyC,OAAOO,CAAP,EAAU;AAAEJ,QAAAA,MAAM,CAACI,CAAD,CAAN;AAAY;AAAE;;AAC9F,aAASF,IAAT,CAAcI,MAAd,EAAsB;AAAEA,MAAAA,MAAM,CAACC,IAAP,GAAcT,OAAO,CAACQ,MAAM,CAACT,KAAR,CAArB,GAAsCD,KAAK,CAACU,MAAM,CAACT,KAAR,CAAL,CAAoBW,IAApB,CAAyBP,SAAzB,EAAoCI,QAApC,CAAtC;AAAsF;;AAC9GH,IAAAA,IAAI,CAAC,CAACP,SAAS,GAAGA,SAAS,CAACc,KAAV,CAAgBjB,OAAhB,EAAyBC,UAAU,IAAI,EAAvC,CAAb,EAAyDU,IAAzD,EAAD,CAAJ;AACH,GALM,CAAP;AAMH,CARD;;ADIA;AACM,MAAOO,WAAP,SAA2BC,0BAA3B,CAAyC;AAA/CC,EAAAA,WAAA,GAAA;ACSQ,UAAM,GAAGC,SAAT,EDTR,CACE;;AACS,SAAAC,IAAA,GAAO,MAAP;AACA,SAAAC,WAAA,GAAc,mDAAd;AAkBV,GArB8C,CAK7C;;;AACgBC,EAAAA,GAAG,CAACC,IAAD,EAA6B;ACU1C,UAAMC,MAAM,GAAGC,MAAM,CAACC,MAAP,CAAc,IAAd,EAAoB;AAC/BJ,MAAAA,GAAG,EAAE;AAAEK,QAAAA,GAAG,EAAE,MAAM,MAAML;AAAnB;AAD0B,KAApB,CAAf;;AAGA,WAAOzB,SAAS,CAAC,IAAD,EAAO,KAAK,CAAZ,EAAe,KAAK,CAApB,EAAuB,aAAa;ADZxD,YAAM2B,MAAA,CAAMF,GAAN,CAASM,IAAT,CAAS,IAAT,EAAUL,IAAV,CAAN,CCYwD,CDVxD;;AACA,WAAKM,OAAL,CAAaC,KAAb,CAAmB,cAAnB;AACA,YAAMC,MAAM,GAAG,IAAIC,oBAAJ,CAAc,KAAKC,OAAnB,CAAf;AACA,YAAMC,EAAE,GAAG,MAAMH,MAAM,CAACI,IAAP,EAAjB;;AAEA,UAAID,EAAJ,EAAQ;AACN,aAAKL,OAAL,CAAaO,OAAb,CAAqB,aAArB;AACD,OAFD,MAEO;AACL,aAAKP,OAAL,CAAaM,IAAb;AACA,aAAKE,MAAL,CAAYC,IAAZ,CAAiB,qBAAjB;AACD;AACF,KCDqB,CAAhB;ADCL;;AApB4C","file":"stop.command.js","sourcesContent":["import { Arguments, ProjectArgs, ProjectCommand } from '@jujulego/jill-common';\n\nimport { MyrClient } from '../myr-client';\n\n// Command\nexport class StopCommand extends ProjectCommand {\n // Attributes\n readonly name = 'stop';\n readonly description = 'Stop myr server. This will kill all running tasks';\n\n // Methods\n protected async run(argv: Arguments<ProjectArgs>): Promise<void> {\n await super.run(argv);\n\n // Spawn task\n this.spinner.start('Stopping myr');\n const client = new MyrClient(this.project);\n const ok = await client.stop();\n\n if (ok) {\n this.spinner.succeed('myr stopped');\n } else {\n this.spinner.stop();\n this.logger.warn('myr was not running');\n }\n }\n}\n","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ProjectCommand } from '@jujulego/jill-common';\nimport { MyrClient } from '../myr-client';\n// Command\nexport class StopCommand extends ProjectCommand {\n constructor() {\n super(...arguments);\n // Attributes\n this.name = 'stop';\n this.description = 'Stop myr server. This will kill all running tasks';\n }\n // Methods\n run(argv) {\n const _super = Object.create(null, {\n run: { get: () => super.run }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.run.call(this, argv);\n // Spawn task\n this.spinner.start('Stopping myr');\n const client = new MyrClient(this.project);\n const ok = yield client.stop();\n if (ok) {\n this.spinner.succeed('myr stopped');\n }\n else {\n this.spinner.stop();\n this.logger.warn('myr was not running');\n }\n });\n }\n}"]}
@@ -1,16 +1,22 @@
1
1
  import { Project, Workspace } from '@jujulego/jill-core';
2
- import { ITask } from '@jujulego/jill-myr';
2
+ import { Task } from '@jujulego/jill-myr';
3
+ import { Repeater } from '@repeaterjs/repeater';
4
+ import { DocumentNode } from 'graphql';
3
5
  export declare class MyrClient {
4
6
  readonly project: Project;
5
7
  private readonly _logger;
6
8
  private readonly _endpoint;
7
9
  private readonly _qclient;
10
+ private readonly _sclient;
8
11
  constructor(project: Project);
9
12
  protected _autoStart<T>(fn: () => Promise<T>): Promise<T>;
13
+ protected _subscription<T>(query: DocumentNode, variables: Record<string, unknown>): Repeater<T>;
10
14
  start(): Promise<void>;
11
15
  stop(): Promise<boolean>;
12
- tasks(): Promise<ITask[]>;
13
- spawn(cwd: string, cmd: string, args?: string[]): Promise<ITask>;
14
- spawnScript(wks: Workspace, script: string, args?: string[]): Promise<ITask>;
15
- kill(id: string): Promise<ITask | undefined>;
16
+ tasks(): Promise<Task[]>;
17
+ spawn(cwd: string, cmd: string, args?: string[]): Promise<Task>;
18
+ spawnScript(wks: Workspace, script: string, args?: string[]): Promise<Task>;
19
+ logs(): Promise<any[]>;
20
+ logs$(): AsyncGenerator<any>;
21
+ kill(id: string): Promise<Task | undefined>;
16
22
  }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["myr/myr-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAa,IAAI,EAAgB,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAS,MAAM,SAAS,CAAC;AAgB9C,qBAAa,SAAS;IAalB,QAAQ,CAAC,OAAO,EAAE,OAAO;IAX3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAItB;gBAIQ,OAAO,EAAE,OAAO;cAIX,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAe/D,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAgBhG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuChB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBxB,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgBxB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnE,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/E,IAAI,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAgBrB,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC;IAY7B,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;CAelD","file":"myr-client.d.ts","sourcesContent":["import { logger, Project, Workspace } from '@jujulego/jill-core';\nimport { SpawnArgs, Task, TaskFragment } from '@jujulego/jill-myr';\nimport { Repeater } from '@repeaterjs/repeater';\nimport { fork } from 'child_process';\nimport { DocumentNode, print } from 'graphql';\nimport { GraphQLClient } from 'graphql-request';\nimport { createClient } from 'graphql-ws';\nimport gql from 'graphql-tag';\nimport path from 'path';\nimport WebSocket from 'ws';\n\n\n// Types\ntype ILog = Record<string, unknown> & {\n // Attributes\n level: string;\n message: string;\n};\n\n// Class\nexport class MyrClient {\n // Attributes\n private readonly _logger = logger.child({ context: MyrClient.name });\n private readonly _endpoint = 'http://localhost:5001/graphql';\n private readonly _qclient = new GraphQLClient(this._endpoint);\n private readonly _sclient = createClient({\n url: this._endpoint.replace(/^http/, 'ws'),\n webSocketImpl: WebSocket,\n lazy: true\n });\n\n // Constructor\n constructor(\n readonly project: Project,\n ) {}\n\n // Methods\n protected async _autoStart<T>(fn: () => Promise<T>): Promise<T> {\n try {\n return await fn();\n } catch (error) {\n if (error.code !== 'ECONNREFUSED') throw error;\n\n // Start myr if connection impossible\n this._logger.verbose('Unable to connect to myr server, trying to start it');\n await this.start();\n\n // Retry\n return await fn();\n }\n }\n\n protected _subscription<T>(query: DocumentNode, variables: Record<string, unknown>): Repeater<T> {\n return new Repeater<T>((push, stop) => {\n this._sclient.subscribe<T>({ query: print(query), variables }, {\n next(value) {\n push(value.data!).then();\n },\n error(error) {\n stop(error);\n },\n complete() {\n stop();\n }\n });\n });\n }\n\n start(): Promise<void> {\n const child = fork(path.resolve(__dirname, './myr.process'), [], {\n cwd: this.project.root,\n detached: true,\n stdio: ['ignore', 'pipe', 'pipe', 'ipc'],\n });\n\n // Transmit logs to logger\n child.stdout?.on('data', (msg: Buffer) => {\n for (const line of msg.toString('utf-8').split('\\n')) {\n if (!line) continue;\n\n const { level, message, ...meta } = JSON.parse(line) as ILog;\n logger.log(level, message, meta);\n }\n });\n\n child.stderr?.on('data', (msg: Buffer) => {\n logger.error(msg.toString('utf-8'));\n });\n\n // Start server\n return new Promise<void>((resolve, reject) => {\n child.on('message', (msg: 'started' | Error) => {\n if (msg === 'started') {\n resolve();\n } else {\n reject(msg);\n }\n });\n\n child.on('close', (code, signal) => {\n reject(new Error(`Myr process ended with code ${code} by signal ${signal}`));\n });\n\n child.send('start');\n });\n }\n\n async stop(): Promise<boolean> {\n try {\n await this._qclient.request(gql`\n mutation Shutdown {\n shutdown\n }\n `);\n\n return true;\n } catch (error) {\n if (error.code !== 'ECONNREFUSED') throw error;\n\n return false;\n }\n }\n\n async tasks(): Promise<Task[]> {\n return await this._autoStart(async () => {\n const { tasks } = await this._qclient.request<{ tasks: Task[] }>(gql`\n query Tasks {\n tasks {\n ...Task\n }\n }\n\n ${TaskFragment}\n `);\n\n return tasks;\n });\n }\n\n async spawn(cwd: string, cmd: string, args: string[] = []): Promise<Task> {\n return await this._autoStart(async () => {\n const { spawn } = await this._qclient.request<{ spawn:Task },SpawnArgs>(gql`\n mutation Spawn($cwd: String!, $cmd: String!, $args: [String!]!) {\n spawn(cwd: $cwd, cmd: $cmd, args: $args) {\n ...Task\n }\n }\n\n ${TaskFragment}\n `, { cwd, cmd, args });\n\n return spawn;\n });\n }\n\n async spawnScript(wks: Workspace, script: string, args: string[] = []): Promise<Task> {\n return await this.spawn(wks.cwd, await wks.project.packageManager(), [script, ...args]);\n }\n\n async logs(): Promise<any[]> {\n try {\n const res = await this._qclient.request<{ logs: any[] }>(gql`\n query Logs {\n logs\n }\n `);\n\n return res.logs;\n } catch (error) {\n if (error.code !== 'ECONNREFUSED') throw error;\n\n return [];\n }\n }\n\n async* logs$(): AsyncGenerator<any> {\n try {\n for await (const { log } of this._subscription<{ log: any }>(gql`subscription Logs { log }`, {})) {\n yield log;\n }\n } catch (error) {\n if (error.code !== 'ECONNREFUSED') throw error;\n\n return;\n }\n }\n\n async kill(id: string): Promise<Task | undefined> {\n return await this._autoStart(async () => {\n const { kill } = await this._qclient.request<{ kill: Task | undefined }>(gql`\n mutation Kill($id: ID!) {\n kill(id: $id) {\n ...Task\n }\n }\n\n ${TaskFragment}\n `, { id });\n\n return kill;\n });\n }\n}"]}