@basictech/cli 0.0.22 → 0.0.24

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 (112) hide show
  1. package/dist/commands/account.d.ts +2 -0
  2. package/dist/commands/account.d.ts.map +1 -0
  3. package/dist/commands/account.js +18 -0
  4. package/dist/commands/account.js.map +1 -0
  5. package/dist/commands/debug.d.ts +2 -0
  6. package/dist/commands/debug.d.ts.map +1 -0
  7. package/dist/commands/debug.js +6 -0
  8. package/dist/commands/debug.js.map +1 -0
  9. package/dist/commands/init.d.ts +10 -0
  10. package/dist/commands/init.d.ts.map +1 -0
  11. package/dist/commands/init.js +111 -0
  12. package/dist/commands/init.js.map +1 -0
  13. package/dist/commands/login.d.ts +2 -0
  14. package/dist/commands/login.d.ts.map +1 -0
  15. package/dist/commands/login.js +20 -0
  16. package/dist/commands/login.js.map +1 -0
  17. package/dist/commands/logout.d.ts +2 -0
  18. package/dist/commands/logout.d.ts.map +1 -0
  19. package/dist/commands/logout.js +7 -0
  20. package/dist/commands/logout.js.map +1 -0
  21. package/dist/commands/projects.d.ts +2 -0
  22. package/dist/commands/projects.d.ts.map +1 -0
  23. package/dist/commands/projects.js +90 -0
  24. package/dist/commands/projects.js.map +1 -0
  25. package/dist/commands/pull.d.ts +2 -0
  26. package/dist/commands/pull.d.ts.map +1 -0
  27. package/dist/commands/pull.js +366 -0
  28. package/dist/commands/pull.js.map +1 -0
  29. package/dist/commands/push.d.ts +2 -0
  30. package/dist/commands/push.d.ts.map +1 -0
  31. package/dist/commands/push.js +403 -0
  32. package/dist/commands/push.js.map +1 -0
  33. package/dist/commands/status.d.ts +2 -0
  34. package/dist/commands/status.d.ts.map +1 -0
  35. package/dist/commands/status.js +385 -0
  36. package/dist/commands/status.js.map +1 -0
  37. package/dist/commands/teams.d.ts +2 -0
  38. package/dist/commands/teams.d.ts.map +1 -0
  39. package/dist/commands/teams.js +164 -0
  40. package/dist/commands/teams.js.map +1 -0
  41. package/dist/commands/update.d.ts +2 -0
  42. package/dist/commands/update.d.ts.map +1 -0
  43. package/dist/commands/update.js +76 -0
  44. package/dist/commands/update.js.map +1 -0
  45. package/dist/commands/version.d.ts +2 -0
  46. package/dist/commands/version.d.ts.map +1 -0
  47. package/dist/commands/version.js +21 -0
  48. package/dist/commands/version.js.map +1 -0
  49. package/dist/components/Form.d.ts +15 -0
  50. package/dist/components/Form.d.ts.map +1 -0
  51. package/dist/components/Form.js +69 -0
  52. package/dist/components/Form.js.map +1 -0
  53. package/dist/components/InitForm.d.ts +17 -0
  54. package/dist/components/InitForm.d.ts.map +1 -0
  55. package/dist/components/InitForm.js +358 -0
  56. package/dist/components/InitForm.js.map +1 -0
  57. package/dist/components/Spinner.d.ts +7 -0
  58. package/dist/components/Spinner.d.ts.map +1 -0
  59. package/dist/components/Spinner.js +15 -0
  60. package/dist/components/Spinner.js.map +1 -0
  61. package/dist/components/Table.d.ts +24 -0
  62. package/dist/components/Table.d.ts.map +1 -0
  63. package/dist/components/Table.js +69 -0
  64. package/dist/components/Table.js.map +1 -0
  65. package/dist/components/TeamForm.d.ts +10 -0
  66. package/dist/components/TeamForm.d.ts.map +1 -0
  67. package/dist/components/TeamForm.js +193 -0
  68. package/dist/components/TeamForm.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +243 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/lib/api.d.ts +23 -0
  74. package/dist/lib/api.d.ts.map +1 -0
  75. package/dist/lib/api.js +133 -0
  76. package/dist/lib/api.js.map +1 -0
  77. package/dist/lib/auth.d.ts +17 -0
  78. package/dist/lib/auth.d.ts.map +1 -0
  79. package/dist/lib/auth.js +288 -0
  80. package/dist/lib/auth.js.map +1 -0
  81. package/dist/lib/config-templates.d.ts +9 -0
  82. package/dist/lib/config-templates.d.ts.map +1 -0
  83. package/dist/lib/config-templates.js +117 -0
  84. package/dist/lib/config-templates.js.map +1 -0
  85. package/dist/lib/constants.d.ts +18 -0
  86. package/dist/lib/constants.d.ts.map +1 -0
  87. package/dist/lib/constants.js +32 -0
  88. package/dist/lib/constants.js.map +1 -0
  89. package/dist/lib/errors.d.ts +21 -0
  90. package/dist/lib/errors.d.ts.map +1 -0
  91. package/dist/lib/errors.js +75 -0
  92. package/dist/lib/errors.js.map +1 -0
  93. package/dist/lib/platform.d.ts +11 -0
  94. package/dist/lib/platform.d.ts.map +1 -0
  95. package/dist/lib/platform.js +133 -0
  96. package/dist/lib/platform.js.map +1 -0
  97. package/dist/lib/schema.d.ts +24 -0
  98. package/dist/lib/schema.d.ts.map +1 -0
  99. package/dist/lib/schema.js +162 -0
  100. package/dist/lib/schema.js.map +1 -0
  101. package/dist/lib/types.d.ts +111 -0
  102. package/dist/lib/types.d.ts.map +1 -0
  103. package/dist/lib/types.js +2 -0
  104. package/dist/lib/types.js.map +1 -0
  105. package/dist/lib/version.d.ts +2 -0
  106. package/dist/lib/version.d.ts.map +1 -0
  107. package/dist/lib/version.js +22 -0
  108. package/dist/lib/version.js.map +1 -0
  109. package/package.json +63 -12
  110. package/readme.md +92 -35
  111. package/bin/readme.md +0 -61
  112. package/index.js +0 -108
