@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.
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +16 -15
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/tree.d.ts +3 -0
- package/dist/commands/tree.d.ts.map +1 -0
- package/dist/commands/tree.js +35 -0
- package/dist/commands/tree.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +5 -2
- package/dist/main.js.map +1 -1
- package/dist/middlewares/global-config.d.ts +5 -0
- package/dist/middlewares/global-config.d.ts.map +1 -0
- package/dist/middlewares/global-config.js +29 -0
- package/dist/middlewares/global-config.js.map +1 -0
- package/dist/{modifiers → middlewares}/index.d.ts +2 -1
- package/dist/middlewares/index.d.ts.map +1 -0
- package/dist/{modifiers → middlewares}/index.js +2 -1
- package/dist/middlewares/index.js.map +1 -0
- package/dist/{modifiers → middlewares}/load-project.d.ts +1 -2
- package/dist/middlewares/load-project.d.ts.map +1 -0
- package/dist/middlewares/load-project.js +41 -0
- package/dist/middlewares/load-project.js.map +1 -0
- package/dist/middlewares/load-workspace.d.ts +3 -0
- package/dist/middlewares/load-workspace.d.ts.map +1 -0
- package/dist/middlewares/load-workspace.js +42 -0
- package/dist/middlewares/load-workspace.js.map +1 -0
- package/dist/middlewares/setup-ink.d.ts +1 -0
- package/dist/middlewares/setup-ink.d.ts.map +1 -0
- package/dist/{modifiers → middlewares}/setup-ink.js +9 -6
- package/dist/middlewares/setup-ink.js.map +1 -0
- package/dist/services/inversify.config.d.ts +1 -1
- package/dist/services/inversify.config.d.ts.map +1 -1
- package/dist/services/inversify.config.js +2 -2
- package/dist/services/inversify.config.js.map +1 -1
- package/dist/services/logger.service.d.ts +3 -2
- package/dist/services/logger.service.d.ts.map +1 -1
- package/dist/services/logger.service.js +32 -15
- package/dist/services/logger.service.js.map +1 -1
- package/dist/services/spinner.service.d.ts +6 -2
- package/dist/services/spinner.service.d.ts.map +1 -1
- package/dist/services/spinner.service.js +22 -9
- package/dist/services/spinner.service.js.map +1 -1
- package/dist/ui/global-spinner.d.ts.map +1 -1
- package/dist/ui/global-spinner.js +31 -9
- package/dist/ui/global-spinner.js.map +1 -1
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +3 -2
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/list.d.ts +6 -0
- package/dist/ui/list.d.ts.map +1 -0
- package/dist/ui/list.js +30 -0
- package/dist/ui/list.js.map +1 -0
- package/dist/ui/static-logs.d.ts.map +1 -1
- package/dist/ui/static-logs.js +28 -44
- package/dist/ui/static-logs.js.map +1 -1
- package/dist/ui/workspace-tree.d.ts +8 -0
- package/dist/ui/workspace-tree.d.ts.map +1 -0
- package/dist/ui/workspace-tree.js +87 -0
- package/dist/ui/workspace-tree.js.map +1 -0
- package/dist/utils.d.ts +9 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +16 -5
- package/dist/utils.js.map +1 -1
- package/package.json +3 -1
- package/dist/modifiers/global-config.d.ts +0 -6
- package/dist/modifiers/global-config.d.ts.map +0 -1
- package/dist/modifiers/global-config.js +0 -24
- package/dist/modifiers/global-config.js.map +0 -1
- package/dist/modifiers/index.d.ts.map +0 -1
- package/dist/modifiers/index.js.map +0 -1
- package/dist/modifiers/load-project.d.ts.map +0 -1
- package/dist/modifiers/load-project.js +0 -39
- package/dist/modifiers/load-project.js.map +0 -1
- package/dist/modifiers/setup-ink.d.ts +0 -2
- package/dist/modifiers/setup-ink.d.ts.map +0 -1
- package/dist/modifiers/setup-ink.js.map +0 -1
- package/dist/ui/cli-list.d.ts +0 -15
- package/dist/ui/cli-list.d.ts.map +0 -1
- package/dist/ui/cli-list.js +0 -66
- 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
|
|
6
|
-
|
|
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;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
|
52
|
+
function applyMiddlewares(yargs, middlewares) {
|
|
51
53
|
let tmp = yargs;
|
|
52
|
-
for (const
|
|
53
|
-
|
|
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
|
|
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.
|
|
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 +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 +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"}
|
package/dist/ui/cli-list.d.ts
DELETED
|
@@ -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}"]}
|
package/dist/ui/cli-list.js
DELETED
|
@@ -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
|
package/dist/ui/cli-list.js.map
DELETED
|
@@ -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"}
|