@positronic/cli 0.0.2
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/src/cli.js +739 -0
- package/dist/src/commands/backend.js +199 -0
- package/dist/src/commands/brain.js +446 -0
- package/dist/src/commands/brain.test.js +2936 -0
- package/dist/src/commands/helpers.js +1315 -0
- package/dist/src/commands/helpers.test.js +832 -0
- package/dist/src/commands/project-config-manager.js +197 -0
- package/dist/src/commands/project.js +130 -0
- package/dist/src/commands/project.test.js +1201 -0
- package/dist/src/commands/resources.js +272 -0
- package/dist/src/commands/resources.test.js +2511 -0
- package/dist/src/commands/schedule.js +73 -0
- package/dist/src/commands/schedule.test.js +1235 -0
- package/dist/src/commands/secret.js +87 -0
- package/dist/src/commands/secret.test.d.js +1 -0
- package/dist/src/commands/secret.test.js +761 -0
- package/dist/src/commands/server.js +816 -0
- package/dist/src/commands/server.test.js +1237 -0
- package/dist/src/commands/test-utils.js +737 -0
- package/dist/src/components/brain-history.js +169 -0
- package/dist/src/components/brain-list.js +108 -0
- package/dist/src/components/brain-rerun.js +313 -0
- package/dist/src/components/brain-show.js +65 -0
- package/dist/src/components/error.js +19 -0
- package/dist/src/components/project-add.js +95 -0
- package/dist/src/components/project-create.js +276 -0
- package/dist/src/components/project-list.js +88 -0
- package/dist/src/components/project-remove.js +91 -0
- package/dist/src/components/project-select.js +224 -0
- package/dist/src/components/project-show.js +41 -0
- package/dist/src/components/resource-clear.js +152 -0
- package/dist/src/components/resource-delete.js +189 -0
- package/dist/src/components/resource-list.js +174 -0
- package/dist/src/components/resource-sync.js +386 -0
- package/dist/src/components/resource-types.js +243 -0
- package/dist/src/components/resource-upload.js +366 -0
- package/dist/src/components/schedule-create.js +259 -0
- package/dist/src/components/schedule-delete.js +161 -0
- package/dist/src/components/schedule-list.js +176 -0
- package/dist/src/components/schedule-runs.js +103 -0
- package/dist/src/components/secret-bulk.js +262 -0
- package/dist/src/components/secret-create.js +199 -0
- package/dist/src/components/secret-delete.js +190 -0
- package/dist/src/components/secret-list.js +190 -0
- package/dist/src/components/secret-sync.js +303 -0
- package/dist/src/components/watch.js +184 -0
- package/dist/src/hooks/useApi.js +512 -0
- package/dist/src/positronic.js +33 -0
- package/dist/src/test/mock-api-client.js +371 -0
- package/dist/src/test/test-dev-server.js +1376 -0
- package/dist/types/cli.d.ts +9 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/commands/backend.d.ts +6 -0
- package/dist/types/commands/backend.d.ts.map +1 -0
- package/dist/types/commands/brain.d.ts +35 -0
- package/dist/types/commands/brain.d.ts.map +1 -0
- package/dist/types/commands/helpers.d.ts +55 -0
- package/dist/types/commands/helpers.d.ts.map +1 -0
- package/dist/types/commands/project-config-manager.d.ts +37 -0
- package/dist/types/commands/project-config-manager.d.ts.map +1 -0
- package/dist/types/commands/project.d.ts +55 -0
- package/dist/types/commands/project.d.ts.map +1 -0
- package/dist/types/commands/resources.d.ts +13 -0
- package/dist/types/commands/resources.d.ts.map +1 -0
- package/dist/types/commands/schedule.d.ts +27 -0
- package/dist/types/commands/schedule.d.ts.map +1 -0
- package/dist/types/commands/secret.d.ts +23 -0
- package/dist/types/commands/secret.d.ts.map +1 -0
- package/dist/types/commands/server.d.ts +12 -0
- package/dist/types/commands/server.d.ts.map +1 -0
- package/dist/types/commands/test-utils.d.ts +45 -0
- package/dist/types/commands/test-utils.d.ts.map +1 -0
- package/dist/types/components/brain-history.d.ts +7 -0
- package/dist/types/components/brain-history.d.ts.map +1 -0
- package/dist/types/components/brain-list.d.ts +2 -0
- package/dist/types/components/brain-list.d.ts.map +1 -0
- package/dist/types/components/brain-rerun.d.ts +9 -0
- package/dist/types/components/brain-rerun.d.ts.map +1 -0
- package/dist/types/components/brain-show.d.ts +6 -0
- package/dist/types/components/brain-show.d.ts.map +1 -0
- package/dist/types/components/error.d.ts +10 -0
- package/dist/types/components/error.d.ts.map +1 -0
- package/dist/types/components/project-add.d.ts +9 -0
- package/dist/types/components/project-add.d.ts.map +1 -0
- package/dist/types/components/project-create.d.ts +6 -0
- package/dist/types/components/project-create.d.ts.map +1 -0
- package/dist/types/components/project-list.d.ts +7 -0
- package/dist/types/components/project-list.d.ts.map +1 -0
- package/dist/types/components/project-remove.d.ts +8 -0
- package/dist/types/components/project-remove.d.ts.map +1 -0
- package/dist/types/components/project-select.d.ts +8 -0
- package/dist/types/components/project-select.d.ts.map +1 -0
- package/dist/types/components/project-show.d.ts +7 -0
- package/dist/types/components/project-show.d.ts.map +1 -0
- package/dist/types/components/resource-clear.d.ts +2 -0
- package/dist/types/components/resource-clear.d.ts.map +1 -0
- package/dist/types/components/resource-delete.d.ts +9 -0
- package/dist/types/components/resource-delete.d.ts.map +1 -0
- package/dist/types/components/resource-list.d.ts +2 -0
- package/dist/types/components/resource-list.d.ts.map +1 -0
- package/dist/types/components/resource-sync.d.ts +8 -0
- package/dist/types/components/resource-sync.d.ts.map +1 -0
- package/dist/types/components/resource-types.d.ts +7 -0
- package/dist/types/components/resource-types.d.ts.map +1 -0
- package/dist/types/components/resource-upload.d.ts +8 -0
- package/dist/types/components/resource-upload.d.ts.map +1 -0
- package/dist/types/components/schedule-create.d.ts +7 -0
- package/dist/types/components/schedule-create.d.ts.map +1 -0
- package/dist/types/components/schedule-delete.d.ts +7 -0
- package/dist/types/components/schedule-delete.d.ts.map +1 -0
- package/dist/types/components/schedule-list.d.ts +6 -0
- package/dist/types/components/schedule-list.d.ts.map +1 -0
- package/dist/types/components/schedule-runs.d.ts +8 -0
- package/dist/types/components/schedule-runs.d.ts.map +1 -0
- package/dist/types/components/secret-bulk.d.ts +8 -0
- package/dist/types/components/secret-bulk.d.ts.map +1 -0
- package/dist/types/components/secret-create.d.ts +9 -0
- package/dist/types/components/secret-create.d.ts.map +1 -0
- package/dist/types/components/secret-delete.d.ts +8 -0
- package/dist/types/components/secret-delete.d.ts.map +1 -0
- package/dist/types/components/secret-list.d.ts +7 -0
- package/dist/types/components/secret-list.d.ts.map +1 -0
- package/dist/types/components/secret-sync.d.ts +9 -0
- package/dist/types/components/secret-sync.d.ts.map +1 -0
- package/dist/types/components/watch.d.ts +7 -0
- package/dist/types/components/watch.d.ts.map +1 -0
- package/dist/types/hooks/useApi.d.ts +29 -0
- package/dist/types/hooks/useApi.d.ts.map +1 -0
- package/dist/types/positronic.d.ts +3 -0
- package/dist/types/positronic.d.ts.map +1 -0
- package/dist/types/test/mock-api-client.d.ts +25 -0
- package/dist/types/test/mock-api-client.d.ts.map +1 -0
- package/dist/types/test/test-dev-server.d.ts +129 -0
- package/dist/types/test/test-dev-server.d.ts.map +1 -0
- package/package.json +37 -0
- package/src/cli.ts +981 -0
- package/src/commands/backend.ts +63 -0
- package/src/commands/brain.test.ts +1004 -0
- package/src/commands/brain.ts +215 -0
- package/src/commands/helpers.test.ts +487 -0
- package/src/commands/helpers.ts +870 -0
- package/src/commands/project-config-manager.ts +152 -0
- package/src/commands/project.test.ts +502 -0
- package/src/commands/project.ts +109 -0
- package/src/commands/resources.test.ts +1052 -0
- package/src/commands/resources.ts +97 -0
- package/src/commands/schedule.test.ts +481 -0
- package/src/commands/schedule.ts +65 -0
- package/src/commands/secret.test.ts +210 -0
- package/src/commands/secret.ts +50 -0
- package/src/commands/server.test.ts +493 -0
- package/src/commands/server.ts +353 -0
- package/src/commands/test-utils.ts +324 -0
- package/src/components/brain-history.tsx +198 -0
- package/src/components/brain-list.tsx +105 -0
- package/src/components/brain-rerun.tsx +111 -0
- package/src/components/brain-show.tsx +92 -0
- package/src/components/error.tsx +24 -0
- package/src/components/project-add.tsx +59 -0
- package/src/components/project-create.tsx +83 -0
- package/src/components/project-list.tsx +83 -0
- package/src/components/project-remove.tsx +55 -0
- package/src/components/project-select.tsx +200 -0
- package/src/components/project-show.tsx +58 -0
- package/src/components/resource-clear.tsx +127 -0
- package/src/components/resource-delete.tsx +160 -0
- package/src/components/resource-list.tsx +177 -0
- package/src/components/resource-sync.tsx +170 -0
- package/src/components/resource-types.tsx +55 -0
- package/src/components/resource-upload.tsx +182 -0
- package/src/components/schedule-create.tsx +90 -0
- package/src/components/schedule-delete.tsx +116 -0
- package/src/components/schedule-list.tsx +186 -0
- package/src/components/schedule-runs.tsx +151 -0
- package/src/components/secret-bulk.tsx +79 -0
- package/src/components/secret-create.tsx +49 -0
- package/src/components/secret-delete.tsx +41 -0
- package/src/components/secret-list.tsx +41 -0
- package/src/components/watch.tsx +155 -0
- package/src/hooks/useApi.ts +183 -0
- package/src/positronic.ts +40 -0
- package/src/test/data/resources/config.json +1 -0
- package/src/test/data/resources/data/config.json +1 -0
- package/src/test/data/resources/data/logo.png +2 -0
- package/src/test/data/resources/docs/api.md +3 -0
- package/src/test/data/resources/docs/readme.md +3 -0
- package/src/test/data/resources/example.md +3 -0
- package/src/test/data/resources/file with spaces.txt +1 -0
- package/src/test/data/resources/readme.md +3 -0
- package/src/test/data/resources/test.txt +1 -0
- package/src/test/mock-api-client.ts +145 -0
- package/src/test/test-dev-server.ts +1003 -0
- package/tsconfig.json +11 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _iterable_to_array_limit(arr, i) {
|
|
10
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (_i == null) return;
|
|
12
|
+
var _arr = [];
|
|
13
|
+
var _n = true;
|
|
14
|
+
var _d = false;
|
|
15
|
+
var _s, _e;
|
|
16
|
+
try {
|
|
17
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
18
|
+
_arr.push(_s.value);
|
|
19
|
+
if (i && _arr.length === i) break;
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_d = true;
|
|
23
|
+
_e = err;
|
|
24
|
+
} finally{
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
27
|
+
} finally{
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return _arr;
|
|
32
|
+
}
|
|
33
|
+
function _non_iterable_rest() {
|
|
34
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
35
|
+
}
|
|
36
|
+
function _sliced_to_array(arr, i) {
|
|
37
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
38
|
+
}
|
|
39
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
40
|
+
if (!o) return;
|
|
41
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
42
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
43
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
44
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
46
|
+
}
|
|
47
|
+
import React, { useState, useEffect } from 'react';
|
|
48
|
+
import { Box, Text, useInput, useApp, useStdin } from 'ink';
|
|
49
|
+
// Separate component for interactive selection that uses useInput
|
|
50
|
+
var InteractiveProjectSelect = function(param) {
|
|
51
|
+
var projects = param.projects, currentProject = param.currentProject, projectConfig = param.projectConfig;
|
|
52
|
+
var _useState = _sliced_to_array(useState(function() {
|
|
53
|
+
var currentIndex = projects.findIndex(function(p) {
|
|
54
|
+
return p.name === currentProject;
|
|
55
|
+
});
|
|
56
|
+
return currentIndex >= 0 ? currentIndex : 0;
|
|
57
|
+
}), 2), selectedIndex = _useState[0], setSelectedIndex = _useState[1];
|
|
58
|
+
var _useState1 = _sliced_to_array(useState(null), 2), result = _useState1[0], setResult = _useState1[1];
|
|
59
|
+
var exit = useApp().exit;
|
|
60
|
+
useInput(function(input, key) {
|
|
61
|
+
if (key.upArrow) {
|
|
62
|
+
setSelectedIndex(function(prev) {
|
|
63
|
+
return (prev - 1 + projects.length) % projects.length;
|
|
64
|
+
});
|
|
65
|
+
} else if (key.downArrow) {
|
|
66
|
+
setSelectedIndex(function(prev) {
|
|
67
|
+
return (prev + 1) % projects.length;
|
|
68
|
+
});
|
|
69
|
+
} else if (key.return) {
|
|
70
|
+
var selectedProject = projects[selectedIndex];
|
|
71
|
+
var selectResult = projectConfig.selectProject(selectedProject.name);
|
|
72
|
+
setResult(selectResult);
|
|
73
|
+
} else if (input === 'q' || key.escape) {
|
|
74
|
+
exit();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// If selection was made, show success
|
|
78
|
+
if (result && result.success) {
|
|
79
|
+
var selectedProject = projects[selectedIndex];
|
|
80
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
81
|
+
flexDirection: "column"
|
|
82
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
83
|
+
color: "green"
|
|
84
|
+
}, "✅ Project switched successfully!"), /*#__PURE__*/ React.createElement(Box, {
|
|
85
|
+
marginTop: 1,
|
|
86
|
+
paddingLeft: 2,
|
|
87
|
+
flexDirection: "column"
|
|
88
|
+
}, /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
89
|
+
bold: true
|
|
90
|
+
}, "Current project:"), " ", selectedProject.name), /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
91
|
+
bold: true
|
|
92
|
+
}, "URL:"), " ", selectedProject.url)));
|
|
93
|
+
}
|
|
94
|
+
// Show interactive selection UI
|
|
95
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
96
|
+
flexDirection: "column"
|
|
97
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
98
|
+
bold: true
|
|
99
|
+
}, "Select a project:"), /*#__PURE__*/ React.createElement(Box, {
|
|
100
|
+
marginTop: 1,
|
|
101
|
+
flexDirection: "column"
|
|
102
|
+
}, projects.map(function(project, index) {
|
|
103
|
+
var isSelected = index === selectedIndex;
|
|
104
|
+
var isCurrent = project.name === currentProject;
|
|
105
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
106
|
+
key: project.name
|
|
107
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
108
|
+
color: isSelected ? 'cyan' : undefined
|
|
109
|
+
}, isSelected ? '▶ ' : ' ', project.name, isCurrent && /*#__PURE__*/ React.createElement(Text, {
|
|
110
|
+
color: "green"
|
|
111
|
+
}, " (current)")));
|
|
112
|
+
})), /*#__PURE__*/ React.createElement(Box, {
|
|
113
|
+
marginTop: 1
|
|
114
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
115
|
+
dimColor: true
|
|
116
|
+
}, "Use arrow keys to navigate, Enter to select, q to quit")));
|
|
117
|
+
};
|
|
118
|
+
export var ProjectSelect = function(param) {
|
|
119
|
+
var name = param.name, projectConfig = param.projectConfig;
|
|
120
|
+
var _useState = _sliced_to_array(useState([]), 2), projects = _useState[0], setProjects = _useState[1];
|
|
121
|
+
var _useState1 = _sliced_to_array(useState(null), 2), currentProject = _useState1[0], setCurrentProject = _useState1[1];
|
|
122
|
+
var _useState2 = _sliced_to_array(useState(null), 2), result = _useState2[0], setResult = _useState2[1];
|
|
123
|
+
var _useState3 = _sliced_to_array(useState(!name), 1), isInteractive = _useState3[0];
|
|
124
|
+
var isRawModeSupported = useStdin().isRawModeSupported;
|
|
125
|
+
useEffect(function() {
|
|
126
|
+
var _projectConfig_listProjects = projectConfig.listProjects(), projectList = _projectConfig_listProjects.projects, current = _projectConfig_listProjects.current;
|
|
127
|
+
setProjects(projectList);
|
|
128
|
+
setCurrentProject(current);
|
|
129
|
+
// If name is provided, select it directly
|
|
130
|
+
if (name) {
|
|
131
|
+
var selectResult = projectConfig.selectProject(name);
|
|
132
|
+
setResult(selectResult);
|
|
133
|
+
}
|
|
134
|
+
}, [
|
|
135
|
+
name,
|
|
136
|
+
projectConfig
|
|
137
|
+
]);
|
|
138
|
+
// Handle no projects case
|
|
139
|
+
if (projects.length === 0) {
|
|
140
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
141
|
+
flexDirection: "column"
|
|
142
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
143
|
+
color: "red"
|
|
144
|
+
}, "❌ No projects configured"), /*#__PURE__*/ React.createElement(Box, {
|
|
145
|
+
marginTop: 1
|
|
146
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
147
|
+
dimColor: true
|
|
148
|
+
}, 'Add a project first with "px project add <name> --url <url>"')));
|
|
149
|
+
}
|
|
150
|
+
// Direct selection mode - show result
|
|
151
|
+
if (!isInteractive && result) {
|
|
152
|
+
if (result.success) {
|
|
153
|
+
var selectedProject = projects.find(function(p) {
|
|
154
|
+
return p.name === name;
|
|
155
|
+
});
|
|
156
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
157
|
+
flexDirection: "column"
|
|
158
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
159
|
+
color: "green"
|
|
160
|
+
}, "✅ Project switched successfully!"), /*#__PURE__*/ React.createElement(Box, {
|
|
161
|
+
marginTop: 1,
|
|
162
|
+
paddingLeft: 2,
|
|
163
|
+
flexDirection: "column"
|
|
164
|
+
}, /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
165
|
+
bold: true
|
|
166
|
+
}, "Current project:"), " ", name), selectedProject && /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
167
|
+
bold: true
|
|
168
|
+
}, "URL:"), " ", selectedProject.url)));
|
|
169
|
+
} else {
|
|
170
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
171
|
+
flexDirection: "column"
|
|
172
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
173
|
+
color: "red"
|
|
174
|
+
}, "❌ Failed to select project"), /*#__PURE__*/ React.createElement(Box, {
|
|
175
|
+
paddingLeft: 2
|
|
176
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
177
|
+
color: "red"
|
|
178
|
+
}, result.error)), projects.length > 0 && /*#__PURE__*/ React.createElement(Box, {
|
|
179
|
+
marginTop: 1,
|
|
180
|
+
flexDirection: "column"
|
|
181
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "Available projects:"), projects.map(function(p) {
|
|
182
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
183
|
+
key: p.name,
|
|
184
|
+
paddingLeft: 2
|
|
185
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
186
|
+
dimColor: true
|
|
187
|
+
}, "• ", p.name));
|
|
188
|
+
})));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Interactive selection mode
|
|
192
|
+
if (isInteractive) {
|
|
193
|
+
// If raw mode is not supported (e.g., in tests), show a non-interactive list
|
|
194
|
+
if (!isRawModeSupported) {
|
|
195
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
196
|
+
flexDirection: "column"
|
|
197
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
198
|
+
bold: true
|
|
199
|
+
}, "Available projects:"), /*#__PURE__*/ React.createElement(Box, {
|
|
200
|
+
marginTop: 1,
|
|
201
|
+
flexDirection: "column"
|
|
202
|
+
}, projects.map(function(project) {
|
|
203
|
+
var isCurrent = project.name === currentProject;
|
|
204
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
205
|
+
key: project.name,
|
|
206
|
+
paddingLeft: 2
|
|
207
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "• ", project.name, isCurrent && /*#__PURE__*/ React.createElement(Text, {
|
|
208
|
+
color: "green"
|
|
209
|
+
}, " (current)")));
|
|
210
|
+
})), /*#__PURE__*/ React.createElement(Box, {
|
|
211
|
+
marginTop: 1
|
|
212
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
213
|
+
dimColor: true
|
|
214
|
+
}, 'Interactive mode not available. Use "px project select <name>" to select a project.')));
|
|
215
|
+
}
|
|
216
|
+
// Use the interactive component that has useInput
|
|
217
|
+
return /*#__PURE__*/ React.createElement(InteractiveProjectSelect, {
|
|
218
|
+
projects: projects,
|
|
219
|
+
currentProject: currentProject,
|
|
220
|
+
projectConfig: projectConfig
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
return /*#__PURE__*/ React.createElement(Text, null, "Processing...");
|
|
224
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
export var ProjectShow = function(param) {
|
|
4
|
+
var projectConfig = param.projectConfig;
|
|
5
|
+
var currentProject = projectConfig.getCurrentProject();
|
|
6
|
+
var projects = projectConfig.listProjects().projects;
|
|
7
|
+
if (!currentProject) {
|
|
8
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
9
|
+
flexDirection: "column"
|
|
10
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "No project currently selected."), projects.length > 0 ? /*#__PURE__*/ React.createElement(Box, {
|
|
11
|
+
marginTop: 1
|
|
12
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
13
|
+
dimColor: true
|
|
14
|
+
}, 'Use "px project select" to choose from ', projects.length, " available project", projects.length === 1 ? '' : 's', ".")) : /*#__PURE__*/ React.createElement(Box, {
|
|
15
|
+
marginTop: 1
|
|
16
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
17
|
+
dimColor: true
|
|
18
|
+
}, 'Add a project with "px project add <name> --url <url>"')));
|
|
19
|
+
}
|
|
20
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
21
|
+
flexDirection: "column",
|
|
22
|
+
paddingTop: 1,
|
|
23
|
+
paddingBottom: 1
|
|
24
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
25
|
+
bold: true
|
|
26
|
+
}, "Current Project"), /*#__PURE__*/ React.createElement(Box, {
|
|
27
|
+
marginTop: 1,
|
|
28
|
+
paddingLeft: 2,
|
|
29
|
+
flexDirection: "column"
|
|
30
|
+
}, /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
31
|
+
bold: true
|
|
32
|
+
}, "Name:"), " ", currentProject.name), /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
33
|
+
bold: true
|
|
34
|
+
}, "URL:"), " ", currentProject.url), /*#__PURE__*/ React.createElement(Text, null, /*#__PURE__*/ React.createElement(Text, {
|
|
35
|
+
bold: true
|
|
36
|
+
}, "Added:"), " ", new Date(currentProject.addedAt).toLocaleString())), projects.length > 1 && /*#__PURE__*/ React.createElement(Box, {
|
|
37
|
+
marginTop: 1
|
|
38
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
39
|
+
dimColor: true
|
|
40
|
+
}, projects.length - 1, " other project", projects.length - 1 === 1 ? '' : 's', ' available. Use "px project list" to see all.')));
|
|
41
|
+
};
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _iterable_to_array_limit(arr, i) {
|
|
10
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (_i == null) return;
|
|
12
|
+
var _arr = [];
|
|
13
|
+
var _n = true;
|
|
14
|
+
var _d = false;
|
|
15
|
+
var _s, _e;
|
|
16
|
+
try {
|
|
17
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
18
|
+
_arr.push(_s.value);
|
|
19
|
+
if (i && _arr.length === i) break;
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_d = true;
|
|
23
|
+
_e = err;
|
|
24
|
+
} finally{
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
27
|
+
} finally{
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return _arr;
|
|
32
|
+
}
|
|
33
|
+
function _non_iterable_rest() {
|
|
34
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
35
|
+
}
|
|
36
|
+
function _sliced_to_array(arr, i) {
|
|
37
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
38
|
+
}
|
|
39
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
40
|
+
if (!o) return;
|
|
41
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
42
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
43
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
44
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
46
|
+
}
|
|
47
|
+
import React, { useState, useEffect } from 'react';
|
|
48
|
+
import { Box, Text, useApp, useInput } from 'ink';
|
|
49
|
+
import { ErrorComponent } from './error.js';
|
|
50
|
+
import { useApiGet, useApiDelete } from '../hooks/useApi.js';
|
|
51
|
+
export var ResourceClear = function() {
|
|
52
|
+
var _useState = _sliced_to_array(useState(false), 2), confirmed = _useState[0], setConfirmed = _useState[1];
|
|
53
|
+
var _useState1 = _sliced_to_array(useState(false), 2), deleted = _useState1[0], setDeleted = _useState1[1];
|
|
54
|
+
var _useState2 = _sliced_to_array(useState('cancel'), 2), selectedOption = _useState2[0], setSelectedOption = _useState2[1];
|
|
55
|
+
var exit = useApp().exit;
|
|
56
|
+
var _useApiGet = useApiGet('/resources'), resourcesData = _useApiGet.data, listLoading = _useApiGet.loading, listError = _useApiGet.error;
|
|
57
|
+
var _useApiDelete = useApiDelete('resources'), deleteResources = _useApiDelete.execute, deleteLoading = _useApiDelete.loading, deleteError = _useApiDelete.error;
|
|
58
|
+
useInput(function(input, key) {
|
|
59
|
+
if (!confirmed && !deleted && resourcesData && resourcesData.count > 0) {
|
|
60
|
+
if (key.upArrow || key.downArrow) {
|
|
61
|
+
setSelectedOption(function(prev) {
|
|
62
|
+
return prev === 'cancel' ? 'delete' : 'cancel';
|
|
63
|
+
});
|
|
64
|
+
} else if (key.return) {
|
|
65
|
+
if (selectedOption === 'delete') {
|
|
66
|
+
setConfirmed(true);
|
|
67
|
+
} else {
|
|
68
|
+
exit();
|
|
69
|
+
}
|
|
70
|
+
} else if (key.escape || key.ctrl && input === 'c') {
|
|
71
|
+
exit();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
useEffect(function() {
|
|
76
|
+
if (confirmed && !deleteLoading && !deleteError && !deleted) {
|
|
77
|
+
deleteResources('/resources').then(function() {
|
|
78
|
+
setDeleted(true);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}, [
|
|
82
|
+
confirmed,
|
|
83
|
+
deleteLoading,
|
|
84
|
+
deleteError,
|
|
85
|
+
deleted,
|
|
86
|
+
deleteResources
|
|
87
|
+
]);
|
|
88
|
+
useEffect(function() {
|
|
89
|
+
if (deleted) {
|
|
90
|
+
// Exit after showing success message for a moment
|
|
91
|
+
var timer = setTimeout(function() {
|
|
92
|
+
exit();
|
|
93
|
+
}, 1500);
|
|
94
|
+
return function() {
|
|
95
|
+
return clearTimeout(timer);
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}, [
|
|
99
|
+
deleted,
|
|
100
|
+
exit
|
|
101
|
+
]);
|
|
102
|
+
if (listError) {
|
|
103
|
+
return /*#__PURE__*/ React.createElement(ErrorComponent, {
|
|
104
|
+
error: listError
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
if (deleteError) {
|
|
108
|
+
return /*#__PURE__*/ React.createElement(ErrorComponent, {
|
|
109
|
+
error: deleteError
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (listLoading) {
|
|
113
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, null, "\uD83D\uDCCB Loading resources..."));
|
|
114
|
+
}
|
|
115
|
+
if (resourcesData && resourcesData.count === 0) {
|
|
116
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, null, "No resources to delete."));
|
|
117
|
+
}
|
|
118
|
+
if (!confirmed) {
|
|
119
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
120
|
+
flexDirection: "column"
|
|
121
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
122
|
+
bold: true,
|
|
123
|
+
color: "red"
|
|
124
|
+
}, "\uD83D\uDEA8 DANGER: This will permanently delete ALL resources!"), /*#__PURE__*/ React.createElement(Box, {
|
|
125
|
+
marginTop: 1,
|
|
126
|
+
marginBottom: 1,
|
|
127
|
+
paddingLeft: 2,
|
|
128
|
+
flexDirection: "column"
|
|
129
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "This action will delete ", (resourcesData === null || resourcesData === void 0 ? void 0 : resourcesData.count) || 0, " resource(s)."), /*#__PURE__*/ React.createElement(Text, {
|
|
130
|
+
dimColor: true
|
|
131
|
+
}, "This cannot be undone.")), /*#__PURE__*/ React.createElement(Box, {
|
|
132
|
+
marginTop: 1,
|
|
133
|
+
flexDirection: "column"
|
|
134
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "Use arrow keys to select, Enter to confirm:"), /*#__PURE__*/ React.createElement(Box, {
|
|
135
|
+
marginTop: 1,
|
|
136
|
+
flexDirection: "column"
|
|
137
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
138
|
+
color: selectedOption === 'cancel' ? 'green' : undefined
|
|
139
|
+
}, selectedOption === 'cancel' ? '▶ ' : ' ', "Cancel (keep resources)"), /*#__PURE__*/ React.createElement(Text, {
|
|
140
|
+
color: selectedOption === 'delete' ? 'red' : undefined
|
|
141
|
+
}, selectedOption === 'delete' ? '▶ ' : ' ', "Delete all resources"))));
|
|
142
|
+
}
|
|
143
|
+
if (deleteLoading) {
|
|
144
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, null, "\uD83D\uDDD1️ Deleting all resources..."));
|
|
145
|
+
}
|
|
146
|
+
if (deleted) {
|
|
147
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, {
|
|
148
|
+
color: "green"
|
|
149
|
+
}, "✅ Successfully deleted all resources"));
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
};
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _iterable_to_array_limit(arr, i) {
|
|
10
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
11
|
+
if (_i == null) return;
|
|
12
|
+
var _arr = [];
|
|
13
|
+
var _n = true;
|
|
14
|
+
var _d = false;
|
|
15
|
+
var _s, _e;
|
|
16
|
+
try {
|
|
17
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
18
|
+
_arr.push(_s.value);
|
|
19
|
+
if (i && _arr.length === i) break;
|
|
20
|
+
}
|
|
21
|
+
} catch (err) {
|
|
22
|
+
_d = true;
|
|
23
|
+
_e = err;
|
|
24
|
+
} finally{
|
|
25
|
+
try {
|
|
26
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
27
|
+
} finally{
|
|
28
|
+
if (_d) throw _e;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return _arr;
|
|
32
|
+
}
|
|
33
|
+
function _non_iterable_rest() {
|
|
34
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
35
|
+
}
|
|
36
|
+
function _sliced_to_array(arr, i) {
|
|
37
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
38
|
+
}
|
|
39
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
40
|
+
if (!o) return;
|
|
41
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
42
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
43
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
44
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
45
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
46
|
+
}
|
|
47
|
+
import React, { useState, useEffect } from 'react';
|
|
48
|
+
import { Box, Text, useStdin, useApp } from 'ink';
|
|
49
|
+
import { ErrorComponent } from './error.js';
|
|
50
|
+
import { useApiDelete, useApiGet } from '../hooks/useApi.js';
|
|
51
|
+
import { generateTypes } from '../commands/helpers.js';
|
|
52
|
+
export var ResourceDelete = function(param) {
|
|
53
|
+
var resourceKey = param.resourceKey, resourcePath = param.resourcePath, projectRootPath = param.projectRootPath, _param_force = param.force, force = _param_force === void 0 ? false : _param_force;
|
|
54
|
+
var _useState = _sliced_to_array(useState(force), 2), confirmed = _useState[0], setConfirmed = _useState[1]; // Auto-confirm if force is true
|
|
55
|
+
var _useState1 = _sliced_to_array(useState(false), 2), deleted = _useState1[0], setDeleted = _useState1[1];
|
|
56
|
+
var _useState2 = _sliced_to_array(useState(''), 2), input = _useState2[0], setInput = _useState2[1];
|
|
57
|
+
var _useState3 = _sliced_to_array(useState(null), 2), isLocalResource = _useState3[0], setIsLocalResource = _useState3[1];
|
|
58
|
+
var _useStdin = useStdin(), stdin = _useStdin.stdin, setRawMode = _useStdin.setRawMode;
|
|
59
|
+
var exit = useApp().exit;
|
|
60
|
+
var _useApiGet = useApiGet('/resources'), resourcesData = _useApiGet.data, listLoading = _useApiGet.loading, listError = _useApiGet.error;
|
|
61
|
+
var _useApiDelete = useApiDelete('resource'), deleteResource = _useApiDelete.execute, loading = _useApiDelete.loading, error = _useApiDelete.error;
|
|
62
|
+
// Check if the resource is local
|
|
63
|
+
useEffect(function() {
|
|
64
|
+
if (resourcesData) {
|
|
65
|
+
var resource = resourcesData.resources.find(function(r) {
|
|
66
|
+
return r.key === resourceKey;
|
|
67
|
+
});
|
|
68
|
+
if (resource) {
|
|
69
|
+
setIsLocalResource(resource.local);
|
|
70
|
+
} else {
|
|
71
|
+
setIsLocalResource(false); // Resource doesn't exist
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}, [
|
|
75
|
+
resourcesData,
|
|
76
|
+
resourceKey
|
|
77
|
+
]);
|
|
78
|
+
useEffect(function() {
|
|
79
|
+
if (stdin && !confirmed && !deleted && !force) {
|
|
80
|
+
setRawMode(true);
|
|
81
|
+
var handleData = function(data) {
|
|
82
|
+
var char = data.toString();
|
|
83
|
+
if (char === '\r' || char === '\n') {
|
|
84
|
+
if (input.toLowerCase() === 'yes') {
|
|
85
|
+
setConfirmed(true);
|
|
86
|
+
} else {
|
|
87
|
+
exit();
|
|
88
|
+
}
|
|
89
|
+
} else if (char === '\u0003') {
|
|
90
|
+
exit();
|
|
91
|
+
} else if (char === '\u007F' || char === '\b') {
|
|
92
|
+
setInput(function(prev) {
|
|
93
|
+
return prev.slice(0, -1);
|
|
94
|
+
});
|
|
95
|
+
} else {
|
|
96
|
+
setInput(function(prev) {
|
|
97
|
+
return prev + char;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
stdin.on('data', handleData);
|
|
102
|
+
return function() {
|
|
103
|
+
stdin.off('data', handleData);
|
|
104
|
+
setRawMode(false);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}, [
|
|
108
|
+
stdin,
|
|
109
|
+
setRawMode,
|
|
110
|
+
confirmed,
|
|
111
|
+
deleted,
|
|
112
|
+
input,
|
|
113
|
+
exit,
|
|
114
|
+
force
|
|
115
|
+
]);
|
|
116
|
+
useEffect(function() {
|
|
117
|
+
if (confirmed && !loading && !error && !deleted) {
|
|
118
|
+
// URL encode the key for the API endpoint
|
|
119
|
+
var encodedKey = encodeURIComponent(resourceKey);
|
|
120
|
+
deleteResource("/resources/".concat(encodedKey)).then(function() {
|
|
121
|
+
setDeleted(true);
|
|
122
|
+
// Generate types after successful deletion if in local dev mode
|
|
123
|
+
if (projectRootPath) {
|
|
124
|
+
generateTypes(projectRootPath).catch(function(typeError) {
|
|
125
|
+
console.error('Failed to generate types:', typeError);
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}, [
|
|
131
|
+
confirmed,
|
|
132
|
+
loading,
|
|
133
|
+
error,
|
|
134
|
+
deleted,
|
|
135
|
+
deleteResource,
|
|
136
|
+
resourceKey,
|
|
137
|
+
projectRootPath
|
|
138
|
+
]);
|
|
139
|
+
if (listError) {
|
|
140
|
+
return /*#__PURE__*/ React.createElement(ErrorComponent, {
|
|
141
|
+
error: listError
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (error) {
|
|
145
|
+
return /*#__PURE__*/ React.createElement(ErrorComponent, {
|
|
146
|
+
error: error
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (listLoading || isLocalResource === null) {
|
|
150
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, null, "Checking resource..."));
|
|
151
|
+
}
|
|
152
|
+
if (isLocalResource) {
|
|
153
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
154
|
+
flexDirection: "column"
|
|
155
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
156
|
+
color: "red",
|
|
157
|
+
bold: true
|
|
158
|
+
}, "❌ Cannot Delete Local Resource"), /*#__PURE__*/ React.createElement(Box, {
|
|
159
|
+
marginTop: 1,
|
|
160
|
+
paddingLeft: 2,
|
|
161
|
+
flexDirection: "column"
|
|
162
|
+
}, /*#__PURE__*/ React.createElement(Text, null, "This resource was synced from your local filesystem."), /*#__PURE__*/ React.createElement(Text, {
|
|
163
|
+
dimColor: true
|
|
164
|
+
}, "To remove it, delete the file locally and run 'px resources sync'.")));
|
|
165
|
+
}
|
|
166
|
+
if (!confirmed && !force) {
|
|
167
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
168
|
+
flexDirection: "column"
|
|
169
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
170
|
+
bold: true,
|
|
171
|
+
color: "yellow"
|
|
172
|
+
}, "⚠️ Warning: This will permanently delete the following resource:"), /*#__PURE__*/ React.createElement(Box, {
|
|
173
|
+
marginTop: 1,
|
|
174
|
+
marginBottom: 1,
|
|
175
|
+
paddingLeft: 2
|
|
176
|
+
}, /*#__PURE__*/ React.createElement(Text, null, resourcePath)), /*#__PURE__*/ React.createElement(Text, null, 'Type "yes" to confirm deletion: ', input));
|
|
177
|
+
}
|
|
178
|
+
if (loading) {
|
|
179
|
+
return /*#__PURE__*/ React.createElement(Box, null, /*#__PURE__*/ React.createElement(Text, null, "\uD83D\uDDD1️ Deleting ", resourcePath, "..."));
|
|
180
|
+
}
|
|
181
|
+
if (deleted) {
|
|
182
|
+
return /*#__PURE__*/ React.createElement(Box, {
|
|
183
|
+
flexDirection: "column"
|
|
184
|
+
}, /*#__PURE__*/ React.createElement(Text, {
|
|
185
|
+
color: "green"
|
|
186
|
+
}, "✅ Successfully deleted: ", resourcePath));
|
|
187
|
+
}
|
|
188
|
+
return null;
|
|
189
|
+
};
|