@jujulego/jill 1.1.19 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/commands/each.command.d.ts +1 -1
  2. package/dist/commands/each.command.d.ts.map +1 -1
  3. package/dist/commands/each.command.js.map +1 -1
  4. package/dist/commands/list.command.d.ts +1 -1
  5. package/dist/commands/list.command.d.ts.map +1 -1
  6. package/dist/commands/list.command.js.map +1 -1
  7. package/dist/commands/run.command.d.ts +1 -1
  8. package/dist/commands/run.command.d.ts.map +1 -1
  9. package/dist/commands/run.command.js.map +1 -1
  10. package/dist/core.plugin.d.ts +2 -0
  11. package/dist/core.plugin.d.ts.map +1 -0
  12. package/dist/core.plugin.js +22 -0
  13. package/dist/core.plugin.js.map +1 -0
  14. package/dist/main.d.ts.map +1 -1
  15. package/dist/main.js +13 -28
  16. package/dist/main.js.map +1 -1
  17. package/package.json +23 -16
  18. package/dist/myr/commands/kill.command.d.ts +0 -10
  19. package/dist/myr/commands/kill.command.d.ts.map +0 -1
  20. package/dist/myr/commands/kill.command.js +0 -89
  21. package/dist/myr/commands/kill.command.js.map +0 -1
  22. package/dist/myr/commands/list.command.d.ts +0 -17
  23. package/dist/myr/commands/list.command.d.ts.map +0 -1
  24. package/dist/myr/commands/list.command.js +0 -167
  25. package/dist/myr/commands/list.command.js.map +0 -1
  26. package/dist/myr/commands/logs.command.d.ts +0 -10
  27. package/dist/myr/commands/logs.command.d.ts.map +0 -1
  28. package/dist/myr/commands/logs.command.js +0 -165
  29. package/dist/myr/commands/logs.command.js.map +0 -1
  30. package/dist/myr/commands/spawn.command.d.ts +0 -10
  31. package/dist/myr/commands/spawn.command.d.ts.map +0 -1
  32. package/dist/myr/commands/spawn.command.js +0 -84
  33. package/dist/myr/commands/spawn.command.js.map +0 -1
  34. package/dist/myr/commands/stop.command.d.ts +0 -6
  35. package/dist/myr/commands/stop.command.d.ts.map +0 -1
  36. package/dist/myr/commands/stop.command.js +0 -80
  37. package/dist/myr/commands/stop.command.js.map +0 -1
  38. package/dist/myr/myr-client.d.ts +0 -22
  39. package/dist/myr/myr-client.d.ts.map +0 -1
  40. package/dist/myr/myr-client.js +0 -378
  41. package/dist/myr/myr-client.js.map +0 -1
  42. package/dist/myr/myr.command.d.ts +0 -8
  43. package/dist/myr/myr.command.d.ts.map +0 -1
  44. package/dist/myr/myr.command.js +0 -42
  45. package/dist/myr/myr.command.js.map +0 -1
  46. package/dist/myr/myr.process.d.ts +0 -1
  47. package/dist/myr/myr.process.d.ts.map +0 -1
  48. package/dist/myr/myr.process.js +0 -77
  49. package/dist/myr/myr.process.js.map +0 -1
  50. package/dist/myr/watch.command.d.ts +0 -12
  51. package/dist/myr/watch.command.d.ts.map +0 -1
  52. package/dist/myr/watch.command.js +0 -169
  53. package/dist/myr/watch.command.js.map +0 -1
