mirror of
https://github.com/graphql-hive/console
synced 2026-04-21 14:37:17 +00:00
[hive/app] add tabs for laboratory (#5136)
Co-authored-by: Dimitri POSTOLOV <en3m@ya.ru>
This commit is contained in:
parent
e68c0a646d
commit
fcca709f93
18 changed files with 1111 additions and 1048 deletions
|
|
@ -199,7 +199,8 @@ module.exports = {
|
|||
tailwindcss: {
|
||||
callees: tailwindCallees,
|
||||
config: 'packages/web/app/tailwind.config.cjs',
|
||||
whitelist: ['drag-none', 'graphiql-toolbar-icon', 'graphiql-toolbar-button'],
|
||||
whitelist: ['drag-none'],
|
||||
cssFiles: ['packages/web/app/src/index.css', 'node_modules/graphiql/dist/style.css'],
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@
|
|||
"slonik@30.4.4": "patches/slonik@30.4.4.patch",
|
||||
"@oclif/core@3.26.6": "patches/@oclif__core@3.26.6.patch",
|
||||
"oclif@4.13.6": "patches/oclif@4.13.6.patch",
|
||||
"graphiql@3.3.2": "patches/graphiql@3.3.0.patch"
|
||||
"@graphiql/react@1.0.0-alpha.3": "patches/@graphiql__react@1.0.0-alpha.3.patch"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
"@fastify/cors": "9.0.1",
|
||||
"@fastify/static": "7.0.4",
|
||||
"@fastify/vite": "6.0.7",
|
||||
"@graphiql/react": "0.22.4",
|
||||
"@graphiql/react": "1.0.0-alpha.3",
|
||||
"@graphiql/toolkit": "0.9.1",
|
||||
"@graphql-codegen/client-preset-swc-plugin": "0.2.0",
|
||||
"@graphql-tools/mock": "9.0.4",
|
||||
|
|
@ -88,7 +88,7 @@
|
|||
"fastify": "4.28.1",
|
||||
"formik": "2.4.6",
|
||||
"framer-motion": "11.3.28",
|
||||
"graphiql": "3.3.2",
|
||||
"graphiql": "4.0.0-alpha.4",
|
||||
"graphql": "16.9.0",
|
||||
"graphql-sse": "2.5.3",
|
||||
"immer": "10.1.1",
|
||||
|
|
|
|||
|
|
@ -22,8 +22,10 @@ import { Input } from '@/components/ui/input';
|
|||
import { Select, SelectContent, SelectItem, SelectTrigger } from '@/components/ui/select';
|
||||
import { useToast } from '@/components/ui/use-toast';
|
||||
import { graphql } from '@/gql';
|
||||
import { DocumentCollection } from '@/gql/graphql';
|
||||
import { useCollections } from '@/pages/target-laboratory';
|
||||
import {
|
||||
DocumentCollectionOperation,
|
||||
useCollections,
|
||||
} from '@/lib/hooks/laboratory/use-collections';
|
||||
import { useEditorContext } from '@graphiql/react';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
|
||||
|
|
@ -88,7 +90,7 @@ export type CreateOperationModalFormValues = z.infer<typeof createOperationModal
|
|||
export function CreateOperationModal(props: {
|
||||
isOpen: boolean;
|
||||
close: () => void;
|
||||
onSaveSuccess?: (operationId?: string) => void;
|
||||
onSaveSuccess: (args: { id: string; name: string }) => void;
|
||||
organizationId: string;
|
||||
projectId: string;
|
||||
targetId: string;
|
||||
|
|
@ -139,7 +141,10 @@ export function CreateOperationModal(props: {
|
|||
const error = response.error || response.data?.createOperationInDocumentCollection.error;
|
||||
|
||||
if (!error) {
|
||||
onSaveSuccess?.(result?.createOperationInDocumentCollection.ok?.operation.id);
|
||||
const operation = result?.createOperationInDocumentCollection.ok?.operation;
|
||||
if (operation) {
|
||||
onSaveSuccess({ id: operation.id, name: operation.name });
|
||||
}
|
||||
form.reset();
|
||||
close();
|
||||
} else {
|
||||
|
|
@ -166,11 +171,6 @@ export function CreateOperationModal(props: {
|
|||
);
|
||||
}
|
||||
|
||||
type DocumentCollectionWithOutOperations = Omit<
|
||||
DocumentCollection,
|
||||
'createdBy' | 'createdAt' | 'updatedAt' | 'operations' | 'pageInfo'
|
||||
>;
|
||||
|
||||
export function CreateOperationModalContent(props: {
|
||||
isOpen: boolean;
|
||||
close: () => void;
|
||||
|
|
@ -180,7 +180,7 @@ export function CreateOperationModalContent(props: {
|
|||
form: UseFormReturn<CreateOperationModalFormValues>;
|
||||
targetId: string;
|
||||
fetching: boolean;
|
||||
collections: DocumentCollectionWithOutOperations[];
|
||||
collections: DocumentCollectionOperation[];
|
||||
}): ReactElement {
|
||||
return (
|
||||
<Dialog open={props.isOpen} onOpenChange={props.close}>
|
||||
|
|
@ -195,52 +195,43 @@ export function CreateOperationModalContent(props: {
|
|||
<FormField
|
||||
control={props.form.control}
|
||||
name="name"
|
||||
render={({ field }) => {
|
||||
return (
|
||||
<FormItem>
|
||||
<FormLabel>Operation Name</FormLabel>
|
||||
<FormControl>
|
||||
<Input {...field} placeholder="Your Operation Name" />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
);
|
||||
}}
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Operation Name</FormLabel>
|
||||
<FormControl>
|
||||
<Input {...field} placeholder="Your Operation Name" />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={props.form.control}
|
||||
name="collectionId"
|
||||
render={({ field }) => {
|
||||
return (
|
||||
<FormItem>
|
||||
<FormLabel>Collection Description</FormLabel>
|
||||
<FormControl>
|
||||
<Select
|
||||
value={field.value}
|
||||
onValueChange={async v => {
|
||||
await field.onChange(v);
|
||||
}}
|
||||
>
|
||||
<SelectTrigger>
|
||||
{props.collections.find(c => c.id === field.value)?.name ??
|
||||
'Select a Collection'}
|
||||
</SelectTrigger>
|
||||
<SelectContent className="w-[--radix-select-trigger-width]">
|
||||
{props.collections.map(c => (
|
||||
<SelectItem key={c.id} value={c.id}>
|
||||
{c.name}
|
||||
<div className="mt-1 line-clamp-1 text-xs opacity-50">
|
||||
{c.description}
|
||||
</div>
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
);
|
||||
}}
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Collection Description</FormLabel>
|
||||
<FormControl>
|
||||
<Select value={field.value} onValueChange={field.onChange}>
|
||||
<SelectTrigger>
|
||||
{props.collections.find(c => c.id === field.value)?.name ??
|
||||
'Select a Collection'}
|
||||
</SelectTrigger>
|
||||
<SelectContent className="w-[--radix-select-trigger-width]">
|
||||
{props.collections.map(c => (
|
||||
<SelectItem key={c.id} value={c.id}>
|
||||
{c.name}
|
||||
<div className="mt-1 line-clamp-1 text-xs opacity-50">
|
||||
{c.description}
|
||||
</div>
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectContent>
|
||||
</Select>
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
|
|
|
|||
|
|
@ -21,8 +21,9 @@ import {
|
|||
import { Input } from '@/components/ui/input';
|
||||
import { useToast } from '@/components/ui/use-toast';
|
||||
import { graphql } from '@/gql';
|
||||
import { useCollections } from '@/lib/hooks/laboratory/use-collections';
|
||||
import { useEditorContext } from '@graphiql/react';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import { useCollections } from '../../../pages/target-laboratory';
|
||||
|
||||
const UpdateOperationNameMutation = graphql(`
|
||||
mutation UpdateOperation(
|
||||
|
|
@ -78,6 +79,7 @@ export const EditOperationModal = (props: {
|
|||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
});
|
||||
const { setTabState } = useEditorContext({ nonNull: true });
|
||||
|
||||
const [collection, operation] = useMemo(() => {
|
||||
for (const collection of collections) {
|
||||
|
|
@ -115,6 +117,13 @@ export const EditOperationModal = (props: {
|
|||
const error = response.error || response.data?.updateOperationInDocumentCollection?.error;
|
||||
|
||||
if (!error) {
|
||||
// Update tab title
|
||||
setTabState(state => ({
|
||||
...state,
|
||||
tabs: state.tabs.map(tab =>
|
||||
tab.id === props.operationId ? { ...tab, title: values.name } : tab,
|
||||
),
|
||||
}));
|
||||
props.close();
|
||||
toast({
|
||||
title: 'Operation Updated',
|
||||
|
|
|
|||
|
|
@ -199,3 +199,7 @@
|
|||
-webkit-appearance: none;
|
||||
}
|
||||
}
|
||||
|
||||
.hive-badge-is-changed:after {
|
||||
@apply absolute right-2 size-1.5 rounded-full border border-orange-600 bg-orange-400 content-[''];
|
||||
}
|
||||
|
|
|
|||
72
packages/web/app/src/lib/hooks/laboratory/use-collections.ts
Normal file
72
packages/web/app/src/lib/hooks/laboratory/use-collections.ts
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
import { useEffect } from 'react';
|
||||
import { useQuery } from 'urql';
|
||||
import { graphql } from '@/gql';
|
||||
import { CollectionsQuery as _CollectionsQuery } from '@/gql/graphql';
|
||||
import { useNotifications } from '@/lib/hooks';
|
||||
|
||||
export const CollectionsQuery = graphql(`
|
||||
query Collections($selector: TargetSelectorInput!) {
|
||||
target(selector: $selector) {
|
||||
id
|
||||
documentCollections {
|
||||
edges {
|
||||
cursor
|
||||
node {
|
||||
id
|
||||
name
|
||||
description
|
||||
operations(first: 100) {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
name
|
||||
}
|
||||
cursor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
export type DocumentCollectionOperation = Exclude<
|
||||
_CollectionsQuery['target'],
|
||||
null | undefined
|
||||
>['documentCollections']['edges'][number]['node'];
|
||||
|
||||
const EMPTY_ARRAY: DocumentCollectionOperation[] = [];
|
||||
|
||||
export function useCollections(props: {
|
||||
organizationId: string;
|
||||
projectId: string;
|
||||
targetId: string;
|
||||
}): {
|
||||
fetching: boolean;
|
||||
collections: DocumentCollectionOperation[];
|
||||
} {
|
||||
const [{ data, error, fetching }] = useQuery({
|
||||
query: CollectionsQuery,
|
||||
variables: {
|
||||
selector: {
|
||||
target: props.targetId,
|
||||
organization: props.organizationId,
|
||||
project: props.projectId,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
const notify = useNotifications();
|
||||
|
||||
useEffect(() => {
|
||||
if (error) {
|
||||
notify(error.message, 'error');
|
||||
}
|
||||
}, [error]);
|
||||
|
||||
return {
|
||||
collections: data?.target?.documentCollections.edges.map(v => v.node) || EMPTY_ARRAY,
|
||||
fetching,
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
import { useQuery } from 'urql';
|
||||
import { graphql } from '@/gql';
|
||||
import { useOperationFromQueryString } from './useOperationFromQueryString';
|
||||
|
||||
const OperationQuery = graphql(`
|
||||
query Operation($selector: TargetSelectorInput!, $id: ID!) {
|
||||
target(selector: $selector) {
|
||||
id
|
||||
documentCollectionOperation(id: $id) {
|
||||
id
|
||||
name
|
||||
query
|
||||
headers
|
||||
variables
|
||||
updatedAt
|
||||
collection {
|
||||
id
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
export function useCurrentOperation(props: {
|
||||
organizationId: string;
|
||||
projectId: string;
|
||||
targetId: string;
|
||||
}) {
|
||||
const operationIdFromSearch = useOperationFromQueryString();
|
||||
const [{ data }] = useQuery({
|
||||
query: OperationQuery,
|
||||
variables: {
|
||||
selector: {
|
||||
target: props.targetId,
|
||||
project: props.projectId,
|
||||
organization: props.organizationId,
|
||||
},
|
||||
id: operationIdFromSearch!,
|
||||
},
|
||||
pause: !operationIdFromSearch,
|
||||
});
|
||||
// if operationId is undefined `data` could contain previous state
|
||||
return operationIdFromSearch ? data?.target?.documentCollectionOperation : null;
|
||||
}
|
||||
|
|
@ -0,0 +1,499 @@
|
|||
import { useEffect, useMemo, useRef, useState } from 'react';
|
||||
import clsx from 'clsx';
|
||||
import { FolderIcon, FolderOpenIcon, SquareTerminalIcon } from 'lucide-react';
|
||||
import { useMutation } from 'urql';
|
||||
import { CreateCollectionModal } from '@/components/target/laboratory/create-collection-modal';
|
||||
import { DeleteCollectionModal } from '@/components/target/laboratory/delete-collection-modal';
|
||||
import { DeleteOperationModal } from '@/components/target/laboratory/delete-operation-modal';
|
||||
import { EditOperationModal } from '@/components/target/laboratory/edit-operation-modal';
|
||||
import {
|
||||
Accordion,
|
||||
AccordionContent,
|
||||
AccordionHeader,
|
||||
AccordionItem,
|
||||
AccordionTriggerPrimitive,
|
||||
} from '@/components/ui/accordion';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from '@/components/ui/dropdown-menu';
|
||||
import { PlusIcon } from '@/components/ui/icon';
|
||||
import { Link } from '@/components/ui/link';
|
||||
import { Spinner } from '@/components/ui/spinner';
|
||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
||||
import { graphql } from '@/gql';
|
||||
import { useClipboard, useNotifications, useToggle } from '@/lib/hooks';
|
||||
import { useOperationFromQueryString } from '@/lib/hooks/laboratory/useOperationFromQueryString';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { GraphiQLPlugin, useEditorContext, usePluginContext } from '@graphiql/react';
|
||||
import { BookmarkFilledIcon, BookmarkIcon, DotsHorizontalIcon } from '@radix-ui/react-icons';
|
||||
import { useRouter } from '@tanstack/react-router';
|
||||
import { useCollections } from './use-collections';
|
||||
import { useCurrentOperation } from './use-current-operation';
|
||||
import { useSyncOperationState } from './use-sync-operation-state';
|
||||
|
||||
const CreateOperationMutation = graphql(`
|
||||
mutation CreateOperation(
|
||||
$selector: TargetSelectorInput!
|
||||
$input: CreateDocumentCollectionOperationInput!
|
||||
) {
|
||||
createOperationInDocumentCollection(selector: $selector, input: $input) {
|
||||
error {
|
||||
message
|
||||
}
|
||||
ok {
|
||||
operation {
|
||||
id
|
||||
name
|
||||
}
|
||||
updatedTarget {
|
||||
id
|
||||
documentCollections {
|
||||
edges {
|
||||
cursor
|
||||
node {
|
||||
id
|
||||
operations {
|
||||
edges {
|
||||
node {
|
||||
id
|
||||
}
|
||||
cursor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
const _tabBadgeClassName = clsx(
|
||||
'hive-badge-is-changed',
|
||||
'relative after:top-1/2 after:-translate-y-1/2 after:right-[.65rem] hover:after:hidden',
|
||||
'[&_.graphiql-tab-close]:hidden [&:hover_.graphiql-tab-close]:block',
|
||||
);
|
||||
|
||||
export function useOperationCollectionsPlugin(props: {
|
||||
canEdit: boolean;
|
||||
canDelete: boolean;
|
||||
organizationId: string;
|
||||
projectId: string;
|
||||
targetId: string;
|
||||
}): GraphiQLPlugin {
|
||||
return useMemo(() => {
|
||||
function Content() {
|
||||
const [isCollectionModalOpen, toggleCollectionModal] = useToggle();
|
||||
const { collections, fetching: loading } = useCollections({
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
});
|
||||
const [collectionId, setCollectionId] = useState('');
|
||||
const [isDeleteCollectionModalOpen, toggleDeleteCollectionModalOpen] = useToggle();
|
||||
const [isDeleteOperationModalOpen, toggleDeleteOperationModalOpen] = useToggle();
|
||||
const [operationToDeleteId, setOperationToDeleteId] = useState<null | string>(null);
|
||||
const [operationToEditId, setOperationToEditId] = useState<null | string>(null);
|
||||
const { clearOperation, savedOperation, setSavedOperation } = useSyncOperationState({
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
});
|
||||
const router = useRouter();
|
||||
const [accordionValue, setAccordionValue] = useState<string[]>([]);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
const [isScrolled, setIsScrolled] = useState(false);
|
||||
const copyToClipboard = useClipboard();
|
||||
|
||||
const currentOperation = useCurrentOperation({
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
});
|
||||
const { queryEditor, variableEditor, headerEditor, tabs, changeTab, addTab } =
|
||||
useEditorContext({
|
||||
nonNull: true,
|
||||
});
|
||||
|
||||
const hasAllEditors = !!(queryEditor && variableEditor && headerEditor);
|
||||
const queryParamsOperationId = useOperationFromQueryString();
|
||||
const activeTab = tabs.find(tab => tab.id === queryParamsOperationId);
|
||||
|
||||
const isSame =
|
||||
!currentOperation ||
|
||||
!activeTab ||
|
||||
(currentOperation.query === activeTab.query &&
|
||||
currentOperation.variables === activeTab.variables &&
|
||||
currentOperation.headers === (activeTab.headers || ''));
|
||||
|
||||
useEffect(() => {
|
||||
if (!hasAllEditors || !currentOperation) {
|
||||
const searchObj = router.latestLocation.search;
|
||||
const operationString =
|
||||
'operationString' in searchObj && typeof searchObj.operationString === 'string'
|
||||
? searchObj.operationString
|
||||
: null;
|
||||
|
||||
// We provide an operation string when navigating to the laboratory from persisted documents
|
||||
// in that case we want to show that operation within this tab.
|
||||
if (operationString) {
|
||||
queryEditor?.setValue(operationString);
|
||||
variableEditor?.setValue('');
|
||||
headerEditor?.setValue('');
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (queryParamsOperationId) {
|
||||
const tabIndex = tabs.findIndex(tab => tab.id === queryParamsOperationId);
|
||||
|
||||
if (tabIndex !== -1) {
|
||||
changeTab(tabIndex);
|
||||
return;
|
||||
}
|
||||
// Set selected operation in editors
|
||||
addTab({
|
||||
id: queryParamsOperationId,
|
||||
query: (savedOperation || currentOperation).query,
|
||||
variables: (savedOperation || currentOperation).variables,
|
||||
headers: currentOperation.headers,
|
||||
title: currentOperation.name,
|
||||
});
|
||||
|
||||
if (!savedOperation) {
|
||||
return;
|
||||
}
|
||||
|
||||
const oneWeek = 7 * 24 * 60 * 60 * 1000;
|
||||
if (savedOperation.updatedAt + oneWeek < Date.now()) {
|
||||
clearOperation();
|
||||
return;
|
||||
}
|
||||
|
||||
const currentOperationUpdatedAt = new Date(currentOperation.updatedAt).getTime();
|
||||
if (savedOperation.updatedAt > currentOperationUpdatedAt) {
|
||||
queryEditor.setValue(savedOperation.query);
|
||||
variableEditor.setValue(savedOperation.variables);
|
||||
}
|
||||
}
|
||||
}, [hasAllEditors, queryParamsOperationId, currentOperation]);
|
||||
|
||||
useEffect(() => {
|
||||
// updateActiveTabValues({ className: isSame ? '' : tabBadgeClassName });
|
||||
if (!hasAllEditors || !currentOperation || isSame) {
|
||||
return;
|
||||
}
|
||||
setSavedOperation({
|
||||
query: queryEditor.getValue() || '',
|
||||
variables: variableEditor.getValue() || '',
|
||||
});
|
||||
}, [queryEditor?.getValue(), variableEditor?.getValue()]);
|
||||
|
||||
const shouldShowMenu = props.canEdit || props.canDelete;
|
||||
|
||||
const initialSelectedCollection =
|
||||
currentOperation?.id &&
|
||||
collections.find(c =>
|
||||
c.operations.edges.some(({ node }) => node.id === currentOperation.id),
|
||||
)?.id;
|
||||
|
||||
const [createOperationState, createOperation] = useMutation(CreateOperationMutation);
|
||||
const notify = useNotifications();
|
||||
|
||||
const addOperation = async (e: { currentTarget: { dataset: DOMStringMap } }) => {
|
||||
const collectionId = e.currentTarget.dataset.collectionId!;
|
||||
|
||||
const result = await createOperation({
|
||||
input: {
|
||||
collectionId,
|
||||
name: 'New Operation',
|
||||
query: '{\n \n}',
|
||||
headers: '',
|
||||
variables: '',
|
||||
},
|
||||
selector: {
|
||||
target: props.targetId,
|
||||
organization: props.organizationId,
|
||||
project: props.projectId,
|
||||
},
|
||||
});
|
||||
if (result.error) {
|
||||
notify("Couldn't create operation. Please try again later.", 'error');
|
||||
}
|
||||
if (result.data?.createOperationInDocumentCollection.error) {
|
||||
notify(result.data.createOperationInDocumentCollection.error.message, 'error');
|
||||
}
|
||||
if (result.data?.createOperationInDocumentCollection.ok) {
|
||||
void router.navigate({
|
||||
to: '/$organizationId/$projectId/$targetId/laboratory',
|
||||
params: {
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
},
|
||||
search: {
|
||||
operation: result.data.createOperationInDocumentCollection.ok.operation.id,
|
||||
},
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if (!initialSelectedCollection || isScrolled) return;
|
||||
|
||||
setAccordionValue([initialSelectedCollection]);
|
||||
setTimeout(() => {
|
||||
const link = containerRef.current!.querySelector(`a[href$="${queryParamsOperationId}"]`);
|
||||
link!.scrollIntoView();
|
||||
setIsScrolled(true);
|
||||
}, 150);
|
||||
}, [initialSelectedCollection]);
|
||||
|
||||
const renderedCollections = collections.map(collection => (
|
||||
<AccordionItem key={collection.id} value={collection.id} className="border-b-0">
|
||||
<AccordionHeader className="flex items-center justify-between">
|
||||
<AccordionTriggerPrimitive className="group flex w-full items-center gap-x-3 rounded p-2 text-left font-medium text-white hover:bg-gray-100/10">
|
||||
<FolderIcon className="group-radix-state-open:hidden size-4" />
|
||||
<FolderOpenIcon className="group-radix-state-closed:hidden size-4" />
|
||||
{collection.name}
|
||||
</AccordionTriggerPrimitive>
|
||||
{shouldShowMenu && (
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger aria-label="More" className="graphiql-toolbar-button">
|
||||
<DotsHorizontalIcon />
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
<DropdownMenuItem
|
||||
onClick={addOperation}
|
||||
disabled={createOperationState.fetching}
|
||||
data-collection-id={collection.id}
|
||||
>
|
||||
Add operation <PlusIcon className="ml-2 size-4" />
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setCollectionId(collection.id);
|
||||
toggleCollectionModal();
|
||||
}}
|
||||
>
|
||||
Edit
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setCollectionId(collection.id);
|
||||
toggleDeleteCollectionModalOpen();
|
||||
}}
|
||||
className="text-red-500"
|
||||
>
|
||||
Delete
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
)}
|
||||
</AccordionHeader>
|
||||
<AccordionContent className="space-y-0 pb-2 pl-2">
|
||||
{collection.operations.edges.length ? (
|
||||
collection.operations.edges.map(({ node }) => (
|
||||
<div key={node.id} className="flex items-center">
|
||||
<Link
|
||||
to="/$organizationId/$projectId/$targetId/laboratory"
|
||||
params={{
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
}}
|
||||
search={{ operation: node.id }}
|
||||
className={cn(
|
||||
'flex w-full items-center gap-x-3 rounded p-2 font-normal text-white/50 hover:bg-gray-100/10 hover:text-white hover:no-underline',
|
||||
node.id === queryParamsOperationId && [
|
||||
'bg-gray-100/10 text-white',
|
||||
currentOperation &&
|
||||
node.id === currentOperation.id &&
|
||||
!isSame &&
|
||||
'hive-badge-is-changed relative',
|
||||
],
|
||||
)}
|
||||
>
|
||||
<SquareTerminalIcon className="size-4" />
|
||||
{node.name}
|
||||
</Link>
|
||||
<DropdownMenu modal={false}>
|
||||
<DropdownMenuTrigger className="graphiql-toolbar-button text-white opacity-0 transition-opacity [div:hover>&]:opacity-100">
|
||||
<DotsHorizontalIcon />
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end">
|
||||
<DropdownMenuItem
|
||||
onClick={async () => {
|
||||
const url = new URL(window.location.href);
|
||||
await copyToClipboard(
|
||||
`${url.origin}${url.pathname}?operation=${node.id}`,
|
||||
);
|
||||
}}
|
||||
>
|
||||
Copy link to operation
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
{props.canEdit && (
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setOperationToEditId(node.id);
|
||||
}}
|
||||
>
|
||||
Edit
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{props.canDelete && (
|
||||
<DropdownMenuItem
|
||||
onClick={() => {
|
||||
setOperationToDeleteId(node.id);
|
||||
toggleDeleteOperationModalOpen();
|
||||
}}
|
||||
className="text-red-500"
|
||||
>
|
||||
Delete
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<Button
|
||||
variant="orangeLink"
|
||||
className="mx-auto block"
|
||||
onClick={addOperation}
|
||||
data-collection-id={collection.id}
|
||||
>
|
||||
<PlusIcon className="mr-1 inline size-4" /> Add Operation
|
||||
</Button>
|
||||
)}
|
||||
</AccordionContent>
|
||||
</AccordionItem>
|
||||
));
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="mb-5 flex items-center justify-between gap-1">
|
||||
<div className="graphiql-doc-explorer-title">Operations</div>
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="orangeLink"
|
||||
size="icon-sm"
|
||||
className={clsx(
|
||||
'flex w-auto items-center gap-1',
|
||||
'min-w-0', // trick to make work truncate
|
||||
)}
|
||||
onClick={() => {
|
||||
if (collectionId) {
|
||||
setCollectionId('');
|
||||
}
|
||||
toggleCollectionModal();
|
||||
}}
|
||||
>
|
||||
<PlusIcon className="size-4 shrink-0" />
|
||||
<span className="truncate">New collection</span>
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>Create a new collection of GraphQL Operations</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
</div>
|
||||
{loading ? (
|
||||
<div className="flex flex-col items-center gap-4 text-xs">
|
||||
<Spinner />
|
||||
Loading collections...
|
||||
</div>
|
||||
) : collections.length ? (
|
||||
<Accordion
|
||||
ref={containerRef}
|
||||
value={accordionValue}
|
||||
onValueChange={setAccordionValue}
|
||||
type="multiple"
|
||||
>
|
||||
{renderedCollections}
|
||||
</Accordion>
|
||||
) : (
|
||||
<div className="flex h-fit flex-1 items-center justify-center">
|
||||
<div className="flex flex-col items-center">
|
||||
<BookmarkIcon width={30} height={30} />
|
||||
<div className="mt-2 text-xs">There are no collections available.</div>
|
||||
{props.canEdit && (
|
||||
<Button
|
||||
onClick={() => {
|
||||
if (collectionId) {
|
||||
setCollectionId('');
|
||||
}
|
||||
toggleCollectionModal();
|
||||
}}
|
||||
data-cy="create-collection"
|
||||
className="mt-3"
|
||||
>
|
||||
Create your first Collection.
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<CreateCollectionModal
|
||||
organizationId={props.organizationId}
|
||||
projectId={props.projectId}
|
||||
targetId={props.targetId}
|
||||
isOpen={isCollectionModalOpen}
|
||||
toggleModalOpen={toggleCollectionModal}
|
||||
collectionId={collectionId}
|
||||
/>
|
||||
<DeleteCollectionModal
|
||||
organizationId={props.organizationId}
|
||||
projectId={props.projectId}
|
||||
targetId={props.targetId}
|
||||
isOpen={isDeleteCollectionModalOpen}
|
||||
toggleModalOpen={toggleDeleteCollectionModalOpen}
|
||||
collectionId={collectionId}
|
||||
/>
|
||||
{operationToDeleteId && (
|
||||
<DeleteOperationModal
|
||||
organizationId={props.organizationId}
|
||||
projectId={props.projectId}
|
||||
targetId={props.targetId}
|
||||
isOpen={isDeleteOperationModalOpen}
|
||||
toggleModalOpen={toggleDeleteOperationModalOpen}
|
||||
operationId={operationToDeleteId}
|
||||
/>
|
||||
)}
|
||||
{operationToEditId && (
|
||||
<EditOperationModal
|
||||
organizationId={props.organizationId}
|
||||
projectId={props.projectId}
|
||||
targetId={props.targetId}
|
||||
operationId={operationToEditId}
|
||||
close={() => setOperationToEditId(null)}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
const plugin = {
|
||||
title: 'Operation Collections',
|
||||
content: Content,
|
||||
icon: function Icon() {
|
||||
const pluginContext = usePluginContext();
|
||||
const IconToUse =
|
||||
pluginContext?.visiblePlugin === plugin ? BookmarkFilledIcon : BookmarkIcon;
|
||||
return <IconToUse />;
|
||||
},
|
||||
};
|
||||
|
||||
return plugin;
|
||||
}, [props.canEdit, props.canDelete]);
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import { useCurrentOperation } from './use-current-operation';
|
||||
|
||||
export function useSyncOperationState(props: {
|
||||
organizationId: string;
|
||||
projectId: string;
|
||||
targetId: string;
|
||||
}): {
|
||||
savedOperation: { query: string; variables: string; updatedAt: number } | null;
|
||||
setSavedOperation: (value: { query: string; variables: string }) => void;
|
||||
clearOperation: () => void;
|
||||
} {
|
||||
const currentOperation = useCurrentOperation({
|
||||
organizationId: props.organizationId,
|
||||
projectId: props.projectId,
|
||||
targetId: props.targetId,
|
||||
});
|
||||
const storageKey = currentOperation ? `hive:operation-${currentOperation.id}` : null;
|
||||
const savedOperationData = storageKey ? localStorage.getItem(storageKey) : null;
|
||||
|
||||
return {
|
||||
savedOperation: savedOperationData ? JSON.parse(savedOperationData) : null,
|
||||
setSavedOperation(value: { query: string; variables: string }) {
|
||||
if (storageKey) {
|
||||
localStorage.setItem(storageKey, JSON.stringify({ ...value, updatedAt: Date.now() }));
|
||||
}
|
||||
},
|
||||
clearOperation() {
|
||||
if (storageKey) {
|
||||
localStorage.removeItem(storageKey);
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
import { useRouter } from '@tanstack/react-router';
|
||||
|
||||
export function useOperationFromQueryString() {
|
||||
const router = useRouter();
|
||||
|
||||
const { search } = router.latestLocation;
|
||||
|
||||
return 'operation' in search && typeof search.operation === 'string' ? search.operation : null;
|
||||
}
|
||||
|
|
@ -12,10 +12,10 @@ import type { DeleteCollectionMutationType } from '@/components/target/laborator
|
|||
import type { DeleteOperationMutationType } from '@/components/target/laboratory/delete-operation-modal';
|
||||
import type { CreateAccessToken_CreateTokenMutation } from '@/components/target/settings/registry-access-token';
|
||||
import { graphql } from '@/gql';
|
||||
import { CollectionsQuery } from '@/lib/hooks/laboratory/use-collections';
|
||||
import type { CreateOrganizationMutation } from '@/pages/organization-new';
|
||||
import type { DeleteOrganizationDocument } from '@/pages/organization-settings';
|
||||
import type { DeleteProjectMutation } from '@/pages/project-settings';
|
||||
import { CollectionsQuery } from '@/pages/target-laboratory';
|
||||
import {
|
||||
TokensDocument,
|
||||
type DeleteTargetMutation,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
import { GraphiQL } from 'graphiql';
|
||||
import { HiveLogo } from '@/components/ui/icon';
|
||||
import { createGraphiQLFetcher } from '@graphiql/toolkit';
|
||||
import 'graphiql/graphiql.css';
|
||||
import { Helmet } from 'react-helmet-async';
|
||||
import { HiveLogo } from '@/components/ui/icon';
|
||||
import { env } from '@/env/frontend';
|
||||
import { createGraphiQLFetcher } from '@graphiql/toolkit';
|
||||
import 'graphiql/style.css';
|
||||
|
||||
export function DevPage() {
|
||||
return (
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -73,18 +73,21 @@ Default.args = {
|
|||
isOpen: true,
|
||||
close: () => {},
|
||||
collections: [
|
||||
// @ts-expect-error -- Tuval: these types are invalid
|
||||
{
|
||||
id: '1',
|
||||
name: 'Collection 1',
|
||||
__typename: 'DocumentCollection',
|
||||
description: 'Collection 1 description',
|
||||
},
|
||||
// @ts-expect-error -- Tuval: these types are invalid
|
||||
{
|
||||
id: '2',
|
||||
name: 'Collection 2',
|
||||
__typename: 'DocumentCollection',
|
||||
description: 'Collection 2 description',
|
||||
},
|
||||
// @ts-expect-error -- Tuval: these types are invalid
|
||||
{
|
||||
id: '3',
|
||||
name: 'Collection 3',
|
||||
|
|
|
|||
140
patches/@graphiql__react@1.0.0-alpha.3.patch
Normal file
140
patches/@graphiql__react@1.0.0-alpha.3.patch
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
diff --git a/dist/index.mjs b/dist/index.mjs
|
||||
index 567480ba5ccc30619db2eb8e6da8d618ddb5e891..c49c573893a26897062cda2af9896bc69881db2a 100644
|
||||
--- a/dist/index.mjs
|
||||
+++ b/dist/index.mjs
|
||||
@@ -3056,14 +3056,16 @@ function useSetEditorValues({
|
||||
);
|
||||
}
|
||||
function createTab({
|
||||
+ id,
|
||||
+ title,
|
||||
query = null,
|
||||
variables = null,
|
||||
headers = null
|
||||
-} = {}) {
|
||||
+}) {
|
||||
return {
|
||||
- id: guid(),
|
||||
+ id: id || guid(),
|
||||
hash: hashFromTabContents({ query, variables, headers }),
|
||||
- title: query && fuzzyExtractOperationName(query) || DEFAULT_TITLE,
|
||||
+ title: title || query && fuzzyExtractOperationName(query) || DEFAULT_TITLE,
|
||||
query,
|
||||
variables,
|
||||
headers,
|
||||
@@ -3081,8 +3083,7 @@ function setPropertiesInActiveTab(state, partialTab) {
|
||||
const newTab = { ...tab, ...partialTab };
|
||||
return {
|
||||
...newTab,
|
||||
- hash: hashFromTabContents(newTab),
|
||||
- title: newTab.operationName || (newTab.query ? fuzzyExtractOperationName(newTab.query) : void 0) || DEFAULT_TITLE
|
||||
+ hash: hashFromTabContents(newTab)
|
||||
};
|
||||
})
|
||||
};
|
||||
@@ -3304,25 +3305,31 @@ function EditorContextProvider(props) {
|
||||
responseEditor,
|
||||
defaultHeaders
|
||||
});
|
||||
- const addTab = useCallback(() => {
|
||||
- setTabState((current) => {
|
||||
- const updatedValues = synchronizeActiveTabValues(current);
|
||||
- const updated = {
|
||||
- tabs: [...updatedValues.tabs, createTab({ headers: defaultHeaders })],
|
||||
- activeTabIndex: updatedValues.tabs.length
|
||||
- };
|
||||
- storeTabs(updated);
|
||||
- setEditorValues(updated.tabs[updated.activeTabIndex]);
|
||||
- onTabChange == null ? void 0 : onTabChange(updated);
|
||||
- return updated;
|
||||
- });
|
||||
- }, [
|
||||
- defaultHeaders,
|
||||
- onTabChange,
|
||||
- setEditorValues,
|
||||
- storeTabs,
|
||||
- synchronizeActiveTabValues
|
||||
- ]);
|
||||
+ const addTab = useCallback(
|
||||
+ (_tabState) => {
|
||||
+ setTabState((current) => {
|
||||
+ const updatedValues = synchronizeActiveTabValues(current);
|
||||
+ const updated = {
|
||||
+ tabs: [
|
||||
+ ...updatedValues.tabs,
|
||||
+ createTab({ ..._tabState, headers: defaultHeaders })
|
||||
+ ],
|
||||
+ activeTabIndex: updatedValues.tabs.length
|
||||
+ };
|
||||
+ storeTabs(updated);
|
||||
+ setEditorValues(updated.tabs[updated.activeTabIndex]);
|
||||
+ onTabChange == null ? void 0 : onTabChange(updated);
|
||||
+ return updated;
|
||||
+ });
|
||||
+ },
|
||||
+ [
|
||||
+ defaultHeaders,
|
||||
+ onTabChange,
|
||||
+ setEditorValues,
|
||||
+ storeTabs,
|
||||
+ synchronizeActiveTabValues
|
||||
+ ]
|
||||
+ );
|
||||
const changeTab = useCallback(
|
||||
(index) => {
|
||||
setTabState((current) => {
|
||||
@@ -3418,6 +3425,7 @@ function EditorContextProvider(props) {
|
||||
const value = useMemo(
|
||||
() => ({
|
||||
...tabState,
|
||||
+ setTabState,
|
||||
addTab,
|
||||
changeTab,
|
||||
moveTab,
|
||||
diff --git a/dist/types/editor/context.d.ts b/dist/types/editor/context.d.ts
|
||||
index 199db8a294f8132d46470498870adbdf9fdc83af..d8901fe0d50db17db36a502dcf69d5f69efb84a1 100644
|
||||
--- a/dist/types/editor/context.d.ts
|
||||
+++ b/dist/types/editor/context.d.ts
|
||||
@@ -1,6 +1,6 @@
|
||||
import { DocumentNode, FragmentDefinitionNode, OperationDefinitionNode, ValidationRule } from 'graphql';
|
||||
import { VariableToType } from 'graphql-language-service';
|
||||
-import { ReactNode } from 'react';
|
||||
+import { Dispatch, ReactNode, SetStateAction } from 'react';
|
||||
import { TabDefinition, TabsState, TabState } from './tabs';
|
||||
import { CodeMirrorEditor } from './types';
|
||||
export declare type CodeMirrorEditorWithOperationFacts = CodeMirrorEditor & {
|
||||
@@ -10,10 +10,11 @@ export declare type CodeMirrorEditorWithOperationFacts = CodeMirrorEditor & {
|
||||
variableToType: VariableToType | null;
|
||||
};
|
||||
export declare type EditorContextType = TabsState & {
|
||||
+ setTabState: Dispatch<SetStateAction<TabsState>>;
|
||||
/**
|
||||
* Add a new tab.
|
||||
*/
|
||||
- addTab(): void;
|
||||
+ addTab(tabState?: Pick<TabState, 'id' | 'query' | 'variables' | 'headers' | 'title'>): void;
|
||||
/**
|
||||
* Switch to a different tab.
|
||||
* @param index The index of the tab that should be switched to.
|
||||
@@ -38,7 +39,7 @@ export declare type EditorContextType = TabsState & {
|
||||
* @param partialTab A partial tab state object that will override the
|
||||
* current values. The properties `id`, `hash` and `title` cannot be changed.
|
||||
*/
|
||||
- updateActiveTabValues(partialTab: Partial<Omit<TabState, 'id' | 'hash' | 'title'>>): void;
|
||||
+ updateActiveTabValues(partialTab: Partial<Omit<TabState, 'hash'>>): void;
|
||||
/**
|
||||
* The CodeMirror editor instance for the headers editor.
|
||||
*/
|
||||
diff --git a/dist/types/editor/tabs.d.ts b/dist/types/editor/tabs.d.ts
|
||||
index 28704a9c1c6e22fa75986de8591759e13035c8c5..5204d2b25198f89da9bba70804656f02799c7df6 100644
|
||||
--- a/dist/types/editor/tabs.d.ts
|
||||
+++ b/dist/types/editor/tabs.d.ts
|
||||
@@ -90,7 +90,7 @@ export declare function useSetEditorValues({ queryEditor, variableEditor, header
|
||||
headers?: string | null | undefined;
|
||||
response: string | null;
|
||||
}) => void;
|
||||
-export declare function createTab({ query, variables, headers, }?: Partial<TabDefinition>): TabState;
|
||||
+export declare function createTab({ id, title, query, variables, headers, }: Partial<TabDefinition & Pick<TabState, 'id' | 'title'>>): TabState;
|
||||
export declare function setPropertiesInActiveTab(state: TabsState, partialTab: Partial<Omit<TabState, 'id' | 'hash' | 'title'>>): TabsState;
|
||||
export declare function fuzzyExtractOperationName(str: string): string | null;
|
||||
export declare function clearHeadersFromTabs(storage: StorageAPI | null): void;
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
# move prettify button to the end, we can't use `<GraphiQL.Toolbar />` because `usePrettifyEditors` needs to access `EditorContextProvider`
|
||||
#
|
||||
diff --git a/esm/components/GraphiQL.js b/esm/components/GraphiQL.js
|
||||
index adf5b7dfc4d292391c5f3c20d7082984529062d9..e8d32614459dd0e9ee484ce278b8ce4f3a9e7d35 100644
|
||||
--- a/esm/components/GraphiQL.js
|
||||
+++ b/esm/components/GraphiQL.js
|
||||
@@ -139,14 +139,10 @@ export function GraphiQLInterface(props) {
|
||||
var toolbar = children.find(function (child) {
|
||||
return isChildComponentType(child, GraphiQL.Toolbar);
|
||||
}) || (React.createElement(React.Fragment, null,
|
||||
- React.createElement(ToolbarButton, { onClick: prettify, label: "Prettify query (Shift-Ctrl-P)" },
|
||||
- React.createElement(PrettifyIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" })),
|
||||
- React.createElement(ToolbarButton, { onClick: merge, label: "Merge fragments into query (Shift-Ctrl-M)" },
|
||||
- React.createElement(MergeIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" })),
|
||||
- React.createElement(ToolbarButton, { onClick: copy, label: "Copy query (Shift-Ctrl-C)" },
|
||||
- React.createElement(CopyIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" })), (_c = props.toolbar) === null || _c === void 0 ? void 0 :
|
||||
- _c.additionalContent,
|
||||
- ((_d = props.toolbar) === null || _d === void 0 ? void 0 : _d.additionalComponent) && (React.createElement(props.toolbar.additionalComponent, null))));
|
||||
+ (_c = props.toolbar) === null || _c === void 0 ? void 0 : _c.additionalContent,
|
||||
+ ((_d = props.toolbar) === null || _d === void 0 ? void 0 : _d.additionalComponent) && (React.createElement(props.toolbar.additionalComponent, null)),
|
||||
+ React.createElement(ToolbarButton, { onClick: prettify, label: "Prettify query (Shift-Ctrl-P)" }, React.createElement(PrettifyIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" }))
|
||||
+ ));
|
||||
var footer = children.find(function (child) {
|
||||
return isChildComponentType(child, GraphiQL.Footer);
|
||||
});
|
||||
283
pnpm-lock.yaml
283
pnpm-lock.yaml
|
|
@ -8,6 +8,9 @@ patchedDependencies:
|
|||
'@apollo/federation@0.38.1':
|
||||
hash: rjgakkkphrejw6qrtph4ar24zq
|
||||
path: patches/@apollo__federation@0.38.1.patch
|
||||
'@graphiql/react@1.0.0-alpha.3':
|
||||
hash: gnbo5nw2wgehkfq2yrmuhrx4im
|
||||
path: patches/@graphiql__react@1.0.0-alpha.3.patch
|
||||
'@graphql-eslint/eslint-plugin@3.20.1':
|
||||
hash: n437g5o7zq7pnxdxldn52uql2q
|
||||
path: patches/@graphql-eslint__eslint-plugin@3.20.1.patch
|
||||
|
|
@ -26,9 +29,6 @@ patchedDependencies:
|
|||
got@14.4.2:
|
||||
hash: b6pwqmrs3qqykctltsasvrfwti
|
||||
path: patches/got@14.4.2.patch
|
||||
graphiql@3.3.2:
|
||||
hash: p4mc7pxwsatzeupmv5hnqi5t6q
|
||||
path: patches/graphiql@3.3.0.patch
|
||||
mjml-core@4.14.0:
|
||||
hash: zxxsxbqejjmcwuzpigutzzq6wa
|
||||
path: patches/mjml-core@4.14.0.patch
|
||||
|
|
@ -1309,7 +1309,7 @@ importers:
|
|||
devDependencies:
|
||||
'@graphql-inspector/core':
|
||||
specifier: 5.1.0-alpha-20231208113249-34700c8a
|
||||
version: 5.1.0-alpha-20231208113249-34700c8a(graphql@16.9.0)
|
||||
version: 5.1.0-alpha-20231208113249-34700c8a(graphql@17.0.0-alpha.7)
|
||||
'@hive/service-common':
|
||||
specifier: workspace:*
|
||||
version: link:../service-common
|
||||
|
|
@ -1638,8 +1638,8 @@ importers:
|
|||
specifier: 6.0.7
|
||||
version: 6.0.7(@types/node@20.16.1)(less@4.2.0)(terser@5.31.1)
|
||||
'@graphiql/react':
|
||||
specifier: 0.22.4
|
||||
version: 0.22.4(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
specifier: 1.0.0-alpha.3
|
||||
version: 1.0.0-alpha.3(patch_hash=gnbo5nw2wgehkfq2yrmuhrx4im)(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@graphiql/toolkit':
|
||||
specifier: 0.9.1
|
||||
version: 0.9.1(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)
|
||||
|
|
@ -1851,8 +1851,8 @@ importers:
|
|||
specifier: 11.3.28
|
||||
version: 11.3.28(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
graphiql:
|
||||
specifier: 3.3.2
|
||||
version: 3.3.2(patch_hash=p4mc7pxwsatzeupmv5hnqi5t6q)(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
specifier: 4.0.0-alpha.4
|
||||
version: 4.0.0-alpha.4(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
graphql:
|
||||
specifier: 16.9.0
|
||||
version: 16.9.0
|
||||
|
|
@ -4192,13 +4192,22 @@ packages:
|
|||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0
|
||||
typescript: ^5.0.0
|
||||
|
||||
'@graphiql/react@0.22.4':
|
||||
resolution: {integrity: sha512-FsupNjAUJ17qhdyCjKo150wpNH7gr0ScAm/Rmk7VHP4Mh0Osid+1bKLPtXEOjGI+InuTPSKhJw3Zbm8dD3+o1A==}
|
||||
'@graphiql/react@1.0.0-alpha.3':
|
||||
resolution: {integrity: sha512-9WPfC7I9xO1qC/dKaYwVe3UbPJvdjU+fxoUW2Id0mIljkD7LXnVUnzBQMB1SY4JrRJX3I0nQPbHXzKvAYSpnjw==}
|
||||
peerDependencies:
|
||||
graphql: ^15.5.0 || ^16.0.0
|
||||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2
|
||||
react: ^16.8.0 || ^17 || ^18
|
||||
react-dom: ^16.8.0 || ^17 || ^18
|
||||
|
||||
'@graphiql/toolkit@0.10.0':
|
||||
resolution: {integrity: sha512-tVWVYL4AKrkBr4f4Vw4/EV1NjstVYg3TGnatFVe6TdBW4kBeATBz5jyGJju/Oq2JrrrQ2LNXfhCDwfdjSlKyHg==}
|
||||
peerDependencies:
|
||||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2
|
||||
graphql-ws: '>= 4.5.0'
|
||||
peerDependenciesMeta:
|
||||
graphql-ws:
|
||||
optional: true
|
||||
|
||||
'@graphiql/toolkit@0.9.1':
|
||||
resolution: {integrity: sha512-LVt9pdk0830so50ZnU2Znb2rclcoWznG8r8asqAENzV0U1FM1kuY0sdPpc/rBc9MmmNgnB6A+WZzDhq6dbhTHA==}
|
||||
peerDependencies:
|
||||
|
|
@ -5055,24 +5064,6 @@ packages:
|
|||
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||
|
||||
'@motionone/animation@10.15.1':
|
||||
resolution: {integrity: sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ==}
|
||||
|
||||
'@motionone/dom@10.12.0':
|
||||
resolution: {integrity: sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw==}
|
||||
|
||||
'@motionone/easing@10.15.1':
|
||||
resolution: {integrity: sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw==}
|
||||
|
||||
'@motionone/generators@10.15.1':
|
||||
resolution: {integrity: sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ==}
|
||||
|
||||
'@motionone/types@10.15.1':
|
||||
resolution: {integrity: sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA==}
|
||||
|
||||
'@motionone/utils@10.15.1':
|
||||
resolution: {integrity: sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw==}
|
||||
|
||||
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2':
|
||||
resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==}
|
||||
cpu: [arm64]
|
||||
|
|
@ -9246,12 +9237,12 @@ packages:
|
|||
code-block-writer@13.0.1:
|
||||
resolution: {integrity: sha512-c5or4P6erEA69TxaxTNcHUNcIn+oyxSRTOWV+pSYF+z4epXqNvwvJ70XPGjPNgue83oAFAPBRQYwpAJ/Hpe/Sg==}
|
||||
|
||||
codemirror-graphql@2.0.12:
|
||||
resolution: {integrity: sha512-5UCqhWzck1jClCmRewFb8aSiabnAqiaRfsvIPfmbf6WJvOb8oiefJeHilclPPiZBzY8v/Et6EBMtOeKnWCoyng==}
|
||||
codemirror-graphql@2.1.0:
|
||||
resolution: {integrity: sha512-Lm5augEJOd+7L6HXzBDmx/n7ViL8P/Dt0ba21X0JLeaMMEWtcG1SOvIdeI35St9ADOGdu/eMOg7aciX/RnWDFA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.0.0
|
||||
codemirror: ^5.65.3
|
||||
graphql: ^15.5.0 || ^16.0.0
|
||||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2
|
||||
|
||||
codemirror@5.65.9:
|
||||
resolution: {integrity: sha512-19Jox5sAKpusTDgqgKB5dawPpQcY+ipQK7xoEI+MVucEF9qqFaXpeqY1KaoyGBso/wHQoDa4HMMxMjdsS3Zzzw==}
|
||||
|
|
@ -9726,6 +9717,9 @@ packages:
|
|||
dayjs@1.11.7:
|
||||
resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
|
||||
|
||||
debounce-promise@3.1.2:
|
||||
resolution: {integrity: sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==}
|
||||
|
||||
debounce@1.2.1:
|
||||
resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
|
||||
|
||||
|
|
@ -10812,6 +10806,17 @@ packages:
|
|||
fraction.js@4.3.7:
|
||||
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
|
||||
|
||||
framer-motion@10.18.0:
|
||||
resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==}
|
||||
peerDependencies:
|
||||
react: ^18.0.0
|
||||
react-dom: ^18.0.0
|
||||
peerDependenciesMeta:
|
||||
react:
|
||||
optional: true
|
||||
react-dom:
|
||||
optional: true
|
||||
|
||||
framer-motion@11.3.28:
|
||||
resolution: {integrity: sha512-dqhoawipEAjqdv32zbv72sOMJZjol7dROWn7t/FOq23WXJ40O4OUybgnO2ldnuS+3YquSn8xO/KKRavZ+TBVOQ==}
|
||||
peerDependencies:
|
||||
|
|
@ -10826,15 +10831,6 @@ packages:
|
|||
react-dom:
|
||||
optional: true
|
||||
|
||||
framer-motion@6.5.1:
|
||||
resolution: {integrity: sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw==}
|
||||
peerDependencies:
|
||||
react: '>=16.8 || ^17.0.0 || ^18.0.0'
|
||||
react-dom: '>=16.8 || ^17.0.0 || ^18.0.0'
|
||||
|
||||
framesync@6.0.1:
|
||||
resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==}
|
||||
|
||||
fresh@0.5.2:
|
||||
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
|
@ -10975,6 +10971,10 @@ packages:
|
|||
get-tsconfig@4.7.5:
|
||||
resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
|
||||
|
||||
get-value@3.0.1:
|
||||
resolution: {integrity: sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==}
|
||||
engines: {node: '>=6.0'}
|
||||
|
||||
getos@3.2.1:
|
||||
resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==}
|
||||
|
||||
|
|
@ -11106,10 +11106,10 @@ packages:
|
|||
graphemer@1.4.0:
|
||||
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
|
||||
|
||||
graphiql@3.3.2:
|
||||
resolution: {integrity: sha512-LJ8Q6UM3kUzTXvybud9a4sj/QBEVHwHWd5Oc3OjLp9DQiKjqVY/2P/Q3RdPQD/MihwaO+6eC69R4MYnPQGd2Hw==}
|
||||
graphiql@4.0.0-alpha.4:
|
||||
resolution: {integrity: sha512-mMjUJKqNSuHGDBC6JE3CprtBniB3iaGN7Ifisrd6ucmpH7biqA1uIbz1LgzCeQdtndCTHADLJu6dCGOWAcgP9w==}
|
||||
peerDependencies:
|
||||
graphql: ^15.5.0 || ^16.0.0
|
||||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2
|
||||
react: ^16.8.0 || ^17 || ^18
|
||||
react-dom: ^16.8.0 || ^17 || ^18
|
||||
|
||||
|
|
@ -11174,11 +11174,11 @@ packages:
|
|||
peerDependencies:
|
||||
graphql: ^15.5.0 || ^16.0.0
|
||||
|
||||
graphql-language-service@5.2.1:
|
||||
resolution: {integrity: sha512-8ewD6otGO43vg2TiEGjoLz3CweTwfaf4ZnqfNREqZXS2JSJGXtsRBOMMknCxMfFVh4x14ql3jyDrXcyAAtbmkQ==}
|
||||
graphql-language-service@5.3.0:
|
||||
resolution: {integrity: sha512-gCQIIy7lM9CB1KPLEb+DNZLczA9zuTLEOJE2hEQZTFYInogdmMDRa6RAkvM4LL0LcgcS+3uPs6KtHlcjCqRbUg==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
graphql: ^15.5.0 || ^16.0.0
|
||||
graphql: ^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2
|
||||
|
||||
graphql-modules@2.3.0:
|
||||
resolution: {integrity: sha512-CcrjUjMYHy3zelnffldhR3h6t4ndCVJEzdqBAv/mp4ZGEA/izirOKZB2lnRwpXNqOtVwIz2O/E1Cg/UH8dFNaQ==}
|
||||
|
|
@ -11248,6 +11248,10 @@ packages:
|
|||
resolution: {integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw==}
|
||||
engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0}
|
||||
|
||||
graphql@17.0.0-alpha.7:
|
||||
resolution: {integrity: sha512-kdteHez9s0lfNAGntSwnDBpxSl09sBWEFxFRPS/Z8K1nCD4FZ2wVGwXuj5dvrTKcqOA+O8ujAJ3CiY/jXhs14g==}
|
||||
engines: {node: ^16.19.0 || ^18.14.0 || >=19.7.0}
|
||||
|
||||
gray-matter@4.0.3:
|
||||
resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
|
||||
engines: {node: '>=6.0'}
|
||||
|
|
@ -11355,9 +11359,6 @@ packages:
|
|||
help-me@5.0.0:
|
||||
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
|
||||
|
||||
hey-listen@1.0.8:
|
||||
resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
|
||||
|
||||
highlight-words-core@1.2.2:
|
||||
resolution: {integrity: sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==}
|
||||
|
||||
|
|
@ -13911,9 +13912,6 @@ packages:
|
|||
resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
popmotion@11.0.3:
|
||||
resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==}
|
||||
|
||||
postcss-calc@10.0.0:
|
||||
resolution: {integrity: sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==}
|
||||
engines: {node: ^18.12 || ^20.9 || >=22.0}
|
||||
|
|
@ -15486,9 +15484,6 @@ packages:
|
|||
style-to-object@1.0.5:
|
||||
resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==}
|
||||
|
||||
style-value-types@5.0.0:
|
||||
resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==}
|
||||
|
||||
styled-jsx@5.1.1:
|
||||
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
|
@ -17106,10 +17101,10 @@ snapshots:
|
|||
dependencies:
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/client-sts': 3.596.0
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0
|
||||
'@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/core': 3.592.0
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/middleware-host-header': 3.577.0
|
||||
'@aws-sdk/middleware-logger': 3.577.0
|
||||
'@aws-sdk/middleware-recursion-detection': 3.577.0
|
||||
|
|
@ -17214,13 +17209,13 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0)':
|
||||
'@aws-sdk/client-sso-oidc@3.596.0':
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sts': 3.596.0
|
||||
'@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/core': 3.592.0
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/middleware-host-header': 3.577.0
|
||||
'@aws-sdk/middleware-logger': 3.577.0
|
||||
'@aws-sdk/middleware-recursion-detection': 3.577.0
|
||||
|
|
@ -17257,7 +17252,6 @@ snapshots:
|
|||
'@smithy/util-utf8': 3.0.0
|
||||
tslib: 2.6.3
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/client-sts'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sso-oidc@3.632.0(@aws-sdk/client-sts@3.632.0)':
|
||||
|
|
@ -17391,13 +17385,13 @@ snapshots:
|
|||
transitivePeerDependencies:
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sts@3.596.0':
|
||||
'@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)':
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': 3.0.0
|
||||
'@aws-crypto/sha256-js': 3.0.0
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0
|
||||
'@aws-sdk/core': 3.592.0
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-node': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/middleware-host-header': 3.577.0
|
||||
'@aws-sdk/middleware-logger': 3.577.0
|
||||
'@aws-sdk/middleware-recursion-detection': 3.577.0
|
||||
|
|
@ -17434,6 +17428,7 @@ snapshots:
|
|||
'@smithy/util-utf8': 3.0.0
|
||||
tslib: 2.6.3
|
||||
transitivePeerDependencies:
|
||||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/client-sts@3.632.0':
|
||||
|
|
@ -17542,14 +17537,14 @@ snapshots:
|
|||
'@smithy/util-stream': 3.1.3
|
||||
tslib: 2.6.3
|
||||
|
||||
'@aws-sdk/credential-provider-ini@3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)':
|
||||
'@aws-sdk/credential-provider-ini@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sts': 3.596.0
|
||||
'@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/credential-provider-env': 3.587.0
|
||||
'@aws-sdk/credential-provider-http': 3.596.0
|
||||
'@aws-sdk/credential-provider-process': 3.587.0
|
||||
'@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/credential-provider-imds': 3.1.4
|
||||
'@smithy/property-provider': 3.1.3
|
||||
|
|
@ -17578,14 +17573,14 @@ snapshots:
|
|||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/credential-provider-node@3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)':
|
||||
'@aws-sdk/credential-provider-node@3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/credential-provider-env': 3.587.0
|
||||
'@aws-sdk/credential-provider-http': 3.596.0
|
||||
'@aws-sdk/credential-provider-ini': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-ini': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/credential-provider-process': 3.587.0
|
||||
'@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/credential-provider-imds': 3.1.4
|
||||
'@smithy/property-provider': 3.1.3
|
||||
|
|
@ -17632,10 +17627,10 @@ snapshots:
|
|||
'@smithy/types': 3.3.0
|
||||
tslib: 2.6.3
|
||||
|
||||
'@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))':
|
||||
'@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.596.0)':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sso': 3.592.0
|
||||
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))
|
||||
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.3
|
||||
'@smithy/shared-ini-file-loader': 3.1.4
|
||||
|
|
@ -17658,9 +17653,9 @@ snapshots:
|
|||
- '@aws-sdk/client-sso-oidc'
|
||||
- aws-crt
|
||||
|
||||
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.596.0)':
|
||||
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.596.0(@aws-sdk/client-sso-oidc@3.596.0))':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sts': 3.596.0
|
||||
'@aws-sdk/client-sts': 3.596.0(@aws-sdk/client-sso-oidc@3.596.0)
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.3
|
||||
'@smithy/types': 3.3.0
|
||||
|
|
@ -17825,9 +17820,9 @@ snapshots:
|
|||
'@smithy/types': 3.3.0
|
||||
tslib: 2.6.3
|
||||
|
||||
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.596.0(@aws-sdk/client-sts@3.596.0))':
|
||||
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.596.0)':
|
||||
dependencies:
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0(@aws-sdk/client-sts@3.596.0)
|
||||
'@aws-sdk/client-sso-oidc': 3.596.0
|
||||
'@aws-sdk/types': 3.577.0
|
||||
'@smithy/property-provider': 3.1.3
|
||||
'@smithy/shared-ini-file-loader': 3.1.4
|
||||
|
|
@ -19699,7 +19694,7 @@ snapshots:
|
|||
|
||||
'@escape.tech/graphql-armor-types@0.6.0':
|
||||
dependencies:
|
||||
graphql: 16.9.0
|
||||
graphql: link:../graphiql/node_modules/graphql
|
||||
optional: true
|
||||
|
||||
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.0(patch_hash=fjbpfrtrjd6idngyeqxnwopfva))':
|
||||
|
|
@ -19870,9 +19865,9 @@ snapshots:
|
|||
graphql: 16.9.0
|
||||
typescript: 5.5.4
|
||||
|
||||
'@graphiql/react@0.22.4(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@graphiql/react@1.0.0-alpha.3(patch_hash=gnbo5nw2wgehkfq2yrmuhrx4im)(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@graphiql/toolkit': 0.9.1(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)
|
||||
'@graphiql/toolkit': 0.10.0(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)
|
||||
'@headlessui/react': 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-dialog': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-dropdown-menu': 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
|
|
@ -19881,11 +19876,12 @@ snapshots:
|
|||
'@types/codemirror': 5.60.15
|
||||
clsx: 1.2.1
|
||||
codemirror: 5.65.9
|
||||
codemirror-graphql: 2.0.12(@codemirror/language@6.10.2)(codemirror@5.65.9)(graphql@16.9.0)
|
||||
codemirror-graphql: 2.1.0(@codemirror/language@6.10.2)(codemirror@5.65.9)(graphql@16.9.0)
|
||||
copy-to-clipboard: 3.3.3
|
||||
framer-motion: 6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
framer-motion: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
get-value: 3.0.1
|
||||
graphql: 16.9.0
|
||||
graphql-language-service: 5.2.1(graphql@16.9.0)
|
||||
graphql-language-service: 5.3.0(graphql@16.9.0)
|
||||
markdown-it: 14.1.0
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
|
@ -19897,6 +19893,16 @@ snapshots:
|
|||
- '@types/react-dom'
|
||||
- graphql-ws
|
||||
|
||||
'@graphiql/toolkit@0.10.0(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)':
|
||||
dependencies:
|
||||
'@n1ru4l/push-pull-async-iterable-iterator': 3.2.0
|
||||
graphql: 16.9.0
|
||||
meros: 1.2.1(@types/node@20.16.1)
|
||||
optionalDependencies:
|
||||
graphql-ws: 5.16.0(graphql@16.9.0)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
|
||||
'@graphiql/toolkit@0.9.1(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)':
|
||||
dependencies:
|
||||
'@n1ru4l/push-pull-async-iterable-iterator': 3.2.0
|
||||
|
|
@ -20255,6 +20261,13 @@ snapshots:
|
|||
object-inspect: 1.12.3
|
||||
tslib: 2.6.2
|
||||
|
||||
'@graphql-inspector/core@5.1.0-alpha-20231208113249-34700c8a(graphql@17.0.0-alpha.7)':
|
||||
dependencies:
|
||||
dependency-graph: 0.11.0
|
||||
graphql: 17.0.0-alpha.7
|
||||
object-inspect: 1.12.3
|
||||
tslib: 2.6.2
|
||||
|
||||
'@graphql-inspector/coverage-command@5.0.3(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.0.3(@babel/core@7.22.9)(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)':
|
||||
dependencies:
|
||||
'@graphql-inspector/commands': 4.0.3(@graphql-inspector/config@4.0.2(graphql@16.9.0))(@graphql-inspector/loaders@4.0.3(@babel/core@7.22.9)(@graphql-inspector/config@4.0.2(graphql@16.9.0))(graphql@16.9.0))(graphql@16.9.0)(yargs@17.7.2)
|
||||
|
|
@ -21390,41 +21403,6 @@ snapshots:
|
|||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
'@motionone/animation@10.15.1':
|
||||
dependencies:
|
||||
'@motionone/easing': 10.15.1
|
||||
'@motionone/types': 10.15.1
|
||||
'@motionone/utils': 10.15.1
|
||||
tslib: 2.6.3
|
||||
|
||||
'@motionone/dom@10.12.0':
|
||||
dependencies:
|
||||
'@motionone/animation': 10.15.1
|
||||
'@motionone/generators': 10.15.1
|
||||
'@motionone/types': 10.15.1
|
||||
'@motionone/utils': 10.15.1
|
||||
hey-listen: 1.0.8
|
||||
tslib: 2.6.3
|
||||
|
||||
'@motionone/easing@10.15.1':
|
||||
dependencies:
|
||||
'@motionone/utils': 10.15.1
|
||||
tslib: 2.6.3
|
||||
|
||||
'@motionone/generators@10.15.1':
|
||||
dependencies:
|
||||
'@motionone/types': 10.15.1
|
||||
'@motionone/utils': 10.15.1
|
||||
tslib: 2.6.3
|
||||
|
||||
'@motionone/types@10.15.1': {}
|
||||
|
||||
'@motionone/utils@10.15.1':
|
||||
dependencies:
|
||||
'@motionone/types': 10.15.1
|
||||
hey-listen: 1.0.8
|
||||
tslib: 2.6.3
|
||||
|
||||
'@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2':
|
||||
optional: true
|
||||
|
||||
|
|
@ -26653,13 +26631,13 @@ snapshots:
|
|||
|
||||
code-block-writer@13.0.1: {}
|
||||
|
||||
codemirror-graphql@2.0.12(@codemirror/language@6.10.2)(codemirror@5.65.9)(graphql@16.9.0):
|
||||
codemirror-graphql@2.1.0(@codemirror/language@6.10.2)(codemirror@5.65.9)(graphql@16.9.0):
|
||||
dependencies:
|
||||
'@codemirror/language': 6.10.2
|
||||
'@types/codemirror': 0.0.90
|
||||
codemirror: 5.65.9
|
||||
graphql: 16.9.0
|
||||
graphql-language-service: 5.2.1(graphql@16.9.0)
|
||||
graphql-language-service: 5.3.0(graphql@16.9.0)
|
||||
|
||||
codemirror@5.65.9: {}
|
||||
|
||||
|
|
@ -27213,6 +27191,8 @@ snapshots:
|
|||
|
||||
dayjs@1.11.7: {}
|
||||
|
||||
debounce-promise@3.1.2: {}
|
||||
|
||||
debounce@1.2.1: {}
|
||||
|
||||
debug@2.6.9:
|
||||
|
|
@ -28631,6 +28611,14 @@ snapshots:
|
|||
|
||||
fraction.js@4.3.7: {}
|
||||
|
||||
framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
tslib: 2.6.3
|
||||
optionalDependencies:
|
||||
'@emotion/is-prop-valid': 0.8.8
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
framer-motion@11.3.28(@emotion/is-prop-valid@1.2.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
tslib: 2.6.3
|
||||
|
|
@ -28639,23 +28627,6 @@ snapshots:
|
|||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
framer-motion@6.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
'@motionone/dom': 10.12.0
|
||||
framesync: 6.0.1
|
||||
hey-listen: 1.0.8
|
||||
popmotion: 11.0.3
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
style-value-types: 5.0.0
|
||||
tslib: 2.6.3
|
||||
optionalDependencies:
|
||||
'@emotion/is-prop-valid': 0.8.8
|
||||
|
||||
framesync@6.0.1:
|
||||
dependencies:
|
||||
tslib: 2.6.3
|
||||
|
||||
fresh@0.5.2: {}
|
||||
|
||||
fromentries@1.3.2: {}
|
||||
|
|
@ -28805,6 +28776,10 @@ snapshots:
|
|||
dependencies:
|
||||
resolve-pkg-maps: 1.0.0
|
||||
|
||||
get-value@3.0.1:
|
||||
dependencies:
|
||||
isobject: 3.0.1
|
||||
|
||||
getos@3.2.1:
|
||||
dependencies:
|
||||
async: 3.2.4
|
||||
|
|
@ -28999,13 +28974,10 @@ snapshots:
|
|||
|
||||
graphemer@1.4.0: {}
|
||||
|
||||
graphiql@3.3.2(patch_hash=p4mc7pxwsatzeupmv5hnqi5t6q)(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
graphiql@4.0.0-alpha.4(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
'@graphiql/react': 0.22.4(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@graphiql/toolkit': 0.9.1(@types/node@20.16.1)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)
|
||||
'@graphiql/react': 1.0.0-alpha.3(patch_hash=gnbo5nw2wgehkfq2yrmuhrx4im)(@codemirror/language@6.10.2)(@types/node@20.16.1)(@types/react-dom@18.3.0)(@types/react@18.3.3)(graphql-ws@5.16.0(graphql@16.9.0))(graphql@16.9.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
graphql: 16.9.0
|
||||
graphql-language-service: 5.2.1(graphql@16.9.0)
|
||||
markdown-it: 14.1.0
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
|
|
@ -29136,8 +29108,9 @@ snapshots:
|
|||
- encoding
|
||||
- utf-8-validate
|
||||
|
||||
graphql-language-service@5.2.1(graphql@16.9.0):
|
||||
graphql-language-service@5.3.0(graphql@16.9.0):
|
||||
dependencies:
|
||||
debounce-promise: 3.1.2
|
||||
graphql: 16.9.0
|
||||
nullthrows: 1.1.1
|
||||
vscode-languageserver-types: 3.17.2
|
||||
|
|
@ -29224,6 +29197,8 @@ snapshots:
|
|||
|
||||
graphql@16.9.0: {}
|
||||
|
||||
graphql@17.0.0-alpha.7: {}
|
||||
|
||||
gray-matter@4.0.3:
|
||||
dependencies:
|
||||
js-yaml: 3.14.1
|
||||
|
|
@ -29411,8 +29386,6 @@ snapshots:
|
|||
|
||||
help-me@5.0.0: {}
|
||||
|
||||
hey-listen@1.0.8: {}
|
||||
|
||||
highlight-words-core@1.2.2: {}
|
||||
|
||||
hoist-non-react-statics@3.3.2:
|
||||
|
|
@ -30579,7 +30552,7 @@ snapshots:
|
|||
markdown-it@14.1.0:
|
||||
dependencies:
|
||||
argparse: 2.0.1
|
||||
entities: 4.4.0
|
||||
entities: 4.5.0
|
||||
linkify-it: 5.0.0
|
||||
mdurl: 2.0.0
|
||||
punycode.js: 2.3.1
|
||||
|
|
@ -32710,13 +32683,6 @@ snapshots:
|
|||
dependencies:
|
||||
'@babel/runtime': 7.24.7
|
||||
|
||||
popmotion@11.0.3:
|
||||
dependencies:
|
||||
framesync: 6.0.1
|
||||
hey-listen: 1.0.8
|
||||
style-value-types: 5.0.0
|
||||
tslib: 2.6.3
|
||||
|
||||
postcss-calc@10.0.0(postcss@8.4.41):
|
||||
dependencies:
|
||||
postcss: 8.4.41
|
||||
|
|
@ -34449,11 +34415,6 @@ snapshots:
|
|||
dependencies:
|
||||
inline-style-parser: 0.2.2
|
||||
|
||||
style-value-types@5.0.0:
|
||||
dependencies:
|
||||
hey-listen: 1.0.8
|
||||
tslib: 2.6.3
|
||||
|
||||
styled-jsx@5.1.1(@babel/core@7.22.9)(react@18.3.1):
|
||||
dependencies:
|
||||
client-only: 0.0.1
|
||||
|
|
|
|||
Loading…
Reference in a new issue