@jujulego/jill 2.0.0-alpha.1 → 2.0.0-alpha.3

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 (88) hide show
  1. package/dist/commands/list.d.ts.map +1 -1
  2. package/dist/commands/list.js +16 -15
  3. package/dist/commands/list.js.map +1 -1
  4. package/dist/commands/tree.d.ts +3 -0
  5. package/dist/commands/tree.d.ts.map +1 -0
  6. package/dist/commands/tree.js +35 -0
  7. package/dist/commands/tree.js.map +1 -0
  8. package/dist/index.d.ts +1 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/main.d.ts.map +1 -1
  13. package/dist/main.js +5 -2
  14. package/dist/main.js.map +1 -1
  15. package/dist/middlewares/global-config.d.ts +5 -0
  16. package/dist/middlewares/global-config.d.ts.map +1 -0
  17. package/dist/middlewares/global-config.js +29 -0
  18. package/dist/middlewares/global-config.js.map +1 -0
  19. package/dist/{modifiers → middlewares}/index.d.ts +2 -1
  20. package/dist/middlewares/index.d.ts.map +1 -0
  21. package/dist/{modifiers → middlewares}/index.js +2 -1
  22. package/dist/middlewares/index.js.map +1 -0
  23. package/dist/{modifiers → middlewares}/load-project.d.ts +1 -2
  24. package/dist/middlewares/load-project.d.ts.map +1 -0
  25. package/dist/middlewares/load-project.js +41 -0
  26. package/dist/middlewares/load-project.js.map +1 -0
  27. package/dist/middlewares/load-workspace.d.ts +3 -0
  28. package/dist/middlewares/load-workspace.d.ts.map +1 -0
  29. package/dist/middlewares/load-workspace.js +42 -0
  30. package/dist/middlewares/load-workspace.js.map +1 -0
  31. package/dist/middlewares/setup-ink.d.ts +1 -0
  32. package/dist/middlewares/setup-ink.d.ts.map +1 -0
  33. package/dist/{modifiers → middlewares}/setup-ink.js +9 -6
  34. package/dist/middlewares/setup-ink.js.map +1 -0
  35. package/dist/services/inversify.config.d.ts +1 -1
  36. package/dist/services/inversify.config.d.ts.map +1 -1
  37. package/dist/services/inversify.config.js +2 -2
  38. package/dist/services/inversify.config.js.map +1 -1
  39. package/dist/services/logger.service.d.ts +3 -2
  40. package/dist/services/logger.service.d.ts.map +1 -1
  41. package/dist/services/logger.service.js +32 -15
  42. package/dist/services/logger.service.js.map +1 -1
  43. package/dist/services/spinner.service.d.ts +6 -2
  44. package/dist/services/spinner.service.d.ts.map +1 -1
  45. package/dist/services/spinner.service.js +22 -9
  46. package/dist/services/spinner.service.js.map +1 -1
  47. package/dist/ui/global-spinner.d.ts.map +1 -1
  48. package/dist/ui/global-spinner.js +31 -9
  49. package/dist/ui/global-spinner.js.map +1 -1
  50. package/dist/ui/index.d.ts +2 -1
  51. package/dist/ui/index.d.ts.map +1 -1
  52. package/dist/ui/index.js +2 -1
  53. package/dist/ui/index.js.map +1 -1
  54. package/dist/ui/layout.d.ts.map +1 -1
  55. package/dist/ui/layout.js +3 -2
  56. package/dist/ui/layout.js.map +1 -1
  57. package/dist/ui/list.d.ts +6 -0
  58. package/dist/ui/list.d.ts.map +1 -0
  59. package/dist/ui/list.js +30 -0
  60. package/dist/ui/list.js.map +1 -0
  61. package/dist/ui/static-logs.d.ts.map +1 -1
  62. package/dist/ui/static-logs.js +28 -44
  63. package/dist/ui/static-logs.js.map +1 -1
  64. package/dist/ui/workspace-tree.d.ts +8 -0
  65. package/dist/ui/workspace-tree.d.ts.map +1 -0
  66. package/dist/ui/workspace-tree.js +87 -0
  67. package/dist/ui/workspace-tree.js.map +1 -0
  68. package/dist/utils.d.ts +9 -3
  69. package/dist/utils.d.ts.map +1 -1
  70. package/dist/utils.js +16 -5
  71. package/dist/utils.js.map +1 -1
  72. package/package.json +3 -1
  73. package/dist/modifiers/global-config.d.ts +0 -6
  74. package/dist/modifiers/global-config.d.ts.map +0 -1
  75. package/dist/modifiers/global-config.js +0 -24
  76. package/dist/modifiers/global-config.js.map +0 -1
  77. package/dist/modifiers/index.d.ts.map +0 -1
  78. package/dist/modifiers/index.js.map +0 -1
  79. package/dist/modifiers/load-project.d.ts.map +0 -1
  80. package/dist/modifiers/load-project.js +0 -39
  81. package/dist/modifiers/load-project.js.map +0 -1
  82. package/dist/modifiers/setup-ink.d.ts +0 -2
  83. package/dist/modifiers/setup-ink.d.ts.map +0 -1
  84. package/dist/modifiers/setup-ink.js.map +0 -1
  85. package/dist/ui/cli-list.d.ts +0 -15
  86. package/dist/ui/cli-list.d.ts.map +0 -1
  87. package/dist/ui/cli-list.js +0 -66
  88. package/dist/ui/cli-list.js.map +0 -1
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WorkspaceTree", {
6
+ enumerable: true,
7
+ get: ()=>WorkspaceTree
8
+ });
9
+ const _jsxRuntime = require("react/jsx-runtime");
10
+ const _ink = require("ink");
11
+ const _react = require("react");
12
+ // Utils
13
+ const style = (dev)=>({
14
+ color: dev ? 'blue' : ''
15
+ });
16
+ const WorkspaceTree = (props)=>{
17
+ const { workspace: wks , dev =false , level ='' } = props;
18
+ // State
19
+ const [deps, setDeps] = (0, _react.useState)([]);
20
+ // Effects
21
+ (0, _react.useEffect)(()=>void (async ()=>{
22
+ const deps = [];
23
+ for await (const dep of wks.dependencies()){
24
+ deps.push([
25
+ dep,
26
+ null
27
+ ]);
28
+ }
29
+ for await (const dep1 of wks.devDependencies()){
30
+ deps.push([
31
+ dep1,
32
+ true
33
+ ]);
34
+ }
35
+ setDeps(deps);
36
+ })(), [
37
+ wks
38
+ ]);
39
+ // Render
40
+ return /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
41
+ children: [
42
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Text, {
43
+ ...style(dev),
44
+ children: wks.name
45
+ }),
46
+ wks.version && /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
47
+ color: "grey",
48
+ children: [
49
+ "@",
50
+ wks.version
51
+ ]
52
+ }),
53
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(_ink.Newline, {}),
54
+ deps.map(([dep, isDev], idx)=>/*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
55
+ children: [
56
+ level,
57
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
58
+ ...style(dev),
59
+ children: [
60
+ idx === deps.length - 1 ? '└' : '├',
61
+ "─",
62
+ ' '
63
+ ]
64
+ }),
65
+ /*#__PURE__*/ (0, _jsxRuntime.jsx)(WorkspaceTree, {
66
+ workspace: dep,
67
+ dev: isDev ?? dev,
68
+ level: /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
69
+ children: [
70
+ level,
71
+ /*#__PURE__*/ (0, _jsxRuntime.jsxs)(_ink.Text, {
72
+ ...style(dev),
73
+ children: [
74
+ idx === deps.length - 1 ? ' ' : '│',
75
+ ' '
76
+ ]
77
+ })
78
+ ]
79
+ })
80
+ })
81
+ ]
82
+ }, dep.name))
83
+ ]
84
+ });
85
+ };
86
+
87
+ //# sourceMappingURL=workspace-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ui/workspace-tree.js"],"sourcesContent":["import { Newline, Text, TextProps } from 'ink';\nimport { FC, ReactElement, useEffect, useState } from 'react';\n\nimport { Workspace } from '../project';\n\n// Types\nexport interface WorkspaceTreeProps {\n workspace: Workspace;\n dev?: boolean;\n level?: ReactElement;\n}\n\n// Utils\nconst style = (dev: boolean): TextProps => ({ color: dev ? 'blue' : '' });\n\n// Component\nexport const WorkspaceTree: FC<WorkspaceTreeProps> = (props) => {\n const { workspace: wks, dev = false, level = '' } = props;\n\n // State\n const [deps, setDeps] = useState<[Workspace, boolean | null][]>([]);\n\n // Effects\n useEffect(() => void (async () => {\n const deps: [Workspace, boolean | null][] = [];\n\n for await (const dep of wks.dependencies()) {\n deps.push([dep, null]);\n }\n\n for await (const dep of wks.devDependencies()) {\n deps.push([dep, true]);\n }\n\n setDeps(deps);\n })(), [wks]);\n\n // Render\n return (\n <Text>\n <Text {...style(dev)}>{ wks.name }</Text>\n { wks.version && (<Text color=\"grey\">@{ wks.version }</Text>) }\n <Newline />\n\n { deps.map(([dep, isDev], idx) => (\n <Text key={dep.name}>\n { level }<Text {...style(dev)}>{ idx === deps.length - 1 ? '└' : '├'}─{' '}</Text>\n <WorkspaceTree\n workspace={dep}\n dev={isDev ?? dev}\n level={<>{ level }<Text {...style(dev)}>{ idx === deps.length - 1 ? ' ' : '│' }{' '}</Text></>}\n />\n </Text>\n )) }\n </Text>\n );\n};\n"],"names":["WorkspaceTree","style","dev","color","props","workspace","wks","level","deps","setDeps","useState","useEffect","dep","dependencies","push","devDependencies","Text","name","version","Newline","map","isDev","idx","length"],"mappings":"AAAA;;;;+BAgBaA;;aAAAA;;;qBAhB4B;uBACa;AAWtD,QAAQ;AACR,MAAMC,QAAQ,CAACC,MAA6B,CAAA;QAAEC,OAAOD,MAAM,SAAS,EAAE;IAAC,CAAA;AAGhE,MAAMF,gBAAwC,CAACI,QAAU;IAC9D,MAAM,EAAEC,WAAWC,IAAG,EAAEJ,KAAM,KAAK,CAAA,EAAEK,OAAQ,GAAE,EAAE,GAAGH;IAEpD,QAAQ;IACR,MAAM,CAACI,MAAMC,QAAQ,GAAGC,IAAAA,eAAQ,EAAgC,EAAE;IAElE,UAAU;IACVC,IAAAA,gBAAS,EAAC,IAAM,KAAK,AAAC,CAAA,UAAY;YAChC,MAAMH,OAAsC,EAAE;YAE9C,WAAW,MAAMI,OAAON,IAAIO,YAAY,GAAI;gBAC1CL,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEA,WAAW,MAAMA,QAAON,IAAIS,eAAe,GAAI;gBAC7CP,KAAKM,IAAI,CAAC;oBAACF;oBAAK,IAAI;iBAAC;YACvB;YAEAH,QAAQD;QACV,CAAA,KAAM;QAACF;KAAI;IAEX,SAAS;IACT,qBACE,sBAACU,SAAI;;0BACH,qBAACA,SAAI;gBAAE,GAAGf,MAAMC,IAAI;0BAAII,IAAIW,IAAI;;YAC9BX,IAAIY,OAAO,kBAAK,sBAACF,SAAI;gBAACb,OAAM;;oBAAO;oBAAGG,IAAIY,OAAO;;;0BACnD,qBAACC,YAAO;YAENX,KAAKY,GAAG,CAAC,CAAC,CAACR,KAAKS,MAAM,EAAEC,oBACxB,sBAACN,SAAI;;wBACDT;sCAAO,sBAACS,SAAI;4BAAE,GAAGf,MAAMC,IAAI;;gCAAIoB,QAAQd,KAAKe,MAAM,GAAG,IAAI,MAAM,GAAG;gCAAC;gCAAE;;;sCACvE,qBAACvB;4BACCK,WAAWO;4BACXV,KAAKmB,SAASnB;4BACdK,qBAAO;;oCAAIA;kDAAO,sBAACS,SAAI;wCAAE,GAAGf,MAAMC,IAAI;;4CAAIoB,QAAQd,KAAKe,MAAM,GAAG,IAAI,MAAM,GAAG;4CAAG;;;;;;;mBALzEX,IAAIK,IAAI;;;AAW3B","file":"workspace-tree.js"}
package/dist/utils.d.ts CHANGED
@@ -1,7 +1,13 @@
1
1
  import { SpawnTask, SpawnTaskStream } from '@jujulego/tasks';
