@basictech/cli 0.0.22 → 0.0.25
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/account.d.ts +2 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +18 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/debug.d.ts +2 -0
- package/dist/commands/debug.d.ts.map +1 -0
- package/dist/commands/debug.js +6 -0
- package/dist/commands/debug.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +111 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +20 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +7 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/projects.d.ts +2 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +90 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/pull.d.ts +2 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +366 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +2 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +403 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +385 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/teams.d.ts +2 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +164 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +76 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/version.d.ts +2 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +21 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/components/Form.d.ts +15 -0
- package/dist/components/Form.d.ts.map +1 -0
- package/dist/components/Form.js +69 -0
- package/dist/components/Form.js.map +1 -0
- package/dist/components/InitForm.d.ts +17 -0
- package/dist/components/InitForm.d.ts.map +1 -0
- package/dist/components/InitForm.js +358 -0
- package/dist/components/InitForm.js.map +1 -0
- package/dist/components/Spinner.d.ts +7 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +15 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/Table.d.ts +24 -0
- package/dist/components/Table.d.ts.map +1 -0
- package/dist/components/Table.js +69 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/TeamForm.d.ts +10 -0
- package/dist/components/TeamForm.d.ts.map +1 -0
- package/dist/components/TeamForm.js +193 -0
- package/dist/components/TeamForm.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +243 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api.d.ts +23 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +133 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/auth.d.ts +17 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +288 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/config-templates.d.ts +9 -0
- package/dist/lib/config-templates.d.ts.map +1 -0
- package/dist/lib/config-templates.js +117 -0
- package/dist/lib/config-templates.js.map +1 -0
- package/dist/lib/constants.d.ts +18 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +32 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/errors.d.ts +21 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +75 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/platform.d.ts +11 -0
- package/dist/lib/platform.d.ts.map +1 -0
- package/dist/lib/platform.js +133 -0
- package/dist/lib/platform.js.map +1 -0
- package/dist/lib/schema.d.ts +24 -0
- package/dist/lib/schema.d.ts.map +1 -0
- package/dist/lib/schema.js +162 -0
- package/dist/lib/schema.js.map +1 -0
- package/dist/lib/types.d.ts +111 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +22 -0
- package/dist/lib/version.js.map +1 -0
- package/package.json +64 -12
- package/readme.md +92 -35
- package/bin/readme.md +0 -61
- package/index.js +0 -108
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { AuthService } from '../lib/auth.js';
|
|
2
|
+
import { isOnline } from '../lib/platform.js';
|
|
3
|
+
import { MESSAGES } from '../lib/constants.js';
|
|
4
|
+
export async function AccountCommand() {
|
|
5
|
+
// Check if online
|
|
6
|
+
if (!(await isOnline())) {
|
|
7
|
+
throw new Error(MESSAGES.OFFLINE);
|
|
8
|
+
}
|
|
9
|
+
const authService = AuthService.getInstance();
|
|
10
|
+
// Check if logged in
|
|
11
|
+
const token = await authService.getToken();
|
|
12
|
+
if (!token) {
|
|
13
|
+
throw new Error(MESSAGES.LOGGED_OUT);
|
|
14
|
+
}
|
|
15
|
+
const userInfo = await authService.getUserInfo();
|
|
16
|
+
console.log('Logged in user:', userInfo.email);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,kBAAkB;IAClB,IAAI,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAE9C,qBAAqB;IACrB,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/commands/debug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface InitCommandArgs {
|
|
2
|
+
new?: boolean;
|
|
3
|
+
name?: string;
|
|
4
|
+
ts?: boolean;
|
|
5
|
+
js?: boolean;
|
|
6
|
+
existing?: boolean;
|
|
7
|
+
project?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function InitCommand(args?: InitCommandArgs): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.tsx"],"names":[],"mappings":"AAwLA,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3E"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render, Box, Text } from 'ink';
|
|
4
|
+
import { InitForm } from '../components/InitForm.js';
|
|
5
|
+
import { Spinner } from '../components/Spinner.js';
|
|
6
|
+
import { AuthService } from '../lib/auth.js';
|
|
7
|
+
import { checkForExistingConfig, readExistingConfig } from '../lib/config-templates.js';
|
|
8
|
+
import { isOnline } from '../lib/platform.js';
|
|
9
|
+
import { MESSAGES } from '../lib/constants.js';
|
|
10
|
+
function InitApp({ options }) {
|
|
11
|
+
const [state, setState] = React.useState({
|
|
12
|
+
loading: true,
|
|
13
|
+
error: null,
|
|
14
|
+
success: false
|
|
15
|
+
});
|
|
16
|
+
const [initialData, setInitialData] = React.useState(null);
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
async function initialize() {
|
|
19
|
+
try {
|
|
20
|
+
// Check if online
|
|
21
|
+
if (!(await isOnline())) {
|
|
22
|
+
setState({ loading: false, error: MESSAGES.OFFLINE, success: false });
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// Check authentication
|
|
26
|
+
const authService = AuthService.getInstance();
|
|
27
|
+
const token = await authService.getToken();
|
|
28
|
+
if (!token) {
|
|
29
|
+
setState({ loading: false, error: MESSAGES.LOGGED_OUT, success: false });
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Check for existing config file
|
|
33
|
+
const existingConfigPath = await checkForExistingConfig();
|
|
34
|
+
if (existingConfigPath) {
|
|
35
|
+
const existingConfig = await readExistingConfig();
|
|
36
|
+
if (existingConfig?.projectId) {
|
|
37
|
+
setState({
|
|
38
|
+
loading: false,
|
|
39
|
+
error: `A basic.config already exists in this directory\nProject ID: ${existingConfig.projectId}\n\nTo reinitialize, please remove the existing config file first.`,
|
|
40
|
+
success: false
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Parse CLI options into initial data
|
|
46
|
+
const parsedData = parseCliOptions(options);
|
|
47
|
+
setInitialData(parsedData);
|
|
48
|
+
setState({ loading: false, error: null, success: false });
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
setState({
|
|
52
|
+
loading: false,
|
|
53
|
+
error: error instanceof Error ? error.message : 'Failed to initialize',
|
|
54
|
+
success: false
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
initialize();
|
|
59
|
+
}, [options]);
|
|
60
|
+
const handleSuccess = (result) => {
|
|
61
|
+
setState({ loading: false, error: null, success: true, result });
|
|
62
|
+
// Exit after showing success message
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}, 2000);
|
|
66
|
+
};
|
|
67
|
+
const handleCancel = () => {
|
|
68
|
+
process.exit(0);
|
|
69
|
+
};
|
|
70
|
+
if (state.loading) {
|
|
71
|
+
return _jsx(Spinner, { text: "Initializing..." });
|
|
72
|
+
}
|
|
73
|
+
if (state.error) {
|
|
74
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: "red", children: ["Error: ", state.error] }), _jsx(Text, { color: "gray", children: "Please resolve the issue and try again." })] }));
|
|
75
|
+
}
|
|
76
|
+
if (state.success && state.result) {
|
|
77
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "green", children: "\u2705 Project setup complete!" }), _jsx(Text, {}), _jsxs(Text, { children: ["Project: ", state.result.projectName] }), _jsxs(Text, { children: ["Project ID: ", state.result.projectId] }), state.result.configPath && (_jsxs(Text, { children: ["Config file: ", state.result.configPath] })), _jsx(Text, {}), _jsx(Text, { color: "gray", children: "Visit https://docs.basic.tech for next steps." })] }));
|
|
78
|
+
}
|
|
79
|
+
return (_jsx(InitForm, { onSuccess: handleSuccess, onCancel: handleCancel, initialData: initialData || undefined }));
|
|
80
|
+
}
|
|
81
|
+
function parseCliOptions(options) {
|
|
82
|
+
const result = {};
|
|
83
|
+
// Determine source
|
|
84
|
+
if (options.new) {
|
|
85
|
+
result.source = 'new';
|
|
86
|
+
}
|
|
87
|
+
else if (options.existing) {
|
|
88
|
+
result.source = 'existing';
|
|
89
|
+
}
|
|
90
|
+
// Project name
|
|
91
|
+
if (options.name) {
|
|
92
|
+
result.projectName = options.name;
|
|
93
|
+
}
|
|
94
|
+
// Project ID (for existing projects)
|
|
95
|
+
if (options.project) {
|
|
96
|
+
result.projectId = options.project;
|
|
97
|
+
result.source = 'existing';
|
|
98
|
+
}
|
|
99
|
+
// Config template (priority order: specific frameworks > general > none)
|
|
100
|
+
if (options.ts) {
|
|
101
|
+
result.configTemplate = 'typescript';
|
|
102
|
+
}
|
|
103
|
+
else if (options.js) {
|
|
104
|
+
result.configTemplate = 'javascript';
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
export async function InitCommand(args = {}) {
|
|
109
|
+
render(_jsx(InitApp, { options: args }));
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBlD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthService } from '../lib/auth.js';
|
|
2
|
+
import { isOnline } from '../lib/platform.js';
|
|
3
|
+
import { MESSAGES } from '../lib/constants.js';
|
|
4
|
+
export async function LoginCommand() {
|
|
5
|
+
// Check if online
|
|
6
|
+
if (!(await isOnline())) {
|
|
7
|
+
throw new Error(MESSAGES.OFFLINE);
|
|
8
|
+
}
|
|
9
|
+
const authService = AuthService.getInstance();
|
|
10
|
+
// Check if already logged in
|
|
11
|
+
const existingToken = await authService.getToken();
|
|
12
|
+
if (existingToken) {
|
|
13
|
+
console.log('Already logged in with a valid token.');
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
console.log('🔐 Opening browser for login...');
|
|
17
|
+
await authService.login();
|
|
18
|
+
console.log('✅ Login successful! Hello :)');
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,kBAAkB;IAClB,IAAI,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAE9C,6BAA6B;IAC7B,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;IACnD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACrD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAEA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAInD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/commands/projects.tsx"],"names":[],"mappings":"AAgHA,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { render, Text } from 'ink';
|
|
4
|
+
import { Table } from '../components/Table.js';
|
|
5
|
+
import { Spinner } from '../components/Spinner.js';
|
|
6
|
+
import { ApiClient } from '../lib/api.js';
|
|
7
|
+
import { AuthService } from '../lib/auth.js';
|
|
8
|
+
import { isOnline, openBrowser, copyToClipboard } from '../lib/platform.js';
|
|
9
|
+
import { MESSAGES } from '../lib/constants.js';
|
|
10
|
+
function ProjectsApp() {
|
|
11
|
+
const [state, setState] = React.useState({
|
|
12
|
+
loading: true,
|
|
13
|
+
projects: [],
|
|
14
|
+
error: null
|
|
15
|
+
});
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
async function loadProjects() {
|
|
18
|
+
try {
|
|
19
|
+
// Check if online
|
|
20
|
+
if (!(await isOnline())) {
|
|
21
|
+
setState(prev => ({ ...prev, loading: false, error: MESSAGES.OFFLINE }));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
// Check if logged in
|
|
25
|
+
const authService = AuthService.getInstance();
|
|
26
|
+
const token = await authService.getToken();
|
|
27
|
+
if (!token) {
|
|
28
|
+
setState(prev => ({ ...prev, loading: false, error: MESSAGES.LOGGED_OUT }));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Fetch projects
|
|
32
|
+
const apiClient = ApiClient.getInstance();
|
|
33
|
+
const projects = await apiClient.getProjects();
|
|
34
|
+
setState({
|
|
35
|
+
loading: false,
|
|
36
|
+
projects,
|
|
37
|
+
error: null
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
setState({
|
|
42
|
+
loading: false,
|
|
43
|
+
projects: [],
|
|
44
|
+
error: error instanceof Error ? error.message : 'Failed to load projects'
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
loadProjects();
|
|
49
|
+
}, []);
|
|
50
|
+
const handleCopy = async (row) => {
|
|
51
|
+
try {
|
|
52
|
+
await copyToClipboard(row.id);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// Silent fail - notification already shown by Table component
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const handleOpen = async (row) => {
|
|
59
|
+
try {
|
|
60
|
+
await openBrowser(`https://app.basic.tech/project/${row.id}`);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
// Silent fail - browser opening is best effort
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const handleExit = () => {
|
|
67
|
+
process.exit(0);
|
|
68
|
+
};
|
|
69
|
+
if (state.loading) {
|
|
70
|
+
return _jsx(Spinner, { text: "Loading projects..." });
|
|
71
|
+
}
|
|
72
|
+
if (state.error) {
|
|
73
|
+
return _jsx(Text, { color: "red", children: state.error });
|
|
74
|
+
}
|
|
75
|
+
const columns = [
|
|
76
|
+
{ title: 'ID', width: 38, key: 'id' },
|
|
77
|
+
{ title: 'Name', width: 25, key: 'name' },
|
|
78
|
+
{ title: 'Team', width: 30, key: 'team_name' }
|
|
79
|
+
];
|
|
80
|
+
const rows = state.projects.map(project => ({
|
|
81
|
+
id: project.id,
|
|
82
|
+
name: project.name,
|
|
83
|
+
team_name: project.team_name
|
|
84
|
+
}));
|
|
85
|
+
return (_jsx(Table, { columns: columns, rows: rows, onCopy: handleCopy, onOpen: handleOpen, onExit: handleExit }));
|
|
86
|
+
}
|
|
87
|
+
export async function ProjectsCommand() {
|
|
88
|
+
render(_jsx(ProjectsApp, {}));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.tsx"],"names":[],"mappings":"AA0kBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD"}
|