@jujulego/jill 1.2.0 → 2.0.0-alpha.1

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 (138) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/dist/commands/list.d.ts +23 -0
  4. package/dist/commands/list.d.ts.map +1 -0
  5. package/dist/commands/list.js +169 -0
  6. package/dist/commands/list.js.map +1 -0
  7. package/dist/filters/affected.filter.d.ts +11 -0
  8. package/dist/filters/affected.filter.d.ts.map +1 -0
  9. package/dist/filters/affected.filter.js +82 -0
  10. package/dist/filters/affected.filter.js.map +1 -0
  11. package/dist/filters/index.d.ts +4 -0
  12. package/dist/filters/index.d.ts.map +1 -0
  13. package/dist/filters/index.js +21 -0
  14. package/dist/filters/index.js.map +1 -0
  15. package/dist/filters/pipeline.d.ts +11 -0
  16. package/dist/filters/pipeline.d.ts.map +1 -0
  17. package/dist/filters/pipeline.js +34 -0
  18. package/dist/filters/pipeline.js.map +1 -0
  19. package/dist/filters/private.filter.d.ts +7 -0
  20. package/dist/filters/private.filter.d.ts.map +1 -0
  21. package/dist/filters/private.filter.js +20 -0
  22. package/dist/filters/private.filter.js.map +1 -0
  23. package/dist/filters/scripts.filter.d.ts +7 -0
  24. package/dist/filters/scripts.filter.d.ts.map +1 -0
  25. package/dist/filters/scripts.filter.js +21 -0
  26. package/dist/filters/scripts.filter.js.map +1 -0
  27. package/dist/git.d.ts +16 -0
  28. package/dist/git.d.ts.map +1 -0
  29. package/dist/git.js +94 -0
  30. package/dist/git.js.map +1 -0
  31. package/dist/index.d.ts +7 -4
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +19 -33
  34. package/dist/index.js.map +1 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +23 -52
  37. package/dist/main.js.map +1 -1
  38. package/dist/modifiers/global-config.d.ts +6 -0
  39. package/dist/modifiers/global-config.d.ts.map +1 -0
  40. package/dist/modifiers/global-config.js +24 -0
  41. package/dist/modifiers/global-config.js.map +1 -0
  42. package/dist/modifiers/index.d.ts +3 -0
  43. package/dist/modifiers/index.d.ts.map +1 -0
  44. package/dist/modifiers/index.js +20 -0
  45. package/dist/modifiers/index.js.map +1 -0
  46. package/dist/modifiers/load-project.d.ts +7 -0
  47. package/dist/modifiers/load-project.d.ts.map +1 -0
  48. package/dist/modifiers/load-project.js +39 -0
  49. package/dist/modifiers/load-project.js.map +1 -0
  50. package/dist/modifiers/setup-ink.d.ts +2 -0
  51. package/dist/modifiers/setup-ink.d.ts.map +1 -0
  52. package/dist/modifiers/setup-ink.js +19 -0
  53. package/dist/modifiers/setup-ink.js.map +1 -0
  54. package/dist/project/index.d.ts +2 -0
  55. package/dist/project/index.d.ts.map +1 -0
  56. package/dist/project/index.js +19 -0
  57. package/dist/project/index.js.map +1 -0
  58. package/dist/project/project.d.ts +25 -0
  59. package/dist/project/project.d.ts.map +1 -0
  60. package/dist/project/project.js +190 -0
  61. package/dist/project/project.js.map +1 -0
  62. package/dist/project/workspace.d.ts +32 -0
  63. package/dist/project/workspace.d.ts.map +1 -0
  64. package/dist/project/workspace.js +159 -0
  65. package/dist/project/workspace.js.map +1 -0
  66. package/dist/services/index.d.ts +4 -0
  67. package/dist/services/index.d.ts.map +1 -0
  68. package/dist/services/index.js +21 -0
  69. package/dist/services/index.js.map +1 -0
  70. package/dist/services/inversify.config.d.ts +11 -0
  71. package/dist/services/inversify.config.d.ts.map +1 -0
  72. package/dist/services/inversify.config.js +34 -0
  73. package/dist/services/inversify.config.js.map +1 -0
  74. package/dist/services/logger.service.d.ts +5 -0
  75. package/dist/services/logger.service.d.ts.map +1 -0
  76. package/dist/services/logger.service.js +58 -0
  77. package/dist/services/logger.service.js.map +1 -0
  78. package/dist/services/spinner.service.d.ts +14 -0
  79. package/dist/services/spinner.service.d.ts.map +1 -0
  80. package/dist/services/spinner.service.js +55 -0
  81. package/dist/services/spinner.service.js.map +1 -0
  82. package/dist/services/task-manager.service.d.ts +1 -0
  83. package/dist/services/task-manager.service.d.ts.map +1 -0
  84. package/dist/services/task-manager.service.js +18 -0
  85. package/dist/services/task-manager.service.js.map +1 -0
  86. package/dist/types.d.ts +1 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +7 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/ui/cli-list.d.ts +15 -0
  91. package/dist/ui/cli-list.d.ts.map +1 -0
  92. package/dist/ui/cli-list.js +66 -0
  93. package/dist/ui/cli-list.js.map +1 -0
  94. package/dist/ui/global-spinner.d.ts +2 -0
  95. package/dist/ui/global-spinner.d.ts.map +1 -0
  96. package/dist/ui/global-spinner.js +43 -0
  97. package/dist/ui/global-spinner.js.map +1 -0
  98. package/dist/ui/index.d.ts +4 -0
  99. package/dist/ui/index.d.ts.map +1 -0
  100. package/dist/ui/index.js +21 -0
  101. package/dist/ui/index.js.map +1 -0
  102. package/dist/ui/layout.d.ts +2 -0
  103. package/dist/ui/layout.d.ts.map +1 -0
  104. package/dist/ui/layout.js +19 -0
  105. package/dist/ui/layout.js.map +1 -0
  106. package/dist/ui/static-logs.d.ts +2 -0
  107. package/dist/ui/static-logs.d.ts.map +1 -0
  108. package/dist/ui/static-logs.js +79 -0
  109. package/dist/ui/static-logs.js.map +1 -0
  110. package/dist/utils.d.ts +7 -0
  111. package/dist/utils.d.ts.map +1 -0
  112. package/dist/utils.js +61 -0
  113. package/dist/utils.js.map +1 -0
  114. package/package.json +56 -48
  115. package/dist/commands/each.command.d.ts +0 -16
  116. package/dist/commands/each.command.d.ts.map +0 -1
  117. package/dist/commands/each.command.js +0 -203
  118. package/dist/commands/each.command.js.map +0 -1
  119. package/dist/commands/info.command.d.ts +0 -8
  120. package/dist/commands/info.command.d.ts.map +0 -1
  121. package/dist/commands/info.command.js +0 -178
  122. package/dist/commands/info.command.js.map +0 -1
  123. package/dist/commands/list.command.d.ts +0 -21
  124. package/dist/commands/list.command.d.ts.map +0 -1
  125. package/dist/commands/list.command.js +0 -251
  126. package/dist/commands/list.command.js.map +0 -1
  127. package/dist/commands/run.command.d.ts +0 -12
  128. package/dist/commands/run.command.d.ts.map +0 -1
  129. package/dist/commands/run.command.js +0 -111
  130. package/dist/commands/run.command.js.map +0 -1
  131. package/dist/core.plugin.d.ts +0 -2
  132. package/dist/core.plugin.d.ts.map +0 -1
  133. package/dist/core.plugin.js +0 -22
  134. package/dist/core.plugin.js.map +0 -1
  135. package/dist/task-logger.d.ts +0 -14
  136. package/dist/task-logger.d.ts.map +0 -1
  137. package/dist/task-logger.js +0 -76
  138. package/dist/task-logger.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "SpinnerService", {
6
+ enumerable: true,
7
+ get: ()=>SpinnerService
8
+ });
9
+ const _inversify = require("inversify");
10
+ const _inversifyConfig = require("./inversify.config");
11
+ var __decorate = (void 0) && (void 0).__decorate || function(decorators, target, key, desc) {
12
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
15
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
16
+ };
17
+ let SpinnerService = class SpinnerService {
18
+ // Attributes
19
+ _spin = false;
20
+ _label = '';
21
+ _listeners = new Set();
22
+ // Methods
23
+ subscribe(listener) {
24
+ this._listeners.add(listener);
25
+ return ()=>{
26
+ this._listeners.delete(listener);
27
+ };
28
+ }
29
+ spin(label) {
30
+ this._spin = true;
31
+ this._label = label;
32
+ for (const listener of this._listeners){
33
+ listener(this.state);
34
+ }
35
+ }
36
+ stop() {
37
+ this._spin = false;
38
+ for (const listener of this._listeners){
39
+ listener(this.state);
40
+ }
41
+ }
42
+ // Properties
43
+ get state() {
44
+ return {
45
+ spin: this._spin,
46
+ label: this._label
47
+ };
48
+ }
49
+ };
50
+ SpinnerService = __decorate([
51
+ (0, _inversify.injectable)()
52
+ ], SpinnerService);
53
+ _inversifyConfig.container.bind(SpinnerService).toSelf().inSingletonScope();
54
+
55
+ //# sourceMappingURL=spinner.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["services/spinner.service.js"],"sourcesContent":["import { injectable } from 'inversify';\nimport { container } from './inversify.config';\n\n// Interface\nexport interface SpinnerState {\n spin: boolean;\n label: string;\n}\n\nexport type SpinnerStateListener = (state: SpinnerState) => void;\n\n// Service\n@injectable()\nexport class SpinnerService {\n // Attributes\n private _spin = false;\n private _label = '';\n\n private readonly _listeners = new Set<SpinnerStateListener>();\n\n // Methods\n subscribe(listener: SpinnerStateListener) {\n this._listeners.add(listener);\n\n return () => {\n this._listeners.delete(listener);\n };\n }\n\n spin(label: string) {\n this._spin = true;\n this._label = label;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n stop() {\n this._spin = false;\n\n for (const listener of this._listeners) {\n listener(this.state);\n }\n }\n\n // Properties\n get state(): SpinnerState {\n return {\n spin: this._spin,\n label: this._label,\n };\n }\n}\n\ncontainer.bind(SpinnerService)\n .toSelf()\n .inSingletonScope();\n"],"names":["SpinnerService","_spin","_label","_listeners","Set","subscribe","listener","add","delete","spin","label","state","stop","injectable","container","bind","toSelf","inSingletonScope"],"mappings":"AAAA;;;;+BAaaA;;aAAAA;;2BAbc;iCACD;;;;;;;IAYbA,iBAAN;IACL,aAAa;IACLC,QAAQ,KAAK,CAAC;IACdC,SAAS,GAAG;IAEHC,aAAa,IAAIC,MAA4B;IAE9D,UAAU;IACVC,UAAUC,QAA8B,EAAE;QACxC,IAAI,CAACH,UAAU,CAACI,GAAG,CAACD;QAEpB,OAAO,IAAM;YACX,IAAI,CAACH,UAAU,CAACK,MAAM,CAACF;QACzB;IACF;IAEAG,KAAKC,KAAa,EAAE;QAClB,IAAI,CAACT,KAAK,GAAG,IAAI;QACjB,IAAI,CAACC,MAAM,GAAGQ;QAEd,KAAK,MAAMJ,YAAY,IAAI,CAACH,UAAU,CAAE;YACtCG,SAAS,IAAI,CAACK,KAAK;QACrB;IACF;IAEAC,OAAO;QACL,IAAI,CAACX,KAAK,GAAG,KAAK;QAElB,KAAK,MAAMK,YAAY,IAAI,CAACH,UAAU,CAAE;YACtCG,SAAS,IAAI,CAACK,KAAK;QACrB;IACF;IAEA,aAAa;IACb,IAAIA,QAAsB;QACxB,OAAO;YACLF,MAAM,IAAI,CAACR,KAAK;YAChBS,OAAO,IAAI,CAACR,MAAM;QACpB;IACF;AACF;AAxCaF;IADZa,IAAAA,qBAAU;GACEb;AA0Cbc,0BAAS,CAACC,IAAI,CAACf,gBACZgB,MAAM,GACNC,gBAAgB","file":"spinner.service.js"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["services/task-manager.service.ts"],"names":[],"mappings":"","file":"task-manager.service.d.ts","sourcesContent":["import { TaskManager } from '@jujulego/tasks';\n\nimport { type GlobalConfig, GLOBAL_CONFIG, container } from './inversify.config';\nimport { Logger } from './logger.service';\n\n// Service\ncontainer.bind(TaskManager)\n .toDynamicValue((context) => {\n const config = context.container.get<GlobalConfig>(GLOBAL_CONFIG);\n const logger = context.container.get(Logger);\n\n return new TaskManager({ jobs: config.jobs, logger });\n })\n .inSingletonScope();\n"]}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ const _tasks = require("@jujulego/tasks");
6
+ const _inversifyConfig = require("./inversify.config");
7
+ const _loggerService = require("./logger.service");
8
+ // Service
9
+ _inversifyConfig.container.bind(_tasks.TaskManager).toDynamicValue((context)=>{
10
+ const config = context.container.get(_inversifyConfig.GLOBAL_CONFIG);
11
+ const logger = context.container.get(_loggerService.Logger);
12
+ return new _tasks.TaskManager({
13
+ jobs: config.jobs,
14
+ logger
15
+ });
16
+ }).inSingletonScope();
17
+
18
+ //# sourceMappingURL=task-manager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["services/task-manager.service.js"],"sourcesContent":["import { TaskManager } from '@jujulego/tasks';\n\nimport { type GlobalConfig, GLOBAL_CONFIG, container } from './inversify.config';\nimport { Logger } from './logger.service';\n\n// Service\ncontainer.bind(TaskManager)\n .toDynamicValue((context) => {\n const config = context.container.get<GlobalConfig>(GLOBAL_CONFIG);\n const logger = context.container.get(Logger);\n\n return new TaskManager({ jobs: config.jobs, logger });\n })\n .inSingletonScope();\n"],"names":["container","bind","TaskManager","toDynamicValue","context","config","get","GLOBAL_CONFIG","logger","Logger","jobs","inSingletonScope"],"mappings":"AAAA;;;;uBAA4B;iCAEgC;+BACrC;AAEvB,UAAU;AACVA,0BAAS,CAACC,IAAI,CAACC,kBAAW,EACvBC,cAAc,CAAC,CAACC,UAAY;IAC3B,MAAMC,SAASD,QAAQJ,SAAS,CAACM,GAAG,CAAeC,8BAAa;IAChE,MAAMC,SAASJ,QAAQJ,SAAS,CAACM,GAAG,CAACG,qBAAM;IAE3C,OAAO,IAAIP,kBAAW,CAAC;QAAEQ,MAAML,OAAOK,IAAI;QAAEF;IAAO;AACrD,GACCG,gBAAgB","file":"task-manager.service.js"}
@@ -0,0 +1 @@
1
+ export declare type Awaitable<T> = T | Promise<T>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["types.ts"],"names":[],"mappings":"AACA,oBAAY,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC","file":"types.d.ts","sourcesContent":["// Types\nexport type Awaitable<T> = T | Promise<T>;\n"]}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ // Types
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["types.js"],"sourcesContent":["// Types\nexport type Awaitable<T> = T | Promise<T>;\n"],"names":[],"mappings":"AAAA,QAAQ;AACR","file":"types.js"}
@@ -0,0 +1,15 @@
1
+ export declare class CliList {
2
+ private _headers?;
3
+ private readonly _data;
4
+ private readonly _columns;
5
+ private static _capitalize;
6
+ private static _length;
7
+ private _updateColumns;
8
+ private _formatValue;
9
+ setHeaders(headers: string[]): void;
10
+ add(data: string[]): void;
11
+ lines(): Generator<string, void>;
12
+ get columns(): number[];
13
+ get headers(): string[];
14
+ get data(): string[][];
15
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/cli-list.ts"],"names":[],"mappings":"AAGA,qBAAa,OAAO;IAElB,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IAGzC,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,MAAM,CAAC,OAAO;IAItB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,YAAY;IAIpB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKxB,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;IAajC,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,EAAE,EAAE,CAErB;CACF","file":"cli-list.d.ts","sourcesContent":["import chalk from 'chalk';\n\n// Class\nexport class CliList {\n // Attributes\n private _headers?: string[];\n private readonly _data: string[][] = [];\n private readonly _columns: number[] = [];\n\n // Methods\n private static _capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n }\n\n private static _length(txt: string): number {\n return txt.replace(/\\033\\[[^m]*m/g, '').length;\n }\n\n private _updateColumns(data: string[]): void {\n // Add missing columns\n while (data.length > this._columns.length) {\n this._columns.push(0);\n }\n\n // Update columns\n for (let i = 0; i < data.length; ++i) {\n this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));\n }\n }\n\n private _formatValue(value: string, idx: number): string {\n return value + ' '.repeat(this._columns[idx] - CliList._length(value));\n }\n \n setHeaders(headers: string[]): void {\n this._updateColumns(headers);\n this._headers = headers.map(CliList._capitalize);\n }\n \n add(data: string[]): void {\n this._updateColumns(data);\n this._data.push(data);\n }\n\n *lines(): Generator<string, void> {\n if (this._headers) {\n yield this._headers.map((v, i) => chalk.bold(this._formatValue(v, i)))\n .join(' ');\n }\n\n for (const data of this._data) {\n yield data.map((v, i) => this._formatValue(v, i))\n .join(' ');\n }\n }\n\n // Properties\n get columns(): number[] {\n return this._columns;\n }\n\n get headers(): string[] {\n return this._headers || [];\n }\n\n get data(): string[][] {\n return this._data;\n }\n}"]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "CliList", {
6
+ enumerable: true,
7
+ get: ()=>CliList
8
+ });
9
+ const _chalk = /*#__PURE__*/ _interopRequireDefault(require("chalk"));
10
+ function _interopRequireDefault(obj) {
11
+ return obj && obj.__esModule ? obj : {
12
+ default: obj
13
+ };
14
+ }
15
+ class CliList {
16
+ _data = [];
17
+ _columns = [];
18
+ // Methods
19
+ static _capitalize(txt) {
20
+ return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
21
+ }
22
+ static _length(txt) {
23
+ return txt.replace(/\033\[[^m]*m/g, '').length;
24
+ }
25
+ _updateColumns(data) {
26
+ // Add missing columns
27
+ while(data.length > this._columns.length){
28
+ this._columns.push(0);
29
+ }
30
+ // Update columns
31
+ for(let i = 0; i < data.length; ++i){
32
+ this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));
33
+ }
34
+ }
35
+ _formatValue(value, idx) {
36
+ return value + ' '.repeat(this._columns[idx] - CliList._length(value));
37
+ }
38
+ setHeaders(headers) {
39
+ this._updateColumns(headers);
40
+ this._headers = headers.map(CliList._capitalize);
41
+ }
42
+ add(data) {
43
+ this._updateColumns(data);
44
+ this._data.push(data);
45
+ }
46
+ *lines() {
47
+ if (this._headers) {
48
+ yield this._headers.map((v, i)=>_chalk.default.bold(this._formatValue(v, i))).join(' ');
49
+ }
50
+ for (const data of this._data){
51
+ yield data.map((v, i)=>this._formatValue(v, i)).join(' ');
52
+ }
53
+ }
54
+ // Properties
55
+ get columns() {
56
+ return this._columns;
57
+ }
58
+ get headers() {
59
+ return this._headers || [];
60
+ }
61
+ get data() {
62
+ return this._data;
63
+ }
64
+ }
65
+
66
+ //# sourceMappingURL=cli-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/cli-list.js"],"sourcesContent":["import chalk from 'chalk';\n\n// Class\nexport class CliList {\n // Attributes\n private _headers?: string[];\n private readonly _data: string[][] = [];\n private readonly _columns: number[] = [];\n\n // Methods\n private static _capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n }\n\n private static _length(txt: string): number {\n return txt.replace(/\\033\\[[^m]*m/g, '').length;\n }\n\n private _updateColumns(data: string[]): void {\n // Add missing columns\n while (data.length > this._columns.length) {\n this._columns.push(0);\n }\n\n // Update columns\n for (let i = 0; i < data.length; ++i) {\n this._columns[i] = Math.max(this._columns[i], CliList._length(data[i]));\n }\n }\n\n private _formatValue(value: string, idx: number): string {\n return value + ' '.repeat(this._columns[idx] - CliList._length(value));\n }\n \n setHeaders(headers: string[]): void {\n this._updateColumns(headers);\n this._headers = headers.map(CliList._capitalize);\n }\n \n add(data: string[]): void {\n this._updateColumns(data);\n this._data.push(data);\n }\n\n *lines(): Generator<string, void> {\n if (this._headers) {\n yield this._headers.map((v, i) => chalk.bold(this._formatValue(v, i)))\n .join(' ');\n }\n\n for (const data of this._data) {\n yield data.map((v, i) => this._formatValue(v, i))\n .join(' ');\n }\n }\n\n // Properties\n get columns(): number[] {\n return this._columns;\n }\n\n get headers(): string[] {\n return this._headers || [];\n }\n\n get data(): string[][] {\n return this._data;\n }\n}"],"names":["CliList","_data","_columns","_capitalize","txt","charAt","toUpperCase","substring","toLowerCase","_length","replace","length","_updateColumns","data","push","i","Math","max","_formatValue","value","idx","repeat","setHeaders","headers","_headers","map","add","lines","v","chalk","bold","join","columns"],"mappings":"AAAA;;;;+BAGaA;;aAAAA;;4DAHK;;;;;;AAGX,MAAMA;IAGMC,QAAoB,EAAE,CAAC;IACvBC,WAAqB,EAAE,CAAC;IAEzC,UAAU;IACV,OAAeC,YAAYC,GAAW,EAAU;QAC9C,OAAOA,IAAIC,MAAM,CAAC,GAAGC,WAAW,KAAKF,IAAIG,SAAS,CAAC,GAAGC,WAAW;IACnE;IAEA,OAAeC,QAAQL,GAAW,EAAU;QAC1C,OAAOA,IAAIM,OAAO,CAAC,iBAAiB,IAAIC,MAAM;IAChD;IAEQC,eAAeC,IAAc,EAAQ;QAC3C,sBAAsB;QACtB,MAAOA,KAAKF,MAAM,GAAG,IAAI,CAACT,QAAQ,CAACS,MAAM,CAAE;YACzC,IAAI,CAACT,QAAQ,CAACY,IAAI,CAAC;QACrB;QAEA,iBAAiB;QACjB,IAAK,IAAIC,IAAI,GAAGA,IAAIF,KAAKF,MAAM,EAAE,EAAEI,EAAG;YACpC,IAAI,CAACb,QAAQ,CAACa,EAAE,GAAGC,KAAKC,GAAG,CAAC,IAAI,CAACf,QAAQ,CAACa,EAAE,EAAEf,QAAQS,OAAO,CAACI,IAAI,CAACE,EAAE;QACvE;IACF;IAEQG,aAAaC,KAAa,EAAEC,GAAW,EAAU;QACvD,OAAOD,QAAQ,IAAIE,MAAM,CAAC,IAAI,CAACnB,QAAQ,CAACkB,IAAI,GAAGpB,QAAQS,OAAO,CAACU;IACjE;IAEAG,WAAWC,OAAiB,EAAQ;QAClC,IAAI,CAACX,cAAc,CAACW;QACpB,IAAI,CAACC,QAAQ,GAAGD,QAAQE,GAAG,CAACzB,QAAQG,WAAW;IACjD;IAEAuB,IAAIb,IAAc,EAAQ;QACxB,IAAI,CAACD,cAAc,CAACC;QACpB,IAAI,CAACZ,KAAK,CAACa,IAAI,CAACD;IAClB;IAEA,CAACc,QAAiC;QAChC,IAAI,IAAI,CAACH,QAAQ,EAAE;YACjB,MAAM,IAAI,CAACA,QAAQ,CAACC,GAAG,CAAC,CAACG,GAAGb,IAAMc,cAAK,CAACC,IAAI,CAAC,IAAI,CAACZ,YAAY,CAACU,GAAGb,KAC7DgB,IAAI,CAAC;QACZ,CAAC;QAED,KAAK,MAAMlB,QAAQ,IAAI,CAACZ,KAAK,CAAE;YAC7B,MAAMY,KAAKY,GAAG,CAAC,CAACG,GAAGb,IAAM,IAAI,CAACG,YAAY,CAACU,GAAGb,IAC3CgB,IAAI,CAAC;QACV;IACF;IAEA,aAAa;IACb,IAAIC,UAAoB;QACtB,OAAO,IAAI,CAAC9B,QAAQ;IACtB;IAEA,IAAIqB,UAAoB;QACtB,OAAO,IAAI,CAACC,QAAQ,IAAI,EAAE;IAC5B;IAEA,IAAIX,OAAmB;QACrB,OAAO,IAAI,CAACZ,KAAK;IACnB;AACF","file":"cli-list.js"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const GlobalSpinner: FC;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/global-spinner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAKtD,eAAO,MAAM,aAAa,EAAE,EAsB3B,CAAC","file":"global-spinner.d.ts","sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ spin: false, label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n if (state.spin) {\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n }\n\n return <></>;\n};\n"]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "GlobalSpinner", {
6
+ enumerable: true,
7
+ get: ()=>GlobalSpinner
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _ink = require("ink");
11
+ const _inkSpinner = /*#__PURE__*/ _interopRequireDefault(require("ink-spinner"));
12
+ const _react = require("react");
13
+ const _services = require("../services");
14
+ function _interopRequireDefault(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ const GlobalSpinner = ()=>{
20
+ // State
21
+ const [state, setState] = (0, _react.useState)({
22
+ spin: false,
23
+ label: ''
24
+ });
25
+ // Effect
26
+ (0, _react.useLayoutEffect)(()=>{
27
+ const spinner = _services.container.get(_services.SpinnerService);
28
+ setState(spinner.state);
29
+ return spinner.subscribe(setState);
30
+ }, []);
31
+ // Render
32
+ if (state.spin) {
33
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
34
+ children: [
35
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_inkSpinner.default, {}),
36
+ ' ' + state.label
37
+ ]
38
+ });
39
+ }
40
+ return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
41
+ };
42
+
43
+ //# sourceMappingURL=global-spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/global-spinner.js"],"sourcesContent":["import { Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { FC, useLayoutEffect, useState } from 'react';\n\nimport { container, SpinnerService, SpinnerState } from '../services';\n\n// Components\nexport const GlobalSpinner: FC = () => {\n // State\n const [state, setState] = useState<SpinnerState>({ spin: false, label: '' });\n\n // Effect\n useLayoutEffect(() => {\n const spinner = container.get(SpinnerService);\n setState(spinner.state);\n\n return spinner.subscribe(setState);\n }, []);\n\n // Render\n if (state.spin) {\n return (\n <Text>\n <Spinner />{' ' + state.label}\n </Text>\n );\n }\n\n return <></>;\n};\n"],"names":["GlobalSpinner","state","setState","useState","spin","label","useLayoutEffect","spinner","container","get","SpinnerService","subscribe","Text","Spinner"],"mappings":"AAAA;;;;+BAOaA;;aAAAA;;;qBAPQ;iEACD;uBAC0B;0BAEU;;;;;;AAGjD,MAAMA,gBAAoB,IAAM;IACrC,QAAQ;IACR,MAAM,CAACC,OAAOC,SAAS,GAAGC,IAAAA,eAAQ,EAAe;QAAEC,MAAM,KAAK;QAAEC,OAAO;IAAG;IAE1E,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAC5CR,SAASK,QAAQN,KAAK;QAEtB,OAAOM,QAAQI,SAAS,CAACT;IAC3B,GAAG,EAAE;IAEL,SAAS;IACT,IAAID,MAAMG,IAAI,EAAE;QACd,qBACE,sBAACQ,SAAI;;8BACH,qBAACC,mBAAO;gBAAI,MAAMZ,MAAMI,KAAK;;;IAGnC,CAAC;IAED,qBAAO;AACT","file":"global-spinner.js"}
@@ -0,0 +1,4 @@
1
+ export * from './cli-list';
2
+ export * from './global-spinner';
3
+ export * from './layout';
4
+ export * from './static-logs';
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC","file":"index.d.ts","sourcesContent":["export * from './cli-list';\nexport * from './global-spinner';\nexport * from './layout';\nexport * from './static-logs';\n"]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _exportStar(require("./cli-list"), exports);
6
+ _exportStar(require("./global-spinner"), exports);
7
+ _exportStar(require("./layout"), exports);
8
+ _exportStar(require("./static-logs"), exports);
9
+ function _exportStar(from, to) {
10
+ Object.keys(from).forEach(function(k) {
11
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
12
+ enumerable: true,
13
+ get: function() {
14
+ return from[k];
15
+ }
16
+ });
17
+ });
18
+ return from;
19
+ }
20
+
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/index.js"],"sourcesContent":["export * from './cli-list';\nexport * from './global-spinner';\nexport * from './layout';\nexport * from './static-logs';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA;oBACA","file":"index.js"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const Layout: FC;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAM3B,eAAO,MAAM,MAAM,EAAE,EAKpB,CAAC","file":"layout.d.ts","sourcesContent":["import { FC } from 'react';\n\nimport { GlobalSpinner } from './global-spinner';\nimport { StaticLogs } from './static-logs';\n\n// Component\nexport const Layout: FC = () => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n </>\n);\n"]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "Layout", {
6
+ enumerable: true,
7
+ get: ()=>Layout
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _globalSpinner = require("./global-spinner");
11
+ const _staticLogs = require("./static-logs");
12
+ const Layout = ()=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
13
+ children: [
14
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_staticLogs.StaticLogs, {}),
15
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_globalSpinner.GlobalSpinner, {})
16
+ ]
17
+ });
18
+
19
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/layout.js"],"sourcesContent":["import { FC } from 'react';\n\nimport { GlobalSpinner } from './global-spinner';\nimport { StaticLogs } from './static-logs';\n\n// Component\nexport const Layout: FC = () => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n </>\n);\n"],"names":["Layout","StaticLogs","GlobalSpinner"],"mappings":"AAAA;;;;+BAMaA;;aAAAA;;;+BAJiB;4BACH;AAGpB,MAAMA,SAAa,kBACxB;;0BACE,qBAACC,sBAAU;0BACX,qBAACC,4BAAa","file":"layout.js"}
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const StaticLogs: FC;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/static-logs.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAA6B,MAAM,OAAO,CAAC;AAiBtD,eAAO,MAAM,UAAU,EAAE,EA0CxB,CAAC","file":"static-logs.d.ts","sourcesContent":["import { Static, Text } from 'ink';\nimport { FC, useLayoutEffect, useState } from 'react';\nimport Transport from 'winston-transport';\n\nimport { container, Logger } from '../services';\n\n// Constants\nconst COLORS: Record<string, string> = {\n debug: 'grey',\n verbose: 'blue',\n warn: 'yellow',\n error: 'red',\n};\n\n// Utils\nlet id = 0;\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const [logs, setLogs] = useState<any[]>([]);\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n const olds = logger.transports;\n\n logger.clear();\n logger.add(new class extends Transport {\n // Methods\n log(info: any, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n setLogs((old) => [...old, { id: ++id, ...info }]);\n\n next();\n }\n });\n\n return () => {\n logger.clear();\n\n for (const transport of olds) {\n logger.add(transport);\n }\n };\n }, []);\n\n return (\n <Static items={logs}>\n { (log) => (\n <Text key={log.id} color={COLORS[log.level]}>\n { log.label && <Text color=\"grey\">[{ log.label }]{' '}</Text> }\n { log.message }\n </Text>\n ) }\n </Static>\n );\n};\n"]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "StaticLogs", {
6
+ enumerable: true,
7
+ get: ()=>StaticLogs
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _ink = require("ink");
11
+ const _react = require("react");
12
+ const _winstonTransport = /*#__PURE__*/ _interopRequireDefault(require("winston-transport"));
13
+ const _services = require("../services");
14
+ function _interopRequireDefault(obj) {
15
+ return obj && obj.__esModule ? obj : {
16
+ default: obj
17
+ };
18
+ }
19
+ // Constants
20
+ const COLORS = {
21
+ debug: 'grey',
22
+ verbose: 'blue',
23
+ warn: 'yellow',
24
+ error: 'red'
25
+ };
26
+ // Utils
27
+ let id = 0;
28
+ const StaticLogs = ()=>{
29
+ // State
30
+ const [logs, setLogs] = (0, _react.useState)([]);
31
+ // Effect
32
+ (0, _react.useLayoutEffect)(()=>{
33
+ const logger = _services.container.get(_services.Logger);
34
+ const olds = logger.transports;
35
+ logger.clear();
36
+ logger.add(new class extends _winstonTransport.default {
37
+ // Methods
38
+ log(info, next) {
39
+ setTimeout(()=>{
40
+ this.emit('logged', info);
41
+ }, 0);
42
+ setLogs((old)=>[
43
+ ...old,
44
+ {
45
+ id: ++id,
46
+ ...info
47
+ }
48
+ ]);
49
+ next();
50
+ }
51
+ });
52
+ return ()=>{
53
+ logger.clear();
54
+ for (const transport of olds){
55
+ logger.add(transport);
56
+ }
57
+ };
58
+ }, []);
59
+ return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Static, {
60
+ items: logs,
61
+ children: (log)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
62
+ color: COLORS[log.level],
63
+ children: [
64
+ log.label && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
65
+ color: "grey",
66
+ children: [
67
+ "[",
68
+ log.label,
69
+ "]",
70
+ ' '
71
+ ]
72
+ }),
73
+ log.message
74
+ ]
75
+ }, log.id)
76
+ });
77
+ };
78
+
79
+ //# sourceMappingURL=static-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/static-logs.js"],"sourcesContent":["import { Static, Text } from 'ink';\nimport { FC, useLayoutEffect, useState } from 'react';\nimport Transport from 'winston-transport';\n\nimport { container, Logger } from '../services';\n\n// Constants\nconst COLORS: Record<string, string> = {\n debug: 'grey',\n verbose: 'blue',\n warn: 'yellow',\n error: 'red',\n};\n\n// Utils\nlet id = 0;\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const [logs, setLogs] = useState<any[]>([]);\n\n // Effect\n useLayoutEffect(() => {\n const logger = container.get(Logger);\n const olds = logger.transports;\n\n logger.clear();\n logger.add(new class extends Transport {\n // Methods\n log(info: any, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n setLogs((old) => [...old, { id: ++id, ...info }]);\n\n next();\n }\n });\n\n return () => {\n logger.clear();\n\n for (const transport of olds) {\n logger.add(transport);\n }\n };\n }, []);\n\n return (\n <Static items={logs}>\n { (log) => (\n <Text key={log.id} color={COLORS[log.level]}>\n { log.label && <Text color=\"grey\">[{ log.label }]{' '}</Text> }\n { log.message }\n </Text>\n ) }\n </Static>\n );\n};\n"],"names":["StaticLogs","COLORS","debug","verbose","warn","error","id","logs","setLogs","useState","useLayoutEffect","logger","container","get","Logger","olds","transports","clear","add","Transport","log","info","next","setTimeout","emit","old","transport","Static","items","Text","color","level","label","message"],"mappings":"AAAA;;;;+BAkBaA;;aAAAA;;;qBAlBgB;uBACiB;uEACxB;0BAEY;;;;;;AAElC,YAAY;AACZ,MAAMC,SAAiC;IACrCC,OAAO;IACPC,SAAS;IACTC,MAAM;IACNC,OAAO;AACT;AAEA,QAAQ;AACR,IAAIC,KAAK;AAGF,MAAMN,aAAiB,IAAM;IAClC,QAAQ;IACR,MAAM,CAACO,MAAMC,QAAQ,GAAGC,IAAAA,eAAQ,EAAQ,EAAE;IAE1C,SAAS;IACTC,IAAAA,sBAAe,EAAC,IAAM;QACpB,MAAMC,SAASC,mBAAS,CAACC,GAAG,CAACC,gBAAM;QACnC,MAAMC,OAAOJ,OAAOK,UAAU;QAE9BL,OAAOM,KAAK;QACZN,OAAOO,GAAG,CAAC,IAAI,cAAcC,yBAAS;YACpC,UAAU;YACVC,IAAIC,IAAS,EAAEC,IAAgB,EAAQ;gBACrCC,WAAW,IAAM;oBACf,IAAI,CAACC,IAAI,CAAC,UAAUH;gBACtB,GAAG;gBAEHb,QAAQ,CAACiB,MAAQ;2BAAIA;wBAAK;4BAAEnB,IAAI,EAAEA;4BAAI,GAAGe,IAAI;wBAAC;qBAAE;gBAEhDC;YACF;QACF;QAEA,OAAO,IAAM;YACXX,OAAOM,KAAK;YAEZ,KAAK,MAAMS,aAAaX,KAAM;gBAC5BJ,OAAOO,GAAG,CAACQ;YACb;QACF;IACF,GAAG,EAAE;IAEL,qBACE,qBAACC,WAAM;QAACC,OAAOrB;kBACX,CAACa,oBACD,sBAACS,SAAI;gBAAcC,OAAO7B,MAAM,CAACmB,IAAIW,KAAK,CAAC;;oBACvCX,IAAIY,KAAK,kBAAI,sBAACH,SAAI;wBAACC,OAAM;;4BAAO;4BAAGV,IAAIY,KAAK;4BAAE;4BAAE;;;oBAChDZ,IAAIa,OAAO;;eAFJb,IAAId,EAAE;;AAOzB","file":"static-logs.js"}
@@ -0,0 +1,7 @@
1
+ import { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';
2
+ import { Argv, CommandModule } from 'yargs';
3
+ export declare function combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T>;
4
+ export declare function streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string>;
5
+ export declare type Modifier<T = unknown, U = unknown> = (yargs: Argv<T>) => void | Argv<U>;
6
+ export declare function applyModifiers<T>(yargs: Argv<T>, modifiers: Modifier[]): Argv<T>;
7
+ export declare function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U>;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG5C,wBAAuB,OAAO,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAuB,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CA8BnG;AAGD,oBAAY,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpF,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAQhF;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAErF","file":"utils.d.ts","sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Argv, CommandModule } from 'yargs';\n\n// Stream utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n\n task.subscribe('status.done', () => ctrl.abort());\n task.subscribe('status.failed', () => ctrl.abort());\n\n // Stream\n let current = '';\n\n try {\n for await (const chunk of streamEvents(task, `stream.${stream}`, { signal: ctrl.signal })) {\n const data = current + chunk.data.toString('utf-8');\n const lines = data.split(/\\r?\\n/g);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (task.exitCode !== 0) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n\n// Command utils\nexport type Modifier<T = unknown, U = unknown> = (yargs: Argv<T>) => void | Argv<U>;\n\nexport function applyModifiers<T>(yargs: Argv<T>, modifiers: Modifier[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const modifier of modifiers) {\n tmp = modifier(tmp) ?? tmp;\n }\n\n return tmp as Argv<T>;\n}\n\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n"]}
package/dist/utils.js ADDED
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ combine: ()=>combine,
13
+ streamLines: ()=>streamLines,
14
+ applyModifiers: ()=>applyModifiers,
15
+ defineCommand: ()=>defineCommand
16
+ });
17
+ const _eventTree = require("@jujulego/event-tree");
18
+ async function* combine(...generators) {
19
+ for (const gen of generators){
20
+ yield* gen;
21
+ }
22
+ }
23
+ async function* streamLines(task, stream) {
24
+ // Abort
25
+ const ctrl = new AbortController();
26
+ task.subscribe('status.done', ()=>ctrl.abort());
27
+ task.subscribe('status.failed', ()=>ctrl.abort());
28
+ // Stream
29
+ let current = '';
30
+ try {
31
+ for await (const chunk of (0, _eventTree.streamEvents)(task, `stream.${stream}`, {
32
+ signal: ctrl.signal
33
+ })){
34
+ const data = current + chunk.data.toString('utf-8');
35
+ const lines = data.split(/\r?\n/g);
36
+ current = lines.pop() ?? '';
37
+ for (const line of lines){
38
+ yield line;
39
+ }
40
+ }
41
+ } catch (err) {
42
+ if (task.exitCode !== 0) {
43
+ throw err;
44
+ }
45
+ if (current) {
46
+ yield current;
47
+ }
48
+ }
49
+ }
50
+ function applyModifiers(yargs, modifiers) {
51
+ let tmp = yargs;
52
+ for (const modifier of modifiers){
53
+ tmp = modifier(tmp) ?? tmp;
54
+ }
55
+ return tmp;
56
+ }
57
+ function defineCommand(command) {
58
+ return command;
59
+ }
60
+
61
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.js"],"sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Argv, CommandModule } from 'yargs';\n\n// Stream utils\nexport async function* combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T> {\n for (const gen of generators) {\n yield* gen;\n }\n}\n\nexport async function *streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string> {\n // Abort\n const ctrl = new AbortController();\n\n task.subscribe('status.done', () => ctrl.abort());\n task.subscribe('status.failed', () => ctrl.abort());\n\n // Stream\n let current = '';\n\n try {\n for await (const chunk of streamEvents(task, `stream.${stream}`, { signal: ctrl.signal })) {\n const data = current + chunk.data.toString('utf-8');\n const lines = data.split(/\\r?\\n/g);\n\n current = lines.pop() ?? '';\n\n for (const line of lines) {\n yield line;\n }\n }\n } catch (err) {\n if (task.exitCode !== 0) {\n throw err;\n }\n\n if (current) {\n yield current;\n }\n }\n}\n\n// Command utils\nexport type Modifier<T = unknown, U = unknown> = (yargs: Argv<T>) => void | Argv<U>;\n\nexport function applyModifiers<T>(yargs: Argv<T>, modifiers: Modifier[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const modifier of modifiers) {\n tmp = modifier(tmp) ?? tmp;\n }\n\n return tmp as Argv<T>;\n}\n\nexport function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U> {\n return command;\n}\n"],"names":["combine","streamLines","applyModifiers","defineCommand","generators","gen","task","stream","ctrl","AbortController","subscribe","abort","current","chunk","streamEvents","signal","data","toString","lines","split","pop","line","err","exitCode","yargs","modifiers","tmp","modifier","command"],"mappings":"AAAA;;;;;;;;;;;IAKuBA,OAAO,MAAPA;IAMAC,WAAW,MAAXA;IAmCPC,cAAc,MAAdA;IAUAC,aAAa,MAAbA;;2BAxDa;AAKtB,gBAAgBH,QAAW,GAAGI,UAA+B,EAAqB;IACvF,KAAK,MAAMC,OAAOD,WAAY;QAC5B,OAAOC;IACT;AACF;AAEO,gBAAgBJ,YAAYK,IAAe,EAAEC,MAAuB,EAA0B;IACnG,QAAQ;IACR,MAAMC,OAAO,IAAIC;IAEjBH,KAAKI,SAAS,CAAC,eAAe,IAAMF,KAAKG,KAAK;IAC9CL,KAAKI,SAAS,CAAC,iBAAiB,IAAMF,KAAKG,KAAK;IAEhD,SAAS;IACT,IAAIC,UAAU;IAEd,IAAI;QACF,WAAW,MAAMC,SAASC,IAAAA,uBAAY,EAACR,MAAM,CAAC,OAAO,EAAEC,OAAO,CAAC,EAAE;YAAEQ,QAAQP,KAAKO,MAAM;QAAC,GAAI;YACzF,MAAMC,OAAOJ,UAAUC,MAAMG,IAAI,CAACC,QAAQ,CAAC;YAC3C,MAAMC,QAAQF,KAAKG,KAAK,CAAC;YAEzBP,UAAUM,MAAME,GAAG,MAAM;YAEzB,KAAK,MAAMC,QAAQH,MAAO;gBACxB,MAAMG;YACR;QACF;IACF,EAAE,OAAOC,KAAK;QACZ,IAAIhB,KAAKiB,QAAQ,KAAK,GAAG;YACvB,MAAMD,IAAI;QACZ,CAAC;QAED,IAAIV,SAAS;YACX,MAAMA;QACR,CAAC;IACH;AACF;AAKO,SAASV,eAAkBsB,KAAc,EAAEC,SAAqB,EAAW;IAChF,IAAIC,MAAqBF;IAEzB,KAAK,MAAMG,YAAYF,UAAW;QAChCC,MAAMC,SAASD,QAAQA;IACzB;IAEA,OAAOA;AACT;AAEO,SAASvB,cAAoByB,OAA4B,EAAuB;IACrF,OAAOA;AACT","file":"utils.js"}