bento-get 2.7.7 → 3.0.0-beta.643.1
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/app/AuthGuard.mjs +35 -45
- package/dist/app/AuthGuard.mjs.map +1 -1
- package/dist/app/AuthGuard.native.js +37 -47
- package/dist/app/AuthGuard.native.js.map +1 -1
- package/dist/app/handle-global-keypress.mjs +93 -98
- package/dist/app/handle-global-keypress.mjs.map +1 -1
- package/dist/app/handle-global-keypress.native.js +105 -110
- package/dist/app/handle-global-keypress.native.js.map +1 -1
- package/dist/cli-components/SearchBar.mjs +39 -37
- package/dist/cli-components/SearchBar.mjs.map +1 -1
- package/dist/cli-components/SearchBar.native.js +42 -41
- package/dist/cli-components/SearchBar.native.js.map +1 -1
- package/dist/cli-components/index.mjs +137 -135
- package/dist/cli-components/index.mjs.map +1 -1
- package/dist/cli-components/index.native.js +155 -153
- package/dist/cli-components/index.native.js.map +1 -1
- package/dist/cli.mjs +4 -2
- package/dist/cli.mjs.map +1 -1
- package/dist/cli.native.js +4 -2
- package/dist/cli.native.js.map +1 -1
- package/dist/commands/add.mjs +9 -6
- package/dist/commands/add.mjs.map +1 -1
- package/dist/commands/add.native.js +10 -7
- package/dist/commands/add.native.js.map +1 -1
- package/dist/commands/index.mjs +133 -135
- package/dist/commands/index.mjs.map +1 -1
- package/dist/commands/index.native.js +145 -147
- package/dist/commands/index.native.js.map +1 -1
- package/dist/components.mjs +1470 -1228
- package/dist/components.mjs.map +1 -1
- package/dist/components.native.js +1470 -1228
- package/dist/components.native.js.map +1 -1
- package/dist/constants.mjs +1 -0
- package/dist/constants.mjs.map +1 -1
- package/dist/constants.native.js +1 -0
- package/dist/constants.native.js.map +1 -1
- package/dist/data/AppContext.mjs +43 -43
- package/dist/data/AppContext.mjs.map +1 -1
- package/dist/data/AppContext.native.js +44 -44
- package/dist/data/AppContext.native.js.map +1 -1
- package/dist/hooks/useFetchComponent.mjs +64 -76
- package/dist/hooks/useFetchComponent.mjs.map +1 -1
- package/dist/hooks/useFetchComponent.native.js +88 -102
- package/dist/hooks/useFetchComponent.native.js.map +1 -1
- package/dist/hooks/useInstallComponent.mjs +130 -138
- package/dist/hooks/useInstallComponent.mjs.map +1 -1
- package/dist/hooks/useInstallComponent.native.js +186 -198
- package/dist/hooks/useInstallComponent.native.js.map +1 -1
- package/dist/install-direct.mjs +110 -120
- package/dist/install-direct.mjs.map +1 -1
- package/dist/install-direct.native.js +179 -195
- package/dist/install-direct.native.js.map +1 -1
- package/dist/screens/CodeAuthScreen.mjs +114 -106
- package/dist/screens/CodeAuthScreen.mjs.map +1 -1
- package/dist/screens/CodeAuthScreen.native.js +116 -108
- package/dist/screens/CodeAuthScreen.native.js.map +1 -1
- package/dist/screens/InstallConfirmScreen.mjs +91 -83
- package/dist/screens/InstallConfirmScreen.mjs.map +1 -1
- package/dist/screens/InstallConfirmScreen.native.js +99 -91
- package/dist/screens/InstallConfirmScreen.native.js.map +1 -1
- package/dist/screens/SearchScreen.mjs +9 -5
- package/dist/screens/SearchScreen.mjs.map +1 -1
- package/dist/screens/SearchScreen.native.js +11 -7
- package/dist/screens/SearchScreen.native.js.map +1 -1
- package/package.json +6 -21
package/dist/commands/index.mjs
CHANGED
|
@@ -1,148 +1,146 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Box, useApp, useInput
|
|
2
|
+
import { Box, Text, useApp, useInput } from "ink";
|
|
3
3
|
import { MemoryRouter, Navigate, Route, Routes, useLocation, useNavigate, useParams } from "react-router-dom";
|
|
4
|
-
import { AuthGuard } from "../app/AuthGuard.
|
|
5
|
-
import { AppContext } from "../data/AppContext.
|
|
6
|
-
import { CodeAuthScreen } from "../screens/CodeAuthScreen.
|
|
7
|
-
import { InstallConfirmScreen } from "../screens/InstallConfirmScreen.
|
|
8
|
-
import { SearchScreen } from "../screens/SearchScreen.
|
|
4
|
+
import { AuthGuard } from "../app/AuthGuard.mjs";
|
|
5
|
+
import { AppContext } from "../data/AppContext.mjs";
|
|
6
|
+
import { CodeAuthScreen } from "../screens/CodeAuthScreen.mjs";
|
|
7
|
+
import { InstallConfirmScreen } from "../screens/InstallConfirmScreen.mjs";
|
|
8
|
+
import { SearchScreen } from "../screens/SearchScreen.mjs";
|
|
9
9
|
import Conf from "conf";
|
|
10
|
-
import { handleGlobalKeyPress } from "../app/handle-global-keypress.
|
|
10
|
+
import { handleGlobalKeyPress } from "../app/handle-global-keypress.mjs";
|
|
11
11
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
|
|
12
13
|
const debugLog = (...args) => {
|
|
13
|
-
|
|
14
|
+
if (process.env.DEBUG === "true") console.log(...args);
|
|
14
15
|
};
|
|
15
|
-
const redact = s => typeof s === "string" && s.length > 8 ? `${s.slice(0, 6)}\u2026(${s.length} chars)` : "<redacted>";
|
|
16
|
+
const redact = (s) => typeof s === "string" && s.length > 8 ? `${s.slice(0, 6)}\u2026(${s.length} chars)` : "<redacted>";
|
|
16
17
|
function BentoGet() {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
18
|
+
const navigate = useNavigate();
|
|
19
|
+
const location = useLocation();
|
|
20
|
+
const tokenStore = new Conf({ projectName: "bento-cli/v2" });
|
|
21
|
+
const [isLoggedIn, setIsLoggedIn] = React.useState(false);
|
|
22
|
+
const [searchResults, setSearchResults] = React.useState([]);
|
|
23
|
+
const [selectedResultIndex, setSelectedResultIndex] = React.useState(-1);
|
|
24
|
+
const [searchInput, setSearchInput] = React.useState("");
|
|
25
|
+
const [confirmationPending, setConfirmationPending] = React.useState(true);
|
|
26
|
+
const [fetchState, setFetchState] = React.useState({
|
|
27
|
+
status: "idle",
|
|
28
|
+
isLoading: false,
|
|
29
|
+
isSuccess: false,
|
|
30
|
+
isError: false,
|
|
31
|
+
data: null,
|
|
32
|
+
error: void 0,
|
|
33
|
+
statusCode: void 0
|
|
34
|
+
});
|
|
35
|
+
const [installState, setInstallState] = React.useState({
|
|
36
|
+
installingComponent: null,
|
|
37
|
+
installedComponents: [],
|
|
38
|
+
shouldOpenBrowser: false,
|
|
39
|
+
isTokenInstalled: false,
|
|
40
|
+
componentToInstall: null
|
|
41
|
+
});
|
|
42
|
+
const [isCopyingToClipboard, setCopyingToClipboard] = React.useState(false);
|
|
43
|
+
const { exit } = useApp();
|
|
44
|
+
const [accessToken, setAccessToken] = React.useState(null);
|
|
45
|
+
const appContextValues = React.useMemo(() => ({
|
|
46
|
+
isCopyingToClipboard,
|
|
47
|
+
setCopyingToClipboard,
|
|
48
|
+
exitApp: exit,
|
|
49
|
+
searchResults,
|
|
50
|
+
setSearchResults,
|
|
51
|
+
selectedResultIndex,
|
|
52
|
+
setSelectedResultIndex,
|
|
53
|
+
searchInput,
|
|
54
|
+
setSearchInput,
|
|
55
|
+
setInstallState,
|
|
56
|
+
installState,
|
|
57
|
+
confirmationPending,
|
|
58
|
+
setConfirmationPending,
|
|
59
|
+
isLoggedIn,
|
|
60
|
+
setIsLoggedIn,
|
|
61
|
+
accessToken,
|
|
62
|
+
setAccessToken,
|
|
63
|
+
fetchState,
|
|
64
|
+
setFetchState,
|
|
65
|
+
tokenStore
|
|
66
|
+
}), [
|
|
67
|
+
isCopyingToClipboard,
|
|
68
|
+
searchResults,
|
|
69
|
+
selectedResultIndex,
|
|
70
|
+
searchInput,
|
|
71
|
+
installState,
|
|
72
|
+
confirmationPending,
|
|
73
|
+
accessToken,
|
|
74
|
+
fetchState,
|
|
75
|
+
tokenStore
|
|
76
|
+
]);
|
|
77
|
+
useInput((input, key) => handleGlobalKeyPress(input, key, appContextValues, navigate, location));
|
|
78
|
+
React.useEffect(() => {
|
|
79
|
+
const token = tokenStore.get("accessToken");
|
|
80
|
+
if (token) {
|
|
81
|
+
setAccessToken(token);
|
|
82
|
+
setIsLoggedIn(true);
|
|
83
|
+
debugLog("Token found, setting isLoggedIn to true");
|
|
84
|
+
debugLog({ token: redact(token) });
|
|
85
|
+
} else {
|
|
86
|
+
setIsLoggedIn(false);
|
|
87
|
+
}
|
|
88
|
+
}, []);
|
|
89
|
+
return /* @__PURE__ */ jsxs(AppContext.Provider, {
|
|
90
|
+
value: appContextValues,
|
|
91
|
+
children: [/* @__PURE__ */ jsx(AuthGuard, { children: /* @__PURE__ */ jsxs(Routes, { children: [
|
|
92
|
+
/* @__PURE__ */ jsx(Route, {
|
|
93
|
+
path: "/",
|
|
94
|
+
element: /* @__PURE__ */ jsx(Navigate, {
|
|
95
|
+
to: "/search",
|
|
96
|
+
replace: true
|
|
97
|
+
})
|
|
98
|
+
}),
|
|
99
|
+
/* @__PURE__ */ jsx(Route, {
|
|
100
|
+
path: "/search",
|
|
101
|
+
element: /* @__PURE__ */ jsx(SearchScreen, {})
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ jsx(Route, {
|
|
104
|
+
path: "/auth/:fileName",
|
|
105
|
+
element: /* @__PURE__ */ jsx(CodeAuthScreen, {})
|
|
106
|
+
}),
|
|
107
|
+
/* @__PURE__ */ jsx(Route, {
|
|
108
|
+
path: "/install-confirm/:fileName",
|
|
109
|
+
element: /* @__PURE__ */ jsx(ProtectedRoute, { component: InstallConfirmScreen })
|
|
110
|
+
})
|
|
111
|
+
] }) }), process.env.DEBUG && /* @__PURE__ */ jsxs(Box, {
|
|
112
|
+
borderStyle: "round",
|
|
113
|
+
borderColor: "",
|
|
114
|
+
padding: 1,
|
|
115
|
+
children: [
|
|
116
|
+
/* @__PURE__ */ jsxs(Text, { children: ["Current Route: ", location.pathname] }),
|
|
117
|
+
/* @__PURE__ */ jsx(Text, {
|
|
118
|
+
color: "magenta",
|
|
119
|
+
children: " | "
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ jsx(Text, {
|
|
122
|
+
color: isLoggedIn ? "green" : "red",
|
|
123
|
+
children: isLoggedIn ? "Logged In" : "Logged Out"
|
|
124
|
+
})
|
|
125
|
+
]
|
|
126
|
+
})]
|
|
127
|
+
});
|
|
122
128
|
}
|
|
123
129
|
function App() {
|
|
124
|
-
|
|
125
|
-
children: /* @__PURE__ */jsx(BentoGet, {})
|
|
126
|
-
});
|
|
130
|
+
return /* @__PURE__ */ jsx(MemoryRouter, { children: /* @__PURE__ */ jsx(BentoGet, {}) });
|
|
127
131
|
}
|
|
128
|
-
const ProtectedRoute = ({
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if (isOSS || isLoggedIn) {
|
|
140
|
-
return /* @__PURE__ */jsx(Component, {});
|
|
141
|
-
}
|
|
142
|
-
return /* @__PURE__ */jsx(Navigate, {
|
|
143
|
-
to: `/auth/${fileName}`,
|
|
144
|
-
replace: true
|
|
145
|
-
});
|
|
132
|
+
const ProtectedRoute = ({ component: Component }) => {
|
|
133
|
+
const { fileName } = useParams();
|
|
134
|
+
const { isLoggedIn, installState } = React.useContext(AppContext);
|
|
135
|
+
const isOSS = installState.installingComponent?.isOSS;
|
|
136
|
+
if (isOSS || isLoggedIn) {
|
|
137
|
+
return /* @__PURE__ */ jsx(Component, {});
|
|
138
|
+
}
|
|
139
|
+
return /* @__PURE__ */ jsx(Navigate, {
|
|
140
|
+
to: `/auth/${fileName}`,
|
|
141
|
+
replace: true
|
|
142
|
+
});
|
|
146
143
|
};
|
|
144
|
+
|
|
147
145
|
export { debugLog, App as default, redact };
|
|
148
146
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["commands/index.js"],"sourcesContent":["import React from \"react\";\nimport { Box, useApp, useInput, Text } from \"ink\";\nimport {\n MemoryRouter,\n Navigate,\n Route,\n Routes,\n useLocation,\n useNavigate,\n useParams\n} from \"react-router-dom\";\nimport { AuthGuard } from \"../app/AuthGuard.js\";\nimport { AppContext } from \"../data/AppContext.js\";\nimport { CodeAuthScreen } from \"../screens/CodeAuthScreen.js\";\nimport { InstallConfirmScreen } from \"../screens/InstallConfirmScreen.js\";\nimport { SearchScreen } from \"../screens/SearchScreen.js\";\nimport Conf from \"conf\";\nimport { handleGlobalKeyPress } from \"../app/handle-global-keypress.js\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nconst debugLog = (...args) => {\n if (process.env.DEBUG === \"true\") console.log(...args);\n};\nconst redact = (s) => typeof s === \"string\" && s.length > 8 ? `${s.slice(0, 6)}\\u2026(${s.length} chars)` : \"<redacted>\";\nfunction BentoGet() {\n const navigate = useNavigate();\n const location = useLocation();\n const tokenStore = new Conf({ projectName: \"bento-cli/v2\" });\n const [isLoggedIn, setIsLoggedIn] = React.useState(false);\n const [searchResults, setSearchResults] = React.useState([]);\n const [selectedResultIndex, setSelectedResultIndex] = React.useState(-1);\n const [searchInput, setSearchInput] = React.useState(\"\");\n const [confirmationPending, setConfirmationPending] = React.useState(true);\n const [fetchState, setFetchState] = React.useState({\n status: \"idle\",\n isLoading: false,\n isSuccess: false,\n isError: false,\n data: null,\n error: void 0,\n statusCode: void 0\n });\n const [installState, setInstallState] = React.useState({\n installingComponent: null,\n installedComponents: [],\n shouldOpenBrowser: false,\n isTokenInstalled: false,\n componentToInstall: null\n });\n const [isCopyingToClipboard, setCopyingToClipboard] = React.useState(false);\n const { exit } = useApp();\n const [accessToken, setAccessToken] = React.useState(null);\n const appContextValues = React.useMemo(\n () => ({\n isCopyingToClipboard,\n setCopyingToClipboard,\n exitApp: exit,\n searchResults,\n setSearchResults,\n selectedResultIndex,\n setSelectedResultIndex,\n searchInput,\n setSearchInput,\n setInstallState,\n installState,\n confirmationPending,\n setConfirmationPending,\n isLoggedIn,\n setIsLoggedIn,\n accessToken,\n setAccessToken,\n fetchState,\n setFetchState,\n tokenStore\n }),\n [\n isCopyingToClipboard,\n searchResults,\n selectedResultIndex,\n searchInput,\n installState,\n confirmationPending,\n accessToken,\n fetchState,\n tokenStore\n ]\n );\n useInput(\n (input, key) => handleGlobalKeyPress(input, key, appContextValues, navigate, location)\n );\n React.useEffect(() => {\n const token = tokenStore.get(\"accessToken\");\n if (token) {\n setAccessToken(token);\n setIsLoggedIn(true);\n debugLog(\"Token found, setting isLoggedIn to true\");\n debugLog({ token: redact(token) });\n } else {\n setIsLoggedIn(false);\n }\n }, []);\n return /* @__PURE__ */ jsxs(AppContext.Provider, { value: appContextValues, children: [\n /* @__PURE__ */ jsx(AuthGuard, { children: /* @__PURE__ */ jsxs(Routes, { children: [\n /* @__PURE__ */ jsx(Route, { path: \"/\", element: /* @__PURE__ */ jsx(Navigate, { to: \"/search\", replace: true }) }),\n /* @__PURE__ */ jsx(Route, { path: \"/search\", element: /* @__PURE__ */ jsx(SearchScreen, {}) }),\n /* @__PURE__ */ jsx(Route, { path: \"/auth/:fileName\", element: /* @__PURE__ */ jsx(CodeAuthScreen, {}) }),\n /* @__PURE__ */ jsx(\n Route,\n {\n path: \"/install-confirm/:fileName\",\n element: /* @__PURE__ */ jsx(ProtectedRoute, { component: InstallConfirmScreen })\n }\n )\n ] }) }),\n process.env.DEBUG && /* @__PURE__ */ jsxs(Box, { borderStyle: \"round\", borderColor: \"\", padding: 1, children: [\n /* @__PURE__ */ jsxs(Text, { children: [\n \"Current Route: \",\n location.pathname\n ] }),\n /* @__PURE__ */ jsx(Text, { color: \"magenta\", children: \" | \" }),\n /* @__PURE__ */ jsx(Text, { color: isLoggedIn ? \"green\" : \"red\", children: isLoggedIn ? \"Logged In\" : \"Logged Out\" })\n ] })\n ] });\n}\nfunction App() {\n return /* @__PURE__ */ jsx(MemoryRouter, { children: /* @__PURE__ */ jsx(BentoGet, {}) });\n}\nconst ProtectedRoute = ({ component: Component }) => {\n const { fileName } = useParams();\n const { isLoggedIn, installState } = React.useContext(AppContext);\n const isOSS = installState.installingComponent?.isOSS;\n if (isOSS || isLoggedIn) {\n return /* @__PURE__ */ jsx(Component, {});\n }\n return /* @__PURE__ */ jsx(Navigate, { to: `/auth/${fileName}`, replace: true });\n};\nexport {\n debugLog,\n App as default,\n redact\n};\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}
|