@@ -1 +0,0 @@
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}"]}
@@ -1,6 +0,0 @@
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
- }
@@ -1 +0,0 @@
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"]}
@@ -1,80 +0,0 @@
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
@@ -1 +0,0 @@
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,22 +0,0 @@
1
- import { Project, Workspace } from '@jujulego/jill-core';
2
- import { Task } from '@jujulego/jill-myr';
3
- import { Repeater } from '@repeaterjs/repeater';
4
- import { DocumentNode } from 'graphql';
5
- export declare class MyrClient {
6
- readonly project: Project;
7
- private readonly _logger;
8
- private readonly _endpoint;
9
- private readonly _qclient;
10
- private readonly _sclient;
11
- constructor(project: Project);
12
- protected _autoStart<T>(fn: () => Promise<T>): Promise<T>;
13
- protected _subscription<T>(query: DocumentNode, variables: Record<string, unknown>): Repeater<T>;
14
- start(): Promise<void>;
15
- stop(): Promise<boolean>;
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>;
22
- }
@@ -1 +0,0 @@
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}"]}
@@ -1,378 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MyrClient = void 0;
7
-
8
- var _jillCore = require("@jujulego/jill-core");
9
-
10
- var _jillMyr = require("@jujulego/jill-myr");
11
-
12
- var _repeater = require("@repeaterjs/repeater");
13
-
14
- var _child_process = require("child_process");
15
-
16
- var _graphql = require("graphql");
17
-
18
- var _graphqlRequest = require("graphql-request");
19
-
20
- var _graphqlWs = require("graphql-ws");
21
-
22
- var _graphqlTag = _interopRequireDefault(require("graphql-tag"));
23
-
24
- var _path = _interopRequireDefault(require("path"));
25
-
26
- var _ws = _interopRequireDefault(require("ws"));
27
-
28
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
-
30
- var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
31
- function adopt(value) {
32
- return value instanceof P ? value : new P(function (resolve) {
33
- resolve(value);
34
- });
35
- }
36
-
37
- return new (P || (P = Promise))(function (resolve, reject) {
38
- function fulfilled(value) {
39
- try {
40
- step(generator.next(value));
41
- } catch (e) {
42
- reject(e);
43
- }
44
- }
45
-
46
- function rejected(value) {
47
- try {
48
- step(generator["throw"](value));
49
- } catch (e) {
50
- reject(e);
51
- }
52
- }
53
-
54
- function step(result) {
55
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
56
- }
57
-
58
- step((generator = generator.apply(thisArg, _arguments || [])).next());
59
- });
60
- };
61
-
62
- var __rest = void 0 && (void 0).__rest || function (s, e) {
63
- var t = {};
64
-
65
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
66
-
67
- if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
68
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
69
- }
70
- return t;
71
- };
72
-
73
- var __asyncValues = void 0 && (void 0).__asyncValues || function (o) {
74
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
75
- var m = o[Symbol.asyncIterator],
76
- i;
77
- 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 () {
78
- return this;
79
- }, i);
80
-
81
- function verb(n) {
82
- i[n] = o[n] && function (v) {
83
- return new Promise(function (resolve, reject) {
84
- v = o[n](v), settle(resolve, reject, v.done, v.value);
85
- });
86
- };
87
- }
88
-
89
- function settle(resolve, reject, d, v) {
90
- Promise.resolve(v).then(function (v) {
91
- resolve({
92
- value: v,
93
- done: d
94
- });
95
- }, reject);
96
- }
97
- };
98
-
99
- var __await = void 0 && (void 0).__await || function (v) {
100
- return this instanceof __await ? (this.v = v, this) : new __await(v);
101
- };
102
-
103
- var __asyncGenerator = void 0 && (void 0).__asyncGenerator || function (thisArg, _arguments, generator) {
104
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
105
- var g = generator.apply(thisArg, _arguments || []),
106
- i,
107
- q = [];
108
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () {
109
- return this;
110
- }, i;
111
-
112
- function verb(n) {
113
- if (g[n]) i[n] = function (v) {
114
- return new Promise(function (a, b) {
115
- q.push([n, v, a, b]) > 1 || resume(n, v);
116
- });
117
- };
118
- }
119
-
120
- function resume(n, v) {
121
- try {
122
- step(g[n](v));
123
- } catch (e) {
124
- settle(q[0][3], e);
125
- }
126
- }
127
-
128
- function step(r) {
129
- r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
130
- }
131
-
132
- function fulfill(value) {
133
- resume("next", value);
134
- }
135
-
136
- function reject(value) {
137
- resume("throw", value);
138
- }
139
-
140
- function settle(f, v) {
141
- if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]);
142
- }
143
- };
144
-
145
- // Class
146
- class MyrClient {
147
- // Constructor
148
- constructor(project) {
149
- this.project = project; // Attributes
150
-
151
- this._logger = _jillCore.logger.child({
152
- context: MyrClient.name
153
- });
154
- this._endpoint = 'http://localhost:5001/graphql';
155
- this._qclient = new _graphqlRequest.GraphQLClient(this._endpoint);
156
- this._sclient = (0, _graphqlWs.createClient)({
157
- url: this._endpoint.replace(/^http/, 'ws'),
158
- webSocketImpl: _ws.default,
159
- lazy: true
160
- });
161
- } // Methods
162
-
163
-
164
- _autoStart(fn) {
165
- return __awaiter(this, void 0, void 0, function* () {
166
- try {
167
- return yield fn();
168
- } catch (error) {
169
- if (error.code !== 'ECONNREFUSED') throw error; // Start myr if connection impossible
170
-
171
- this._logger.verbose('Unable to connect to myr server, trying to start it');
172
-
173
- yield this.start(); // Retry
174
-
175
- return yield fn();
176
- }
177
- });
178
- }
179
-
180
- _subscription(query, variables) {
181
- return new _repeater.Repeater((push, stop) => {
182
- this._sclient.subscribe({
183
- query: (0, _graphql.print)(query),
184
- variables
185
- }, {
186
- next(value) {
187
- push(value.data).then();
188
- },
189
-
190
- error(error) {
191
- stop(error);
192
- },
193
-
194
- complete() {
195
- stop();
196
- }
197
-
198
- });
199
- });
200
- }
201
-
202
- start() {
203
- var _a, _b;
204
-
205
- const child = (0, _child_process.fork)(_path.default.resolve(__dirname, './myr.process'), [], {
206
- cwd: this.project.root,
207
- detached: true,
208
- stdio: ['ignore', 'pipe', 'pipe', 'ipc']
209
- }); // Transmit logs to logger
210
-
211
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', msg => {
212
- for (const line of msg.toString('utf-8').split('\n')) {
213
- if (!line) continue;
214
-
215
- const _a = JSON.parse(line),
216
- {
217
- level,
218
- message
219
- } = _a,
220
- meta = __rest(_a, ["level", "message"]);
221
-
222
- _jillCore.logger.log(level, message, meta);
223
- }
224
- });
225
- (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', msg => {
226
- _jillCore.logger.error(msg.toString('utf-8'));
227
- }); // Start server
228
-
229
- return new Promise((resolve, reject) => {
230
- child.on('message', msg => {
231
- if (msg === 'started') {
232
- resolve();
233
- } else {
234
- reject(msg);
235
- }
236
- });
237
- child.on('close', (code, signal) => {
238
- reject(new Error(`Myr process ended with code ${code} by signal ${signal}`));
239
- });
240
- child.send('start');
241
- });
242
- }
243
-
244
- stop() {
245
- return __awaiter(this, void 0, void 0, function* () {
246
- try {
247
- yield this._qclient.request((0, _graphqlTag.default)`
248
- mutation Shutdown {
249
- shutdown
250
- }
251
- `);
252
- return true;
253
- } catch (error) {
254
- if (error.code !== 'ECONNREFUSED') throw error;
255
- return false;
256
- }
257
- });
258
- }
259
-
260
- tasks() {
261
- return __awaiter(this, void 0, void 0, function* () {
262
- return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {
263
- const {
264
- tasks
265
- } = yield this._qclient.request((0, _graphqlTag.default)`
266
- query Tasks {
267
- tasks {
268
- ...Task
269
- }
270
- }
271
-
272
- ${_jillMyr.TaskFragment}
273
- `);
274
- return tasks;
275
- }));
276
- });
277
- }
278
-
279
- spawn(cwd, cmd, args = []) {
280
- return __awaiter(this, void 0, void 0, function* () {
281
- return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {
282
- const {
283
- spawn
284
- } = yield this._qclient.request((0, _graphqlTag.default)`
285
- mutation Spawn($cwd: String!, $cmd: String!, $args: [String!]!) {
286
- spawn(cwd: $cwd, cmd: $cmd, args: $args) {
287
- ...Task
288
- }
289
- }
290
-
291
- ${_jillMyr.TaskFragment}
292
- `, {
293
- cwd,
294
- cmd,
295
- args
296
- });
297
- return spawn;
298
- }));
299
- });
300
- }
301
-
302
- spawnScript(wks, script, args = []) {
303
- return __awaiter(this, void 0, void 0, function* () {
304
- return yield this.spawn(wks.cwd, yield wks.project.packageManager(), [script, ...args]);
305
- });
306
- }
307
-
308
- logs() {
309
- return __awaiter(this, void 0, void 0, function* () {
310
- try {
311
- const res = yield this._qclient.request((0, _graphqlTag.default)`
312
- query Logs {
313
- logs
314
- }
315
- `);
316
- return res.logs;
317
- } catch (error) {
318
- if (error.code !== 'ECONNREFUSED') throw error;
319
- return [];
320
- }
321
- });
322
- }
323
-
324
- logs$() {
325
- return __asyncGenerator(this, arguments, function* logs$_1() {
326
- var e_1, _a;
327
-
328
- try {
329
- try {
330
- for (var _b = __asyncValues(this._subscription((0, _graphqlTag.default)`subscription Logs { log }`, {})), _c; _c = yield __await(_b.next()), !_c.done;) {
331
- const {
332
- log
333
- } = _c.value;
334
- yield yield __await(log);
335
- }
336
- } catch (e_1_1) {
337
- e_1 = {
338
- error: e_1_1
339
- };
340
- } finally {
341
- try {
342
- if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));
343
- } finally {
344
- if (e_1) throw e_1.error;
345
- }
346
- }
347
- } catch (error) {
348
- if (error.code !== 'ECONNREFUSED') throw error;
349
- return yield __await(void 0);
350
- }
351
- });
352
- }
353
-
354
- kill(id) {
355
- return __awaiter(this, void 0, void 0, function* () {
356
- return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {
357
- const {
358
- kill
359
- } = yield this._qclient.request((0, _graphqlTag.default)`
360
- mutation Kill($id: ID!) {
361
- kill(id: $id) {
362
- ...Task
363
- }
364
- }
365
-
366
- ${_jillMyr.TaskFragment}
367
- `, {
368
- id
369
- });
370
- return kill;
371
- }));
372
- });
373
- }
374
-
375
- }
376
-
377
- exports.MyrClient = MyrClient;
378
- //# sourceMappingURL=myr-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["myr/myr-client.ts","myr/myr-client.js"],"names":["__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","step","next","e","rejected","result","done","then","apply","__rest","s","t","p","Object","prototype","hasOwnProperty","call","indexOf","getOwnPropertySymbols","i","length","propertyIsEnumerable","__asyncValues","o","Symbol","asyncIterator","TypeError","m","__values","iterator","verb","n","v","settle","d","__await","__asyncGenerator","g","q","a","b","push","resume","r","fulfill","f","shift","MyrClient","constructor","project","_logger","logger","child","context","name","_endpoint","_qclient","GraphQLClient","_sclient","url","replace","webSocketImpl","WebSocket","lazy","_autoStart","fn","error","code","verbose","start","_subscription","query","variables","Repeater","stop","subscribe","data","complete","_a","_b","path","__dirname","cwd","root","detached","stdio","stdout","on","msg","line","toString","split","JSON","parse","level","message","meta","log","stderr","signal","Error","send","request","tasks","TaskFragment","spawn","cmd","args","spawnScript","wks","script","packageManager","logs","res","logs$","arguments","logs$_1","e_1","_c","e_1_1","return","kill","id"],"mappings":"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","file":"myr-client.js","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}","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 __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\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};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nimport { logger } from '@jujulego/jill-core';\nimport { TaskFragment } from '@jujulego/jill-myr';\nimport { Repeater } from '@repeaterjs/repeater';\nimport { fork } from 'child_process';\nimport { 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// Class\nexport class MyrClient {\n // Constructor\n constructor(project) {\n this.project = project;\n // Attributes\n this._logger = logger.child({ context: MyrClient.name });\n this._endpoint = 'http://localhost:5001/graphql';\n this._qclient = new GraphQLClient(this._endpoint);\n this._sclient = createClient({\n url: this._endpoint.replace(/^http/, 'ws'),\n webSocketImpl: WebSocket,\n lazy: true\n });\n }\n // Methods\n _autoStart(fn) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n return yield fn();\n }\n catch (error) {\n if (error.code !== 'ECONNREFUSED')\n throw error;\n // Start myr if connection impossible\n this._logger.verbose('Unable to connect to myr server, trying to start it');\n yield this.start();\n // Retry\n return yield fn();\n }\n });\n }\n _subscription(query, variables) {\n return new Repeater((push, stop) => {\n this._sclient.subscribe({ 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 start() {\n var _a, _b;\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 // Transmit logs to logger\n (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (msg) => {\n for (const line of msg.toString('utf-8').split('\\n')) {\n if (!line)\n continue;\n const _a = JSON.parse(line), { level, message } = _a, meta = __rest(_a, [\"level\", \"message\"]);\n logger.log(level, message, meta);\n }\n });\n (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (msg) => {\n logger.error(msg.toString('utf-8'));\n });\n // Start server\n return new Promise((resolve, reject) => {\n child.on('message', (msg) => {\n if (msg === 'started') {\n resolve();\n }\n else {\n reject(msg);\n }\n });\n child.on('close', (code, signal) => {\n reject(new Error(`Myr process ended with code ${code} by signal ${signal}`));\n });\n child.send('start');\n });\n }\n stop() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this._qclient.request(gql `\n mutation Shutdown {\n shutdown\n }\n `);\n return true;\n }\n catch (error) {\n if (error.code !== 'ECONNREFUSED')\n throw error;\n return false;\n }\n });\n }\n tasks() {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {\n const { tasks } = yield this._qclient.request(gql `\n query Tasks {\n tasks {\n ...Task\n }\n }\n\n ${TaskFragment}\n `);\n return tasks;\n }));\n });\n }\n spawn(cwd, cmd, args = []) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {\n const { spawn } = yield this._qclient.request(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 return spawn;\n }));\n });\n }\n spawnScript(wks, script, args = []) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this.spawn(wks.cwd, yield wks.project.packageManager(), [script, ...args]);\n });\n }\n logs() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const res = yield this._qclient.request(gql `\n query Logs {\n logs\n }\n `);\n return res.logs;\n }\n catch (error) {\n if (error.code !== 'ECONNREFUSED')\n throw error;\n return [];\n }\n });\n }\n logs$() {\n return __asyncGenerator(this, arguments, function* logs$_1() {\n var e_1, _a;\n try {\n try {\n for (var _b = __asyncValues(this._subscription(gql `subscription Logs { log }`, {})), _c; _c = yield __await(_b.next()), !_c.done;) {\n const { log } = _c.value;\n yield yield __await(log);\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 __await(_a.call(_b));\n }\n finally { if (e_1) throw e_1.error; }\n }\n }\n catch (error) {\n if (error.code !== 'ECONNREFUSED')\n throw error;\n return yield __await(void 0);\n }\n });\n }\n kill(id) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this._autoStart(() => __awaiter(this, void 0, void 0, function* () {\n const { kill } = yield this._qclient.request(gql `\n mutation Kill($id: ID!) {\n kill(id: $id) {\n ...Task\n }\n }\n\n ${TaskFragment}\n `, { id });\n return kill;\n }));\n });\n }\n}"]}
@@ -1,8 +0,0 @@
1
- import { Builder, Command } from '@jujulego/jill-common';
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
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["myr/myr.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AASzD,qBAAa,UAAW,SAAQ,OAAO;IAErC,QAAQ,CAAC,IAAI,SAAS;IACtB,QAAQ,CAAC,WAAW,8BAA8B;IAElD,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAMnC;IAGF,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAI7D,SAAS,CAAC,GAAG,IAAI,MAAM;CAGxB","file":"myr.command.d.ts","sourcesContent":["import { Builder, Command } from '@jujulego/jill-common';\n\nimport { KillCommand } from './commands/kill.command';\nimport { ListCommand } from './commands/list.command';\nimport { LogsCommand } from './commands/logs.command';\nimport { SpawnCommand } from './commands/spawn.command';\nimport { StopCommand } from './commands/stop.command';\n\n// Command\nexport class MyrCommand extends Command {\n // Properties\n readonly name = 'myr';\n readonly description = 'Interact with myr server';\n\n readonly commands: readonly Command[] = [\n new KillCommand(),\n new ListCommand(),\n new LogsCommand(),\n new SpawnCommand(),\n new StopCommand(),\n ];\n\n // Methods\n protected define<T, U>(builder: Builder<T, U>): Builder<T, U> {\n return yargs => this.commands.reduce((y, cmd) => cmd.setup(y), builder(yargs));\n }\n\n protected run(): number {\n return 0;\n }\n}\n"]}
@@ -1,42 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.MyrCommand = void 0;
7
-
8
- var _jillCommon = require("@jujulego/jill-common");
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
- // Command
21
- class MyrCommand extends _jillCommon.Command {
22
- constructor() {
23
- super(...arguments); // Properties
24
-
25
- this.name = 'myr';
26
- this.description = 'Interact with myr server';
27
- this.commands = [new _kill.KillCommand(), new _list.ListCommand(), new _logs.LogsCommand(), new _spawn.SpawnCommand(), new _stop.StopCommand()];
28
- } // Methods
29
-
30
-
31
- define(builder) {
32
- return yargs => this.commands.reduce((y, cmd) => cmd.setup(y), builder(yargs));
33
- }
34
-
35
- run() {
36
- return 0;
37
- }
38
-
39
- }
40
-
41
- exports.MyrCommand = MyrCommand;
42
- //# sourceMappingURL=myr.command.js.map