@@ -0,0 +1,2 @@
1
+ export declare function AccountCommand(): Promise<void>;
2
+ //# sourceMappingURL=account.d.ts.map
@@ -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';
2
+ import { isOnline } from '../lib/platform';
3
+ import { MESSAGES } from '../lib/constants';
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,2 @@
1
+ export declare function DebugCommand(): Promise<void>;
2
+ //# sourceMappingURL=debug.d.ts.map
@@ -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,6 @@
1
+ import { getConfigDir } from '../lib/platform';
2
+ export async function DebugCommand() {
3
+ const configDir = getConfigDir();
4
+ console.log(`Basic CLI config directory: ${configDir}`);
5
+ }
6
+ //# sourceMappingURL=debug.js.map
@@ -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';
5
+ import { Spinner } from '../components/Spinner';
6
+ import { AuthService } from '../lib/auth';
7
+ import { checkForExistingConfig, readExistingConfig } from '../lib/config-templates';
8
+ import { isOnline } from '../lib/platform';
9
+ import { MESSAGES } from '../lib/constants';
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,2 @@
1
+ export declare function LoginCommand(): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -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';
2
+ import { isOnline } from '../lib/platform';
3
+ import { MESSAGES } from '../lib/constants';
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,2 @@
1
+ export declare function LogoutCommand(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -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,7 @@
1
+ import { AuthService } from '../lib/auth';
2
+ export async function LogoutCommand() {
3
+ const authService = AuthService.getInstance();
4
+ await authService.logout();
5
+ console.log('Logged out successfully');
6
+ }
7
+ //# sourceMappingURL=logout.js.map
@@ -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,2 @@
1
+ export declare function ProjectsCommand(): Promise<void>;
2
+ //# sourceMappingURL=projects.d.ts.map
@@ -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';
5
+ import { Spinner } from '../components/Spinner';
6
+ import { ApiClient } from '../lib/api';
7
+ import { AuthService } from '../lib/auth';
8
+ import { isOnline, openBrowser, copyToClipboard } from '../lib/platform';
9
+ import { MESSAGES } from '../lib/constants';
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,2 @@
1
+ export declare function PullCommand(): Promise<void>;
2
+ //# sourceMappingURL=pull.d.ts.map
@@ -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"}