@jujulego/jill 1.2.1 → 2.0.0-alpha.2

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 (142) 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 +26 -52
  37. package/dist/main.js.map +1 -1
  38. package/dist/middlewares/global-config.d.ts +5 -0
  39. package/dist/middlewares/global-config.d.ts.map +1 -0
  40. package/dist/middlewares/global-config.js +26 -0
  41. package/dist/middlewares/global-config.js.map +1 -0
  42. package/dist/middlewares/index.d.ts +3 -0
  43. package/dist/middlewares/index.d.ts.map +1 -0
  44. package/dist/middlewares/index.js +20 -0
  45. package/dist/middlewares/index.js.map +1 -0
  46. package/dist/middlewares/load-project.d.ts +6 -0
  47. package/dist/middlewares/load-project.d.ts.map +1 -0
  48. package/dist/middlewares/load-project.js +41 -0
  49. package/dist/middlewares/load-project.js.map +1 -0
  50. package/dist/middlewares/setup-ink.d.ts +1 -0
  51. package/dist/middlewares/setup-ink.d.ts.map +1 -0
  52. package/dist/middlewares/setup-ink.js +22 -0
  53. package/dist/middlewares/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 +6 -0
  75. package/dist/services/logger.service.d.ts.map +1 -0
  76. package/dist/services/logger.service.js +75 -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 +5 -0
  99. package/dist/ui/index.d.ts.map +1 -0
  100. package/dist/ui/index.js +22 -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 +20 -0
  105. package/dist/ui/layout.js.map +1 -0
  106. package/dist/ui/list.d.ts +6 -0
  107. package/dist/ui/list.d.ts.map +1 -0
  108. package/dist/ui/list.js +30 -0
  109. package/dist/ui/list.js.map +1 -0
  110. package/dist/ui/static-logs.d.ts +2 -0
  111. package/dist/ui/static-logs.d.ts.map +1 -0
  112. package/dist/ui/static-logs.js +56 -0
  113. package/dist/ui/static-logs.js.map +1 -0
  114. package/dist/utils.d.ts +13 -0
  115. package/dist/utils.d.ts.map +1 -0
  116. package/dist/utils.js +72 -0
  117. package/dist/utils.js.map +1 -0
  118. package/package.json +53 -40
  119. package/dist/commands/each.command.d.ts +0 -16
  120. package/dist/commands/each.command.d.ts.map +0 -1
  121. package/dist/commands/each.command.js +0 -203
  122. package/dist/commands/each.command.js.map +0 -1
  123. package/dist/commands/info.command.d.ts +0 -8
  124. package/dist/commands/info.command.d.ts.map +0 -1
  125. package/dist/commands/info.command.js +0 -178
  126. package/dist/commands/info.command.js.map +0 -1
  127. package/dist/commands/list.command.d.ts +0 -21
  128. package/dist/commands/list.command.d.ts.map +0 -1
  129. package/dist/commands/list.command.js +0 -251
  130. package/dist/commands/list.command.js.map +0 -1
  131. package/dist/commands/run.command.d.ts +0 -12
  132. package/dist/commands/run.command.d.ts.map +0 -1
  133. package/dist/commands/run.command.js +0 -111
  134. package/dist/commands/run.command.js.map +0 -1
  135. package/dist/core.plugin.d.ts +0 -2
  136. package/dist/core.plugin.d.ts.map +0 -1
  137. package/dist/core.plugin.js +0 -22
  138. package/dist/core.plugin.js.map +0 -1
  139. package/dist/task-logger.d.ts +0 -14
  140. package/dist/task-logger.d.ts.map +0 -1
  141. package/dist/task-logger.js +0 -76
  142. package/dist/task-logger.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ export interface SpinnerState {
2
+ spin: boolean;
3
+ label: string;
4
+ }
5
+ export declare type SpinnerStateListener = (state: SpinnerState) => void;
6
+ export declare class SpinnerService {
7
+ private _spin;
8
+ private _label;
9
+ private readonly _listeners;
10
+ subscribe(listener: SpinnerStateListener): () => void;
11
+ spin(label: string): void;
12
+ stop(): void;
13
+ get state(): SpinnerState;
14
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["services/spinner.service.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,oBAAY,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAGjE,qBACa,cAAc;IAEzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmC;IAG9D,SAAS,CAAC,QAAQ,EAAE,oBAAoB;IAQxC,IAAI,CAAC,KAAK,EAAE,MAAM;IASlB,IAAI;IASJ,IAAI,KAAK,IAAI,YAAY,CAKxB;CACF","file":"spinner.service.d.ts","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"]}
@@ -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,5 @@
1
+ export * from './cli-list';
2
+ export * from './global-spinner';
3
+ export * from './layout';
4
+ export * from './list';
5
+ 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,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC","file":"index.d.ts","sourcesContent":["export * from './cli-list';\nexport * from './global-spinner';\nexport * from './layout';\nexport * from './list';\nexport * from './static-logs';\n"]}
@@ -0,0 +1,22 @@
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("./list"), exports);
9
+ _exportStar(require("./static-logs"), exports);
10
+ function _exportStar(from, to) {
11
+ Object.keys(from).forEach(function(k) {
12
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) Object.defineProperty(to, k, {
13
+ enumerable: true,
14
+ get: function() {
15
+ return from[k];
16
+ }
17
+ });
18
+ });
19
+ return from;
20
+ }
21
+
22
+ //# 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 './list';\nexport * from './static-logs';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;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,EAMpB,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 = ({ children }) => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n { children }\n </>\n);\n"]}
@@ -0,0 +1,20 @@
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 = ({ children })=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
13
+ children: [
14
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_staticLogs.StaticLogs, {}),
15
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_globalSpinner.GlobalSpinner, {}),
16
+ children
17
+ ]
18
+ });
19
+
20
+ //# 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 = ({ children }) => (\n <>\n <StaticLogs />\n <GlobalSpinner />\n { children }\n </>\n);\n"],"names":["Layout","children","StaticLogs","GlobalSpinner"],"mappings":"AAAA;;;;+BAMaA;;aAAAA;;;+BAJiB;4BACH;AAGpB,MAAMA,SAAa,CAAC,EAAEC,SAAQ,EAAE,iBACrC;;0BACE,qBAACC,sBAAU;0BACX,qBAACC,4BAAa;YACZF","file":"layout.js"}
@@ -0,0 +1,6 @@
1
+ import { ReactElement } from 'react';
2
+ export interface ListProps<T extends Record<string, unknown>> {
3
+ items: T[];
4
+ headers?: boolean;
5
+ }
6
+ export declare function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>): ReactElement;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/list.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAKrC,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1D,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAetG","file":"list.d.ts","sourcesContent":["import { Box, Text } from 'ink';\nimport { ReactElement } from 'react';\n\nimport { capitalize } from '../utils';\n\n// Types\nexport interface ListProps<T extends Record<string, unknown>> {\n items: T[];\n headers?: boolean;\n}\n\n// Component\nexport function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>): ReactElement {\n return (\n <Box>\n { Object.keys(items[0]).map((key) => (\n <Box key={key} flexDirection=\"column\" marginRight={2}>\n { headers && (\n <Text bold>{ capitalize(key) }</Text>\n ) }\n { items.map((item, idx) => (\n <Text key={idx}>{ item[key] }</Text>\n )) }\n </Box>\n )) }\n </Box>\n );\n}\n"]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "List", {
6
+ enumerable: true,
7
+ get: ()=>List
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _ink = require("ink");
11
+ const _utils = require("../utils");
12
+ function List({ items , headers }) {
13
+ return /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Box, {
14
+ children: Object.keys(items[0]).map((key)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Box, {
15
+ flexDirection: "column",
16
+ marginRight: 2,
17
+ children: [
18
+ headers && /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
19
+ bold: true,
20
+ children: (0, _utils.capitalize)(key)
21
+ }),
22
+ items.map((item, idx)=>/*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
23
+ children: item[key]
24
+ }, idx))
25
+ ]
26
+ }, key))
27
+ });
28
+ }
29
+
30
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/list.js"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { ReactElement } from 'react';\n\nimport { capitalize } from '../utils';\n\n// Types\nexport interface ListProps<T extends Record<string, unknown>> {\n items: T[];\n headers?: boolean;\n}\n\n// Component\nexport function List<T extends Record<string, unknown>>({ items, headers }: ListProps<T>): ReactElement {\n return (\n <Box>\n { Object.keys(items[0]).map((key) => (\n <Box key={key} flexDirection=\"column\" marginRight={2}>\n { headers && (\n <Text bold>{ capitalize(key) }</Text>\n ) }\n { items.map((item, idx) => (\n <Text key={idx}>{ item[key] }</Text>\n )) }\n </Box>\n )) }\n </Box>\n );\n}\n"],"names":["List","items","headers","Box","Object","keys","map","key","flexDirection","marginRight","Text","bold","capitalize","item","idx"],"mappings":"AAAA;;;;+BAYgBA;;aAAAA;;;qBAZU;uBAGC;AASpB,SAASA,KAAwC,EAAEC,MAAK,EAAEC,QAAO,EAAgB,EAAgB;IACtG,qBACE,qBAACC,QAAG;kBACAC,OAAOC,IAAI,CAACJ,KAAK,CAAC,EAAE,EAAEK,GAAG,CAAC,CAACC,oBAC3B,sBAACJ,QAAG;gBAAWK,eAAc;gBAASC,aAAa;;oBAC/CP,yBACA,qBAACQ,SAAI;wBAACC,IAAI;kCAAGC,IAAAA,iBAAU,EAACL;;oBAExBN,MAAMK,GAAG,CAAC,CAACO,MAAMC,oBACjB,qBAACJ,SAAI;sCAAaG,IAAI,CAACN,IAAI;2BAAhBO;;eALLP;;AAWlB","file":"list.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,EAAoB,MAAM,OAAO,CAAC;AAc7C,eAAO,MAAM,UAAU,EAAE,EAwCxB,CAAC","file":"static-logs.d.ts","sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\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 // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\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 }, [write]);\n\n return null;\n};\n"]}
@@ -0,0 +1,56 @@
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 _ink = require("ink");
10
+ const _react = require("react");
11
+ const _winstonTransport = /*#__PURE__*/ _interopRequireDefault(require("winston-transport"));
12
+ const _services = require("../services");
13
+ function _interopRequireDefault(obj) {
14
+ return obj && obj.__esModule ? obj : {
15
+ default: obj
16
+ };
17
+ }
18
+ // Constants
19
+ const MESSAGE = Symbol.for('message');
20
+ const StaticLogs = ()=>{
21
+ // State
22
+ const { write } = (0, _ink.useStderr)();
23
+ // Effect
24
+ (0, _react.useLayoutEffect)(()=>{
25
+ const logger = _services.container.get(_services.Logger);
26
+ const olds = logger.transports;
27
+ logger.clear();
28
+ logger.add(new class extends _winstonTransport.default {
29
+ // Constructor
30
+ constructor(){
31
+ super({
32
+ format: _services.consoleFormat
33
+ });
34
+ }
35
+ // Methods
36
+ log(info, next) {
37
+ setTimeout(()=>{
38
+ this.emit('logged', info);
39
+ }, 0);
40
+ write(info[MESSAGE] + '\n');
41
+ next();
42
+ }
43
+ });
44
+ return ()=>{
45
+ logger.clear();
46
+ for (const transport of olds){
47
+ logger.add(transport);
48
+ }
49
+ };
50
+ }, [
51
+ write
52
+ ]);
53
+ return null;
54
+ };
55
+
56
+ //# sourceMappingURL=static-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/static-logs.js"],"sourcesContent":["import { useStderr } from 'ink';\nimport { FC, useLayoutEffect, } from 'react';\nimport Transport from 'winston-transport';\n\nimport { consoleFormat, container, Logger } from '../services';\n\n// Constants\nconst MESSAGE = Symbol.for('message');\n\n// Types\ninterface Info extends Record<string, unknown> {\n [MESSAGE]: string;\n}\n\n// Component\nexport const StaticLogs: FC = () => {\n // State\n const { write } = useStderr();\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 // Constructor\n constructor() {\n super({\n format: consoleFormat\n });\n }\n\n // Methods\n log(info: Info, next: () => void): void {\n setTimeout(() => {\n this.emit('logged', info);\n }, 0);\n\n write(info[MESSAGE] + '\\n');\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 }, [write]);\n\n return null;\n};\n"],"names":["StaticLogs","MESSAGE","Symbol","for","write","useStderr","useLayoutEffect","logger","container","get","Logger","olds","transports","clear","add","Transport","constructor","format","consoleFormat","log","info","next","setTimeout","emit","transport"],"mappings":"AAAA;;;;+BAeaA;;aAAAA;;qBAfa;uBACW;uEACf;0BAE2B;;;;;;AAEjD,YAAY;AACZ,MAAMC,UAAUC,OAAOC,GAAG,CAAC;AAQpB,MAAMH,aAAiB,IAAM;IAClC,QAAQ;IACR,MAAM,EAAEI,MAAK,EAAE,GAAGC,IAAAA,cAAS;IAE3B,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,cAAc;YACdC,aAAc;gBACZ,KAAK,CAAC;oBACJC,QAAQC,uBAAa;gBACvB;YACF;YAEA,UAAU;YACVC,IAAIC,IAAU,EAAEC,IAAgB,EAAQ;gBACtCC,WAAW,IAAM;oBACf,IAAI,CAACC,IAAI,CAAC,UAAUH;gBACtB,GAAG;gBAEHhB,MAAMgB,IAAI,CAACnB,QAAQ,GAAG;gBAEtBoB;YACF;QACF;QAEA,OAAO,IAAM;YACXd,OAAOM,KAAK;YAEZ,KAAK,MAAMW,aAAab,KAAM;gBAC5BJ,OAAOO,GAAG,CAACU;YACb;QACF;IACF,GAAG;QAACpB;KAAM;IAEV,OAAO,IAAI;AACb","file":"static-logs.js"}
@@ -0,0 +1,13 @@
1
+ import { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';
2
+ import { Arguments, Argv, CommandModule } from 'yargs';
3
+ import { Awaitable } from './types';
4
+ export declare function combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T>;
5
+ export declare function streamLines(task: SpawnTask, stream: SpawnTaskStream): AsyncGenerator<string>;
6
+ export interface Middleware<T = unknown, U = unknown> {
7
+ builder?: (yargs: Argv<T>) => Argv<U>;
8
+ handler(args: Arguments<U>): Awaitable<void>;
9
+ }
10
+ export declare function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T>;
11
+ export declare function defineCommand<T, U>(command: CommandModule<T, U>): CommandModule<T, U>;
12
+ export declare function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U>;
13
+ export declare function capitalize(txt: string): string;
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,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,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;CAC9C;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAYtF;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAErF;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAErF;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C","file":"utils.d.ts","sourcesContent":["import { streamEvents } from '@jujulego/event-tree';\nimport { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';\nimport { Arguments, Argv, CommandModule } from 'yargs';\nimport { Awaitable } from './types';\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 interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\nexport function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const middleware of middlewares) {\n if (middleware.builder) {\n tmp = middleware.builder(tmp);\n }\n\n tmp.middleware(middleware.handler);\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\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\n}\n\n// String utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n"]}
package/dist/utils.js ADDED
@@ -0,0 +1,72 @@
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
+ applyMiddlewares: ()=>applyMiddlewares,
15
+ defineCommand: ()=>defineCommand,
16
+ defineMiddleware: ()=>defineMiddleware,
17
+ capitalize: ()=>capitalize
18
+ });
19
+ const _eventTree = require("@jujulego/event-tree");
20
+ async function* combine(...generators) {
21
+ for (const gen of generators){
22
+ yield* gen;
23
+ }
24
+ }
25
+ async function* streamLines(task, stream) {
26
+ // Abort
27
+ const ctrl = new AbortController();
28
+ task.subscribe('status.done', ()=>ctrl.abort());
29
+ task.subscribe('status.failed', ()=>ctrl.abort());
30
+ // Stream
31
+ let current = '';
32
+ try {
33
+ for await (const chunk of (0, _eventTree.streamEvents)(task, `stream.${stream}`, {
34
+ signal: ctrl.signal
35
+ })){
36
+ const data = current + chunk.data.toString('utf-8');
37
+ const lines = data.split(/\r?\n/g);
38
+ current = lines.pop() ?? '';
39
+ for (const line of lines){
40
+ yield line;
41
+ }
42
+ }
43
+ } catch (err) {
44
+ if (task.exitCode !== 0) {
45
+ throw err;
46
+ }
47
+ if (current) {
48
+ yield current;
49
+ }
50
+ }
51
+ }
52
+ function applyMiddlewares(yargs, middlewares) {
53
+ let tmp = yargs;
54
+ for (const middleware of middlewares){
55
+ if (middleware.builder) {
56
+ tmp = middleware.builder(tmp);
57
+ }
58
+ tmp.middleware(middleware.handler);
59
+ }
60
+ return tmp;
61
+ }
62
+ function defineCommand(command) {
63
+ return command;
64
+ }
65
+ function defineMiddleware(middleware) {
66
+ return middleware;
67
+ }
68
+ function capitalize(txt) {
69
+ return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
70
+ }
71
+
72
+ //# 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 { Arguments, Argv, CommandModule } from 'yargs';\nimport { Awaitable } from './types';\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 interface Middleware<T = unknown, U = unknown> {\n builder?: (yargs: Argv<T>) => Argv<U>;\n handler(args: Arguments<U>): Awaitable<void>;\n}\n\nexport function applyMiddlewares<T>(yargs: Argv<T>, middlewares: Middleware[]): Argv<T> {\n let tmp: Argv<unknown> = yargs;\n\n for (const middleware of middlewares) {\n if (middleware.builder) {\n tmp = middleware.builder(tmp);\n }\n\n tmp.middleware(middleware.handler);\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\nexport function defineMiddleware<T, U>(middleware: Middleware<T, U>): Middleware<T, U> {\n return middleware;\n}\n\n// String utils\nexport function capitalize(txt: string): string {\n return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();\n}\n"],"names":["combine","streamLines","applyMiddlewares","defineCommand","defineMiddleware","capitalize","generators","gen","task","stream","ctrl","AbortController","subscribe","abort","current","chunk","streamEvents","signal","data","toString","lines","split","pop","line","err","exitCode","yargs","middlewares","tmp","middleware","builder","handler","command","txt","charAt","toUpperCase","substring","toLowerCase"],"mappings":"AAAA;;;;;;;;;;;IAMuBA,OAAO,MAAPA;IAMAC,WAAW,MAAXA;IAsCPC,gBAAgB,MAAhBA;IAcAC,aAAa,MAAbA;IAIAC,gBAAgB,MAAhBA;IAKAC,UAAU,MAAVA;;2BAzEa;AAMtB,gBAAgBL,QAAW,GAAGM,UAA+B,EAAqB;IACvF,KAAK,MAAMC,OAAOD,WAAY;QAC5B,OAAOC;IACT;AACF;AAEO,gBAAgBN,YAAYO,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;AAQO,SAASZ,iBAAoBwB,KAAc,EAAEC,WAAyB,EAAW;IACtF,IAAIC,MAAqBF;IAEzB,KAAK,MAAMG,cAAcF,YAAa;QACpC,IAAIE,WAAWC,OAAO,EAAE;YACtBF,MAAMC,WAAWC,OAAO,CAACF;QAC3B,CAAC;QAEDA,IAAIC,UAAU,CAACA,WAAWE,OAAO;IACnC;IAEA,OAAOH;AACT;AAEO,SAASzB,cAAoB6B,OAA4B,EAAuB;IACrF,OAAOA;AACT;AAEO,SAAS5B,iBAAuByB,UAA4B,EAAoB;IACrF,OAAOA;AACT;AAGO,SAASxB,WAAW4B,GAAW,EAAU;IAC9C,OAAOA,IAAIC,MAAM,CAAC,GAAGC,WAAW,KAAKF,IAAIG,SAAS,CAAC,GAAGC,WAAW;AACnE","file":"utils.js"}