2
- import { Argv, CommandModule } from 'yargs';
2
+ import { Arguments, Argv, CommandModule } from 'yargs';
3
+ import { Awaitable } from './types';
3
4
  export declare function combine<T>(...generators: AsyncGenerator<T>[]): AsyncGenerator<T>;
4
5
  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>;
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>;
7
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;
@@ -1 +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"]}
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 CHANGED
@@ -11,8 +11,10 @@ function _export(target, all) {
11
11
  _export(exports, {
12
12
  combine: ()=>combine,
13
13
  streamLines: ()=>streamLines,
14
- applyModifiers: ()=>applyModifiers,
15
- defineCommand: ()=>defineCommand
14
+ applyMiddlewares: ()=>applyMiddlewares,
15
+ defineCommand: ()=>defineCommand,
16
+ defineMiddleware: ()=>defineMiddleware,
17
+ capitalize: ()=>capitalize
16
18
  });
17
19
  const _eventTree = require("@jujulego/event-tree");
18
20
  async function* combine(...generators) {
@@ -47,15 +49,24 @@ async function* streamLines(task, stream) {
47
49
  }
48
50
  }
49
51
  }
50
- function applyModifiers(yargs, modifiers) {
52
+ function applyMiddlewares(yargs, middlewares) {
51
53
  let tmp = yargs;
52
- for (const modifier of modifiers){
53
- tmp = modifier(tmp) ?? tmp;
54
+ for (const middleware of middlewares){
55
+ if (middleware.builder) {
56
+ tmp = middleware.builder(tmp);
57
+ }
58
+ tmp.middleware(middleware.handler);
54
59
  }
55
60
  return tmp;
56
61
  }
57
62
  function defineCommand(command) {
58
63
  return command;
59
64
  }
65
+ function defineMiddleware(middleware) {
66
+ return middleware;
67
+ }
68
+ function capitalize(txt) {
69
+ return txt.charAt(0).toUpperCase() + txt.substring(1).toLowerCase();
70
+ }
60
71
 
61
72
  //# sourceMappingURL=utils.js.map
package/dist/utils.js.map CHANGED
@@ -1 +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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jujulego/jill",
3
- "version": "2.0.0-alpha.1",
3
+ "version": "2.0.0-alpha.3",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -37,6 +37,7 @@
37
37
  "ink-spinner": "^4.0.3",
38
38
  "inversify": "^6.0.1",
39
39
  "inversify-inject-decorators": "^3.1.0",
40
+ "log-symbols": "^4.1.0",
40
41
  "normalize-package-data": "^4.0.0",
41
42
  "react": "^17.0.2",
42
43
  "reflect-metadata": "^0.1.13",
@@ -76,6 +77,7 @@
76
77
  "gulp-sourcemaps": "3.0.0",
77
78
  "gulp-swc": "1.2.3",
78
79
  "gulp-typescript": "6.0.0-alpha.1",
80
+ "ink-testing-library": "2.1.0",
79
81
  "jest": "28.1.2",
80
82
  "ts-node": "10.9.1",
81
83
  "typescript": "4.8.4",
@@ -1,6 +0,0 @@
1
- import { Argv } from 'yargs';
2
- export declare function globalConfig<T>(yargs: Argv<T>): Argv<T & {
3
- verbose: number;
4
- } & {
5
- jobs: number | undefined;
6
- }>;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;;;;GAe7C","file":"global-config.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, GLOBAL_CONFIG } from '../services';\n\n// Middleware\nexport function globalConfig<T>(yargs: Argv<T>) {\n return yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n })\n .middleware((config) => {\n container.bind(GLOBAL_CONFIG).toConstantValue(config);\n });\n}\n"]}
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "globalConfig", {
6
- enumerable: true,
7
- get: ()=>globalConfig
8
- });
9
- const _services = require("../services");
10
- function globalConfig(yargs) {
11
- return yargs.option('verbose', {
12
- alias: 'v',
13
- type: 'count',
14
- description: 'Set verbosity level'
15
- }).option('jobs', {
16
- alias: 'j',
17
- type: 'number',
18
- description: 'Set maximum parallel job number'
19
- }).middleware((config)=>{
20
- _services.container.bind(_services.GLOBAL_CONFIG).toConstantValue(config);
21
- });
22
- }
23
-
24
- //# sourceMappingURL=global-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/global-config.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, GLOBAL_CONFIG } from '../services';\n\n// Middleware\nexport function globalConfig<T>(yargs: Argv<T>) {\n return yargs\n .option('verbose', {\n alias: 'v',\n type: 'count',\n description: 'Set verbosity level',\n })\n .option('jobs', {\n alias: 'j',\n type: 'number',\n description: 'Set maximum parallel job number',\n })\n .middleware((config) => {\n container.bind(GLOBAL_CONFIG).toConstantValue(config);\n });\n}\n"],"names":["globalConfig","yargs","option","alias","type","description","middleware","config","container","bind","GLOBAL_CONFIG","toConstantValue"],"mappings":"AAAA;;;;+BAKgBA;;aAAAA;;0BAHyB;AAGlC,SAASA,aAAgBC,KAAc,EAAE;IAC9C,OAAOA,MACJC,MAAM,CAAC,WAAW;QACjBC,OAAO;QACPC,MAAM;QACNC,aAAa;IACf,GACCH,MAAM,CAAC,QAAQ;QACdC,OAAO;QACPC,MAAM;QACNC,aAAa;IACf,GACCC,UAAU,CAAC,CAACC,SAAW;QACtBC,mBAAS,CAACC,IAAI,CAACC,uBAAa,EAAEC,eAAe,CAACJ;IAChD;AACJ","file":"global-config.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC","file":"index.d.ts","sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/index.js"],"sourcesContent":["export * from './load-project';\nexport * from './global-config';\nexport * from './setup-ink';\n"],"names":[],"mappings":"AAAA;;;;oBAAc;oBACA;oBACA","file":"index.js"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/load-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAW,MAAM,YAAY,CAAC;AAGrD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;;;;GA6B5C","file":"load-project.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\n\n// Middleware\nexport function loadProject<T>(yargs: Argv<T>) {\n return yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n })\n .middleware(async (args) => {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n });\n}\n"]}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "loadProject", {
6
- enumerable: true,
7
- get: ()=>loadProject
8
- });
9
- const _services = require("../services");
10
- const _project = require("../project");
11
- function loadProject(yargs) {
12
- return yargs.option('project', {
13
- alias: 'p',
14
- type: 'string',
15
- default: process.cwd(),
16
- description: 'Project root directory'
17
- }).option('package-manager', {
18
- choices: [
19
- 'yarn',
20
- 'npm'
21
- ],
22
- default: undefined,
23
- type: 'string',
24
- description: 'Force package manager'
25
- }).middleware(async (args)=>{
26
- const spinner = _services.container.get(_services.SpinnerService);
27
- try {
28
- spinner.spin('Loading project ...');
29
- const root = args.project = await _project.Project.searchProjectRoot(args.project);
30
- _services.container.bind(_services.CURRENT_PROJECT).toDynamicValue(()=>new _project.Project(root, {
31
- packageManager: args['package-manager']
32
- }));
33
- } finally{
34
- spinner.stop();
35
- }
36
- });
37
- }
38
-
39
- //# sourceMappingURL=load-project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/load-project.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, CURRENT_PROJECT, SpinnerService } from '../services';\nimport { PackageManager, Project } from '../project';\n\n// Middleware\nexport function loadProject<T>(yargs: Argv<T>) {\n return yargs\n .option('project', {\n alias: 'p',\n type: 'string',\n default: process.cwd(),\n description: 'Project root directory'\n })\n .option('package-manager', {\n choices: ['yarn', 'npm'],\n default: undefined as PackageManager | undefined,\n type: 'string',\n description: 'Force package manager'\n })\n .middleware(async (args) => {\n const spinner = container.get(SpinnerService);\n\n try {\n spinner.spin('Loading project ...');\n const root = args.project = await Project.searchProjectRoot(args.project);\n\n container.bind(CURRENT_PROJECT)\n .toDynamicValue(() => new Project(root, {\n packageManager: args['package-manager']\n }));\n } finally {\n spinner.stop();\n }\n });\n}\n"],"names":["loadProject","yargs","option","alias","type","default","process","cwd","description","choices","undefined","middleware","args","spinner","container","get","SpinnerService","spin","root","project","Project","searchProjectRoot","bind","CURRENT_PROJECT","toDynamicValue","packageManager","stop"],"mappings":"AAAA;;;;+BAMgBA;;aAAAA;;0BAJ2C;yBACnB;AAGjC,SAASA,YAAeC,KAAc,EAAE;IAC7C,OAAOA,MACJC,MAAM,CAAC,WAAW;QACjBC,OAAO;QACPC,MAAM;QACNC,SAASC,QAAQC,GAAG;QACpBC,aAAa;IACf,GACCN,MAAM,CAAC,mBAAmB;QACzBO,SAAS;YAAC;YAAQ;SAAM;QACxBJ,SAASK;QACTN,MAAM;QACNI,aAAa;IACf,GACCG,UAAU,CAAC,OAAOC,OAAS;QAC1B,MAAMC,UAAUC,mBAAS,CAACC,GAAG,CAACC,wBAAc;QAE5C,IAAI;YACFH,QAAQI,IAAI,CAAC;YACb,MAAMC,OAAON,KAAKO,OAAO,GAAG,MAAMC,gBAAO,CAACC,iBAAiB,CAACT,KAAKO,OAAO;YAExEL,mBAAS,CAACQ,IAAI,CAACC,yBAAe,EAC3BC,cAAc,CAAC,IAAM,IAAIJ,gBAAO,CAACF,MAAM;oBACtCO,gBAAgBb,IAAI,CAAC,kBAAkB;gBACzC;QACJ,SAAU;YACRC,QAAQa,IAAI;QACd;IACF;AACJ","file":"load-project.js"}
@@ -1,2 +0,0 @@
1
- import { Argv } from 'yargs';
2
- export declare function setupInk<T>(yargs: Argv<T>): Argv<T>;
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/setup-ink.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAO7B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAKzC","file":"setup-ink.d.ts","sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, INK_APP } from '../services';\nimport { Layout } from '../ui';\nimport { render } from 'ink';\n\n// Middleware\nexport function setupInk<T>(yargs: Argv<T>) {\n return yargs.middleware(async () => {\n container.bind(INK_APP)\n .toConstantValue(render(<Layout />));\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["modifiers/setup-ink.js"],"sourcesContent":["import { Argv } from 'yargs';\n\nimport { container, INK_APP } from '../services';\nimport { Layout } from '../ui';\nimport { render } from 'ink';\n\n// Middleware\nexport function setupInk<T>(yargs: Argv<T>) {\n return yargs.middleware(async () => {\n container.bind(INK_APP)\n .toConstantValue(render(<Layout />));\n });\n}\n"],"names":["setupInk","yargs","middleware","container","bind","INK_APP","toConstantValue","render","Layout"],"mappings":"AAAA;;;;+BAOgBA;;aAAAA;;;0BALmB;oBACZ;qBACA;AAGhB,SAASA,SAAYC,KAAc,EAAE;IAC1C,OAAOA,MAAMC,UAAU,CAAC,UAAY;QAClCC,mBAAS,CAACC,IAAI,CAACC,iBAAO,EACnBC,eAAe,CAACC,IAAAA,WAAM,gBAAC,qBAACC,UAAM;IACnC;AACF","file":"setup-ink.js"}
@@ -1,15 +0,0 @@
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
- }
@@ -1 +0,0 @@
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}"]}
@@ -1,66 +0,0 @@
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
@@ -1 +0,0 @@
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"}