gwirian-cli 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/format.js ADDED
@@ -0,0 +1,118 @@
1
+ import chalk from 'chalk';
2
+ // cli-table3 uses export = ; default import for interop
3
+ import TableConstructor from 'cli-table3';
4
+ export function formatJson(value) {
5
+ return JSON.stringify(value, null, 2);
6
+ }
7
+ function columnLabel(col) {
8
+ return col
9
+ .replace(/_/g, ' ')
10
+ .replace(/\b\w/g, (c) => c.toUpperCase());
11
+ }
12
+ /** Rich terminal table with borders and colors (for TTY). */
13
+ export function formatRichTable(items, columns, options = {}) {
14
+ if (items.length === 0)
15
+ return chalk.dim('(no rows)');
16
+ const { wordWrap = false, colWidths: fixedColWidths } = options;
17
+ const maxCell = wordWrap ? 200 : 50;
18
+ const colWidths = fixedColWidths ??
19
+ columns.map((col) => {
20
+ const max = Math.max(columnLabel(col).length, ...items.map((r) => String(r[col] ?? '').length));
21
+ return Math.min(Math.max(max + 2, 6), maxCell + 2);
22
+ });
23
+ const table = new TableConstructor({
24
+ head: columns.map((c) => chalk.bold.cyan(columnLabel(c))),
25
+ wordWrap,
26
+ wrapOnWordBoundary: true,
27
+ chars: {
28
+ 'top': '─',
29
+ 'top-mid': '┬',
30
+ 'top-left': '┌',
31
+ 'top-right': '┐',
32
+ 'bottom': '─',
33
+ 'bottom-mid': '┴',
34
+ 'bottom-left': '└',
35
+ 'bottom-right': '┘',
36
+ 'left': '│',
37
+ 'left-mid': '├',
38
+ 'mid': '─',
39
+ 'mid-mid': '┼',
40
+ 'right': '│',
41
+ 'right-mid': '┤',
42
+ },
43
+ style: {
44
+ 'padding-left': 1,
45
+ 'padding-right': 1,
46
+ head: [],
47
+ border: ['cyan'],
48
+ compact: false,
49
+ },
50
+ colWidths,
51
+ });
52
+ for (const r of items) {
53
+ table.push(columns.map((col) => {
54
+ let v = String(r[col] ?? '');
55
+ if (!wordWrap && v.length > maxCell)
56
+ v = v.slice(0, maxCell - 2) + '…';
57
+ return v;
58
+ }));
59
+ }
60
+ return table.toString();
61
+ }
62
+ /** Styled error box for TTY (e.g. "Project not found", API errors). */
63
+ export function formatError(message, options = {}) {
64
+ const { title = 'Error', statusCode } = options;
65
+ const label = statusCode !== undefined ? `${title} (${statusCode})` : title;
66
+ const padding = 1;
67
+ const maxLine = 60;
68
+ const lines = message.split(/\n/).flatMap((line) => {
69
+ if (line.length <= maxLine)
70
+ return [line];
71
+ const chunks = [];
72
+ let i = 0;
73
+ while (i < line.length) {
74
+ const slice = line.slice(i, i + maxLine);
75
+ const lastSpace = slice.lastIndexOf(' ');
76
+ const breakAt = lastSpace > maxLine >> 1 ? lastSpace : slice.length;
77
+ chunks.push(slice.slice(0, breakAt).trimEnd());
78
+ i += breakAt;
79
+ }
80
+ return chunks;
81
+ });
82
+ const contentWidth = Math.max(label.length, ...lines.map((l) => l.length), 20);
83
+ const width = contentWidth + padding * 2 + 2;
84
+ const topBorder = chalk.red('┌' + '─'.repeat(width - 2) + '┐');
85
+ const labelLine = chalk.red('│') +
86
+ ' '.repeat(padding) +
87
+ chalk.bold.red(label) +
88
+ ' '.repeat(width - 2 - padding - label.length) +
89
+ chalk.red('│');
90
+ const midBorder = chalk.red('├' + '─'.repeat(width - 2) + '┤');
91
+ const contentLines = lines.map((line) => chalk.red('│') +
92
+ ' '.repeat(padding) +
93
+ line +
94
+ ' '.repeat(width - 2 - padding - line.length) +
95
+ chalk.red('│'));
96
+ const bottomBorder = chalk.red('└' + '─'.repeat(width - 2) + '┘');
97
+ return [topBorder, labelLine, midBorder, ...contentLines, bottomBorder].join('\n');
98
+ }
99
+ export function formatList(items, columns) {
100
+ if (items.length === 0)
101
+ return '';
102
+ const widths = columns.map((col) => {
103
+ const max = Math.max(col.length, ...items.map((r) => String(r[col] ?? '').length));
104
+ return Math.min(max, 40);
105
+ });
106
+ const header = columns
107
+ .map((col, i) => col.padEnd(widths[i]).slice(0, widths[i]))
108
+ .join(' ');
109
+ const sep = columns.map((_, i) => '-'.repeat(widths[i])).join(' ');
110
+ const rows = items.map((r) => columns
111
+ .map((col, i) => {
112
+ const v = String(r[col] ?? '');
113
+ return (v.length > widths[i] ? v.slice(0, widths[i] - 2) + '..' : v).padEnd(widths[i]);
114
+ })
115
+ .join(' '));
116
+ return [header, sep, ...rows].join('\n');
117
+ }
118
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runTui(): Promise<void>;
2
+ //# sourceMappingURL=runTui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTui.d.ts","sourceRoot":"","sources":["../src/runTui.ts"],"names":[],"mappings":"AAMA,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAiB5C"}
package/dist/runTui.js ADDED
@@ -0,0 +1,20 @@
1
+ import { render } from 'ink';
2
+ import React from 'react';
3
+ import { getConfig } from './config.js';
4
+ import { SetupApp } from './tui/Setup.js';
5
+ import { MainApp } from './tui/Main.js';
6
+ export async function runTui() {
7
+ const config = getConfig();
8
+ const hasToken = typeof config.token === 'string' && config.token.length > 0;
9
+ if (!hasToken) {
10
+ const { waitUntilExit } = render(React.createElement(SetupApp));
11
+ await waitUntilExit();
12
+ return;
13
+ }
14
+ const { waitUntilExit } = render(React.createElement(MainApp, {
15
+ baseUrl: config.baseUrl,
16
+ token: config.token,
17
+ }));
18
+ await waitUntilExit();
19
+ }
20
+ //# sourceMappingURL=runTui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTui.js","sourceRoot":"","sources":["../src/runTui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChE,MAAM,aAAa,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAC9B,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;QAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAM;KACrB,CAAC,CACH,CAAC;IACF,MAAM,aAAa,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface MainAppProps {
2
+ baseUrl: string;
3
+ token: string;
4
+ }
5
+ export declare function MainApp({ baseUrl, token }: MainAppProps): import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
7
+ //# sourceMappingURL=Main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Main.d.ts","sourceRoot":"","sources":["../../src/tui/Main.tsx"],"names":[],"mappings":"AASA,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,YAAY,kDAqKvD"}
@@ -0,0 +1,105 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { Select, Spinner } from '@inkjs/ui';
5
+ import { createApiClient } from '../api.js';
6
+ import { TokenInvalidOrExpiredError } from '../api.js';
7
+ export function MainApp({ baseUrl, token }) {
8
+ const [view, setView] = useState('projects');
9
+ const [projects, setProjects] = useState([]);
10
+ const [features, setFeatures] = useState([]);
11
+ const [scenarios, setScenarios] = useState([]);
12
+ const [loading, setLoading] = useState(true);
13
+ const [error, setError] = useState(null);
14
+ const [selectedProjectId, setSelectedProjectId] = useState(null);
15
+ const [selectedFeatureId, setSelectedFeatureId] = useState(null);
16
+ const api = createApiClient(baseUrl, token);
17
+ useEffect(() => {
18
+ if (view === 'projects') {
19
+ setLoading(true);
20
+ setError(null);
21
+ api
22
+ .getProjects()
23
+ .then(setProjects)
24
+ .catch((e) => {
25
+ if (e instanceof TokenInvalidOrExpiredError) {
26
+ setError('Token invalid or expired. Run "gwirian auth" to set a new token.');
27
+ }
28
+ else {
29
+ setError(e.message);
30
+ }
31
+ })
32
+ .finally(() => setLoading(false));
33
+ }
34
+ }, [view, baseUrl, token]);
35
+ useEffect(() => {
36
+ if (view === 'features' && selectedProjectId) {
37
+ setLoading(true);
38
+ setError(null);
39
+ api
40
+ .getFeatures(selectedProjectId)
41
+ .then(setFeatures)
42
+ .catch((e) => {
43
+ setError(e.message);
44
+ })
45
+ .finally(() => setLoading(false));
46
+ }
47
+ }, [view, selectedProjectId, baseUrl, token]);
48
+ useEffect(() => {
49
+ if (view === 'scenarios' && selectedProjectId && selectedFeatureId) {
50
+ setLoading(true);
51
+ setError(null);
52
+ api
53
+ .getScenarios(selectedProjectId, selectedFeatureId)
54
+ .then(setScenarios)
55
+ .catch((e) => {
56
+ setError(e.message);
57
+ })
58
+ .finally(() => setLoading(false));
59
+ }
60
+ }, [view, selectedProjectId, selectedFeatureId, baseUrl, token]);
61
+ if (error) {
62
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { color: "red", children: error }), _jsx(Text, { dimColor: true, children: "Press Ctrl+C to exit." })] }));
63
+ }
64
+ if (view === 'projects') {
65
+ if (loading) {
66
+ return (_jsx(Box, { padding: 1, children: _jsx(Spinner, { label: "Loading projects" }) }));
67
+ }
68
+ if (projects.length === 0) {
69
+ return (_jsx(Box, { flexDirection: "column", padding: 1, children: _jsx(Text, { children: "No projects found." }) }));
70
+ }
71
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, gap: 1, children: [_jsx(Text, { bold: true, children: "Select a project" }), _jsx(Select, { options: projects.map((p) => ({
72
+ label: p.name,
73
+ value: String(p.id),
74
+ })), onChange: (value) => {
75
+ setSelectedProjectId(value);
76
+ setView('features');
77
+ } })] }));
78
+ }
79
+ if (view === 'features') {
80
+ if (loading) {
81
+ return (_jsx(Box, { padding: 1, children: _jsx(Spinner, { label: "Loading features" }) }));
82
+ }
83
+ if (features.length === 0) {
84
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { children: "No features in this project." }), _jsx(Text, { dimColor: true, children: "Press Ctrl+C to exit." })] }));
85
+ }
86
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, gap: 1, children: [_jsx(Text, { bold: true, children: "Select a feature" }), _jsx(Select, { options: features.map((f) => ({
87
+ label: f.title,
88
+ value: String(f.id),
89
+ })), onChange: (value) => {
90
+ setSelectedFeatureId(value);
91
+ setView('scenarios');
92
+ } })] }));
93
+ }
94
+ if (view === 'scenarios') {
95
+ if (loading) {
96
+ return (_jsx(Box, { padding: 1, children: _jsx(Spinner, { label: "Loading scenarios" }) }));
97
+ }
98
+ if (scenarios.length === 0) {
99
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { children: "No scenarios in this feature." }), _jsx(Text, { dimColor: true, children: "Press Ctrl+C to exit." })] }));
100
+ }
101
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, gap: 1, children: [_jsx(Text, { bold: true, children: "Scenarios" }), scenarios.map((s) => (_jsxs(Box, { flexDirection: "column", gap: 0, children: [_jsx(Text, { bold: true, children: s.title || `Scenario #${s.id}` }), s.given && _jsxs(Text, { dimColor: true, children: ["Given: ", s.given] }), s.when && _jsxs(Text, { dimColor: true, children: ["When: ", s.when] }), s.then && _jsxs(Text, { dimColor: true, children: ["Then: ", s.then] })] }, s.id))), _jsx(Text, { dimColor: true, children: "Press Ctrl+C to exit." })] }));
102
+ }
103
+ return null;
104
+ }
105
+ //# sourceMappingURL=Main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Main.js","sourceRoot":"","sources":["../../src/tui/Main.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function SetupApp(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=Setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Setup.d.ts","sourceRoot":"","sources":["../../src/tui/Setup.tsx"],"names":[],"mappings":"AASA,wBAAgB,QAAQ,4CAsFvB"}
@@ -0,0 +1,57 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { PasswordInput, TextInput } from '@inkjs/ui';
5
+ import { setToken as saveToken, setBaseUrl } from '../config.js';
6
+ import { createApiClient } from '../api.js';
7
+ import { TokenInvalidOrExpiredError } from '../api.js';
8
+ const DEFAULT_BASE_URL = 'https://www.gwirian.com';
9
+ export function SetupApp() {
10
+ const [step, setStep] = useState('token');
11
+ const [token, setTokenValue] = useState('');
12
+ const [baseUrl, setBaseUrlValue] = useState(DEFAULT_BASE_URL);
13
+ const [error, setError] = useState(null);
14
+ const [testing, setTesting] = useState(false);
15
+ const handleTokenSubmit = (value) => {
16
+ const t = value.trim();
17
+ if (!t) {
18
+ setError('Token cannot be empty.');
19
+ return;
20
+ }
21
+ setTokenValue(t);
22
+ setError(null);
23
+ setStep('baseUrl');
24
+ };
25
+ const handleBaseUrlSubmit = async (value) => {
26
+ const url = (value || DEFAULT_BASE_URL).trim().replace(/\/$/, '');
27
+ if (!url) {
28
+ setError('Base URL cannot be empty.');
29
+ return;
30
+ }
31
+ setBaseUrlValue(url);
32
+ setError(null);
33
+ setTesting(true);
34
+ saveToken(token);
35
+ setBaseUrl(url);
36
+ try {
37
+ const api = createApiClient(url, token);
38
+ await api.getProjects();
39
+ setStep('done');
40
+ process.exit(0);
41
+ }
42
+ catch (e) {
43
+ setTesting(false);
44
+ if (e instanceof TokenInvalidOrExpiredError) {
45
+ setError('Token is invalid or expired. Please check and try again.');
46
+ }
47
+ else {
48
+ setError(e.message);
49
+ }
50
+ }
51
+ };
52
+ if (step === 'done') {
53
+ return (_jsx(Box, { flexDirection: "column", paddingY: 1, children: _jsx(Text, { color: "green", children: "Configuration saved. You can now run \"gwirian\" again to open the TUI." }) }));
54
+ }
55
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, gap: 1, children: [_jsx(Text, { bold: true, children: "Gwirian CLI \u2013 Configuration" }), _jsx(Text, { dimColor: true, children: "Enter your API token and base URL (optional)." }), error && (_jsx(Text, { color: "red", children: error })), step === 'token' && (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { children: "Token:" }), _jsx(PasswordInput, { placeholder: "Paste your API token...", onSubmit: handleTokenSubmit })] })), step === 'baseUrl' && (_jsxs(Box, { flexDirection: "column", gap: 1, children: [_jsx(Text, { children: "Base URL:" }), _jsx(TextInput, { defaultValue: baseUrl, placeholder: DEFAULT_BASE_URL, onSubmit: handleBaseUrlSubmit }), _jsx(Text, { dimColor: true, children: "Press Enter to save and test connection." })] })), testing && (_jsx(Text, { color: "yellow", children: "Testing connection..." }))] }));
56
+ }
57
+ //# sourceMappingURL=Setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Setup.js","sourceRoot":"","sources":["../../src/tui/Setup.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "gwirian-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI for Gwirian API with modern TUI",
5
+ "license": "MIT",
6
+ "author": "Fred Rocher",
7
+ "type": "module",
8
+ "main": "dist/cli.js",
9
+ "bin": {
10
+ "gwirian": "bin/gwirian.js"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "start": "node dist/cli.js",
15
+ "dev": "tsx src/cli.ts",
16
+ "prepublishOnly": "npm run build",
17
+ "test": "echo \"Error: no test specified\" && exit 1"
18
+ },
19
+ "dependencies": {
20
+ "@inkjs/ui": "^2.0.0",
21
+ "chalk": "^5.6.2",
22
+ "cli-table3": "^0.6.5",
23
+ "commander": "^12.0.0",
24
+ "ink": "^5.0.0",
25
+ "react": "^18.2.0"
26
+ },
27
+ "devDependencies": {
28
+ "@types/node": "^20.10.0",
29
+ "@types/react": "^18.2.0",
30
+ "tsx": "^4.7.0",
31
+ "typescript": "^5.3.0"
32
+ },
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "files": [
37
+ "dist",
38
+ "bin",
39
+ "README.md"
40
+ ]
41
+ }