mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-07-11 07:12:55 +02:00
Align lint fixes with main and resolve merge conflicts
- Convert biome-ignore to oxlint-disable-next-line across client app - Fix no-base-to-string with type narrowing instead of suppressions - Fix no-floating-promises with fireAndForget() in proxy app - Fix restrict-template-expressions with String() wrapping - Resolve leftover merge conflict markers in manager.rs - Remove duplicate cmd_plugin_init_errors from lib.rs - Add graphql as explicit dependency in yaak-client Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -143,7 +143,7 @@ export const syncWorkspace = createFastMutation<
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line react/no-array-index-key
|
||||||
<TableRow key={i}>
|
<TableRow key={i}>
|
||||||
<TableCell className="text-text-subtle">{model}</TableCell>
|
<TableCell className="text-text-subtle">{model}</TableCell>
|
||||||
<TruncatedWideTableCell>{name}</TruncatedWideTableCell>
|
<TruncatedWideTableCell>{name}</TruncatedWideTableCell>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import type { DnsOverride, Workspace } from "@yaakapp-internal/models";
|
import type { DnsOverride, Workspace } from "@yaakapp-internal/models";
|
||||||
import { patchModel } from "@yaakapp-internal/models";
|
import { patchModel } from "@yaakapp-internal/models";
|
||||||
|
import { fireAndForget } from "../lib/fireAndForget";
|
||||||
import {
|
import {
|
||||||
HStack,
|
HStack,
|
||||||
Table,
|
Table,
|
||||||
@@ -37,7 +38,7 @@ export function DnsOverridesEditor({ workspace }: Props) {
|
|||||||
|
|
||||||
const handleChange = useCallback(
|
const handleChange = useCallback(
|
||||||
(overrides: DnsOverride[]) => {
|
(overrides: DnsOverride[]) => {
|
||||||
patchModel(workspace, { settingDnsOverrides: overrides });
|
fireAndForget(patchModel(workspace, { settingDnsOverrides: overrides }));
|
||||||
},
|
},
|
||||||
[workspace],
|
[workspace],
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -511,16 +511,14 @@ function HttpRequestArg({
|
|||||||
help={arg.description}
|
help={arg.description}
|
||||||
value={value}
|
value={value}
|
||||||
disabled={arg.disabled}
|
disabled={arg.disabled}
|
||||||
options={[
|
options={httpRequests.map((r) => {
|
||||||
...httpRequests.map((r) => {
|
|
||||||
return {
|
return {
|
||||||
label:
|
label:
|
||||||
buildRequestBreadcrumbs(r, folders).join(" / ") +
|
buildRequestBreadcrumbs(r, folders).join(" / ") +
|
||||||
(r.id === activeHttpRequest?.id ? " (current)" : ""),
|
(r.id === activeHttpRequest?.id ? " (current)" : ""),
|
||||||
value: r.id,
|
value: r.id,
|
||||||
};
|
};
|
||||||
}),
|
})}
|
||||||
]}
|
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
import { useHotKey } from "../hooks/useHotKey";
|
import { useHotKey } from "../hooks/useHotKey";
|
||||||
import { atomWithKVStorage } from "../lib/atoms/atomWithKVStorage";
|
import { atomWithKVStorage } from "../lib/atoms/atomWithKVStorage";
|
||||||
import { deleteModelWithConfirm } from "../lib/deleteModelWithConfirm";
|
import { deleteModelWithConfirm } from "../lib/deleteModelWithConfirm";
|
||||||
|
import { fireAndForget } from "../lib/fireAndForget";
|
||||||
import { jotaiStore } from "../lib/jotai";
|
import { jotaiStore } from "../lib/jotai";
|
||||||
import { isBaseEnvironment, isSubEnvironment } from "../lib/model_util";
|
import { isBaseEnvironment, isSubEnvironment } from "../lib/model_util";
|
||||||
import { resolvedModelName } from "../lib/resolvedModelName";
|
import { resolvedModelName } from "../lib/resolvedModelName";
|
||||||
@@ -116,7 +117,7 @@ function EnvironmentEditDialogSidebar({
|
|||||||
const treeRef = useRef<TreeHandle>(null);
|
const treeRef = useRef<TreeHandle>(null);
|
||||||
const { baseEnvironment, baseEnvironments } = useEnvironmentsBreakdown();
|
const { baseEnvironment, baseEnvironments } = useEnvironmentsBreakdown();
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: none
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- none
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
if (selectedEnvironmentId == null) return;
|
if (selectedEnvironmentId == null) return;
|
||||||
treeRef.current?.selectItem(selectedEnvironmentId);
|
treeRef.current?.selectItem(selectedEnvironmentId);
|
||||||
@@ -173,7 +174,9 @@ function EnvironmentEditDialogSidebar({
|
|||||||
"sidebar.selected.delete",
|
"sidebar.selected.delete",
|
||||||
useCallback(() => {
|
useCallback(() => {
|
||||||
const items = getSelectedTreeModels();
|
const items = getSelectedTreeModels();
|
||||||
if (items) handleDeleteSelected(items);
|
if (items) {
|
||||||
|
fireAndForget(handleDeleteSelected(items));
|
||||||
|
}
|
||||||
}, [getSelectedTreeModels, handleDeleteSelected]),
|
}, [getSelectedTreeModels, handleDeleteSelected]),
|
||||||
{ enable: treeHasFocus, priority: 100 },
|
{ enable: treeHasFocus, priority: 100 },
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ function ExportDataDialogContent({
|
|||||||
|
|
||||||
const handleToggleAll = () => {
|
const handleToggleAll = () => {
|
||||||
setSelectedWorkspaces(
|
setSelectedWorkspaces(
|
||||||
// biome-ignore lint/performance/noAccumulatingSpread: none
|
// oxlint-disable-next-line no-accumulating-spread
|
||||||
allSelected ? {} : workspaces.reduce((acc, w) => ({ ...acc, [w.id]: true }), {}),
|
allSelected ? {} : workspaces.reduce((acc, w) => ({ ...acc, [w.id]: true }), {}),
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export function FolderLayout({ folder, style }: Props) {
|
|||||||
}, [folder.id, folders, requests]);
|
}, [folder.id, folders, requests]);
|
||||||
|
|
||||||
const handleSendAll = useCallback(() => {
|
const handleSendAll = useCallback(() => {
|
||||||
sendAllAction?.call(folder);
|
void sendAllAction?.call(folder);
|
||||||
}, [sendAllAction, folder]);
|
}, [sendAllAction, folder]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ function GrpcProtoSelectionDialogWithRequest({ request }: Props & { request: Grp
|
|||||||
const services = grpc.reflect.data;
|
const services = grpc.reflect.data;
|
||||||
const serverReflection = protoFiles.length === 0 && services != null;
|
const serverReflection = protoFiles.length === 0 && services != null;
|
||||||
let reflectError = grpc.reflect.error ?? null;
|
let reflectError = grpc.reflect.error ?? null;
|
||||||
const reflectionUnimplemented = `${reflectError}`.match(/unimplemented/i);
|
const reflectionUnimplemented = String(reflectError).match(/unimplemented/i);
|
||||||
|
|
||||||
if (reflectionUnimplemented) {
|
if (reflectionUnimplemented) {
|
||||||
reflectError = null;
|
reflectError = null;
|
||||||
@@ -100,7 +100,7 @@ function GrpcProtoSelectionDialogWithRequest({ request }: Props & { request: Grp
|
|||||||
Found services{" "}
|
Found services{" "}
|
||||||
{services?.slice(0, 5).map((s, i) => {
|
{services?.slice(0, 5).map((s, i) => {
|
||||||
return (
|
return (
|
||||||
<span key={s.name + s.methods.join(",")}>
|
<span key={s.name + s.methods.map((m) => m.name).join(",")}>
|
||||||
<InlineCode>{s.name}</InlineCode>
|
<InlineCode>{s.name}</InlineCode>
|
||||||
{i === services.length - 1 ? "" : i === services.length - 2 ? " and " : ", "}
|
{i === services.length - 1 ? "" : i === services.length - 2 ? " and " : ", "}
|
||||||
</span>
|
</span>
|
||||||
@@ -116,7 +116,7 @@ function GrpcProtoSelectionDialogWithRequest({ request }: Props & { request: Grp
|
|||||||
Server reflection found services
|
Server reflection found services
|
||||||
{services?.map((s, i) => {
|
{services?.map((s, i) => {
|
||||||
return (
|
return (
|
||||||
<span key={s.name + s.methods.join(",")}>
|
<span key={s.name + s.methods.map((m) => m.name).join(",")}>
|
||||||
<InlineCode>{s.name}</InlineCode>
|
<InlineCode>{s.name}</InlineCode>
|
||||||
{i === services.length - 1 ? "" : i === services.length - 2 ? " and " : ", "}
|
{i === services.length - 1 ? "" : i === services.length - 2 ? " and " : ", "}
|
||||||
</span>
|
</span>
|
||||||
@@ -140,8 +140,8 @@ function GrpcProtoSelectionDialogWithRequest({ request }: Props & { request: Grp
|
|||||||
<tbody className="divide-y divide-surface-highlight">
|
<tbody className="divide-y divide-surface-highlight">
|
||||||
{protoFiles.map((f, i) => {
|
{protoFiles.map((f, i) => {
|
||||||
const parts = f.split("/");
|
const parts = f.split("/");
|
||||||
|
// oxlint-disable-next-line no-array-index-key -- none
|
||||||
return (
|
return (
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
|
||||||
<tr key={f + i} className="group">
|
<tr key={f + i} className="group">
|
||||||
<td>
|
<td>
|
||||||
<Icon icon={f.endsWith(".proto") ? "file_code" : "folder_code"} />
|
<Icon icon={f.endsWith(".proto") ? "file_code" : "folder_code"} />
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export function GrpcResponsePane({ style, methodType, activeRequest }: Props) {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Set the active message to the first message received if unary
|
// Set the active message to the first message received if unary
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: none
|
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (events.length === 0 || activeEvent != null || methodType !== "unary") {
|
if (events.length === 0 || activeEvent != null || methodType !== "unary") {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ export function ImportCurlButton() {
|
|||||||
const importCurl = useImportCurl();
|
const importCurl = useImportCurl();
|
||||||
const [isLoading, setIsLoading] = useState(false);
|
const [isLoading, setIsLoading] = useState(false);
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: none
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- none
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
readText().then(setClipboardText);
|
void readText().then(setClipboardText);
|
||||||
}, [focused]);
|
}, [focused]);
|
||||||
|
|
||||||
if (!clipboardText?.trim().startsWith("curl ")) {
|
if (!clipboardText?.trim().startsWith("curl ")) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { patchModel } from "@yaakapp-internal/models";
|
|||||||
import { Banner, Icon } from "@yaakapp-internal/ui";
|
import { Banner, Icon } from "@yaakapp-internal/ui";
|
||||||
import { useCallback, useMemo } from "react";
|
import { useCallback, useMemo } from "react";
|
||||||
import { useKeyValue } from "../hooks/useKeyValue";
|
import { useKeyValue } from "../hooks/useKeyValue";
|
||||||
|
import { fireAndForget } from "../lib/fireAndForget";
|
||||||
import { textLikelyContainsJsonComments } from "../lib/jsonComments";
|
import { textLikelyContainsJsonComments } from "../lib/jsonComments";
|
||||||
import type { DropdownItem } from "./core/Dropdown";
|
import type { DropdownItem } from "./core/Dropdown";
|
||||||
import { Dropdown } from "./core/Dropdown";
|
import { Dropdown } from "./core/Dropdown";
|
||||||
@@ -57,12 +58,12 @@ export function JsonBodyEditor({ forceUpdateKey, heightMode, request }: Props) {
|
|||||||
} else {
|
} else {
|
||||||
delete newBody.sendJsonComments;
|
delete newBody.sendJsonComments;
|
||||||
}
|
}
|
||||||
patchModel(request, { body: newBody });
|
fireAndForget(patchModel(request, { body: newBody }));
|
||||||
}, [request, autoFix]);
|
}, [request, autoFix]);
|
||||||
|
|
||||||
const handleDropdownOpen = useCallback(() => {
|
const handleDropdownOpen = useCallback(() => {
|
||||||
if (!bannerDismissed) {
|
if (!bannerDismissed) {
|
||||||
setBannerDismissed(true);
|
fireAndForget(setBannerDismissed(true));
|
||||||
}
|
}
|
||||||
}, [bannerDismissed, setBannerDismissed]);
|
}, [bannerDismissed, setBannerDismissed]);
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { DetailsBanner } from "./core/DetailsBanner";
|
|||||||
export default function RouteError({ error }: { error: unknown }) {
|
export default function RouteError({ error }: { error: unknown }) {
|
||||||
console.log("Error", error);
|
console.log("Error", error);
|
||||||
const stringified = JSON.stringify(error);
|
const stringified = JSON.stringify(error);
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
const message = (error as any).message ?? stringified;
|
const message = (error as any).message ?? stringified;
|
||||||
const stack =
|
const stack =
|
||||||
typeof error === "object" && error != null && "stack" in error ? String(error.stack) : null;
|
typeof error === "object" && error != null && "stack" in error ? String(error.stack) : null;
|
||||||
|
|||||||
@@ -236,7 +236,7 @@ export function SettingsCertificates() {
|
|||||||
<VStack space={3}>
|
<VStack space={3}>
|
||||||
{certificates.map((cert, index) => (
|
{certificates.map((cert, index) => (
|
||||||
<CertificateEditor
|
<CertificateEditor
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: Index is fine here
|
// oxlint-disable-next-line react/no-array-index-key
|
||||||
key={index}
|
key={index}
|
||||||
certificate={cert}
|
certificate={cert}
|
||||||
index={index}
|
index={index}
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ function Sidebar({ className }: { className?: string }) {
|
|||||||
"sidebar.selected.delete",
|
"sidebar.selected.delete",
|
||||||
useCallback(() => {
|
useCallback(() => {
|
||||||
const items = getSelectedTreeModels();
|
const items = getSelectedTreeModels();
|
||||||
if (items) handleDeleteSelected(items);
|
if (items) void handleDeleteSelected(items);
|
||||||
}, [getSelectedTreeModels, handleDeleteSelected]),
|
}, [getSelectedTreeModels, handleDeleteSelected]),
|
||||||
{ enable: treeHasFocus },
|
{ enable: treeHasFocus },
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ function InitializedTemplateFunctionDialog({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const tooLarge = rendered.data ? rendered.data.length > 10000 : false;
|
const tooLarge = rendered.data ? rendered.data.length > 10000 : false;
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: Only update this on rendered data change to keep secrets hidden on input change
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- Only update this on rendered data change to keep secrets hidden on input change
|
||||||
const dataContainsSecrets = useMemo(() => {
|
const dataContainsSecrets = useMemo(() => {
|
||||||
for (const [name, value] of Object.entries(argValues)) {
|
for (const [name, value] of Object.entries(argValues)) {
|
||||||
const arg = templateFunction.data?.args.find((a) => "name" in a && a.name === name);
|
const arg = templateFunction.data?.args.find((a) => "name" in a && a.name === name);
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export function WorkspaceEncryptionSetting({ size, expanded, onDone, onEnabledEn
|
|||||||
await enableEncryption(workspaceMeta.workspaceId);
|
await enableEncryption(workspaceMeta.workspaceId);
|
||||||
setJustEnabledEncryption(true);
|
setJustEnabledEncryption(true);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError(`Failed to enable encryption: ${err}`);
|
setError(`Failed to enable encryption: ${String(err)}`);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -284,7 +284,7 @@ function HighlightedKey({ keyText, show }: { keyText: string; show: boolean }) {
|
|||||||
keyText.split("").map((c, i) => {
|
keyText.split("").map((c, i) => {
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: it's fine
|
// oxlint-disable-next-line no-array-index-key -- it's fine
|
||||||
key={i}
|
key={i}
|
||||||
className={classNames(
|
className={classNames(
|
||||||
c.match(/[0-9]/) && "text-info",
|
c.match(/[0-9]/) && "text-info",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export function DetailsBanner({
|
|||||||
storageKey,
|
storageKey,
|
||||||
...extraProps
|
...extraProps
|
||||||
}: Props) {
|
}: Props) {
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: We only want to recompute the atom when storageKey changes
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- We only want to recompute the atom when storageKey changes
|
||||||
const openAtom = useMemo(
|
const openAtom = useMemo(
|
||||||
() =>
|
() =>
|
||||||
storageKey
|
storageKey
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import { useStateWithDeps } from "../../hooks/useStateWithDeps";
|
|||||||
import { generateId } from "../../lib/generateId";
|
import { generateId } from "../../lib/generateId";
|
||||||
import { getNodeText } from "../../lib/getNodeText";
|
import { getNodeText } from "../../lib/getNodeText";
|
||||||
import { jotaiStore } from "../../lib/jotai";
|
import { jotaiStore } from "../../lib/jotai";
|
||||||
|
import { fireAndForget } from "../../lib/fireAndForget";
|
||||||
import { ErrorBoundary } from "../ErrorBoundary";
|
import { ErrorBoundary } from "../ErrorBoundary";
|
||||||
import { Button } from "./Button";
|
import { Button } from "./Button";
|
||||||
import { Hotkey } from "./Hotkey";
|
import { Hotkey } from "./Hotkey";
|
||||||
@@ -611,7 +612,7 @@ const Menu = forwardRef<Omit<DropdownRef, "open" | "isOpen" | "toggle" | "items"
|
|||||||
setActiveSubmenu({ item, parent, viaKeyboard: true });
|
setActiveSubmenu({ item, parent, viaKeyboard: true });
|
||||||
}
|
}
|
||||||
} else if (item.onSelect) {
|
} else if (item.onSelect) {
|
||||||
handleSelect(item);
|
fireAndForget(handleSelect(item));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{},
|
{},
|
||||||
@@ -749,7 +750,7 @@ const Menu = forwardRef<Omit<DropdownRef, "open" | "isOpen" | "toggle" | "items"
|
|||||||
if (item.type === "separator") {
|
if (item.type === "separator") {
|
||||||
return (
|
return (
|
||||||
<Separator
|
<Separator
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: Nothing else available
|
// oxlint-disable-next-line no-array-index-key -- Nothing else available
|
||||||
key={i}
|
key={i}
|
||||||
className={classNames("my-1.5", item.label ? "ml-2" : null)}
|
className={classNames("my-1.5", item.label ? "ml-2" : null)}
|
||||||
>
|
>
|
||||||
@@ -759,8 +760,7 @@ const Menu = forwardRef<Omit<DropdownRef, "open" | "isOpen" | "toggle" | "items"
|
|||||||
}
|
}
|
||||||
if (item.type === "content") {
|
if (item.type === "content") {
|
||||||
return (
|
return (
|
||||||
// biome-ignore lint/a11y/noStaticElementInteractions: Needs to be clickable but want to support nested buttons
|
// oxlint-disable-next-line no-array-index-key -- index is fine
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: index is fine
|
|
||||||
<div key={i} className={classNames("my-1 mx-2 max-w-xs")} onClick={onClose}>
|
<div key={i} className={classNames("my-1 mx-2 max-w-xs")} onClick={onClose}>
|
||||||
{item.label}
|
{item.label}
|
||||||
</div>
|
</div>
|
||||||
@@ -774,7 +774,7 @@ const Menu = forwardRef<Omit<DropdownRef, "open" | "isOpen" | "toggle" | "items"
|
|||||||
onFocus={handleFocus}
|
onFocus={handleFocus}
|
||||||
onSelect={handleSelect}
|
onSelect={handleSelect}
|
||||||
onHover={handleItemHover}
|
onHover={handleItemHover}
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: It's fine
|
// oxlint-disable-next-line no-array-index-key -- It's fine
|
||||||
key={i}
|
key={i}
|
||||||
item={item}
|
item={item}
|
||||||
/>
|
/>
|
||||||
@@ -782,7 +782,6 @@ const Menu = forwardRef<Omit<DropdownRef, "open" | "isOpen" | "toggle" | "items"
|
|||||||
})}
|
})}
|
||||||
</VStack>
|
</VStack>
|
||||||
{activeSubmenu && (
|
{activeSubmenu && (
|
||||||
// biome-ignore lint/a11y/noStaticElementInteractions: Container div that cancels hover timeout
|
|
||||||
<div
|
<div
|
||||||
ref={submenuRef}
|
ref={submenuRef}
|
||||||
onMouseEnter={() => {
|
onMouseEnter={() => {
|
||||||
|
|||||||
@@ -327,7 +327,7 @@ function EditorInner({
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Update the language extension when the language changes
|
// Update the language extension when the language changes
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: intentionally limited deps
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- intentionally limited deps
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (cm.current === null) return;
|
if (cm.current === null) return;
|
||||||
const { view, languageCompartment } = cm.current;
|
const { view, languageCompartment } = cm.current;
|
||||||
@@ -361,7 +361,7 @@ function EditorInner({
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// Initialize the editor when ref mounts
|
// Initialize the editor when ref mounts
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: only reinitialize when necessary
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- only reinitialize when necessary
|
||||||
const initEditorRef = useCallback(
|
const initEditorRef = useCallback(
|
||||||
function initEditorRef(container: HTMLDivElement | null) {
|
function initEditorRef(container: HTMLDivElement | null) {
|
||||||
if (container === null) {
|
if (container === null) {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export function HotkeyRaw({ labelParts, className, variant }: HotkeyRawProps) {
|
|||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{labelParts.map((char, index) => (
|
{labelParts.map((char, index) => (
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line react/no-array-index-key
|
||||||
<div key={index} className="min-w-[1em] text-center">
|
<div key={index} className="min-w-[1em] text-center">
|
||||||
{char}
|
{char}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ function BaseInput({
|
|||||||
isFocused: () => editorRef.current?.hasFocus ?? false,
|
isFocused: () => editorRef.current?.hasFocus ?? false,
|
||||||
value: () => editorRef.current?.state.doc.toString() ?? "",
|
value: () => editorRef.current?.state.doc.toString() ?? "",
|
||||||
dispatch: (...args) => {
|
dispatch: (...args) => {
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any
|
||||||
editorRef.current?.dispatch(...(args as any));
|
editorRef.current?.dispatch(...(args as any));
|
||||||
},
|
},
|
||||||
selectAll() {
|
selectAll() {
|
||||||
@@ -327,7 +327,11 @@ function BaseInput({
|
|||||||
</HStack>
|
</HStack>
|
||||||
{type === "password" && !disableObscureToggle && (
|
{type === "password" && !disableObscureToggle && (
|
||||||
<IconButton
|
<IconButton
|
||||||
title={obscured ? `Show ${label}` : `Obscure ${label}`}
|
title={
|
||||||
|
obscured
|
||||||
|
? `Show ${typeof label === "string" ? label : "field"}`
|
||||||
|
: `Obscure ${typeof label === "string" ? label : "field"}`
|
||||||
|
}
|
||||||
size="xs"
|
size="xs"
|
||||||
className={classNames("mr-0.5 !h-auto my-0.5", disabled && "opacity-disabled")}
|
className={classNames("mr-0.5 !h-auto my-0.5", disabled && "opacity-disabled")}
|
||||||
color={tint}
|
color={tint}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { Icon } from "@yaakapp-internal/ui";
|
|||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
depth?: number;
|
depth?: number;
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
attrValue: any;
|
attrValue: any;
|
||||||
attrKey?: string | number;
|
attrKey?: string | number;
|
||||||
attrKeyJsonPath?: string;
|
attrKeyJsonPath?: string;
|
||||||
@@ -54,10 +54,10 @@ export const JsonAttributeTree = ({
|
|||||||
if (jsonType === "[object Array]") {
|
if (jsonType === "[object Array]") {
|
||||||
return {
|
return {
|
||||||
children: isExpanded
|
children: isExpanded
|
||||||
? // biome-ignore lint/suspicious/noExplicitAny: none
|
? // oxlint-disable-next-line no-explicit-any -- none
|
||||||
attrValue.flatMap((v: any, i: number) => (
|
attrValue.flatMap((v: any, i: number) => (
|
||||||
<JsonAttributeTree
|
<JsonAttributeTree
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line no-array-index-key -- none
|
||||||
key={i}
|
key={i}
|
||||||
depth={depth + 1}
|
depth={depth + 1}
|
||||||
attrValue={v}
|
attrValue={v}
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ export function PairEditor({
|
|||||||
[handle, pairs, setRef],
|
[handle, pairs, setRef],
|
||||||
);
|
);
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: Only care about forceUpdateKey
|
// oxlint-disable-next-line react-hooks/exhaustive-deps -- Only care about forceUpdateKey
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Remove empty headers on initial render and ensure they all have valid ids (pairs didn't use to have IDs)
|
// Remove empty headers on initial render and ensure they all have valid ids (pairs didn't use to have IDs)
|
||||||
const newPairs: PairWithId[] = [];
|
const newPairs: PairWithId[] = [];
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ export const PlainInput = forwardRef<{ focus: () => void }, PlainInputProps>(fun
|
|||||||
key={forceUpdateKey}
|
key={forceUpdateKey}
|
||||||
type={type === "password" && !obscured ? "text" : type}
|
type={type === "password" && !obscured ? "text" : type}
|
||||||
name={name}
|
name={name}
|
||||||
// biome-ignore lint/a11y/noAutofocus: Who cares
|
// oxlint-disable-next-line jsx-a11y/no-autofocus
|
||||||
autoFocus={autoFocus}
|
autoFocus={autoFocus}
|
||||||
defaultValue={defaultValue ?? undefined}
|
defaultValue={defaultValue ?? undefined}
|
||||||
autoComplete="off"
|
autoComplete="off"
|
||||||
@@ -213,7 +213,11 @@ export const PlainInput = forwardRef<{ focus: () => void }, PlainInputProps>(fun
|
|||||||
</HStack>
|
</HStack>
|
||||||
{type === "password" && !hideObscureToggle && (
|
{type === "password" && !hideObscureToggle && (
|
||||||
<IconButton
|
<IconButton
|
||||||
title={obscured ? `Show ${label}` : `Obscure ${label}`}
|
title={
|
||||||
|
obscured
|
||||||
|
? `Show ${typeof label === "string" ? label : "field"}`
|
||||||
|
: `Obscure ${typeof label === "string" ? label : "field"}`
|
||||||
|
}
|
||||||
size="xs"
|
size="xs"
|
||||||
className="mr-0.5 group/obscure !h-auto my-0.5"
|
className="mr-0.5 group/obscure !h-auto my-0.5"
|
||||||
iconClassName="group-hover/obscure:text"
|
iconClassName="group-hover/obscure:text"
|
||||||
|
|||||||
@@ -62,13 +62,13 @@ export function SegmentedControl<T extends string>({
|
|||||||
if (e.key === "ArrowRight") {
|
if (e.key === "ArrowRight") {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const newIndex = Math.abs((selectedIndex + 1) % options.length);
|
const newIndex = Math.abs((selectedIndex + 1) % options.length);
|
||||||
options[newIndex] && setSelectedValue(options[newIndex].value);
|
if (options[newIndex]) { setSelectedValue(options[newIndex].value); }
|
||||||
const child = containerRef.current?.children[newIndex] as HTMLButtonElement;
|
const child = containerRef.current?.children[newIndex] as HTMLButtonElement;
|
||||||
child.focus();
|
child.focus();
|
||||||
} else if (e.key === "ArrowLeft") {
|
} else if (e.key === "ArrowLeft") {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
const newIndex = Math.abs((selectedIndex - 1) % options.length);
|
const newIndex = Math.abs((selectedIndex - 1) % options.length);
|
||||||
options[newIndex] && setSelectedValue(options[newIndex].value);
|
if (options[newIndex]) { setSelectedValue(options[newIndex].value); }
|
||||||
const child = containerRef.current?.children[newIndex] as HTMLButtonElement;
|
const child = containerRef.current?.children[newIndex] as HTMLButtonElement;
|
||||||
child.focus();
|
child.focus();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import {
|
|||||||
} from "react";
|
} from "react";
|
||||||
import { useKeyValue } from "../../../hooks/useKeyValue";
|
import { useKeyValue } from "../../../hooks/useKeyValue";
|
||||||
import { computeSideForDragMove, DropMarker } from "@yaakapp-internal/ui";
|
import { computeSideForDragMove, DropMarker } from "@yaakapp-internal/ui";
|
||||||
|
import { fireAndForget } from "../../../lib/fireAndForget";
|
||||||
import { ErrorBoundary } from "../../ErrorBoundary";
|
import { ErrorBoundary } from "../../ErrorBoundary";
|
||||||
import type { ButtonProps } from "../Button";
|
import type { ButtonProps } from "../Button";
|
||||||
import { Button } from "../Button";
|
import { Button } from "../Button";
|
||||||
@@ -142,7 +143,7 @@ export const Tabs = forwardRef<TabsRef, Props>(function Tabs(
|
|||||||
forwardedRef,
|
forwardedRef,
|
||||||
() => ({
|
() => ({
|
||||||
setActiveTab: (value: string) => {
|
setActiveTab: (value: string) => {
|
||||||
onChangeValue(value);
|
fireAndForget(onChangeValue(value));
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
[onChangeValue],
|
[onChangeValue],
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ export function Tooltip({ children, className, content, tabIndex, size = "md" }:
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Portal>
|
</Portal>
|
||||||
{/** biome-ignore lint/a11y/useSemanticElements: Needs to be usable in other buttons */}
|
{/* oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- Needs to be usable in other buttons */}
|
||||||
<span
|
<span
|
||||||
ref={triggerRef}
|
ref={triggerRef}
|
||||||
role="button"
|
role="button"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import { useKeyValue } from "../../hooks/useKeyValue";
|
|||||||
import { useRandomKey } from "../../hooks/useRandomKey";
|
import { useRandomKey } from "../../hooks/useRandomKey";
|
||||||
import { sync } from "../../init/sync";
|
import { sync } from "../../init/sync";
|
||||||
import { showConfirm, showConfirmDelete } from "../../lib/confirm";
|
import { showConfirm, showConfirmDelete } from "../../lib/confirm";
|
||||||
|
import { fireAndForget } from "../../lib/fireAndForget";
|
||||||
import { showDialog } from "../../lib/dialog";
|
import { showDialog } from "../../lib/dialog";
|
||||||
import { showPrompt } from "../../lib/prompt";
|
import { showPrompt } from "../../lib/prompt";
|
||||||
import { showErrorToast, showToast } from "../../lib/toast";
|
import { showErrorToast, showToast } from "../../lib/toast";
|
||||||
@@ -244,7 +245,7 @@ function SyncDropdownWithSyncDir({ syncDir }: { syncDir: string }) {
|
|||||||
message: "Changes have been reset",
|
message: "Changes have been reset",
|
||||||
color: "success",
|
color: "success",
|
||||||
});
|
});
|
||||||
sync({ force: true });
|
fireAndForget(sync({ force: true }));
|
||||||
},
|
},
|
||||||
onError(err) {
|
onError(err) {
|
||||||
showErrorToast({
|
showErrorToast({
|
||||||
@@ -291,7 +292,7 @@ function SyncDropdownWithSyncDir({ syncDir }: { syncDir: string }) {
|
|||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
sync({ force: true });
|
fireAndForget(sync({ force: true }));
|
||||||
},
|
},
|
||||||
onError(err) {
|
onError(err) {
|
||||||
showErrorToast({
|
showErrorToast({
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export function HistoryDialog({ log }: Props) {
|
|||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{log.map((l) => (
|
{log.map((l) => (
|
||||||
<TableRow key={l.author + (l.message ?? "n/a") + l.when}>
|
<TableRow key={(l.author.name ?? "") + (l.message ?? "n/a") + l.when}>
|
||||||
<TruncatedWideTableCell>
|
<TruncatedWideTableCell>
|
||||||
{l.message || <em className="text-text-subtle">No message</em>}
|
{l.message || <em className="text-text-subtle">No message</em>}
|
||||||
</TruncatedWideTableCell>
|
</TruncatedWideTableCell>
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ interface Props {
|
|||||||
|
|
||||||
type ExplorerItem =
|
type ExplorerItem =
|
||||||
| { kind: "type"; type: GraphQLType; from: ExplorerItem }
|
| { kind: "type"; type: GraphQLType; from: ExplorerItem }
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
| { kind: "field"; type: GraphQLField<any, any>; from: ExplorerItem }
|
| { kind: "field"; type: GraphQLField<any, any>; from: ExplorerItem }
|
||||||
| { kind: "input_field"; type: GraphQLInputField; from: ExplorerItem }
|
| { kind: "input_field"; type: GraphQLInputField; from: ExplorerItem }
|
||||||
| null;
|
| null;
|
||||||
@@ -144,7 +144,7 @@ export const GraphQLDocsExplorer = memo(function GraphQLDocsExplorer({
|
|||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div
|
<div
|
||||||
key={activeItem.type.toString()} // Reset scroll position to top
|
key={"name" in activeItem.type ? activeItem.type.name : String(activeItem.type)} // Reset scroll position to top
|
||||||
className="overflow-y-auto h-full w-full p-3 grid grid-cols-[minmax(0,1fr)]"
|
className="overflow-y-auto h-full w-full p-3 grid grid-cols-[minmax(0,1fr)]"
|
||||||
>
|
>
|
||||||
<GqlTypeInfo item={activeItem} setItem={setActiveItem} schema={schema} />
|
<GqlTypeInfo item={activeItem} setItem={setActiveItem} schema={schema} />
|
||||||
@@ -180,14 +180,14 @@ function GraphQLExplorerHeader({
|
|||||||
<Icon icon="book_open_text" />
|
<Icon icon="book_open_text" />
|
||||||
{crumbs.map((crumb, i) => {
|
{crumbs.map((crumb, i) => {
|
||||||
return (
|
return (
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line no-array-index-key -- none
|
||||||
<Fragment key={i}>
|
<Fragment key={i}>
|
||||||
{i > 0 && <Icon icon="chevron_right" className="text-text-subtlest" />}
|
{i > 0 && <Icon icon="chevron_right" className="text-text-subtlest" />}
|
||||||
{crumb === item || item == null ? (
|
{crumb === item || item == null ? (
|
||||||
<GqlTypeLabel noTruncate item={item} />
|
<GqlTypeLabel noTruncate item={item} />
|
||||||
) : crumb === item ? null : (
|
) : crumb === item ? null : (
|
||||||
<GqlTypeLink
|
<GqlTypeLink
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line no-array-index-key -- none
|
||||||
key={i}
|
key={i}
|
||||||
noTruncate
|
noTruncate
|
||||||
item={crumb}
|
item={crumb}
|
||||||
@@ -200,7 +200,7 @@ function GraphQLExplorerHeader({
|
|||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<GqlSchemaSearch
|
<GqlSchemaSearch
|
||||||
key={item?.type.toString()} // Force reset when changing items
|
key={item != null && "name" in item.type ? item.type.name : "search"} // Force reset when changing items
|
||||||
maxHeight={containerHeight}
|
maxHeight={containerHeight}
|
||||||
currentItem={item}
|
currentItem={item}
|
||||||
schema={schema}
|
schema={schema}
|
||||||
@@ -268,7 +268,7 @@ function GqlTypeInfo({
|
|||||||
{Object.entries(fields).map(([fieldName, field]) => {
|
{Object.entries(fields).map(([fieldName, field]) => {
|
||||||
const fieldItem: ExplorerItem = toExplorerItem(field, item);
|
const fieldItem: ExplorerItem = toExplorerItem(field, item);
|
||||||
return (
|
return (
|
||||||
<div key={`${field.type}::${field.name}`} className="my-4">
|
<div key={`${String(field.type)}::${field.name}`} className="my-4">
|
||||||
<GqlTypeRow
|
<GqlTypeRow
|
||||||
item={fieldItem}
|
item={fieldItem}
|
||||||
setItem={setItem}
|
setItem={setItem}
|
||||||
@@ -361,7 +361,7 @@ function GqlTypeInfo({
|
|||||||
<Subheading>Arguments</Subheading>
|
<Subheading>Arguments</Subheading>
|
||||||
{item.type.args.map((a) => {
|
{item.type.args.map((a) => {
|
||||||
return (
|
return (
|
||||||
<div key={`${a.type}::${a.name}`} className="my-4">
|
<div key={`${String(a.type)}::${a.name}`} className="my-4">
|
||||||
<GqlTypeRow
|
<GqlTypeRow
|
||||||
name={{ value: a.name, color: "info" }}
|
name={{ value: a.name, color: "info" }}
|
||||||
item={{ kind: "type", type: a.type, from: item }}
|
item={{ kind: "type", type: a.type, from: item }}
|
||||||
@@ -391,7 +391,7 @@ function GqlTypeInfo({
|
|||||||
from: item,
|
from: item,
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div key={`${field.type}::${field.name}`} className="my-4">
|
<div key={`${String(field.type)}::${field.name}`} className="my-4">
|
||||||
<GqlTypeRow
|
<GqlTypeRow
|
||||||
item={fieldItem}
|
item={fieldItem}
|
||||||
setItem={setItem}
|
setItem={setItem}
|
||||||
@@ -429,7 +429,7 @@ function GqlTypeInfo({
|
|||||||
if (field == null) return null;
|
if (field == null) return null;
|
||||||
const fieldItem: ExplorerItem = { kind: "field", type: field, from: item };
|
const fieldItem: ExplorerItem = { kind: "field", type: field, from: item };
|
||||||
return (
|
return (
|
||||||
<div key={`${field.type}::${field.name}`} className="my-4">
|
<div key={`${String(field.type)}::${field.name}`} className="my-4">
|
||||||
<GqlTypeRow
|
<GqlTypeRow
|
||||||
item={fieldItem}
|
item={fieldItem}
|
||||||
setItem={setItem}
|
setItem={setItem}
|
||||||
@@ -510,7 +510,7 @@ function GqlTypeRow({
|
|||||||
<span className="text-text-subtle">(</span>
|
<span className="text-text-subtle">(</span>
|
||||||
{item.type.args.map((arg) => (
|
{item.type.args.map((arg) => (
|
||||||
<div
|
<div
|
||||||
key={`${arg.type}::${arg.name}`}
|
key={`${String(arg.type)}::${arg.name}`}
|
||||||
className={classNames(item.type.args.length === 1 && "inline-flex")}
|
className={classNames(item.type.args.length === 1 && "inline-flex")}
|
||||||
>
|
>
|
||||||
{item.type.args.length > 1 && <> </>}
|
{item.type.args.length > 1 && <> </>}
|
||||||
@@ -672,7 +672,7 @@ function Subheading({ children, count }: { children: ReactNode; count?: number }
|
|||||||
|
|
||||||
interface SearchResult {
|
interface SearchResult {
|
||||||
name: string;
|
name: string;
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
type: GraphQLNamedType | GraphQLField<any, any> | GraphQLInputField;
|
type: GraphQLNamedType | GraphQLField<any, any> | GraphQLInputField;
|
||||||
score: number;
|
score: number;
|
||||||
from: GraphQLNamedType | null;
|
from: GraphQLNamedType | null;
|
||||||
@@ -796,7 +796,11 @@ function GqlSchemaSearch({
|
|||||||
label="search"
|
label="search"
|
||||||
hideLabel
|
hideLabel
|
||||||
defaultValue={value}
|
defaultValue={value}
|
||||||
placeholder={focused ? `Search ${currentItem?.type.toString() ?? "Schema"}` : "Search"}
|
placeholder={
|
||||||
|
focused
|
||||||
|
? `Search ${currentItem != null && "name" in currentItem.type ? currentItem.type.name : "Schema"}`
|
||||||
|
: "Search"
|
||||||
|
}
|
||||||
leftSlot={
|
leftSlot={
|
||||||
<div className="w-10 flex justify-center items-center">
|
<div className="w-10 flex justify-center items-center">
|
||||||
<Icon size="sm" icon="search" color="secondary" />
|
<Icon size="sm" icon="search" color="secondary" />
|
||||||
@@ -895,10 +899,10 @@ function DocMarkdown({ children, className }: { children: string | null; classNa
|
|||||||
|
|
||||||
function walkTypeGraph(
|
function walkTypeGraph(
|
||||||
schema: GraphQLSchema,
|
schema: GraphQLSchema,
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
start: GraphQLType | GraphQLField<any, any> | GraphQLInputField | null,
|
start: GraphQLType | GraphQLField<any, any> | GraphQLInputField | null,
|
||||||
cb: (
|
cb: (
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
type: GraphQLNamedType | GraphQLField<any, any> | GraphQLInputField,
|
type: GraphQLNamedType | GraphQLField<any, any> | GraphQLInputField,
|
||||||
from: GraphQLNamedType | null,
|
from: GraphQLNamedType | null,
|
||||||
path: string[],
|
path: string[],
|
||||||
@@ -906,7 +910,7 @@ function walkTypeGraph(
|
|||||||
) {
|
) {
|
||||||
const visited = new Set<string>();
|
const visited = new Set<string>();
|
||||||
const queue: Array<{
|
const queue: Array<{
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
current: GraphQLType | GraphQLField<any, any> | GraphQLInputField;
|
current: GraphQLType | GraphQLField<any, any> | GraphQLInputField;
|
||||||
from: GraphQLNamedType | null;
|
from: GraphQLNamedType | null;
|
||||||
path: string[];
|
path: string[];
|
||||||
@@ -926,7 +930,7 @@ function walkTypeGraph(
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (queue.length > 0) {
|
while (queue.length > 0) {
|
||||||
// biome-ignore lint/style/noNonNullAssertion: none
|
// oxlint-disable-next-line no-non-null-assertion -- none
|
||||||
const { current, from, path } = queue.shift()!;
|
const { current, from, path } = queue.shift()!;
|
||||||
if (!isNamedType(current)) continue;
|
if (!isNamedType(current)) continue;
|
||||||
|
|
||||||
@@ -979,7 +983,7 @@ function walkTypeGraph(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any -- none
|
||||||
function toExplorerItem(t: any, from: ExplorerItem | null): ExplorerItem | null {
|
function toExplorerItem(t: any, from: ExplorerItem | null): ExplorerItem | null {
|
||||||
if (t == null) return null;
|
if (t == null) return null;
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export function CsvViewerInner({ text, className }: { text: string | null; class
|
|||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{parsed.data.map((row, i) => (
|
{parsed.data.map((row, i) => (
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: none
|
// oxlint-disable-next-line react/no-array-index-key
|
||||||
<TableRow key={i}>
|
<TableRow key={i}>
|
||||||
{parsed.meta.fields?.map((key) => (
|
{parsed.meta.fields?.map((key) => (
|
||||||
<TableCell key={key}>{row[key] ?? ""}</TableCell>
|
<TableCell key={key}>{row[key] ?? ""}</TableCell>
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ export function MultipartViewer({ data, boundary, idPrefix = "multipart" }: Prop
|
|||||||
>
|
>
|
||||||
{parts.map((part, i) => (
|
{parts.map((part, i) => (
|
||||||
<TabContent
|
<TabContent
|
||||||
// biome-ignore lint/suspicious/noArrayIndexKey: Nothing else to key on
|
// oxlint-disable-next-line react/no-array-index-key -- Nothing else to key on
|
||||||
key={idPrefix + part.name + i}
|
key={idPrefix + part.name + i}
|
||||||
value={tabValue(part, i)}
|
value={tabValue(part, i)}
|
||||||
className="pl-3 !pt-0"
|
className="pl-3 !pt-0"
|
||||||
|
|||||||
@@ -6,13 +6,14 @@ import type { PDFDocumentProxy } from "pdfjs-dist";
|
|||||||
import { useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { Document, Page } from "react-pdf";
|
import { Document, Page } from "react-pdf";
|
||||||
import { useContainerSize } from "@yaakapp-internal/ui";
|
import { useContainerSize } from "@yaakapp-internal/ui";
|
||||||
|
import { fireAndForget } from "../../lib/fireAndForget";
|
||||||
|
|
||||||
import("react-pdf").then(({ pdfjs }) => {
|
fireAndForget(import("react-pdf").then(({ pdfjs }) => {
|
||||||
pdfjs.GlobalWorkerOptions.workerSrc = new URL(
|
pdfjs.GlobalWorkerOptions.workerSrc = new URL(
|
||||||
"pdfjs-dist/build/pdf.worker.min.mjs",
|
"pdfjs-dist/build/pdf.worker.min.mjs",
|
||||||
import.meta.url,
|
import.meta.url,
|
||||||
).toString();
|
).toString();
|
||||||
});
|
}));
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
bodyPath?: string;
|
bodyPath?: string;
|
||||||
@@ -56,7 +57,7 @@ export function PdfViewer({ bodyPath, data }: Props) {
|
|||||||
externalLinkTarget="_blank"
|
externalLinkTarget="_blank"
|
||||||
externalLinkRel="noopener noreferrer"
|
externalLinkRel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
{Array.from(new Array(numPages), (_, index) => (
|
{Array.from({ length: numPages ?? 0 }, (_, index) => (
|
||||||
<Page
|
<Page
|
||||||
className="mb-6 select-all"
|
className="mb-6 select-all"
|
||||||
renderTextLayer
|
renderTextLayer
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export function useCreateDropdownItems({
|
|||||||
}: {
|
}: {
|
||||||
hideFolder?: boolean;
|
hideFolder?: boolean;
|
||||||
hideIcons?: boolean;
|
hideIcons?: boolean;
|
||||||
folderId?: string | null | "active-folder";
|
folderId?: string | null;
|
||||||
} = {}): DropdownItem[] {
|
} = {}): DropdownItem[] {
|
||||||
const workspaceId = useAtomValue(activeWorkspaceIdAtom);
|
const workspaceId = useAtomValue(activeWorkspaceIdAtom);
|
||||||
const activeRequest = useAtomValue(activeRequestAtom);
|
const activeRequest = useAtomValue(activeRequestAtom);
|
||||||
@@ -40,7 +40,7 @@ export function getCreateDropdownItems({
|
|||||||
}: {
|
}: {
|
||||||
hideFolder?: boolean;
|
hideFolder?: boolean;
|
||||||
hideIcons?: boolean;
|
hideIcons?: boolean;
|
||||||
folderId?: string | null | "active-folder";
|
folderId?: string | null;
|
||||||
workspaceId: string | null;
|
workspaceId: string | null;
|
||||||
activeRequest: HttpRequest | GrpcRequest | WebsocketRequest | null;
|
activeRequest: HttpRequest | GrpcRequest | WebsocketRequest | null;
|
||||||
onCreate?: (
|
onCreate?: (
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ export function useIntrospectGraphQL(
|
|||||||
}
|
}
|
||||||
}, [activeEnvironment?.id, baseRequest, upsertIntrospection]);
|
}, [activeEnvironment?.id, baseRequest, upsertIntrospection]);
|
||||||
|
|
||||||
// biome-ignore lint/correctness/useExhaustiveDependencies: none
|
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// Skip introspection if automatic is disabled and we already have one
|
// Skip introspection if automatic is disabled and we already have one
|
||||||
if (options.disabled) {
|
if (options.disabled) {
|
||||||
@@ -141,14 +141,14 @@ function tryParseIntrospectionToSchema(
|
|||||||
let parsedResponse: IntrospectionQuery;
|
let parsedResponse: IntrospectionQuery;
|
||||||
try {
|
try {
|
||||||
parsedResponse = JSON.parse(content).data;
|
parsedResponse = JSON.parse(content).data;
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
return { error: String("message" in e ? e.message : e) };
|
return { error: String("message" in e ? e.message : e) };
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return { schema: buildClientSchema(parsedResponse, {}) };
|
return { schema: buildClientSchema(parsedResponse, {}) };
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: none
|
// oxlint-disable-next-line no-explicit-any
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
return { error: String("message" in e ? e.message : e) };
|
return { error: String("message" in e ? e.message : e) };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export function initGlobalListeners() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Show errors for any plugins that failed to load during startup
|
// Show errors for any plugins that failed to load during startup
|
||||||
invokeCmd<[string, string][]>("cmd_plugin_init_errors").then((errors) => {
|
void invokeCmd<[string, string][]>("cmd_plugin_init_errors").then((errors) => {
|
||||||
for (const [dir, err] of errors) {
|
for (const [dir, err] of errors) {
|
||||||
const name = dir.split(/[/\\]/).pop() ?? dir;
|
const name = dir.split(/[/\\]/).pop() ?? dir;
|
||||||
showToast({
|
showToast({
|
||||||
@@ -93,7 +93,7 @@ export function initGlobalListeners() {
|
|||||||
done,
|
done,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
emit(event.id, result);
|
void emit(event.id, result);
|
||||||
};
|
};
|
||||||
|
|
||||||
const values = await showPromptForm({
|
const values = await showPromptForm({
|
||||||
@@ -122,7 +122,7 @@ export function initGlobalListeners() {
|
|||||||
// Listen for update events
|
// Listen for update events
|
||||||
listenToTauriEvent<UpdateInfo>("update_available", async ({ payload }) => {
|
listenToTauriEvent<UpdateInfo>("update_available", async ({ payload }) => {
|
||||||
console.log("Got update available", payload);
|
console.log("Got update available", payload);
|
||||||
showUpdateAvailableToast(payload);
|
void showUpdateAvailableToast(payload);
|
||||||
});
|
});
|
||||||
|
|
||||||
listenToTauriEvent<YaakNotification>("notification", ({ payload }) => {
|
listenToTauriEvent<YaakNotification>("notification", ({ payload }) => {
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
"eventemitter3": "^5.0.1",
|
"eventemitter3": "^5.0.1",
|
||||||
"focus-trap-react": "^11.0.4",
|
"focus-trap-react": "^11.0.4",
|
||||||
"fuzzbunny": "^1.0.1",
|
"fuzzbunny": "^1.0.1",
|
||||||
|
"graphql": "^16.13.1",
|
||||||
"hexy": "^0.3.5",
|
"hexy": "^0.3.5",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"jotai": "^2.18.0",
|
"jotai": "^2.18.0",
|
||||||
|
|||||||
+107
-104
@@ -8,131 +8,133 @@
|
|||||||
// You should NOT make any changes in this file as it will be overwritten.
|
// You should NOT make any changes in this file as it will be overwritten.
|
||||||
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
||||||
|
|
||||||
import { Route as rootRouteImport } from "./routes/__root";
|
import { Route as rootRouteImport } from './routes/__root'
|
||||||
import { Route as IndexRouteImport } from "./routes/index";
|
import { Route as IndexRouteImport } from './routes/index'
|
||||||
import { Route as WorkspacesIndexRouteImport } from "./routes/workspaces/index";
|
import { Route as WorkspacesIndexRouteImport } from './routes/workspaces/index'
|
||||||
import { Route as WorkspacesWorkspaceIdIndexRouteImport } from "./routes/workspaces/$workspaceId/index";
|
import { Route as WorkspacesWorkspaceIdIndexRouteImport } from './routes/workspaces/$workspaceId/index'
|
||||||
import { Route as WorkspacesWorkspaceIdSettingsRouteImport } from "./routes/workspaces/$workspaceId/settings";
|
import { Route as WorkspacesWorkspaceIdSettingsRouteImport } from './routes/workspaces/$workspaceId/settings'
|
||||||
import { Route as WorkspacesWorkspaceIdRequestsRequestIdRouteImport } from "./routes/workspaces/$workspaceId/requests/$requestId";
|
import { Route as WorkspacesWorkspaceIdRequestsRequestIdRouteImport } from './routes/workspaces/$workspaceId/requests/$requestId'
|
||||||
|
|
||||||
const IndexRoute = IndexRouteImport.update({
|
const IndexRoute = IndexRouteImport.update({
|
||||||
id: "/",
|
id: '/',
|
||||||
path: "/",
|
path: '/',
|
||||||
getParentRoute: () => rootRouteImport,
|
getParentRoute: () => rootRouteImport,
|
||||||
} as any);
|
} as any)
|
||||||
const WorkspacesIndexRoute = WorkspacesIndexRouteImport.update({
|
const WorkspacesIndexRoute = WorkspacesIndexRouteImport.update({
|
||||||
id: "/workspaces/",
|
id: '/workspaces/',
|
||||||
path: "/workspaces/",
|
path: '/workspaces/',
|
||||||
getParentRoute: () => rootRouteImport,
|
getParentRoute: () => rootRouteImport,
|
||||||
} as any);
|
} as any)
|
||||||
const WorkspacesWorkspaceIdIndexRoute = WorkspacesWorkspaceIdIndexRouteImport.update({
|
const WorkspacesWorkspaceIdIndexRoute =
|
||||||
id: "/workspaces/$workspaceId/",
|
WorkspacesWorkspaceIdIndexRouteImport.update({
|
||||||
path: "/workspaces/$workspaceId/",
|
id: '/workspaces/$workspaceId/',
|
||||||
getParentRoute: () => rootRouteImport,
|
path: '/workspaces/$workspaceId/',
|
||||||
} as any);
|
getParentRoute: () => rootRouteImport,
|
||||||
const WorkspacesWorkspaceIdSettingsRoute = WorkspacesWorkspaceIdSettingsRouteImport.update({
|
} as any)
|
||||||
id: "/workspaces/$workspaceId/settings",
|
const WorkspacesWorkspaceIdSettingsRoute =
|
||||||
path: "/workspaces/$workspaceId/settings",
|
WorkspacesWorkspaceIdSettingsRouteImport.update({
|
||||||
getParentRoute: () => rootRouteImport,
|
id: '/workspaces/$workspaceId/settings',
|
||||||
} as any);
|
path: '/workspaces/$workspaceId/settings',
|
||||||
|
getParentRoute: () => rootRouteImport,
|
||||||
|
} as any)
|
||||||
const WorkspacesWorkspaceIdRequestsRequestIdRoute =
|
const WorkspacesWorkspaceIdRequestsRequestIdRoute =
|
||||||
WorkspacesWorkspaceIdRequestsRequestIdRouteImport.update({
|
WorkspacesWorkspaceIdRequestsRequestIdRouteImport.update({
|
||||||
id: "/workspaces/$workspaceId/requests/$requestId",
|
id: '/workspaces/$workspaceId/requests/$requestId',
|
||||||
path: "/workspaces/$workspaceId/requests/$requestId",
|
path: '/workspaces/$workspaceId/requests/$requestId',
|
||||||
getParentRoute: () => rootRouteImport,
|
getParentRoute: () => rootRouteImport,
|
||||||
} as any);
|
} as any)
|
||||||
|
|
||||||
export interface FileRoutesByFullPath {
|
export interface FileRoutesByFullPath {
|
||||||
"/": typeof IndexRoute;
|
'/': typeof IndexRoute
|
||||||
"/workspaces": typeof WorkspacesIndexRoute;
|
'/workspaces': typeof WorkspacesIndexRoute
|
||||||
"/workspaces/$workspaceId/settings": typeof WorkspacesWorkspaceIdSettingsRoute;
|
'/workspaces/$workspaceId/settings': typeof WorkspacesWorkspaceIdSettingsRoute
|
||||||
"/workspaces/$workspaceId": typeof WorkspacesWorkspaceIdIndexRoute;
|
'/workspaces/$workspaceId': typeof WorkspacesWorkspaceIdIndexRoute
|
||||||
"/workspaces/$workspaceId/requests/$requestId": typeof WorkspacesWorkspaceIdRequestsRequestIdRoute;
|
'/workspaces/$workspaceId/requests/$requestId': typeof WorkspacesWorkspaceIdRequestsRequestIdRoute
|
||||||
}
|
}
|
||||||
export interface FileRoutesByTo {
|
export interface FileRoutesByTo {
|
||||||
"/": typeof IndexRoute;
|
'/': typeof IndexRoute
|
||||||
"/workspaces": typeof WorkspacesIndexRoute;
|
'/workspaces': typeof WorkspacesIndexRoute
|
||||||
"/workspaces/$workspaceId/settings": typeof WorkspacesWorkspaceIdSettingsRoute;
|
'/workspaces/$workspaceId/settings': typeof WorkspacesWorkspaceIdSettingsRoute
|
||||||
"/workspaces/$workspaceId": typeof WorkspacesWorkspaceIdIndexRoute;
|
'/workspaces/$workspaceId': typeof WorkspacesWorkspaceIdIndexRoute
|
||||||
"/workspaces/$workspaceId/requests/$requestId": typeof WorkspacesWorkspaceIdRequestsRequestIdRoute;
|
'/workspaces/$workspaceId/requests/$requestId': typeof WorkspacesWorkspaceIdRequestsRequestIdRoute
|
||||||
}
|
}
|
||||||
export interface FileRoutesById {
|
export interface FileRoutesById {
|
||||||
__root__: typeof rootRouteImport;
|
__root__: typeof rootRouteImport
|
||||||
"/": typeof IndexRoute;
|
'/': typeof IndexRoute
|
||||||
"/workspaces/": typeof WorkspacesIndexRoute;
|
'/workspaces/': typeof WorkspacesIndexRoute
|
||||||
"/workspaces/$workspaceId/settings": typeof WorkspacesWorkspaceIdSettingsRoute;
|
'/workspaces/$workspaceId/settings': typeof WorkspacesWorkspaceIdSettingsRoute
|
||||||
"/workspaces/$workspaceId/": typeof WorkspacesWorkspaceIdIndexRoute;
|
'/workspaces/$workspaceId/': typeof WorkspacesWorkspaceIdIndexRoute
|
||||||
"/workspaces/$workspaceId/requests/$requestId": typeof WorkspacesWorkspaceIdRequestsRequestIdRoute;
|
'/workspaces/$workspaceId/requests/$requestId': typeof WorkspacesWorkspaceIdRequestsRequestIdRoute
|
||||||
}
|
}
|
||||||
export interface FileRouteTypes {
|
export interface FileRouteTypes {
|
||||||
fileRoutesByFullPath: FileRoutesByFullPath;
|
fileRoutesByFullPath: FileRoutesByFullPath
|
||||||
fullPaths:
|
fullPaths:
|
||||||
| "/"
|
| '/'
|
||||||
| "/workspaces"
|
| '/workspaces'
|
||||||
| "/workspaces/$workspaceId/settings"
|
| '/workspaces/$workspaceId/settings'
|
||||||
| "/workspaces/$workspaceId"
|
| '/workspaces/$workspaceId'
|
||||||
| "/workspaces/$workspaceId/requests/$requestId";
|
| '/workspaces/$workspaceId/requests/$requestId'
|
||||||
fileRoutesByTo: FileRoutesByTo;
|
fileRoutesByTo: FileRoutesByTo
|
||||||
to:
|
to:
|
||||||
| "/"
|
| '/'
|
||||||
| "/workspaces"
|
| '/workspaces'
|
||||||
| "/workspaces/$workspaceId/settings"
|
| '/workspaces/$workspaceId/settings'
|
||||||
| "/workspaces/$workspaceId"
|
| '/workspaces/$workspaceId'
|
||||||
| "/workspaces/$workspaceId/requests/$requestId";
|
| '/workspaces/$workspaceId/requests/$requestId'
|
||||||
id:
|
id:
|
||||||
| "__root__"
|
| '__root__'
|
||||||
| "/"
|
| '/'
|
||||||
| "/workspaces/"
|
| '/workspaces/'
|
||||||
| "/workspaces/$workspaceId/settings"
|
| '/workspaces/$workspaceId/settings'
|
||||||
| "/workspaces/$workspaceId/"
|
| '/workspaces/$workspaceId/'
|
||||||
| "/workspaces/$workspaceId/requests/$requestId";
|
| '/workspaces/$workspaceId/requests/$requestId'
|
||||||
fileRoutesById: FileRoutesById;
|
fileRoutesById: FileRoutesById
|
||||||
}
|
}
|
||||||
export interface RootRouteChildren {
|
export interface RootRouteChildren {
|
||||||
IndexRoute: typeof IndexRoute;
|
IndexRoute: typeof IndexRoute
|
||||||
WorkspacesIndexRoute: typeof WorkspacesIndexRoute;
|
WorkspacesIndexRoute: typeof WorkspacesIndexRoute
|
||||||
WorkspacesWorkspaceIdSettingsRoute: typeof WorkspacesWorkspaceIdSettingsRoute;
|
WorkspacesWorkspaceIdSettingsRoute: typeof WorkspacesWorkspaceIdSettingsRoute
|
||||||
WorkspacesWorkspaceIdIndexRoute: typeof WorkspacesWorkspaceIdIndexRoute;
|
WorkspacesWorkspaceIdIndexRoute: typeof WorkspacesWorkspaceIdIndexRoute
|
||||||
WorkspacesWorkspaceIdRequestsRequestIdRoute: typeof WorkspacesWorkspaceIdRequestsRequestIdRoute;
|
WorkspacesWorkspaceIdRequestsRequestIdRoute: typeof WorkspacesWorkspaceIdRequestsRequestIdRoute
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module "@tanstack/react-router" {
|
declare module '@tanstack/react-router' {
|
||||||
interface FileRoutesByPath {
|
interface FileRoutesByPath {
|
||||||
"/": {
|
'/': {
|
||||||
id: "/";
|
id: '/'
|
||||||
path: "/";
|
path: '/'
|
||||||
fullPath: "/";
|
fullPath: '/'
|
||||||
preLoaderRoute: typeof IndexRouteImport;
|
preLoaderRoute: typeof IndexRouteImport
|
||||||
parentRoute: typeof rootRouteImport;
|
parentRoute: typeof rootRouteImport
|
||||||
};
|
}
|
||||||
"/workspaces/": {
|
'/workspaces/': {
|
||||||
id: "/workspaces/";
|
id: '/workspaces/'
|
||||||
path: "/workspaces";
|
path: '/workspaces'
|
||||||
fullPath: "/workspaces";
|
fullPath: '/workspaces'
|
||||||
preLoaderRoute: typeof WorkspacesIndexRouteImport;
|
preLoaderRoute: typeof WorkspacesIndexRouteImport
|
||||||
parentRoute: typeof rootRouteImport;
|
parentRoute: typeof rootRouteImport
|
||||||
};
|
}
|
||||||
"/workspaces/$workspaceId/": {
|
'/workspaces/$workspaceId/': {
|
||||||
id: "/workspaces/$workspaceId/";
|
id: '/workspaces/$workspaceId/'
|
||||||
path: "/workspaces/$workspaceId";
|
path: '/workspaces/$workspaceId'
|
||||||
fullPath: "/workspaces/$workspaceId";
|
fullPath: '/workspaces/$workspaceId'
|
||||||
preLoaderRoute: typeof WorkspacesWorkspaceIdIndexRouteImport;
|
preLoaderRoute: typeof WorkspacesWorkspaceIdIndexRouteImport
|
||||||
parentRoute: typeof rootRouteImport;
|
parentRoute: typeof rootRouteImport
|
||||||
};
|
}
|
||||||
"/workspaces/$workspaceId/settings": {
|
'/workspaces/$workspaceId/settings': {
|
||||||
id: "/workspaces/$workspaceId/settings";
|
id: '/workspaces/$workspaceId/settings'
|
||||||
path: "/workspaces/$workspaceId/settings";
|
path: '/workspaces/$workspaceId/settings'
|
||||||
fullPath: "/workspaces/$workspaceId/settings";
|
fullPath: '/workspaces/$workspaceId/settings'
|
||||||
preLoaderRoute: typeof WorkspacesWorkspaceIdSettingsRouteImport;
|
preLoaderRoute: typeof WorkspacesWorkspaceIdSettingsRouteImport
|
||||||
parentRoute: typeof rootRouteImport;
|
parentRoute: typeof rootRouteImport
|
||||||
};
|
}
|
||||||
"/workspaces/$workspaceId/requests/$requestId": {
|
'/workspaces/$workspaceId/requests/$requestId': {
|
||||||
id: "/workspaces/$workspaceId/requests/$requestId";
|
id: '/workspaces/$workspaceId/requests/$requestId'
|
||||||
path: "/workspaces/$workspaceId/requests/$requestId";
|
path: '/workspaces/$workspaceId/requests/$requestId'
|
||||||
fullPath: "/workspaces/$workspaceId/requests/$requestId";
|
fullPath: '/workspaces/$workspaceId/requests/$requestId'
|
||||||
preLoaderRoute: typeof WorkspacesWorkspaceIdRequestsRequestIdRouteImport;
|
preLoaderRoute: typeof WorkspacesWorkspaceIdRequestsRequestIdRouteImport
|
||||||
parentRoute: typeof rootRouteImport;
|
parentRoute: typeof rootRouteImport
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,8 +143,9 @@ const rootRouteChildren: RootRouteChildren = {
|
|||||||
WorkspacesIndexRoute: WorkspacesIndexRoute,
|
WorkspacesIndexRoute: WorkspacesIndexRoute,
|
||||||
WorkspacesWorkspaceIdSettingsRoute: WorkspacesWorkspaceIdSettingsRoute,
|
WorkspacesWorkspaceIdSettingsRoute: WorkspacesWorkspaceIdSettingsRoute,
|
||||||
WorkspacesWorkspaceIdIndexRoute: WorkspacesWorkspaceIdIndexRoute,
|
WorkspacesWorkspaceIdIndexRoute: WorkspacesWorkspaceIdIndexRoute,
|
||||||
WorkspacesWorkspaceIdRequestsRequestIdRoute: WorkspacesWorkspaceIdRequestsRequestIdRoute,
|
WorkspacesWorkspaceIdRequestsRequestIdRoute:
|
||||||
};
|
WorkspacesWorkspaceIdRequestsRequestIdRoute,
|
||||||
|
}
|
||||||
export const routeTree = rootRouteImport
|
export const routeTree = rootRouteImport
|
||||||
._addFileChildren(rootRouteChildren)
|
._addFileChildren(rootRouteChildren)
|
||||||
._addFileTypes<FileRouteTypes>();
|
._addFileTypes<FileRouteTypes>()
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ import { useEffect, useState } from "react";
|
|||||||
import { rpc } from "../lib/rpc";
|
import { rpc } from "../lib/rpc";
|
||||||
|
|
||||||
/** Look up metadata for a specific action invocation. */
|
/** Look up metadata for a specific action invocation. */
|
||||||
|
// oxlint-disable-next-line no-redundant-type-constituents -- ActionMetadata resolves at runtime
|
||||||
export function useActionMetadata(action: ActionInvocation): ActionMetadata | null {
|
export function useActionMetadata(action: ActionInvocation): ActionMetadata | null {
|
||||||
|
// oxlint-disable-next-line no-redundant-type-constituents -- ActionMetadata resolves at runtime
|
||||||
const [meta, setMeta] = useState<ActionMetadata | null>(null);
|
const [meta, setMeta] = useState<ActionMetadata | null>(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getActions().then((actions) => {
|
void getActions().then((actions) => {
|
||||||
const match = actions.find(
|
const match = actions.find(
|
||||||
([inv]) => inv.scope === action.scope && inv.action === action.action,
|
([inv]) => inv.scope === action.scope && inv.action === action.action,
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export function useRpcQueryWithEvent<
|
|||||||
const query = useRpcQuery(cmd, payload, opts);
|
const query = useRpcQuery(cmd, payload, opts);
|
||||||
|
|
||||||
useRpcEvent(event, () => {
|
useRpcEvent(event, () => {
|
||||||
queryClient.invalidateQueries({ queryKey: [cmd, payload] });
|
void queryClient.invalidateQueries({ queryKey: [cmd, payload] });
|
||||||
});
|
});
|
||||||
|
|
||||||
return query;
|
return query;
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
export function fireAndForget(promise: Promise<unknown>) {
|
||||||
|
promise.catch((err: unknown) => {
|
||||||
|
console.error("Unhandled async error:", err);
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -38,6 +38,7 @@ export async function initHotkeys(): Promise<() => void> {
|
|||||||
|
|
||||||
const bindings: ActionBinding[] = actions
|
const bindings: ActionBinding[] = actions
|
||||||
.filter(
|
.filter(
|
||||||
|
// oxlint-disable-next-line no-redundant-type-constituents -- ActionMetadata resolves at runtime
|
||||||
(entry): entry is [ActionInvocation, ActionMetadata & { defaultHotkey: string }] =>
|
(entry): entry is [ActionInvocation, ActionMetadata & { defaultHotkey: string }] =>
|
||||||
entry[1].defaultHotkey != null,
|
entry[1].defaultHotkey != null,
|
||||||
)
|
)
|
||||||
@@ -51,7 +52,7 @@ export async function initHotkeys(): Promise<() => void> {
|
|||||||
for (const binding of bindings) {
|
for (const binding of bindings) {
|
||||||
if (matchesEvent(binding.keys, e)) {
|
if (matchesEvent(binding.keys, e)) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
rpc("execute_action", binding.invocation);
|
void rpc("execute_action", binding.invocation);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,15 +13,15 @@ const queryClient = new QueryClient();
|
|||||||
const jotaiStore = createStore();
|
const jotaiStore = createStore();
|
||||||
|
|
||||||
// Load initial models from the database
|
// Load initial models from the database
|
||||||
rpc("list_models", {}).then((res) => {
|
void rpc("list_models", {}).then((res) => {
|
||||||
jotaiStore.set(dataAtom, (prev) => replaceAll(prev, "http_exchange", res.httpExchanges));
|
jotaiStore.set(dataAtom, (prev) => replaceAll(prev, "http_exchange", res.httpExchanges));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Register hotkeys from action metadata
|
// Register hotkeys from action metadata
|
||||||
initHotkeys();
|
void initHotkeys();
|
||||||
|
|
||||||
// Subscribe to model change events from the backend
|
// Subscribe to model change events from the backend
|
||||||
listen("model_write", (payload) => {
|
void listen("model_write", (payload) => {
|
||||||
jotaiStore.set(dataAtom, (prev) =>
|
jotaiStore.set(dataAtom, (prev) =>
|
||||||
applyChange(prev, "http_exchange", payload.model, payload.change),
|
applyChange(prev, "http_exchange", payload.model, payload.change),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1460,12 +1460,6 @@ async fn cmd_reload_plugins<R: Runtime>(
|
|||||||
Ok(errors)
|
Ok(errors)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tauri::command]
|
|
||||||
async fn cmd_plugin_init_errors(
|
|
||||||
plugin_manager: State<'_, PluginManager>,
|
|
||||||
) -> YaakResult<Vec<(String, String)>> {
|
|
||||||
Ok(plugin_manager.take_init_errors().await)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tauri::command]
|
#[tauri::command]
|
||||||
async fn cmd_plugin_info<R: Runtime>(
|
async fn cmd_plugin_info<R: Runtime>(
|
||||||
@@ -1746,7 +1740,6 @@ pub fn run() {
|
|||||||
cmd_new_child_window,
|
cmd_new_child_window,
|
||||||
cmd_new_main_window,
|
cmd_new_main_window,
|
||||||
cmd_plugin_info,
|
cmd_plugin_info,
|
||||||
cmd_plugin_init_errors,
|
|
||||||
cmd_reload_plugins,
|
cmd_reload_plugins,
|
||||||
cmd_render_template,
|
cmd_render_template,
|
||||||
cmd_restart,
|
cmd_restart,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export function useLicense() {
|
|||||||
await queryClient.invalidateQueries({ queryKey: CHECK_QUERY_KEY });
|
await queryClient.invalidateQueries({ queryKey: CHECK_QUERY_KEY });
|
||||||
});
|
});
|
||||||
return () => {
|
return () => {
|
||||||
unlisten.then((fn) => fn());
|
void unlisten.then((fn) => fn());
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|||||||
@@ -95,8 +95,8 @@ export const gitMutations = (dir: string, callbacks: GitCallbacks) => {
|
|||||||
|
|
||||||
const handleError = (err: unknown) => {
|
const handleError = (err: unknown) => {
|
||||||
showToast({
|
showToast({
|
||||||
id: `${err}`,
|
id: String(err),
|
||||||
message: `${err}`,
|
message: String(err),
|
||||||
color: "danger",
|
color: "danger",
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ export function getModel<M extends AnyModel["model"], T extends ExtractModel<Any
|
|||||||
export function getAnyModel(id: string): AnyModel | null {
|
export function getAnyModel(id: string): AnyModel | null {
|
||||||
let data = mustStore().get(modelStoreDataAtom);
|
let data = mustStore().get(modelStoreDataAtom);
|
||||||
for (const t of Object.keys(data)) {
|
for (const t of Object.keys(data)) {
|
||||||
|
// oxlint-disable-next-line no-explicit-any -- dynamic key access
|
||||||
let v = (data as any)[t]?.[id];
|
let v = (data as any)[t]?.[id];
|
||||||
if (v?.model === t) return v;
|
if (v?.model === t) return v;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,11 +187,7 @@ impl PluginManager {
|
|||||||
let init_errors = plugin_manager.initialize_all_plugins(plugins, plugin_context).await;
|
let init_errors = plugin_manager.initialize_all_plugins(plugins, plugin_context).await;
|
||||||
if !init_errors.is_empty() {
|
if !init_errors.is_empty() {
|
||||||
for (dir, err) in &init_errors {
|
for (dir, err) in &init_errors {
|
||||||
<<<<<<< HEAD
|
|
||||||
error!("Failed to initialize plugin {dir}: {err}");
|
|
||||||
=======
|
|
||||||
warn!("Plugin failed to initialize: {dir}: {err}");
|
warn!("Plugin failed to initialize: {dir}: {err}");
|
||||||
>>>>>>> main
|
|
||||||
}
|
}
|
||||||
*plugin_manager.init_errors.lock().await = init_errors;
|
*plugin_manager.init_errors.lock().await = init_errors;
|
||||||
}
|
}
|
||||||
@@ -199,13 +195,8 @@ impl PluginManager {
|
|||||||
Ok(plugin_manager)
|
Ok(plugin_manager)
|
||||||
}
|
}
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
/// Take and clear any plugin initialization errors.
|
|
||||||
/// Returns the errors only once — subsequent calls return an empty list.
|
|
||||||
=======
|
|
||||||
/// Take any initialization errors, clearing them from the manager.
|
/// Take any initialization errors, clearing them from the manager.
|
||||||
/// Returns a list of `(plugin_directory, error_message)` pairs.
|
/// Returns a list of `(plugin_directory, error_message)` pairs.
|
||||||
>>>>>>> main
|
|
||||||
pub async fn take_init_errors(&self) -> Vec<(String, String)> {
|
pub async fn take_init_errors(&self) -> Vec<(String, String)> {
|
||||||
std::mem::take(&mut *self.init_errors.lock().await)
|
std::mem::take(&mut *self.init_errors.lock().await)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export function watchWorkspaceFiles(
|
|||||||
channel,
|
channel,
|
||||||
});
|
});
|
||||||
|
|
||||||
unlistenPromise.then(({ unlistenEvent }) => {
|
void unlistenPromise.then(({ unlistenEvent }) => {
|
||||||
addWatchKey(unlistenEvent);
|
addWatchKey(unlistenEvent);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ export function watchWorkspaceFiles(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function unlistenToWatcher(unlistenEvent: string) {
|
function unlistenToWatcher(unlistenEvent: string) {
|
||||||
emit(unlistenEvent).then(() => {
|
void emit(unlistenEvent).then(() => {
|
||||||
removeWatchKey(unlistenEvent);
|
removeWatchKey(unlistenEvent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+41
-48
@@ -132,6 +132,7 @@
|
|||||||
"eventemitter3": "^5.0.1",
|
"eventemitter3": "^5.0.1",
|
||||||
"focus-trap-react": "^11.0.4",
|
"focus-trap-react": "^11.0.4",
|
||||||
"fuzzbunny": "^1.0.1",
|
"fuzzbunny": "^1.0.1",
|
||||||
|
"graphql": "^16.13.1",
|
||||||
"hexy": "^0.3.5",
|
"hexy": "^0.3.5",
|
||||||
"history": "^5.3.0",
|
"history": "^5.3.0",
|
||||||
"jotai": "^2.18.0",
|
"jotai": "^2.18.0",
|
||||||
@@ -358,7 +359,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz",
|
||||||
"integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
|
"integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -368,7 +369,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
|
||||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.27.1",
|
"@babel/code-frame": "^7.27.1",
|
||||||
@@ -399,7 +400,7 @@
|
|||||||
"version": "6.3.1",
|
"version": "6.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@@ -409,7 +410,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz",
|
||||||
"integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
|
"integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/parser": "^7.28.5",
|
"@babel/parser": "^7.28.5",
|
||||||
@@ -426,7 +427,7 @@
|
|||||||
"version": "7.27.2",
|
"version": "7.27.2",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
|
||||||
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
|
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/compat-data": "^7.27.2",
|
"@babel/compat-data": "^7.27.2",
|
||||||
@@ -443,7 +444,7 @@
|
|||||||
"version": "6.3.1",
|
"version": "6.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@@ -453,7 +454,7 @@
|
|||||||
"version": "7.28.0",
|
"version": "7.28.0",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
|
||||||
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
|
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -463,7 +464,7 @@
|
|||||||
"version": "7.27.1",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
|
||||||
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
|
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/traverse": "^7.27.1",
|
"@babel/traverse": "^7.27.1",
|
||||||
@@ -477,7 +478,7 @@
|
|||||||
"version": "7.28.3",
|
"version": "7.28.3",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz",
|
||||||
"integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
|
"integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-module-imports": "^7.27.1",
|
"@babel/helper-module-imports": "^7.27.1",
|
||||||
@@ -505,7 +506,7 @@
|
|||||||
"version": "7.27.1",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||||
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
|
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -524,7 +525,7 @@
|
|||||||
"version": "7.27.1",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
|
||||||
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
|
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -534,7 +535,7 @@
|
|||||||
"version": "7.28.4",
|
"version": "7.28.4",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz",
|
||||||
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
|
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/template": "^7.27.2",
|
"@babel/template": "^7.27.2",
|
||||||
@@ -548,7 +549,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz",
|
||||||
"integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
|
"integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/types": "^7.28.5"
|
"@babel/types": "^7.28.5"
|
||||||
@@ -637,7 +638,7 @@
|
|||||||
"version": "7.27.2",
|
"version": "7.27.2",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||||
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.27.1",
|
"@babel/code-frame": "^7.27.1",
|
||||||
@@ -652,7 +653,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz",
|
||||||
"integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
|
"integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/code-frame": "^7.27.1",
|
"@babel/code-frame": "^7.27.1",
|
||||||
@@ -671,7 +672,7 @@
|
|||||||
"version": "7.28.5",
|
"version": "7.28.5",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz",
|
||||||
"integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
|
"integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/helper-string-parser": "^7.27.1",
|
"@babel/helper-string-parser": "^7.27.1",
|
||||||
@@ -1687,7 +1688,7 @@
|
|||||||
"version": "2.3.5",
|
"version": "2.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
|
||||||
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
|
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jridgewell/gen-mapping": "^0.3.5",
|
"@jridgewell/gen-mapping": "^0.3.5",
|
||||||
@@ -4050,6 +4051,7 @@
|
|||||||
"version": "19.2.7",
|
"version": "19.2.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
|
||||||
"integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
|
"integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"csstype": "^3.2.2"
|
"csstype": "^3.2.2"
|
||||||
@@ -4059,6 +4061,7 @@
|
|||||||
"version": "19.2.3",
|
"version": "19.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
||||||
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@types/react": "^19.2.0"
|
"@types/react": "^19.2.0"
|
||||||
@@ -5038,7 +5041,7 @@
|
|||||||
"version": "2.9.14",
|
"version": "2.9.14",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.14.tgz",
|
||||||
"integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==",
|
"integrity": "sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"baseline-browser-mapping": "dist/cli.js"
|
"baseline-browser-mapping": "dist/cli.js"
|
||||||
@@ -5118,7 +5121,7 @@
|
|||||||
"version": "4.28.1",
|
"version": "4.28.1",
|
||||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
|
||||||
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
|
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -5320,7 +5323,7 @@
|
|||||||
"version": "1.0.30001763",
|
"version": "1.0.30001763",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001763.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001763.tgz",
|
||||||
"integrity": "sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ==",
|
"integrity": "sha512-mh/dGtq56uN98LlNX9qdbKnzINhX0QzhiWBFEkFfsFO4QyCvL8YegrJAazCwXIeqkIob8BlZPGM3xdnY+sgmvQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -5725,7 +5728,7 @@
|
|||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
|
||||||
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/cookie": {
|
"node_modules/cookie": {
|
||||||
@@ -6590,7 +6593,7 @@
|
|||||||
"version": "1.5.267",
|
"version": "1.5.267",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
|
||||||
"integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
|
"integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/emoji-regex": {
|
"node_modules/emoji-regex": {
|
||||||
@@ -6829,7 +6832,7 @@
|
|||||||
"version": "0.27.2",
|
"version": "0.27.2",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
|
||||||
"integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
|
"integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -7540,7 +7543,7 @@
|
|||||||
"version": "1.0.0-beta.2",
|
"version": "1.0.0-beta.2",
|
||||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||||
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
|
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=6.9.0"
|
"node": ">=6.9.0"
|
||||||
@@ -7634,7 +7637,7 @@
|
|||||||
"version": "4.13.0",
|
"version": "4.13.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
|
||||||
"integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
|
"integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"resolve-pkg-maps": "^1.0.0"
|
"resolve-pkg-maps": "^1.0.0"
|
||||||
@@ -7805,12 +7808,12 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/graphql": {
|
"node_modules/graphql": {
|
||||||
"version": "15.10.1",
|
"version": "16.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.1.tgz",
|
||||||
"integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==",
|
"integrity": "sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==",
|
||||||
"peer": true,
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10.x"
|
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/graphql-language-service": {
|
"node_modules/graphql-language-service": {
|
||||||
@@ -8057,16 +8060,6 @@
|
|||||||
"node": ">=16.9.0"
|
"node": ">=16.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/hono-rate-limiter": {
|
|
||||||
"version": "0.4.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/hono-rate-limiter/-/hono-rate-limiter-0.4.2.tgz",
|
|
||||||
"integrity": "sha512-AAtFqgADyrmbDijcRTT/HJfwqfvhalya2Zo+MgfdrMPas3zSMD8SU03cv+ZsYwRU1swv7zgVt0shwN059yzhjw==",
|
|
||||||
"license": "MIT",
|
|
||||||
"peer": true,
|
|
||||||
"peerDependencies": {
|
|
||||||
"hono": "^4.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/hosted-git-info": {
|
"node_modules/hosted-git-info": {
|
||||||
"version": "2.8.9",
|
"version": "2.8.9",
|
||||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
|
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
|
||||||
@@ -9043,7 +9036,7 @@
|
|||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||||
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"bin": {
|
"bin": {
|
||||||
"jsesc": "bin/jsesc"
|
"jsesc": "bin/jsesc"
|
||||||
@@ -9405,7 +9398,7 @@
|
|||||||
"version": "5.1.1",
|
"version": "5.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||||
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"yallist": "^3.0.2"
|
"yallist": "^3.0.2"
|
||||||
@@ -10801,7 +10794,7 @@
|
|||||||
"version": "2.0.27",
|
"version": "2.0.27",
|
||||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
|
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
|
||||||
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
|
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/nodejs-file-downloader": {
|
"node_modules/nodejs-file-downloader": {
|
||||||
@@ -12869,7 +12862,7 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
|
||||||
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"funding": {
|
"funding": {
|
||||||
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
|
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
|
||||||
@@ -14642,7 +14635,7 @@
|
|||||||
"version": "4.21.0",
|
"version": "4.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
|
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
|
||||||
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
|
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "~0.27.0",
|
"esbuild": "~0.27.0",
|
||||||
@@ -14779,7 +14772,7 @@
|
|||||||
"version": "5.9.3",
|
"version": "5.9.3",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
@@ -14982,7 +14975,7 @@
|
|||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
|
||||||
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
|
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
@@ -15738,7 +15731,7 @@
|
|||||||
"version": "3.1.1",
|
"version": "3.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||||
"devOptional": true,
|
"dev": true,
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/yaml": {
|
"node_modules/yaml": {
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
require("@tailwindcss/container-queries"),
|
require("@tailwindcss/container-queries"),
|
||||||
|
// oxlint-disable-next-line unbound-method -- destructured from plugin API
|
||||||
plugin(({ addVariant }) => {
|
plugin(({ addVariant }) => {
|
||||||
addVariant("hocus", ["&:hover", "&:focus-visible", "&.focus:focus"]);
|
addVariant("hocus", ["&:hover", "&:focus-visible", "&.focus:focus"]);
|
||||||
addVariant("focus-visible-or-class", ["&:focus-visible", "&.focus:focus"]);
|
addVariant("focus-visible-or-class", ["&:focus-visible", "&.focus:focus"]);
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export function subscribeToWindowAppearanceChange(
|
|||||||
unsubscribe: () => {},
|
unsubscribe: () => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
getCurrentWebviewWindow()
|
void getCurrentWebviewWindow()
|
||||||
.onThemeChanged((theme) => {
|
.onThemeChanged((theme) => {
|
||||||
cb(theme.payload);
|
cb(theme.payload);
|
||||||
})
|
})
|
||||||
@@ -39,6 +39,6 @@ export function resolveAppearance(
|
|||||||
|
|
||||||
export function subscribeToPreferredAppearance(cb: (appearance: Appearance) => void) {
|
export function subscribeToPreferredAppearance(cb: (appearance: Appearance) => void) {
|
||||||
cb(getCSSAppearance());
|
cb(getCSSAppearance());
|
||||||
getWindowAppearance().then(cb);
|
void getWindowAppearance().then(cb);
|
||||||
subscribeToWindowAppearanceChange(cb);
|
subscribeToWindowAppearanceChange(cb);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ for (const ws of workspacesWithDev) {
|
|||||||
|
|
||||||
// Cleanup function to kill all children
|
// Cleanup function to kill all children
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
for (const { ws, child } of children) {
|
for (const { ws: _ws, child } of children) {
|
||||||
if (child.exitCode === null) {
|
if (child.exitCode === null) {
|
||||||
// Process still running
|
// Process still running
|
||||||
if (process.platform === "win32") {
|
if (process.platform === "win32") {
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ rmSync(tmpDir, { recursive: true, force: true });
|
|||||||
function tryExecSync(cmd) {
|
function tryExecSync(cmd) {
|
||||||
try {
|
try {
|
||||||
return execSync(cmd, { stdio: "pipe" }).toString("utf-8");
|
return execSync(cmd, { stdio: "pipe" }).toString("utf-8");
|
||||||
} catch (_) {
|
} catch {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ mkdirSync(dstDir, { recursive: true });
|
|||||||
function tryExecSync(cmd) {
|
function tryExecSync(cmd) {
|
||||||
try {
|
try {
|
||||||
return execSync(cmd, { stdio: "pipe" }).toString("utf-8");
|
return execSync(cmd, { stdio: "pipe" }).toString("utf-8");
|
||||||
} catch (_) {
|
} catch {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user