sanity-plugin-dashboard-widget-vercel
4.0.274.0.28
dist/index.js.map~
dist/index.js.mapModified+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["API_ENDPOINT_DEPLOYMENTS","API_ENDPOINT_ALIASES","API_VERSION","DEBUG_MODE","DEPLOYMENT_TARGET_DOCUMENT_TYPE","VERCEL_STATUS_COLORS","BUILDING","CANCELED","ERROR","READY","QUEUED","WIDGET_NAME","Z_INDEX_DIALOG","Z_INDEX_TOAST_PROVIDER","SanityClient","useClient","API_VERSION","useSanityClient","$","_c","t0","Symbol","for","apiVersion","Sanity","fetcher","deploymentTarget","DeploymentTargetConfig","url","extraParams","URLSearchParams","params","set","projectId","teamId","k","v","entries","append","response","fetch","toString","headers","Authorization","token","ok","Error","json","err","cause","useQuery","hash","API_ENDPOINT_ALIASES","API_ENDPOINT_DEPLOYMENTS","Sanity","Vercel","fetcher","Options","enabled","useDeployments","deploymentTarget","options","$","_c","t0","fetchUrl","deployParams","deployLimit","URLSearchParams","set","String","t1","t2","t3","t4","t5","queryKey","queryFn","refetchInterval","refetchIntervalInBackground","refetchOnMount","refetchOnReconnect","refetchOnWindowFocus","retry","data","deploymentsData","isFetching","deploymentsIsFetching","isSuccess","deploymentsIsSuccess","error","deploymentsError","refetch","aliasParams","Symbol","for","t6","t7","t8","t9","t10","aliasesData","aliasesIsFetching","aliasesIsSuccess","aliasesError","aliases","deploymentsWithAlias","t11","deployments","map","val","alias","find","a","deploymentId","uid","Object","assign","t12","t13","t14","setup","Event","type","refreshMachine","types","events","createMachine","initial","states","idle","on","REFRESH","target","refreshing","ERROR","REFRESHED","refreshed","error","useTheme_v2","useCardColor","$","_c","color","t0","border","assign","setup","fromPromise","Vercel","Context","deployHook","disabled","feedback","label","error","Event","type","DeployActorInput","deployMachine","types","context","events","input","actors","deploy","signal","AbortSignal","Error","res","fetch","method","data","json","ok","errorMessage","message","statusText","err","console","cause","createMachine","id","initial","undefined","states","idle","entry","on","DEPLOY","target","deploying","exit","invoke","src","onDone","onError","actions","event","success","Box","Card","Stack","Text","DEBUG_MODE","Props","name","state","StateDebug","props","$","_c","t0","Symbol","for","backgroundColor","borderRadius","fontSize","fontWeight","lineHeight","right","opacity","pointerEvents","position","textAlign","top","zIndex","t1","t2","value","JSON","stringify","t3","t4","UploadIcon","Box","Button","useToast","useMachine","useEffect","WIDGET_NAME","deployMachine","StateDebug","Props","deployHook","onDeploySuccess","targetName","DeployButton","props","$","_c","t0","input","deployState","deployStateTransition","deployStateInterpreter","toast","t1","matches","isError","t2","isSuccess","t3","type","handleDeploy","t4","t5","context","error","push","closable","description","duration","status","title","t6","t7","subscription","subscribe","state","value","unsubscribe","t8","Symbol","for","position","t9","t10","label","t11","disabled","t12","Box","VERCEL_STATUS_COLORS","Vercel","Props","state","DeploymentState","StatusDot","t0","$","_c","t1","t2","backgroundColor","borderRadius","height","width","Box","Label","ReactNode","Sanity","useCardColor","Props","children","colSpan","header","variant","TableCell","props","$","_c","display","cellWidth","bb0","t0","Symbol","for","border","maxWidth","position","textAlign","width","t1","t2","borderTop","t3","LinkIcon","Box","Flex","Stack","Text","useMemo","ReactTimeAgo","Vercel","StatusDot","TableCell","Props","deployment","DeploymentWithAlias","Deployment","props","$","_c","t0","created","Date","date","commitMessage","meta","githubCommitMessage","commitRef","githubCommitRef","targetUrl","alias","url","t1","Symbol","for","t2","flexShrink","t3","state","t4","textDecoration","t5","t6","t7","t8","trim","toLowerCase","replace","_temp","t9","t10","t11","t12","t13","t14","creator","username","t15","uid","t16","borderRadius","height","width","t17","t18","t","toUpperCase","Box","useCardColor","PlaceholderAvatar","$","_c","border","t0","backgroundColor","borderRadius","height","userSelect","width","Box","Stack","Text","useCardColor","Props","rows","PlaceholderText","props","$","_c","border","t0","backgroundColor","borderRadius","userSelect","width","t1","Array","from","length","_temp","t2","_","index","Flex","PlaceholderAvatar","PlaceholderText","TableCell","DeploymentPlaceholder","$","_c","t0","Symbol","for","t1","t2","t3","t4","Box","Text","useToast","useMachine","useEffect","useRef","useDeepCompareEffect","WIDGET_NAME","useDeployments","refreshMachine","Sanity","useCardColor","DeployButton","Deployment","DeploymentPlaceholder","StateDebug","TableCell","Props","deploymentTarget","DeploymentTargetConfig","Deployments","props","$","_c","refTimeout","refreshState","refreshStateTransition","t0","matches","t1","t2","enabled","deployments","error","isFetching","isSuccess","refetch","toast","t3","isError","t4","current","clearTimeout","setTimeout","cancelRefetch","throwOnError","handleDeploySuccess","t5","t6","Symbol","for","t7","t8","type","t9","t10","t11","push","closable","description","name","duration","status","title","t12","hasFetched","hasDeployments","length","border","t13","position","t14","t15","borderBottom","borderCollapse","display","tableLayout","width","Array","from","deployLimit","_temp","map","_temp2","t16","t17","deployHook","t18","_","index","deployment","uid","EditIcon","Box","Button","Flex","Text","Tooltip","FC","Sanity","Deployments","Props","item","DeploymentTarget","onDialogEdit","deploymentTarget","props","$","_c","t0","deployHook","deployLimit","name","projectId","teamId","token","t1","Symbol","for","position","t2","t3","t4","t5","t6","t7","Stack","Sanity","DeploymentTarget","Props","items","onDialogEdit","deploymentTarget","DeploymentTargets","props","$","_c","t0","map","item","_id","t1","uuid","SanityClient","SanityDocument","assertEvent","assign","fromPromise","setup","DEPLOYMENT_TARGET_DOCUMENT_TYPE","Sanity","DeleteMutationResult","transactionId","documentIds","results","id","operation","Context","client","document","DeploymentTarget","formData","Record","message","Event","type","Input","formMachine","types","children","createDocumentActor","updateDocumentActor","deleteDocumentActor","context","events","input","tags","actions","setId","event","setFormData","setMessage","data","details","description","setDocument","output","actors","Required","Pick","Promise","create","_id","_type","patch","set","commit","delete","createMachine","initial","states","idle","on","CREATE","target","UPDATE","DELETE","creating","invoke","src","onDone","onError","created","updating","updated","deleting","deleted","error","FormData","Record","sanitizeFormData","formData","Object","keys","reduce","acc","key","val","constructor","Array","length","trim","red","ErrorOutlineIcon","Box","Inline","Text","Tooltip","FC","FieldError","Props","description","error","label","name","errorIconStyle","color","hex","FormFieldInputLabel","props","$","_c","t0","t1","marginRight","message","t2","t3","t4","Box","TextInput","ChangeEventHandler","FocusEventHandler","Ref","FieldError","FormFieldInputLabel","Props","description","disabled","error","label","name","placeholder","value","onChange","HTMLInputElement","onBlur","ref","FormFieldInputText","props","$","_c","t0","t1","t2","yupResolver","Box","Button","Dialog","Flex","Stack","useToast","useActor","FC","useEffect","useForm","toPromise","yup","useSanityClient","Z_INDEX_DIALOG","formMachine","Sanity","sanitizeFormData","FormFieldInputText","Props","deploymentTarget","DeploymentTarget","onClose","onCreate","onDelete","id","onUpdate","FormData","InferType","formSchema","object","shape","deployHook","string","url","deployLimit","number","positive","integer","min","max","typeError","required","name","projectId","teamId","token","DialogForm","props","$","_c","client","toast","t0","input","formState","formStateTransition","formStateActorRef","t1","hasTag","formUpdating","t2","t3","t4","t5","t6","t7","t8","t9","Symbol","for","t10","defaultValues","mode","resolver","t11","handleSubmit","register","errors","isDirty","isValid","t12","t13","matches","push","status","title","context","message","t14","formData","sanitizedFormData","type","_id","snapshot","getSnapshot","document","onSubmit","t15","handleDelete","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","display","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","valueAsNumber","t44","t45","t46","t47","SanityClient","assign","setup","fromPromise","assertEvent","DEPLOYMENT_TARGET_DOCUMENT_TYPE","Sanity","Context","client","results","DeploymentTarget","Event","type","deploymentTarget","id","Input","sortByTargetName","items","sort","a","b","name","deploymentTargetListMachine","types","children","fetchData","context","events","input","actions","targetCreate","event","targetDelete","filter","target","_id","targetUpdate","index","findIndex","updatedResults","Object","guards","hasData","length","hasNoData","actors","signal","AbortSignal","fetch","catch","error","Error","console","createMachine","initial","states","pending","invoke","src","onDone","output","onError","ready","on","CREATE","DELETE","UPDATE","unknown","always","guard","withData","withoutData","failed","assertEvent","assign","setup","Sanity","Context","editDeploymentTarget","DeploymentTarget","Event","type","deploymentTarget","dialogMachine","types","context","events","actions","setEditDeploymentTarget","event","createMachine","undefined","initial","states","idle","entry","on","CREATE","target","EDIT","edit","CLOSE","create","AddIcon","Box","Button","Card","Flex","Text","ToastProvider","Tooltip","QueryClient","QueryClientProvider","useMachine","useSanityClient","DeploymentTargets","DialogForm","StateDebug","Z_INDEX_TOAST_PROVIDER","deploymentTargetListMachine","dialogMachine","Sanity","queryClient","defaultOptions","queries","gcTime","staleTime","Widget","$","_c","client","t0","input","deploymentTargetListState","deploymentTargetListStateTransition","dialogState","dialogStateTransition","t1","type","handleDialogClose","t2","handleDialogShowCreate","t3","deploymentTarget","handleDialogShowEdit","t4","deploymentTarget_0","handleTargetCreate","t5","id","handleTargetDelete","t6","deploymentTarget_1","handleTargetUpdate","t7","Symbol","for","overflow","t8","t9","t10","t11","t12","matches","t13","ready","t14","context","results","t15","t16","t17","t18","t19","editDeploymentTarget","t20","DashboardWidget","LayoutConfig","Widget","vercelWidget","config","layout","name","component","width"],"sources":["../src/constants.ts","../src/client.ts","../src/utils/fetcher.ts","../src/hooks/useDeployments.ts","../src/machines/refresh.ts","../src/utils/useCardColor.ts","../src/machines/deploy.ts","../src/components/StateDebug/index.tsx","../src/components/DeployButton/index.tsx","../src/components/StatusDot/index.tsx","../src/components/TableCell/index.tsx","../src/components/Deployment/index.tsx","../src/components/PlaceholderAvatar/index.tsx","../src/components/PlaceholderText/index.tsx","../src/components/DeploymentPlaceholder/index.tsx","../src/components/Deployments/index.tsx","../src/components/DeploymentTarget/index.tsx","../src/components/DeploymentTargets/index.tsx","../src/machines/form.ts","../src/utils/sanitizeFormData.ts","../src/components/FormFieldInputLabel/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/DialogForm/index.tsx","../src/machines/deploymentTargetList.ts","../src/machines/dialog.ts","../src/app.tsx","../src/index.ts"],"sourcesContent":["// https://vercel.com/docs/platform/limits\nexport const API_ENDPOINT_DEPLOYMENTS = 'https://api.vercel.com/v5/now/deployments'\nexport const API_ENDPOINT_ALIASES = 'https://api.vercel.com/v3/now/aliases'\n\n// Sanity API version\nexport const API_VERSION = '1'\n\nexport const DEBUG_MODE = false\n\nexport const DEPLOYMENT_TARGET_DOCUMENT_TYPE = 'vercel.deploymentTarget'\n\nexport const VERCEL_STATUS_COLORS = {\n BUILDING: '#f5a623',\n CANCELED: '#ff0000',\n ERROR: '#ff0000',\n READY: '#50e3c2',\n QUEUED: '#333',\n}\n\n// Name displayed in toasts\nexport const WIDGET_NAME = 'Vercel (dashboard)'\n\n// NOTE: Manually set plugin z-index values to be higher than Sanity's header search field\n// (which is currently 500202). Also ensure toasts always sit above dialogs.\nexport const Z_INDEX_DIALOG = 600001\nexport const Z_INDEX_TOAST_PROVIDER = 600002\n","import {type SanityClient, useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\nexport function useSanityClient(): SanityClient {\n return useClient({apiVersion: API_VERSION})\n}\n","import {type Sanity} from '../types'\n\nconst fetcher =\n (deploymentTarget: Sanity.DeploymentTargetConfig) =>\n async (url: string, extraParams?: URLSearchParams) => {\n const params = new URLSearchParams()\n params.set('projectId', deploymentTarget.projectId)\n if (deploymentTarget.teamId) {\n params.set('teamId', deploymentTarget.teamId)\n }\n\n if (extraParams) {\n for (const [k, v] of extraParams.entries()) {\n params.append(k, v)\n }\n }\n\n const response = await fetch(`${url}?${params.toString()}`, {\n headers: {\n Authorization: `Bearer ${deploymentTarget.token}`,\n },\n })\n\n // Manually throw on non-OK responses for react-query\n // https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-others-clients-that-do-not-throw-by-default\n if (!response.ok) {\n throw new Error('Response not OK')\n }\n\n try {\n return await response.json()\n } catch (err) {\n throw new Error('Unable to parse response as JSON', {cause: err})\n }\n }\n\nexport default fetcher\n","import {useQuery} from '@tanstack/react-query'\nimport hash from 'object-hash'\n\nimport {API_ENDPOINT_ALIASES, API_ENDPOINT_DEPLOYMENTS} from '../constants'\nimport {type Sanity, type Vercel} from '../types'\nimport fetcher from '../utils/fetcher'\n\ntype Options = {\n enabled?: boolean\n}\n\nconst useDeployments = (deploymentTarget: Sanity.DeploymentTargetConfig, options?: Options) => {\n const fetchUrl = fetcher(deploymentTarget)\n\n // Fetch deployments\n const deployParams = new URLSearchParams()\n deployParams.set('limit', String(deploymentTarget?.deployLimit))\n\n const {\n data: deploymentsData,\n isFetching: deploymentsIsFetching,\n isSuccess: deploymentsIsSuccess,\n error: deploymentsError,\n refetch,\n } = useQuery<{deployments: Vercel.Deployment[]}>({\n queryKey: [hash(deploymentTarget)],\n queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n enabled: options?.enabled ?? true,\n refetchInterval: 20000, // ms\n refetchIntervalInBackground: false,\n refetchOnMount: true,\n refetchOnReconnect: 'always',\n refetchOnWindowFocus: false,\n retry: false,\n })\n\n // Fetch aliases (only if deployments have been retrieved)\n const aliasParams = new URLSearchParams()\n aliasParams.set('limit', '20')\n\n const {\n data: aliasesData,\n isFetching: aliasesIsFetching,\n isSuccess: aliasesIsSuccess,\n error: aliasesError,\n } = useQuery<{\n aliases: Vercel.Alias[]\n pagination: {\n count: number\n next?: number\n prev?: number\n }\n }>({\n queryKey: [hash(deploymentTarget), 'aliases'],\n queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n enabled: !!deploymentsData,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n })\n\n const aliases = aliasesData?.aliases\n\n let deploymentsWithAlias: Vercel.DeploymentWithAlias[] | undefined\n\n if (aliases) {\n deploymentsWithAlias = deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n const alias = aliases.find((a) => a.deploymentId === val.uid)\n return Object.assign(val, {alias: alias?.alias})\n })\n }\n\n return {\n deployments: deploymentsWithAlias,\n error: aliasesError || deploymentsError,\n isFetching: aliasesIsFetching || deploymentsIsFetching,\n isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n refetch,\n }\n}\n\nexport default useDeployments\n","import {setup} from 'xstate'\n\ntype Event = {type: 'ERROR'} | {type: 'REFRESH'} | {type: 'REFRESHED'} | {type: 'RETRY'}\n\nconst refreshMachine = setup({\n types: {\n events: {} as Event,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAJQFEAxBgZQAkBtABgF1FQADgHtYuAC64h+fiAAeiAIwAmAGwkuGrkoAsAZhVKlAVm0KAHABoQAT0QBOJSRN27XFXaMmz2twF9fVmhYeISkAE5gAGYRsCFQ1PS0tADytNx8SCDCohJSMvIIPnYkxhpKXGZ22kY6xla2CAq6CiQudgDsRnYqKroVfe3+gRg4BMQkEdFwcXRMrGz0ACLpMtniktKZBUUlRmUVVTXadTaISrqObUY97QodvWa6QyBBo6ETUTHYkLPM9OwrTJrXKbUDbJTFLjtMzmWraOx3doqeqKMyOeHdXp3BTHXTVZ6vELjMBhMJCMK-eaAwQidZ5LaIY6Q6Gw47wxHI04IGEkDFma5NbTtY7ufwBED4IQQOAyQljIirWkg-KIAC0nIa6oJIyJpHIVEVOQ2KsKShRCDsunUGLcHi8PhU2uC8o+U1iBCghrpoLkZ2uTk0XCq7SRRl0Zg19itXHhIZ85lMEaUTre40mX0gXuVDIQnmKRhZKk6PmaVXN2PUaLsZhj2hUOJU-JTupIJLJYSzxpzeacheLXFL2nNrkrfW8SKFnhDYt8QA */\n initial: 'idle',\n states: {\n idle: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n refreshing: {\n on: {\n ERROR: {\n target: 'error',\n },\n REFRESHED: {\n target: 'refreshed',\n },\n },\n },\n refreshed: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n error: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n },\n})\n\nexport default refreshMachine\n","import {useTheme_v2} from '@sanity/ui'\n\nexport function useCardColor(): {border: string} {\n const {color} = useTheme_v2()\n return {border: color.border}\n}\n","import {assign, setup, fromPromise} from 'xstate'\n\nimport {type Vercel} from '../types'\n\ntype Context = {\n deployHook: string\n disabled: boolean\n feedback?: string\n label?: string\n error?: string\n}\n\ntype Event = {type: 'DEPLOY'}\n\ninterface DeployActorInput {\n deployHook: string\n}\n\nexport const deployMachine = setup({\n types: {\n context: {} as Context,\n events: {} as Event,\n input: {} as DeployActorInput,\n },\n actors: {\n deploy: fromPromise(async ({input, signal}: {input: DeployActorInput; signal: AbortSignal}) => {\n try {\n if (!input.deployHook) {\n throw new Error('No deployHook URL defined')\n }\n const res = await fetch(input.deployHook, {method: 'POST', signal})\n const data: {error?: Vercel.Error} | null = await res.json()\n if (!res.ok) {\n const errorMessage = data?.error?.message || res.statusText\n throw errorMessage\n }\n } catch (err) {\n if (typeof err === 'string') {\n throw err\n }\n console.error('Unable to deploy with error:', err)\n throw new Error('Please check the developer console for more information', {cause: err})\n }\n }),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QTABwDYHsCeA6AlhOmAMQAiAogAoAyA8gJoDaADALqKiqaz4Au+TADtOIAB6IATCxa4AnADYAHAHYArArUslAZjksNAGhDZEARk3yVmhSxVyHC-QBYAvq+MoMOXF6zZ8ISgSCGEwAiEAN0wAa3C-HwSAoIRA6IBjAEMBYVY2PNFuXhyRJHFENTMzXElFJSUzNTVnWx0FY1MESXVcZzUdM2k1OTUVBoV3TzR-X2mcQOCwACclzCXcDGyAMzWAW1nvPCSF1KjMLJK8grKi-kFS0AkESura5QamlpY2jvMB+QcDkqLH0wxYEw8ICSuFgAFd0uk4LByNR6Mx2IUeHdhKIns1ZN9BtYQVpRnJfl1JM55P1BnY1Ep9CpGpMoXM8MtVksUbRGNcuFiSriKs4CQNurYRgZ7BSGr1ASNupIzEo+kp3JChJgUPAyklMcV7sKEABadomRAmtQAhW2wE6VnQwjEA3Yh7lBDOSQUsxeqyaPoWYbWFSO9kHfwLV1CspPHSSHQ1ZyA1UKJzJlQ+iz+5oKewKWrfNyQ6FwhFI6NG2OINOSXDiypKAxtMyZi1dEE1Qk6L0FpTSUMl8OctaVnHVhC1+uDRvNhStin6XDaHQ9liSXTJiUa1xAA */\n id: 'deploy',\n initial: 'idle',\n context: ({input}) => ({\n disabled: false,\n feedback: undefined,\n label: undefined,\n error: undefined,\n deployHook: input.deployHook,\n }),\n states: {\n idle: {\n entry: assign({\n feedback: () => undefined,\n label: () => 'Deploy',\n }),\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n deploying: {\n entry: assign({\n disabled: () => true,\n label: () => 'Deploying',\n }),\n exit: assign({\n disabled: () => false,\n label: () => 'Deploy',\n }),\n invoke: {\n src: 'deploy',\n input: ({context}) => ({deployHook: context.deployHook}),\n onDone: {\n target: 'success',\n },\n onError: {\n target: 'error',\n actions: assign({\n error: ({event}) => {\n if ('error' in event) {\n const {error} = event\n if (typeof error === 'string') {\n return error\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return 'Unknown error'\n },\n }),\n },\n },\n },\n success: {\n entry: assign({\n feedback: () => 'Successfully started!',\n }),\n exit: assign({\n feedback: () => undefined,\n }),\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n error: {\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n },\n})\n","import {Box, Card, Stack, Text} from '@sanity/ui'\n\nimport {DEBUG_MODE} from '../../constants'\n\ntype Props = {\n name: string\n state: any // TODO: type correctly\n}\n\nconst StateDebug = (props: Props) => {\n const {name, state} = props\n\n if (!DEBUG_MODE) {\n return null\n }\n\n return (\n <Card\n scheme=\"dark\"\n style={{\n backgroundColor: 'rgba(0, 0, 255, 0.9)',\n borderRadius: '3px',\n fontSize: 1,\n fontWeight: 500,\n lineHeight: 'body',\n right: 0,\n opacity: 0.75,\n pointerEvents: 'none',\n position: 'absolute',\n textAlign: 'left',\n top: 0,\n zIndex: 9000,\n }}\n >\n <Box padding={2}>\n <Stack gap={2}>\n <Text size={0}>Name: {name}</Text>\n <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n </Stack>\n </Box>\n </Card>\n )\n}\n\nexport default StateDebug\n","import {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect} from 'react'\n\nimport {WIDGET_NAME} from '../../constants'\nimport {deployMachine} from '../../machines/deploy'\nimport StateDebug from '../StateDebug'\n\ntype Props = {\n deployHook: string\n onDeploySuccess?: () => void\n targetName: string\n}\n\nconst DeployButton = (props: Props) => {\n const {deployHook, onDeploySuccess, targetName} = props\n\n const [deployState, deployStateTransition, deployStateInterpreter] = useMachine(deployMachine, {\n input: {deployHook},\n })\n\n const toast = useToast()\n\n const isError = deployState.matches('error')\n const isSuccess = deployState.matches('success')\n\n // Callbacks\n const handleDeploy = () => {\n deployStateTransition({type: 'DEPLOY'})\n }\n\n // Effects\n useEffect(() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n\n if (isSuccess) {\n toast.push({\n closable: true,\n description: `Deploy queued for ${targetName}`,\n duration: 8000,\n status: 'success',\n title: WIDGET_NAME,\n })\n }\n }, [isError, isSuccess, toast, targetName, deployState.context.error])\n\n useEffect(() => {\n const subscription = deployStateInterpreter.subscribe((state) => {\n if (state.value === 'success') {\n if (onDeploySuccess) {\n onDeploySuccess()\n }\n }\n })\n\n return () => subscription.unsubscribe()\n }, [deployStateInterpreter, onDeploySuccess])\n\n return (\n <Box padding={3} style={{position: 'relative'}}>\n <StateDebug name=\"Deploy\" state={deployState} />\n\n <Button\n disabled={deployState.context.disabled}\n fontSize={1}\n icon={UploadIcon}\n mode=\"ghost\"\n onClick={handleDeploy}\n padding={3}\n text={`${deployState.context.label} ${targetName}`}\n tone=\"default\"\n />\n </Box>\n )\n}\n\nexport default DeployButton\n","import {Box} from '@sanity/ui'\n\nimport {VERCEL_STATUS_COLORS} from '../../constants'\nimport {type Vercel} from '../../types'\n\ntype Props = {\n state: Vercel.DeploymentState\n}\n\nconst StatusDot = ({state}: Props) => (\n <Box\n style={{\n backgroundColor: VERCEL_STATUS_COLORS[state],\n borderRadius: '20px',\n height: '9px',\n width: '9px',\n }}\n />\n)\n\nexport default StatusDot\n","import {Box, Label} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n children: ReactNode\n colSpan?: number\n header?: boolean\n variant?: 'age' | 'branch' | 'creator' | 'state'\n}\n\nconst TableCell = (props: Props) => {\n const {children, colSpan, header, variant} = props\n\n let display: Sanity.BoxDisplay | Sanity.BoxDisplay[] = 'table-cell'\n let cellWidth: string = 'auto'\n\n switch (variant) {\n case 'age':\n cellWidth = '50px'\n break\n case 'branch':\n cellWidth = '300px'\n display = ['none', 'none', 'none', 'table-cell']\n break\n case 'creator':\n cellWidth = '80px'\n break\n case 'state':\n cellWidth = '110px'\n display = ['none', 'none', 'none', 'none', 'table-cell']\n break\n default:\n break\n }\n\n const {border} = useCardColor()\n\n if (header) {\n return (\n <Box\n as=\"th\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={2}\n style={{\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n <Label size={0}>{children}</Label>\n </Box>\n )\n }\n return (\n <Box\n as=\"td\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={[2, 2, 3]}\n style={{\n borderTop: `1px solid ${border}`,\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n {children}\n </Box>\n )\n}\n\nexport default TableCell\n","import {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n// oxlint-disable-next-line import/no-unassigned-import\nimport 'react-time-ago/locale/en'\nimport ReactTimeAgo from 'react-time-ago'\n\nimport {type Vercel} from '../../types'\nimport StatusDot from '../StatusDot'\nimport TableCell from '../TableCell'\n\ntype Props = {\n deployment: Vercel.DeploymentWithAlias\n}\n\nconst Deployment = (props: Props) => {\n const {deployment} = props\n\n const date = useMemo(() => new Date(deployment.created), [deployment.created])\n\n const commitMessage = deployment?.meta?.['githubCommitMessage']\n const commitRef = deployment?.meta?.['githubCommitRef']\n\n const targetUrl = deployment.alias ?? deployment.url\n\n return (\n <tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <Flex align=\"center\">\n <Box\n display={['block', 'block', 'block', 'block', 'none']}\n marginRight={3}\n style={{flexShrink: 0}}\n >\n <StatusDot state={deployment.state} />\n </Box>\n\n {targetUrl ? (\n <>\n {/* Alias icon */}\n {deployment.alias && <LinkIcon />}\n\n <Box marginLeft={deployment.alias ? 1 : 0}>\n <Text\n muted={!(deployment.state === 'READY')}\n size={1}\n style={{\n textDecoration:\n deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n ? 'line-through'\n : 'normal',\n }}\n textOverflow=\"ellipsis\"\n >\n {deployment.state === 'READY' ? (\n <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n {targetUrl}\n </a>\n ) : (\n targetUrl\n )}\n </Text>\n </Box>\n </>\n ) : (\n <Text size={1}>Uploading...</Text>\n )}\n </Flex>\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <Flex align=\"center\">\n <StatusDot state={deployment.state} />\n <Box marginLeft={2}>\n <Text size={1}>\n {deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n </Text>\n </Box>\n </Flex>\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <Stack gap={2}>\n <Text size={1} textOverflow=\"ellipsis\">\n {commitRef}\n </Text>\n {commitMessage && (\n <Text muted size={1} textOverflow=\"ellipsis\">\n {commitMessage}\n </Text>\n )}\n </Stack>\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <Flex align=\"center\">\n <Text size={1}>\n <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n </Text>\n </Flex>\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex align=\"center\" justify=\"center\">\n <img\n alt={deployment?.creator?.username || 'Deployment creator avatar'}\n draggable={false}\n src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n style={{\n borderRadius: '20px',\n height: '20px',\n width: '20px',\n }}\n />\n </Flex>\n </TableCell>\n </tr>\n )\n}\n\nexport default Deployment\n","import {Box} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\nconst PlaceholderAvatar = () => {\n const {border} = useCardColor()\n return (\n <Box\n style={{\n backgroundColor: border,\n borderRadius: '20px',\n height: '20px',\n userSelect: 'none',\n width: '20px',\n }}\n />\n )\n}\n\nexport default PlaceholderAvatar\n","import {Box, Stack, Text} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n rows: number\n}\n\nconst PlaceholderText = (props: Props) => {\n const {rows} = props\n const {border} = useCardColor()\n return (\n <Box\n style={{\n backgroundColor: border,\n borderRadius: '3px',\n userSelect: 'none',\n width: '100%',\n }}\n >\n <Stack gap={2}>\n {Array.from({length: rows}, (_, index) => (\n <Text key={index} size={1}>\n \n </Text>\n ))}\n </Stack>\n </Box>\n )\n}\n\nexport default PlaceholderText\n","import {Flex} from '@sanity/ui'\n\nimport PlaceholderAvatar from '../PlaceholderAvatar'\nimport PlaceholderText from '../PlaceholderText'\nimport TableCell from '../TableCell'\n\nconst DeploymentPlaceholder = () => {\n return (\n <tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <PlaceholderText rows={2} />\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex justify=\"center\">\n <PlaceholderAvatar />\n </Flex>\n </TableCell>\n </tr>\n )\n}\n\nexport default DeploymentPlaceholder\n","import {Box, Text} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect, useRef} from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nimport {WIDGET_NAME} from '../../constants'\nimport useDeployments from '../../hooks/useDeployments'\nimport refreshMachine from '../../machines/refresh'\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\nimport DeployButton from '../DeployButton'\nimport Deployment from '../Deployment'\nimport DeploymentPlaceholder from '../DeploymentPlaceholder'\nimport StateDebug from '../StateDebug'\nimport TableCell from '../TableCell'\n\ntype Props = {\n deploymentTarget: Sanity.DeploymentTargetConfig\n}\n\nconst Deployments = (props: Props) => {\n const {deploymentTarget} = props\n\n // Refs\n const refTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // XState\n const [refreshState, refreshStateTransition] = useMachine(refreshMachine)\n\n // Fetch deployments - disable hook / auto-refetching on error state\n const {deployments, error, isFetching, isSuccess, refetch} = useDeployments(deploymentTarget, {\n enabled: !refreshState.matches('error'),\n })\n\n const toast = useToast()\n const isError = refreshState.matches('error')\n\n const handleDeploySuccess = () => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n refTimeout.current = setTimeout(() => {\n void refetch({\n cancelRefetch: true,\n throwOnError: true,\n })\n }, 4000)\n }\n\n useEffect(() => {\n return () => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n }\n }, [])\n\n useEffect(() => {\n if (error) {\n refreshStateTransition({type: 'ERROR'})\n }\n\n if (isFetching) {\n refreshStateTransition({type: 'REFRESH'})\n }\n\n if (!isFetching && isSuccess) {\n refreshStateTransition({type: 'REFRESHED'})\n }\n }, [error, isFetching, isSuccess, refreshStateTransition])\n\n useDeepCompareEffect(() => {\n if (!refreshState.matches('refreshing')) {\n refreshStateTransition({type: 'REFRESH'})\n }\n }, [deploymentTarget])\n\n useDeepCompareEffect(() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n }, [deploymentTarget, isError])\n\n const hasFetched = typeof deployments !== 'undefined'\n const hasDeployments = deployments && deployments.length > 0\n\n const {border} = useCardColor()\n return (\n <Box marginTop={3} style={{position: 'relative'}}>\n {/* xstate debug */}\n <StateDebug name=\"Refresh\" state={refreshState} />\n\n {!refreshState.matches('error') && (\n <>\n <Box\n as=\"table\"\n style={{\n borderBottom: `1px solid ${border}`,\n borderCollapse: 'collapse',\n display: 'table',\n tableLayout: 'fixed',\n width: '100%',\n }}\n >\n <Box as=\"thead\" style={{display: 'table-header-group'}}>\n <tr>\n {/* Deployment */}\n <TableCell header>Deployment</TableCell>\n\n {/* State */}\n <TableCell header variant=\"state\">\n State\n </TableCell>\n\n {/* Branch */}\n <TableCell header variant=\"branch\">\n Branch\n </TableCell>\n\n {/* Age */}\n <TableCell header variant=\"age\">\n Age\n </TableCell>\n\n {/* Creator */}\n <TableCell header variant=\"creator\">\n Creator\n </TableCell>\n </tr>\n </Box>\n\n <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n {/* Placeholders */}\n {!deployments &&\n Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n <DeploymentPlaceholder key={index} />\n ))}\n {/* Deployments */}\n {hasDeployments &&\n deployments?.map((deployment) => (\n <Deployment deployment={deployment} key={deployment.uid} />\n ))}\n </Box>\n </Box>\n\n {/* No results */}\n {hasFetched && !hasDeployments && (\n <Box padding={3} style={{width: '100%'}}>\n <Text muted size={1}>\n No deployments found. Don't forget to specify a valid team ID if your project\n belongs to a team.\n </Text>\n </Box>\n )}\n </>\n )}\n\n {/* Error message */}\n {refreshState.matches('error') && (\n <Box padding={3}>\n <Text muted size={1}>\n Unable to fetch recent deployments. Please check your network and deployment settings.\n </Text>\n </Box>\n )}\n\n {/* Deploy button */}\n {!refreshState.matches('error') && deploymentTarget.deployHook && (\n <Box>\n <DeployButton\n deployHook={deploymentTarget.deployHook}\n onDeploySuccess={handleDeploySuccess}\n targetName={deploymentTarget.name}\n />\n </Box>\n )}\n </Box>\n )\n}\n\nexport default Deployments\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\n\nimport {type Sanity} from '../../types'\nimport Deployments from '../Deployments'\n\ntype Props = {\n item: Sanity.DeploymentTarget\n onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTarget: FC<Props> = (props: Props) => {\n const {item, onDialogEdit} = props\n\n const deploymentTarget: Sanity.DeploymentTargetConfig = {\n deployHook: item.deployHook,\n deployLimit: item.deployLimit,\n name: item.name,\n projectId: item.projectId,\n teamId: item.teamId,\n token: item.token,\n }\n\n return (\n <Box style={{position: 'relative'}}>\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n <Text size={2}>{item.name}</Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n </Tooltip>\n </Flex>\n\n {/* Content */}\n <Deployments deploymentTarget={deploymentTarget} />\n </Box>\n )\n}\n\nexport default DeploymentTarget\n","import {Stack} from '@sanity/ui'\n\nimport {type Sanity} from '../../types'\nimport DeploymentTarget from '../DeploymentTarget'\n\ntype Props = {\n items: Sanity.DeploymentTarget[]\n onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTargets = (props: Props) => {\n const {items, onDialogEdit} = props\n\n return (\n <Stack gap={5}>\n {items?.map((item) => (\n <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n ))}\n </Stack>\n )\n}\n\nexport default DeploymentTargets\n","import {uuid} from '@sanity/uuid'\nimport type {SanityClient, SanityDocument} from 'sanity'\nimport {assertEvent, assign, fromPromise, setup} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport type {Sanity} from '../types'\n\n// Named locally so dts emit does not reach into `@sanity/client` (TS2883).\ntype DeleteMutationResult = {\n transactionId: string\n documentIds: string[]\n results: {id: string; operation: string}[]\n}\n\ntype Context = {\n client: SanityClient\n document?: Sanity.DeploymentTarget\n id?: string\n formData?: Record<string, any>\n message: string\n}\n\ntype Event =\n | {type: 'CREATE'; formData: Record<string, any>}\n | {type: 'UPDATE'; id: string; formData: Record<string, any>}\n | {type: 'DELETE'; id: string}\n\ninterface Input {\n client: SanityClient\n}\n\nexport const formMachine = setup({\n types: {} as {\n children: {\n createDocumentActor: 'create document'\n updateDocumentActor: 'update document'\n deleteDocumentActor: 'delete document'\n }\n context: Context\n events: Event\n input: Input\n tags: 'busy'\n },\n actions: {\n setId: assign({\n id: ({event}) => {\n assertEvent(event, ['UPDATE', 'DELETE'])\n return event.id\n },\n }),\n setFormData: assign({\n formData: ({event}) => {\n assertEvent(event, ['CREATE', 'UPDATE'])\n return event.formData\n },\n }),\n setMessage: assign({\n message: ({event}) => {\n if (\n 'data' in event &&\n event.data &&\n typeof event.data === 'object' &&\n 'details' in event.data &&\n event.data.details &&\n typeof event.data.details === 'object' &&\n 'description' in event.data.details\n ) {\n return event.data.details.description as string\n }\n return 'An error occurred'\n },\n }),\n setDocument: assign({\n document: ({event}) => {\n // @ts-expect-error - fix typings later\n return event.output\n },\n }),\n },\n actors: {\n // Explicit return types keep the inferred machine type portable for\n // declaration emit (TS2883), by referencing aliases imported from `sanity`\n // instead of a deep `@sanity/client` path. `delete` returns a mutation\n // result in client v8, not the deleted document.\n 'create document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'formData'>>\n }): Promise<SanityDocument> => {\n return input.client.create({\n _id: `vercel.${uuid()}`,\n _type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n ...input.formData,\n })\n },\n ),\n 'update document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'id' | 'formData'>>\n }): Promise<SanityDocument> => {\n return input.client.patch(input.id).set(input.formData).commit()\n },\n ),\n 'delete document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'id'>>\n }): Promise<DeleteMutationResult> => {\n return input.client.delete(input.id)\n },\n ),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAIwBmAGwkuGjQFYALAE4AHACYdWgwYA0IAJ6IjKgOwkdXFUYVa9h-Ua5KAvv5WaFh4hKTkVNQAqgAKACJsnLwywqISUjLyCMpqmtr6xqbmVrYIBgokWvlGWkpaCgZeKoHBGDgExGSUNPGMADKM7Nx8SCBp4pLSY9m56vm6hiZmljaIOipqdXpcDk1aWiYqBlqtICEd4SSYAE5g6BL4UNQQUmBk+ABuQgDW77f3MRgeJCTAAV1QYHwYmYmDEQhuI1SIkmmRmiGOShIDiUOh0SiaCgUegcDj0pTsjhI5iMewUpPsTSMZwuYS6AIeBGeYBuNwRJAEFAeADMEahrncHsDQRCoTC4QikWMJhlpqBspjsbj8YTiaTyWsEKouNT6noiX5zUpiQEgud2mzSGCBBBOU8Xm8Pt8-iRna6gSDwZDobD4YiUsqUaqshiDFicXiCea9WSKeVKiSVIclEYlIY-BUWQ7Ok6XW7ubz+YKRWLfWWAzLg-Kw0rBFGpjGEJqEzrkyTU4b6ToSHojHos7VXEc6kXQiWSBAwFRHs9XoQvb93ovl9Kg3LQ4qI230h30V241rE7r+wayro1A4dO4VHotA5fPTTnbWfPt2AV9QPJ8jcApCmIoo3OKf4NnuIYKuGozHqiapyLG8bakmRI3mmpjxk0XAuEoXAHI+DgtGc+BCIu8BjD+4TIieaLqogAC0Khpmxs6XF0kRgAxyGdk+aYKLSVR7Fweg6A4IkGFwChcY6EqAly-HRmeY7DnSY5GHGL4qFwRhpjpJpmriDjVMRLgGAp84ckCECqaezEIHoObUuZuwKH4xGPgoRnmCQpmOAcqhmPJ37Flcfrlo5TGoQgY4mgYHkeAS+iqH5hqSc4dSuCo+I6SoSjvjZUX1pAsUodkrlGO51TSd5b46JlZRebVuG7IcjRmA05FtHOVzQSpkaMVVdivs4CibHGxg6biSg4ZsJD2AccaFEVGwOKVXTQRVI0CWeNV1Z5jW+WmujDj4HjmMRnhEttpBAQilWdkdyX1V5RFNS1iAEpU1pHER9JWjogSBEAA */\n context: ({input}) => ({\n client: input.client,\n formData: {},\n message: '',\n }),\n initial: 'idle',\n states: {\n idle: {\n on: {\n CREATE: {\n actions: ['setFormData'],\n target: 'creating',\n },\n UPDATE: {\n actions: ['setId', 'setFormData'],\n target: 'updating',\n },\n DELETE: {\n actions: 'setId',\n target: 'deleting',\n },\n },\n },\n creating: {\n tags: ['busy'],\n invoke: {\n src: 'create document',\n id: 'createDocumentActor',\n input: ({context}) => ({client: context.client, formData: context.formData!}),\n onDone: {actions: 'setDocument', target: 'created'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n created: {type: 'final'},\n updating: {\n tags: ['busy'],\n invoke: {\n src: 'update document',\n id: 'updateDocumentActor',\n input: ({context}) => ({\n client: context.client,\n id: context.id!,\n formData: context.formData!,\n }),\n onDone: {actions: 'setDocument', target: 'updated'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n updated: {type: 'final'},\n deleting: {\n tags: ['busy'],\n invoke: {\n src: 'delete document',\n id: 'deleteDocumentActor',\n input: ({context}) => ({client: context.client, id: context.id!}),\n onDone: {target: 'deleted'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n deleted: {type: 'final'},\n error: {type: 'final'},\n },\n})\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fields\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n return Object.keys(formData).reduce((acc: FormData, key) => {\n const val = formData[key]\n\n // TODO: refactor\n if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n acc[key] = sanitizeFormData(val)\n } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n acc[key] = null\n } else if (typeof val === 'string' && val) {\n acc[key] = formData[key].trim()\n } else {\n acc[key] = formData[key]\n }\n\n return acc\n }, {})\n}\n\nexport default sanitizeFormData\n","import {red} from '@sanity/color'\nimport {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\ntype Props = {\n description?: string\n error?: FieldError\n label: string\n name: string\n}\n\nconst errorIconStyle = {color: red[500].hex}\n\nconst FormFieldInputLabel: FC<Props> = (props: Props) => {\n const {description, error, label, name} = props\n\n return (\n <Box marginBottom={3}>\n {/* Label */}\n <Inline gap={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n {error.message}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <ErrorOutlineIcon style={errorIconStyle} />\n </Tooltip>\n </Text>\n )}\n </Inline>\n\n {/* Description */}\n {description && (\n <Box marginY={3}>\n <Text as=\"p\" muted size={1}>\n {description}\n </Text>\n </Box>\n )}\n </Box>\n )\n}\n\nexport default FormFieldInputLabel\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: FieldError\n label: string\n name: string\n placeholder?: string\n value?: string\n onChange?: ChangeEventHandler<HTMLInputElement>\n onBlur?: FocusEventHandler<HTMLInputElement>\n ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n const {description, disabled, error, label, name, placeholder, value, onChange, onBlur, ref} =\n props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n {/* Input */}\n <TextInput\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputText\n","import {yupResolver} from '@hookform/resolvers/yup'\nimport {Box, Button, Dialog, Flex, Stack} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useActor} from '@xstate/react'\nimport {type FC, useEffect} from 'react'\nimport {useForm} from 'react-hook-form'\nimport {toPromise} from 'xstate'\nimport * as yup from 'yup'\n\nimport {useSanityClient} from '../../client'\nimport {Z_INDEX_DIALOG} from '../../constants'\nimport {formMachine} from '../../machines/form'\nimport {type Sanity} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport FormFieldInputText from '../FormFieldInputText'\n\ntype Props = {\n deploymentTarget?: Sanity.DeploymentTarget\n onClose: () => void\n onCreate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n onDelete?: (id: string) => void\n onUpdate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\ntype FormData = yup.InferType<typeof formSchema>\n\nconst formSchema = yup.object().shape({\n deployHook: yup.string().url('Deploy hook must be a valid URL'),\n deployLimit: yup\n .number()\n .positive()\n .integer()\n .min(1, 'Deploy limit must no less than 1')\n .max(15, 'Deploy limit must no higher than 15')\n .typeError('Deploy limit must be a number')\n .required('Deploy limit must be a positive integer between 1 and 15'),\n name: yup.string().required('Name cannot be empty'),\n projectId: yup.string().required('Vercel Project ID cannot be empty'),\n teamId: yup.string(),\n token: yup.string().required('Vercel Account Token cannot be empty'),\n})\n\nconst DialogForm: FC<Props> = (props: Props) => {\n const {deploymentTarget, onClose, onCreate, onDelete, onUpdate} = props\n const client = useSanityClient()\n const toast = useToast()\n\n const [formState, formStateTransition, formStateActorRef] = useActor(formMachine, {\n input: {client},\n })\n\n const formUpdating = formState.hasTag('busy')\n\n // react-hook-form v7\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n } = useForm<FormData>({\n // @ts-expect-error - fix typings later\n defaultValues: {\n deployHook: deploymentTarget?.deployHook || '',\n deployLimit: deploymentTarget?.deployLimit || 5,\n name: deploymentTarget?.name || '',\n projectId: deploymentTarget?.projectId || '',\n teamId: deploymentTarget?.teamId || '',\n token: deploymentTarget?.token || '',\n },\n mode: 'onChange',\n resolver: yupResolver(formSchema),\n })\n\n /**\n * Handle errors and reaching the done state\n */\n useEffect(() => {\n if (formState.matches('error')) {\n toast.push({\n status: 'error',\n title: formState.context.message || 'An error occurred',\n })\n }\n /**\n * If the machine is done it means it reached updated, created, deleted or error state.\n * We don't care which one, we just want to close the dialog\n */\n if (formState.status === 'done') {\n onClose()\n }\n }, [formState, onClose, toast])\n\n // Callbacks\n // - submit react-hook-form\n const onSubmit = async (formData: FormData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n if (deploymentTarget) {\n formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n } else {\n formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n }\n await toPromise(formStateActorRef)\n const snapshot = formStateActorRef.getSnapshot()\n const {document} = snapshot.context\n if (!document) return\n if (snapshot.matches('created')) {\n onCreate?.(document)\n } else if (snapshot.matches('updated')) {\n onUpdate?.(document)\n }\n }\n\n const handleDelete = async () => {\n if (!deploymentTarget) {\n return\n }\n const id = deploymentTarget._id\n formStateTransition({type: 'DELETE', id})\n await toPromise(formStateActorRef)\n if (formStateActorRef.getSnapshot().matches('deleted')) {\n onDelete?.(id)\n }\n }\n\n return (\n <Dialog\n footer={\n <Box padding={3}>\n <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n {/* Delete button */}\n {deploymentTarget && (\n <Button\n loading={formState.matches('deleting')}\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n )}\n\n {/* Submit button */}\n <Button\n loading={formState.matches('creating') || formState.matches('updating')}\n disabled={!isDirty || !isValid}\n fontSize={1}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onClick={handleSubmit(onSubmit)}\n text={deploymentTarget ? 'Update and close' : 'Create'}\n tone=\"primary\"\n />\n </Flex>\n </Box>\n }\n header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n id=\"create\"\n onClose={onClose}\n width={1}\n zOffset={Z_INDEX_DIALOG}\n >\n {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n <Box\n as=\"form\"\n padding={4}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onSubmit={handleSubmit(onSubmit)}\n >\n {/* Hidden button to enable enter key submissions */}\n <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Form fields */}\n <Stack gap={5}>\n {/* Title */}\n <FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />\n\n <FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />\n\n <FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />\n </Stack>\n </Box>\n </Dialog>\n )\n}\n\nexport default DialogForm\n","import type {SanityClient} from 'sanity'\nimport {assign, setup, fromPromise, assertEvent} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport {type Sanity} from '../types'\n\ntype Context = {\n client: SanityClient\n results: Sanity.DeploymentTarget[] // TODO: type correctly\n}\n\ntype Event =\n | {type: 'CLOSE'}\n | {type: 'CREATE'; deploymentTarget: Sanity.DeploymentTarget}\n | {type: 'DELETE'; id: string}\n | {type: 'FETCH'}\n | {type: 'UPDATE'; deploymentTarget: Sanity.DeploymentTarget}\n\ninterface Input {\n client: SanityClient\n}\n\nconst sortByTargetName = (items: Sanity.DeploymentTarget[]) => {\n return items.sort((a, b) => {\n if (a.name > b.name) {\n return 1\n }\n if (a.name < b.name) {\n return -1\n }\n return 0\n })\n}\n\nexport const deploymentTargetListMachine = setup({\n types: {} as {\n children: {fetchData: 'fetch data'}\n context: Context\n events: Event\n input: Input\n },\n actions: {\n targetCreate: assign({\n results: ({context, event}) => {\n assertEvent(event, 'CREATE')\n return sortByTargetName([...context.results, event.deploymentTarget])\n },\n }),\n targetDelete: assign({\n results: ({context, event}) => {\n assertEvent(event, 'DELETE')\n return context.results.filter((target) => target._id !== event.id)\n },\n }),\n targetUpdate: assign({\n results: ({context, event}) => {\n assertEvent(event, 'UPDATE')\n const {deploymentTarget} = event\n const index = context.results.findIndex((target) => target._id === deploymentTarget._id)\n const updatedResults = Object.assign([], context.results, {\n [index]: deploymentTarget,\n })\n return sortByTargetName(updatedResults)\n },\n }),\n },\n guards: {\n hasData: ({context}) => {\n return context?.results?.length > 0\n },\n hasNoData: ({context}) => {\n return context?.results?.length === 0\n },\n },\n actors: {\n 'fetch data': fromPromise(\n ({input, signal}: {input: {client: SanityClient}; signal: AbortSignal}) => {\n return input.client\n .fetch<Sanity.DeploymentTarget[]>(\n '*[_type == $type] | order(name asc)',\n {\n type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n },\n {signal},\n )\n .catch((error) => {\n if (error instanceof Error && error.name === 'AbortError') {\n return []\n }\n console.error('Failed to fetch deployment targets', error)\n throw error\n })\n },\n ),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOgAcx8ICoBiCAe0JIIDcGBrMEgMzABccAEXT90AbQAMAXUSgyDWLn64mckAA9EAZkkBOEgHYAjAA5DAFgBsFgEwnJAVkMAaEAE9Ep4yUeT-klbGesbaoYaGAL6RbmhYeISkFFQ0tGAATukM6eQANqI82ai8AsKiEjLqCkoqakiaOvpGZpY29sZOrh6IxpYkFo5h2oaOpnqOxraSFtGxGDgExCTpYOgQ7rQAwgBKAKIAggAqu1Ky9dXKqvjqWggWHSS9eoaS9ibao6aObp4IVh8kL56OzGII2PT-WYgOILRLLVbrWhCXYAGV2x1OVUUlzqoFu90kRm8tlM2gsL1eJJ+iEGBj0gVsFm0YWmVkctihMISSxWaw2AFUAApCI4nSrnbG1a71fGSUz9WzBezTFWvb7dO5MkjjMITZykwxjTnzbmkXnrEgAV3wHHwDAA7vhaJiJTUrjces9fFZGc9TLYrGqA9SEM9CcT7sznH5HHpjfFFmaEe4rTa7Y7ncYzvJJe6ZZ7DN7fYaA0GrCHvD4xs4S+yPnGYtCTYn4XySPblNgRGJneKc27cQ0EI4BiQ2T77noAzXyxrTIESGFGd4rP9DONTPHYTzk+3OwxLfxu+he9mQBcpR7h6Px4ylWyIrPfl9bIvJhZJIYA-7zFZoo27QgOB1C5RMsQHaU8UQABaYIQ2gv9G1AuFkmofAoHAnFIKHOwQz0bRtUMcd-j8WwpnuLdTVbdZMMvfMEFsPQQxMeViQmZkLC+f0oiQ5s4XNFNrVtB1sIvPMoIQCIK1BIsmXXWxtFJcZKJbAS934Ltylo8ShysfDHl9PRxjlekrC6Z9BhIBk5MkXpzFBFT+N3DsNIPI8tNdLCr20L0Wmscw5V0e5pMJYwBiI8kwrDRC5gTOEeHQXBckgbTB1uZwQw6RwrEBd9bEcQZYzsRDoiAA */\n context: ({input}) => ({\n client: input.client,\n results: [],\n }),\n initial: 'pending',\n states: {\n pending: {\n invoke: {\n src: 'fetch data',\n id: 'fetchData',\n input: ({context}) => ({client: context.client}),\n onDone: {\n actions: assign({results: ({event}) => event.output}),\n target: 'ready',\n },\n onError: {\n target: 'failed',\n },\n },\n },\n ready: {\n initial: 'unknown',\n on: {\n CREATE: {\n actions: 'targetCreate',\n },\n DELETE: {\n actions: 'targetDelete',\n },\n UPDATE: {\n actions: 'targetUpdate',\n },\n },\n states: {\n unknown: {\n always: [\n {target: 'withData', guard: 'hasData'},\n {target: 'withoutData', guard: 'hasNoData'},\n ],\n },\n withData: {\n always: [{target: 'withoutData', guard: 'hasNoData'}],\n },\n withoutData: {\n always: [{target: 'withData', guard: 'hasData'}],\n },\n },\n },\n failed: {\n type: 'final',\n },\n },\n})\n","import {assertEvent, assign, setup} from 'xstate'\n\nimport {type Sanity} from '../types'\n\ntype Context = {\n editDeploymentTarget?: Sanity.DeploymentTarget\n}\n\ntype Event =\n | {type: 'CREATE'}\n | {type: 'CLOSE'}\n | {type: 'EDIT'; deploymentTarget: Sanity.DeploymentTarget}\n\nexport const dialogMachine = setup({\n types: {\n context: {} as Context,\n events: {} as Event,\n },\n actions: {\n setEditDeploymentTarget: assign({\n editDeploymentTarget: ({event}) => {\n assertEvent(event, 'EDIT')\n return event.deploymentTarget\n },\n }),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAEwKArCQCcANgAcAdmUbNOhVx0BGLQBoQAT0SmAzApJcXXexoAsW5fbWaFAL4BVmhYeISk5FTUjAAiAJKs3HxIIMKiElIy8ghKqpq6+obGZpY2ivb2zq4e5moeXKZc3kEhGDgExCSQ4nQAMgDyAMqcvDLp4pLSqTn2DSQefn7uyq5aWvZWtgjmTqsuvnU6XMoK9q0goR0RJJgATmDoYjS0gyPJ4yKTWTOIc1wLJZqFZrDZbRBaUwkfZuew6SFcepuILBED4IQQOAyK7hYifDJTbKIAC0GnBCFJFxxnUilDA+O+01AOQ8CnJGxIGn29lMpjUxhcCh0VPauNIPTEDMyTLkiA8PhIxh5Cg8DS8pgM5L5UOalSMah0cP05hFYRptweT3pqQm0qJCHlVSVphVashmvKCDUAN17j0XNMqrUyhRASAA */\n context: {\n editDeploymentTarget: undefined,\n },\n initial: 'idle',\n states: {\n idle: {\n entry: assign({\n editDeploymentTarget: () => undefined,\n }),\n on: {\n CREATE: {\n target: 'create',\n },\n EDIT: {\n actions: 'setEditDeploymentTarget',\n target: 'edit',\n },\n },\n },\n edit: {\n on: {\n CLOSE: {\n target: 'idle',\n },\n },\n },\n create: {\n on: {\n CLOSE: {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport {ToastProvider} from '@sanity/ui/toast'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query'\nimport {useMachine} from '@xstate/react'\n\nimport {useSanityClient} from './client'\nimport DeploymentTargets from './components/DeploymentTargets'\nimport DialogForm from './components/DialogForm'\nimport StateDebug from './components/StateDebug'\nimport {Z_INDEX_TOAST_PROVIDER} from './constants'\nimport {deploymentTargetListMachine} from './machines/deploymentTargetList'\nimport {dialogMachine} from './machines/dialog'\nimport {type Sanity} from './types'\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n gcTime: 0,\n staleTime: 0,\n },\n },\n})\n\nconst Widget = () => {\n const client = useSanityClient()\n\n const [deploymentTargetListState, deploymentTargetListStateTransition] = useMachine(\n deploymentTargetListMachine,\n {input: {client}},\n )\n const [dialogState, dialogStateTransition] = useMachine(dialogMachine)\n\n // Callbacks\n const handleDialogClose = () => {\n dialogStateTransition({type: 'CLOSE'})\n }\n const handleDialogShowCreate = () => {\n dialogStateTransition({type: 'CREATE'})\n }\n const handleDialogShowEdit = (deploymentTarget: Sanity.DeploymentTarget) => {\n dialogStateTransition({type: 'EDIT', deploymentTarget})\n }\n const handleTargetCreate = (deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n }\n const handleTargetDelete = (id: string) => {\n deploymentTargetListStateTransition({type: 'DELETE', id})\n }\n const handleTargetUpdate = (deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n }\n\n return (\n <ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n <QueryClientProvider client={queryClient}>\n <Card radius={2} style={{overflow: 'hidden '}}>\n {/* xstate debug */}\n <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n <Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n </Tooltip>\n </Flex>\n\n <Box>\n {deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )}\n\n {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )}\n\n {deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )}\n\n {deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )}\n </Box>\n </Card>\n\n {/* Dialogs */}\n {dialogState.matches('create') && (\n <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n )}\n\n {dialogState.matches('edit') && (\n <DialogForm\n deploymentTarget={dialogState.context.editDeploymentTarget}\n onClose={handleDialogClose}\n onDelete={handleTargetDelete}\n onUpdate={handleTargetUpdate}\n />\n )}\n </QueryClientProvider>\n </ToastProvider>\n )\n}\n\nexport default Widget\n","import '@sanity/ui/styles.css'\nimport type {DashboardWidget, LayoutConfig} from '@sanity/dashboard'\n\nimport Widget from './app'\n\nexport function vercelWidget(config: {layout?: LayoutConfig} = {}): DashboardWidget {\n return {\n name: 'vercel',\n component: Widget,\n layout: config.layout ?? {width: 'full'},\n }\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{apiVersion: API_VERSION}","fetcher(deploymentTarget)","deployLimit","hash(deploymentTarget)","[hash(deploymentTarget)]","() => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams)","{\n queryKey: [hash(deploymentTarget)],\n queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n enabled: options?.enabled ?? true,\n refetchInterval: 20000, // ms\n refetchIntervalInBackground: false,\n refetchOnMount: true,\n refetchOnReconnect: 'always',\n refetchOnWindowFocus: false,\n retry: false,\n }","options?.enabled ?? true","[hash(deploymentTarget), 'aliases']","() => fetchUrl(API_ENDPOINT_ALIASES, aliasParams)","{\n queryKey: [hash(deploymentTarget), 'aliases'],\n queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n enabled: !!deploymentsData,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n }","!!deploymentsData","deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n const alias = aliases.find((a) => a.deploymentId === val.uid)\n return Object.assign(val, {alias: alias?.alias})\n })","deployments","{\n deployments: deploymentsWithAlias,\n error: aliasesError || deploymentsError,\n isFetching: aliasesIsFetching || deploymentsIsFetching,\n isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n refetch,\n }","aliasesError || deploymentsError","aliasesIsFetching || deploymentsIsFetching","aliasesIsSuccess && deploymentsIsSuccess","{border: color.border}","border","{\n backgroundColor: 'rgba(0, 0, 255, 0.9)',\n borderRadius: '3px',\n fontSize: 1,\n fontWeight: 500,\n lineHeight: 'body',\n right: 0,\n opacity: 0.75,\n pointerEvents: 'none',\n position: 'absolute',\n textAlign: 'left',\n top: 0,\n zIndex: 9000,\n }","<Text size={0}>Name: {name}</Text>","JSON.stringify(state.value)","value","<Text size={0}>state.value: {JSON.stringify(state.value)}</Text>","<Card\n scheme=\"dark\"\n style={{\n backgroundColor: 'rgba(0, 0, 255, 0.9)',\n borderRadius: '3px',\n fontSize: 1,\n fontWeight: 500,\n lineHeight: 'body',\n right: 0,\n opacity: 0.75,\n pointerEvents: 'none',\n position: 'absolute',\n textAlign: 'left',\n top: 0,\n zIndex: 9000,\n }}\n >\n <Box padding={2}>\n <Stack gap={2}>\n <Text size={0}>Name: {name}</Text>\n <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n </Stack>\n </Box>\n </Card>","{\n input: {deployHook},\n }","deployState.matches('error')","deployState.matches('success')","() => {\n deployStateTransition({type: 'DEPLOY'})\n }","() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n\n if (isSuccess) {\n toast.push({\n closable: true,\n description: `Deploy queued for ${targetName}`,\n duration: 8000,\n status: 'success',\n title: WIDGET_NAME,\n })\n }\n }","[isError, isSuccess, toast, targetName, deployState.context.error]","error","() => {\n const subscription = deployStateInterpreter.subscribe((state) => {\n if (state.value === 'success') {\n if (onDeploySuccess) {\n onDeploySuccess()\n }\n }\n })\n\n return () => subscription.unsubscribe()\n }","[deployStateInterpreter, onDeploySuccess]","{position: 'relative'}","<StateDebug name=\"Deploy\" state={deployState} />","<Button\n disabled={deployState.context.disabled}\n fontSize={1}\n icon={UploadIcon}\n mode=\"ghost\"\n onClick={handleDeploy}\n padding={3}\n text={`${deployState.context.label} ${targetName}`}\n tone=\"default\"\n />","disabled","`${deployState.context.label} ${targetName}`","<Box padding={3} style={{position: 'relative'}}>\n <StateDebug name=\"Deploy\" state={deployState} />\n\n <Button\n disabled={deployState.context.disabled}\n fontSize={1}\n icon={UploadIcon}\n mode=\"ghost\"\n onClick={handleDeploy}\n padding={3}\n text={`${deployState.context.label} ${targetName}`}\n tone=\"default\"\n />\n </Box>","{state}: Props","<Box\n style={{\n backgroundColor: VERCEL_STATUS_COLORS[state],\n borderRadius: '20px',\n height: '9px',\n width: '9px',\n }}\n />","VERCEL_STATUS_COLORS[state]","['none', 'none', 'none', 'table-cell']","['none', 'none', 'none', 'none', 'table-cell']","{\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }","<Label size={0}>{children}</Label>","<Box\n as=\"th\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={2}\n style={{\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n <Label size={0}>{children}</Label>\n </Box>","[2, 2, 3]","{\n borderTop: `1px solid ${border}`,\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }","`1px solid ${border}`","<Box\n as=\"td\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={[2, 2, 3]}\n style={{\n borderTop: `1px solid ${border}`,\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n {children}\n </Box>","new Date(deployment.created)","created","useMemo(() => new Date(deployment.created), [deployment.created])","'githubCommitMessage'","'githubCommitRef'","['block', 'block', 'block', 'block', 'none']","{flexShrink: 0}","<Box\n display={['block', 'block', 'block', 'block', 'none']}\n marginRight={3}\n style={{flexShrink: 0}}\n >\n <StatusDot state={deployment.state} />\n </Box>","state","targetUrl ? (\n <>\n {/* Alias icon */}\n {deployment.alias && <LinkIcon />}\n\n <Box marginLeft={deployment.alias ? 1 : 0}>\n <Text\n muted={!(deployment.state === 'READY')}\n size={1}\n style={{\n textDecoration:\n deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n ? 'line-through'\n : 'normal',\n }}\n textOverflow=\"ellipsis\"\n >\n {deployment.state === 'READY' ? (\n <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n {targetUrl}\n </a>\n ) : (\n targetUrl\n )}\n </Text>\n </Box>\n </>\n ) : (\n <Text size={1}>Uploading...</Text>\n )","alias","<TableCell>\n <Flex align=\"center\">\n <Box\n display={['block', 'block', 'block', 'block', 'none']}\n marginRight={3}\n style={{flexShrink: 0}}\n >\n <StatusDot state={deployment.state} />\n </Box>\n\n {targetUrl ? (\n <>\n {/* Alias icon */}\n {deployment.alias && <LinkIcon />}\n\n <Box marginLeft={deployment.alias ? 1 : 0}>\n <Text\n muted={!(deployment.state === 'READY')}\n size={1}\n style={{\n textDecoration:\n deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n ? 'line-through'\n : 'normal',\n }}\n textOverflow=\"ellipsis\"\n >\n {deployment.state === 'READY' ? (\n <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n {targetUrl}\n </a>\n ) : (\n targetUrl\n )}\n </Text>\n </Box>\n </>\n ) : (\n <Text size={1}>Uploading...</Text>\n )}\n </Flex>\n </TableCell>","<StatusDot state={deployment.state} />","deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())","/^[a-z]/i","(t) => t.toUpperCase()","<Box marginLeft={2}>\n <Text size={1}>\n {deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n </Text>\n </Box>","<TableCell variant=\"state\">\n <Flex align=\"center\">\n <StatusDot state={deployment.state} />\n <Box marginLeft={2}>\n <Text size={1}>\n {deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n </Text>\n </Box>\n </Flex>\n </TableCell>","<Text size={1} textOverflow=\"ellipsis\">\n {commitRef}\n </Text>","commitMessage && (\n <Text muted size={1} textOverflow=\"ellipsis\">\n {commitMessage}\n </Text>\n )","<TableCell variant=\"branch\">\n <Stack gap={2}>\n <Text size={1} textOverflow=\"ellipsis\">\n {commitRef}\n </Text>\n {commitMessage && (\n <Text muted size={1} textOverflow=\"ellipsis\">\n {commitMessage}\n </Text>\n )}\n </Stack>\n </TableCell>","<TableCell variant=\"age\">\n <Flex align=\"center\">\n <Text size={1}>\n <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n </Text>\n </Flex>\n </TableCell>","{\n borderRadius: '20px',\n height: '20px',\n width: '20px',\n }","<TableCell variant=\"creator\">\n <Flex align=\"center\" justify=\"center\">\n <img\n alt={deployment?.creator?.username || 'Deployment creator avatar'}\n draggable={false}\n src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n style={{\n borderRadius: '20px',\n height: '20px',\n width: '20px',\n }}\n />\n </Flex>\n </TableCell>","deployment?.creator?.username || 'Deployment creator avatar'","`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`","<tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <Flex align=\"center\">\n <Box\n display={['block', 'block', 'block', 'block', 'none']}\n marginRight={3}\n style={{flexShrink: 0}}\n >\n <StatusDot state={deployment.state} />\n </Box>\n\n {targetUrl ? (\n <>\n {/* Alias icon */}\n {deployment.alias && <LinkIcon />}\n\n <Box marginLeft={deployment.alias ? 1 : 0}>\n <Text\n muted={!(deployment.state === 'READY')}\n size={1}\n style={{\n textDecoration:\n deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n ? 'line-through'\n : 'normal',\n }}\n textOverflow=\"ellipsis\"\n >\n {deployment.state === 'READY' ? (\n <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n {targetUrl}\n </a>\n ) : (\n targetUrl\n )}\n </Text>\n </Box>\n </>\n ) : (\n <Text size={1}>Uploading...</Text>\n )}\n </Flex>\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <Flex align=\"center\">\n <StatusDot state={deployment.state} />\n <Box marginLeft={2}>\n <Text size={1}>\n {deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n </Text>\n </Box>\n </Flex>\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <Stack gap={2}>\n <Text size={1} textOverflow=\"ellipsis\">\n {commitRef}\n </Text>\n {commitMessage && (\n <Text muted size={1} textOverflow=\"ellipsis\">\n {commitMessage}\n </Text>\n )}\n </Stack>\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <Flex align=\"center\">\n <Text size={1}>\n <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n </Text>\n </Flex>\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex align=\"center\" justify=\"center\">\n <img\n alt={deployment?.creator?.username || 'Deployment creator avatar'}\n draggable={false}\n src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n style={{\n borderRadius: '20px',\n height: '20px',\n width: '20px',\n }}\n />\n </Flex>\n </TableCell>\n </tr>","<Box\n style={{\n backgroundColor: border,\n borderRadius: '20px',\n height: '20px',\n userSelect: 'none',\n width: '20px',\n }}\n />","{\n backgroundColor: border,\n borderRadius: '3px',\n userSelect: 'none',\n width: '100%',\n }","<Stack gap={2}>\n {Array.from({length: rows}, (_, index) => (\n <Text key={index} size={1}>\n \n </Text>\n ))}\n </Stack>","(_, index) => (\n <Text key={index} size={1}>\n \n </Text>\n )","<Box\n style={{\n backgroundColor: border,\n borderRadius: '3px',\n userSelect: 'none',\n width: '100%',\n }}\n >\n <Stack gap={2}>\n {Array.from({length: rows}, (_, index) => (\n <Text key={index} size={1}>\n \n </Text>\n ))}\n </Stack>\n </Box>","<TableCell>\n <PlaceholderText rows={1} />\n </TableCell>","<TableCell variant=\"state\">\n <PlaceholderText rows={1} />\n </TableCell>","<TableCell variant=\"branch\">\n <PlaceholderText rows={2} />\n </TableCell>","<TableCell variant=\"age\">\n <PlaceholderText rows={1} />\n </TableCell>","<tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <PlaceholderText rows={2} />\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex justify=\"center\">\n <PlaceholderAvatar />\n </Flex>\n </TableCell>\n </tr>","refreshState.matches('error')","{\n enabled: !refreshState.matches('error'),\n }","!refreshState.matches('error')","() => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n refTimeout.current = setTimeout(() => {\n void refetch({\n cancelRefetch: true,\n throwOnError: true,\n })\n }, 4000)\n }","() => {\n return () => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n }\n }","[]","() => {\n if (error) {\n refreshStateTransition({type: 'ERROR'})\n }\n\n if (isFetching) {\n refreshStateTransition({type: 'REFRESH'})\n }\n\n if (!isFetching && isSuccess) {\n refreshStateTransition({type: 'REFRESHED'})\n }\n }","[error, isFetching, isSuccess, refreshStateTransition]","() => {\n if (!refreshState.matches('refreshing')) {\n refreshStateTransition({type: 'REFRESH'})\n }\n }","[deploymentTarget]","() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n }","deploymentTarget.name","[deploymentTarget, isError]","{position: 'relative'}","<StateDebug name=\"Refresh\" state={refreshState} />","!refreshState.matches('error') && (\n <>\n <Box\n as=\"table\"\n style={{\n borderBottom: `1px solid ${border}`,\n borderCollapse: 'collapse',\n display: 'table',\n tableLayout: 'fixed',\n width: '100%',\n }}\n >\n <Box as=\"thead\" style={{display: 'table-header-group'}}>\n <tr>\n {/* Deployment */}\n <TableCell header>Deployment</TableCell>\n\n {/* State */}\n <TableCell header variant=\"state\">\n State\n </TableCell>\n\n {/* Branch */}\n <TableCell header variant=\"branch\">\n Branch\n </TableCell>\n\n {/* Age */}\n <TableCell header variant=\"age\">\n Age\n </TableCell>\n\n {/* Creator */}\n <TableCell header variant=\"creator\">\n Creator\n </TableCell>\n </tr>\n </Box>\n\n <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n {/* Placeholders */}\n {!deployments &&\n Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n <DeploymentPlaceholder key={index} />\n ))}\n {/* Deployments */}\n {hasDeployments &&\n deployments?.map((deployment) => (\n <Deployment deployment={deployment} key={deployment.uid} />\n ))}\n </Box>\n </Box>\n\n {/* No results */}\n {hasFetched && !hasDeployments && (\n <Box padding={3} style={{width: '100%'}}>\n <Text muted size={1}>\n No deployments found. Don't forget to specify a valid team ID if your project\n belongs to a team.\n </Text>\n </Box>\n )}\n </>\n )","deploymentTarget.deployLimit","(_, index) => (\n <DeploymentPlaceholder key={index} />\n )","(deployment) => (\n <Deployment deployment={deployment} key={deployment.uid} />\n )","refreshState.matches('error') && (\n <Box padding={3}>\n <Text muted size={1}>\n Unable to fetch recent deployments. Please check your network and deployment settings.\n </Text>\n </Box>\n )","!refreshState.matches('error') && deploymentTarget.deployHook && (\n <Box>\n <DeployButton\n deployHook={deploymentTarget.deployHook}\n onDeploySuccess={handleDeploySuccess}\n targetName={deploymentTarget.name}\n />\n </Box>\n )","deploymentTarget.deployHook","<Box marginTop={3} style={{position: 'relative'}}>\n {/* xstate debug */}\n <StateDebug name=\"Refresh\" state={refreshState} />\n\n {!refreshState.matches('error') && (\n <>\n <Box\n as=\"table\"\n style={{\n borderBottom: `1px solid ${border}`,\n borderCollapse: 'collapse',\n display: 'table',\n tableLayout: 'fixed',\n width: '100%',\n }}\n >\n <Box as=\"thead\" style={{display: 'table-header-group'}}>\n <tr>\n {/* Deployment */}\n <TableCell header>Deployment</TableCell>\n\n {/* State */}\n <TableCell header variant=\"state\">\n State\n </TableCell>\n\n {/* Branch */}\n <TableCell header variant=\"branch\">\n Branch\n </TableCell>\n\n {/* Age */}\n <TableCell header variant=\"age\">\n Age\n </TableCell>\n\n {/* Creator */}\n <TableCell header variant=\"creator\">\n Creator\n </TableCell>\n </tr>\n </Box>\n\n <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n {/* Placeholders */}\n {!deployments &&\n Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n <DeploymentPlaceholder key={index} />\n ))}\n {/* Deployments */}\n {hasDeployments &&\n deployments?.map((deployment) => (\n <Deployment deployment={deployment} key={deployment.uid} />\n ))}\n </Box>\n </Box>\n\n {/* No results */}\n {hasFetched && !hasDeployments && (\n <Box padding={3} style={{width: '100%'}}>\n <Text muted size={1}>\n No deployments found. Don't forget to specify a valid team ID if your project\n belongs to a team.\n </Text>\n </Box>\n )}\n </>\n )}\n\n {/* Error message */}\n {refreshState.matches('error') && (\n <Box padding={3}>\n <Text muted size={1}>\n Unable to fetch recent deployments. Please check your network and deployment settings.\n </Text>\n </Box>\n )}\n\n {/* Deploy button */}\n {!refreshState.matches('error') && deploymentTarget.deployHook && (\n <Box>\n <DeployButton\n deployHook={deploymentTarget.deployHook}\n onDeploySuccess={handleDeploySuccess}\n targetName={deploymentTarget.name}\n />\n </Box>\n )}\n </Box>","{\n deployHook: item.deployHook,\n deployLimit: item.deployLimit,\n name: item.name,\n projectId: item.projectId,\n teamId: item.teamId,\n token: item.token,\n }","deployHook","deployLimit","name","projectId","teamId","token","{position: 'relative'}","<Text size={2}>{item.name}</Text>","<Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>","<Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n </Tooltip>","<Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n <Text size={2}>{item.name}</Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n </Tooltip>\n </Flex>","<Deployments deploymentTarget={deploymentTarget} />","<Box style={{position: 'relative'}}>\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n <Text size={2}>{item.name}</Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n </Tooltip>\n </Flex>\n\n {/* Content */}\n <Deployments deploymentTarget={deploymentTarget} />\n </Box>","items?.map((item) => (\n <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n ))","items?.map","<Stack gap={5}>\n {items?.map((item) => (\n <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n ))}\n </Stack>","<Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>","error && (\n <Text size={1}>\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n {error.message}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <ErrorOutlineIcon style={errorIconStyle} />\n </Tooltip>\n </Text>\n )","<Inline gap={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n {error.message}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <ErrorOutlineIcon style={errorIconStyle} />\n </Tooltip>\n </Text>\n )}\n </Inline>","description && (\n <Box marginY={3}>\n <Text as=\"p\" muted size={1}>\n {description}\n </Text>\n </Box>\n )","<Box marginBottom={3}>\n {/* Label */}\n <Inline gap={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n {error.message}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <ErrorOutlineIcon style={errorIconStyle} />\n </Tooltip>\n </Text>\n )}\n </Inline>\n\n {/* Description */}\n {description && (\n <Box marginY={3}>\n <Text as=\"p\" muted size={1}>\n {description}\n </Text>\n </Box>\n )}\n </Box>","<FormFieldInputLabel description={description} error={error} label={label} name={name} />","<TextInput\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n />","<Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n {/* Input */}\n <TextInput\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n />\n </Box>","{\n input: {client},\n }","formState.hasTag('busy')","{\n deployHook: deploymentTarget?.deployHook || '',\n deployLimit: deploymentTarget?.deployLimit || 5,\n name: deploymentTarget?.name || '',\n projectId: deploymentTarget?.projectId || '',\n teamId: deploymentTarget?.teamId || '',\n token: deploymentTarget?.token || '',\n }","deploymentTarget?.deployHook || ''","deploymentTarget?.deployLimit || 5","deploymentTarget?.name || ''","deploymentTarget?.projectId || ''","deploymentTarget?.teamId || ''","deploymentTarget?.token || ''","yupResolver(formSchema)","{\n // @ts-expect-error - fix typings later\n defaultValues: {\n deployHook: deploymentTarget?.deployHook || '',\n deployLimit: deploymentTarget?.deployLimit || 5,\n name: deploymentTarget?.name || '',\n projectId: deploymentTarget?.projectId || '',\n teamId: deploymentTarget?.teamId || '',\n token: deploymentTarget?.token || '',\n },\n mode: 'onChange',\n resolver: yupResolver(formSchema),\n }","{errors, isDirty, isValid}","() => {\n if (formState.matches('error')) {\n toast.push({\n status: 'error',\n title: formState.context.message || 'An error occurred',\n })\n }\n /**\n * If the machine is done it means it reached updated, created, deleted or error state.\n * We don't care which one, we just want to close the dialog\n */\n if (formState.status === 'done') {\n onClose()\n }\n }","[formState, onClose, toast]","async (formData: FormData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n if (deploymentTarget) {\n formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n } else {\n formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n }\n await toPromise(formStateActorRef)\n const snapshot = formStateActorRef.getSnapshot()\n const {document} = snapshot.context\n if (!document) return\n if (snapshot.matches('created')) {\n onCreate?.(document)\n } else if (snapshot.matches('updated')) {\n onUpdate?.(document)\n }\n }","async () => {\n if (!deploymentTarget) {\n return\n }\n const id = deploymentTarget._id\n formStateTransition({type: 'DELETE', id})\n await toPromise(formStateActorRef)\n if (formStateActorRef.getSnapshot().matches('deleted')) {\n onDelete?.(id)\n }\n }","deploymentTarget && (\n <Button\n loading={formState.matches('deleting')}\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n )","formState.matches('creating') || formState.matches('updating')","handleSubmit(onSubmit)","<Button\n loading={formState.matches('creating') || formState.matches('updating')}\n disabled={!isDirty || !isValid}\n fontSize={1}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onClick={handleSubmit(onSubmit)}\n text={deploymentTarget ? 'Update and close' : 'Create'}\n tone=\"primary\"\n />","!isDirty || !isValid","deploymentTarget ? 'Update and close' : 'Create'","<Box padding={3}>\n <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n {/* Delete button */}\n {deploymentTarget && (\n <Button\n loading={formState.matches('deleting')}\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n )}\n\n {/* Submit button */}\n <Button\n loading={formState.matches('creating') || formState.matches('updating')}\n disabled={!isDirty || !isValid}\n fontSize={1}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onClick={handleSubmit(onSubmit)}\n text={deploymentTarget ? 'Update and close' : 'Create'}\n tone=\"primary\"\n />\n </Flex>\n </Box>","deploymentTarget ? 'space-between' : 'flex-end'","<button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />","register('name')","<FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />","errors?.name","register('token')","<FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />","errors?.token","register('projectId')","<FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />","errors?.projectId","register('teamId')","<FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />","errors?.teamId","register('deployHook')","<FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />","errors?.deployHook","register('deployLimit', {valueAsNumber: true})","<FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />","errors?.deployLimit","<Stack gap={5}>\n {/* Title */}\n <FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />\n\n <FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />\n\n <FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />\n </Stack>","<Box\n as=\"form\"\n padding={4}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onSubmit={handleSubmit(onSubmit)}\n >\n {/* Hidden button to enable enter key submissions */}\n <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Form fields */}\n <Stack gap={5}>\n {/* Title */}\n <FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />\n\n <FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />\n\n <FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />\n </Stack>\n </Box>","<Dialog\n footer={\n <Box padding={3}>\n <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n {/* Delete button */}\n {deploymentTarget && (\n <Button\n loading={formState.matches('deleting')}\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n )}\n\n {/* Submit button */}\n <Button\n loading={formState.matches('creating') || formState.matches('updating')}\n disabled={!isDirty || !isValid}\n fontSize={1}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onClick={handleSubmit(onSubmit)}\n text={deploymentTarget ? 'Update and close' : 'Create'}\n tone=\"primary\"\n />\n </Flex>\n </Box>\n }\n header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n id=\"create\"\n onClose={onClose}\n width={1}\n zOffset={Z_INDEX_DIALOG}\n >\n {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n <Box\n as=\"form\"\n padding={4}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onSubmit={handleSubmit(onSubmit)}\n >\n {/* Hidden button to enable enter key submissions */}\n <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Form fields */}\n <Stack gap={5}>\n {/* Title */}\n <FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />\n\n <FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />\n\n <FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />\n </Stack>\n </Box>\n </Dialog>","`${deploymentTarget ? 'Edit' : 'Create'} deployment target`","{input: {client}}","() => {\n dialogStateTransition({type: 'CLOSE'})\n }","() => {\n dialogStateTransition({type: 'CREATE'})\n }","(deploymentTarget: Sanity.DeploymentTarget) => {\n dialogStateTransition({type: 'EDIT', deploymentTarget})\n }","(deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n }","(id: string) => {\n deploymentTargetListStateTransition({type: 'DELETE', id})\n }","(deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n }","{overflow: 'hidden '}","<StateDebug name=\"List\" state={deploymentTargetListState} />","<Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>","<Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>","<Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n <Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n </Tooltip>\n </Flex>","deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )","deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )","deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )","deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )","<Box>\n {deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )}\n\n {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )}\n\n {deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )}\n\n {deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )}\n </Box>","<Card radius={2} style={{overflow: 'hidden '}}>\n {/* xstate debug */}\n <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n <Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n </Tooltip>\n </Flex>\n\n <Box>\n {deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )}\n\n {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )}\n\n {deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )}\n\n {deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )}\n </Box>\n </Card>","dialogState.matches('create') && (\n <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n )","dialogState.matches('edit') && (\n <DialogForm\n deploymentTarget={dialogState.context.editDeploymentTarget}\n onClose={handleDialogClose}\n onDelete={handleTargetDelete}\n onUpdate={handleTargetUpdate}\n />\n )","<ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n <QueryClientProvider client={queryClient}>\n <Card radius={2} style={{overflow: 'hidden '}}>\n {/* xstate debug */}\n <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n <Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n </Tooltip>\n </Flex>\n\n <Box>\n {deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )}\n\n {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )}\n\n {deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )}\n\n {deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )}\n </Box>\n </Card>\n\n {/* Dialogs */}\n {dialogState.matches('create') && (\n <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n )}\n\n {dialogState.matches('edit') && (\n <DialogForm\n deploymentTarget={dialogState.context.editDeploymentTarget}\n onClose={handleDialogClose}\n onDelete={handleTargetDelete}\n onUpdate={handleTargetUpdate}\n />\n )}\n </QueryClientProvider>\n </ToastProvider>"],"sources":["../src/constants.ts","../src/client.ts","../src/utils/fetcher.ts","../src/hooks/useDeployments.ts","../src/machines/refresh.ts","../src/utils/useCardColor.ts","../src/machines/deploy.ts","../src/components/StateDebug/index.tsx","../src/components/DeployButton/index.tsx","../src/components/StatusDot/index.tsx","../src/components/TableCell/index.tsx","../src/components/Deployment/index.tsx","../src/components/PlaceholderAvatar/index.tsx","../src/components/PlaceholderText/index.tsx","../src/components/DeploymentPlaceholder/index.tsx","../src/components/Deployments/index.tsx","../src/components/DeploymentTarget/index.tsx","../src/components/DeploymentTargets/index.tsx","../src/machines/form.ts","../src/utils/sanitizeFormData.ts","../src/components/FormFieldInputLabel/index.tsx","../src/components/FormFieldInputText/index.tsx","../src/components/DialogForm/index.tsx","../src/machines/deploymentTargetList.ts","../src/machines/dialog.ts","../src/app.tsx","../src/index.ts"],"sourcesContent":["// https://vercel.com/docs/platform/limits\nexport const API_ENDPOINT_DEPLOYMENTS = 'https://api.vercel.com/v5/now/deployments'\nexport const API_ENDPOINT_ALIASES = 'https://api.vercel.com/v3/now/aliases'\n\n// Sanity API version\nexport const API_VERSION = '1'\n\nexport const DEBUG_MODE = false\n\nexport const DEPLOYMENT_TARGET_DOCUMENT_TYPE = 'vercel.deploymentTarget'\n\nexport const VERCEL_STATUS_COLORS = {\n BUILDING: '#f5a623',\n CANCELED: '#ff0000',\n ERROR: '#ff0000',\n READY: '#50e3c2',\n QUEUED: '#333',\n}\n\n// Name displayed in toasts\nexport const WIDGET_NAME = 'Vercel (dashboard)'\n\n// NOTE: Manually set plugin z-index values to be higher than Sanity's header search field\n// (which is currently 500202). Also ensure toasts always sit above dialogs.\nexport const Z_INDEX_DIALOG = 600001\nexport const Z_INDEX_TOAST_PROVIDER = 600002\n","import {type SanityClient, useClient} from 'sanity'\n\nimport {API_VERSION} from './constants'\n\nexport function useSanityClient(): SanityClient {\n return useClient({apiVersion: API_VERSION})\n}\n","import {type Sanity} from '../types'\n\nconst fetcher =\n (deploymentTarget: Sanity.DeploymentTargetConfig) =>\n async (url: string, extraParams?: URLSearchParams) => {\n const params = new URLSearchParams()\n params.set('projectId', deploymentTarget.projectId)\n if (deploymentTarget.teamId) {\n params.set('teamId', deploymentTarget.teamId)\n }\n\n if (extraParams) {\n for (const [k, v] of extraParams.entries()) {\n params.append(k, v)\n }\n }\n\n const response = await fetch(`${url}?${params.toString()}`, {\n headers: {\n Authorization: `Bearer ${deploymentTarget.token}`,\n },\n })\n\n // Manually throw on non-OK responses for react-query\n // https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-others-clients-that-do-not-throw-by-default\n if (!response.ok) {\n throw new Error('Response not OK')\n }\n\n try {\n return await response.json()\n } catch (err) {\n throw new Error('Unable to parse response as JSON', {cause: err})\n }\n }\n\nexport default fetcher\n","import {useQuery} from '@tanstack/react-query'\nimport hash from 'object-hash'\n\nimport {API_ENDPOINT_ALIASES, API_ENDPOINT_DEPLOYMENTS} from '../constants'\nimport {type Sanity, type Vercel} from '../types'\nimport fetcher from '../utils/fetcher'\n\ntype Options = {\n enabled?: boolean\n}\n\nconst useDeployments = (deploymentTarget: Sanity.DeploymentTargetConfig, options?: Options) => {\n const fetchUrl = fetcher(deploymentTarget)\n\n // Fetch deployments\n const deployParams = new URLSearchParams()\n deployParams.set('limit', String(deploymentTarget?.deployLimit))\n\n const {\n data: deploymentsData,\n isFetching: deploymentsIsFetching,\n isSuccess: deploymentsIsSuccess,\n error: deploymentsError,\n refetch,\n } = useQuery<{deployments: Vercel.Deployment[]}>({\n queryKey: [hash(deploymentTarget)],\n queryFn: () => fetchUrl(API_ENDPOINT_DEPLOYMENTS, deployParams),\n enabled: options?.enabled ?? true,\n refetchInterval: 20000, // ms\n refetchIntervalInBackground: false,\n refetchOnMount: true,\n refetchOnReconnect: 'always',\n refetchOnWindowFocus: false,\n retry: false,\n })\n\n // Fetch aliases (only if deployments have been retrieved)\n const aliasParams = new URLSearchParams()\n aliasParams.set('limit', '20')\n\n const {\n data: aliasesData,\n isFetching: aliasesIsFetching,\n isSuccess: aliasesIsSuccess,\n error: aliasesError,\n } = useQuery<{\n aliases: Vercel.Alias[]\n pagination: {\n count: number\n next?: number\n prev?: number\n }\n }>({\n queryKey: [hash(deploymentTarget), 'aliases'],\n queryFn: () => fetchUrl(API_ENDPOINT_ALIASES, aliasParams),\n enabled: !!deploymentsData,\n refetchOnMount: false,\n refetchOnReconnect: false,\n refetchOnWindowFocus: false,\n retry: false,\n })\n\n const aliases = aliasesData?.aliases\n\n let deploymentsWithAlias: Vercel.DeploymentWithAlias[] | undefined\n\n if (aliases) {\n deploymentsWithAlias = deploymentsData?.deployments?.map((val: Vercel.DeploymentWithAlias) => {\n const alias = aliases.find((a) => a.deploymentId === val.uid)\n return Object.assign(val, {alias: alias?.alias})\n })\n }\n\n return {\n deployments: deploymentsWithAlias,\n error: aliasesError || deploymentsError,\n isFetching: aliasesIsFetching || deploymentsIsFetching,\n isSuccess: aliasesIsSuccess && deploymentsIsSuccess,\n refetch,\n }\n}\n\nexport default useDeployments\n","import {setup} from 'xstate'\n\ntype Event = {type: 'ERROR'} | {type: 'REFRESH'} | {type: 'REFRESHED'} | {type: 'RETRY'}\n\nconst refreshMachine = setup({\n types: {\n events: {} as Event,\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAJQFEAxBgZQAkBtABgF1FQADgHtYuAC64h+fiAAeiAIwAmAGwkuGrkoAsAZhVKlAVm0KAHABoQAT0QBOJSRN27XFXaMmz2twF9fVmhYeISkAE5gAGYRsCFQ1PS0tADytNx8SCDCohJSMvIIPnYkxhpKXGZ22kY6xla2CAq6CiQudgDsRnYqKroVfe3+gRg4BMQkEdFwcXRMrGz0ACLpMtniktKZBUUlRmUVVTXadTaISrqObUY97QodvWa6QyBBo6ETUTHYkLPM9OwrTJrXKbUDbJTFLjtMzmWraOx3doqeqKMyOeHdXp3BTHXTVZ6vELjMBhMJCMK-eaAwQidZ5LaIY6Q6Gw47wxHI04IGEkDFma5NbTtY7ufwBED4IQQOAyQljIirWkg-KIAC0nIa6oJIyJpHIVEVOQ2KsKShRCDsunUGLcHi8PhU2uC8o+U1iBCghrpoLkZ2uTk0XCq7SRRl0Zg19itXHhIZ85lMEaUTre40mX0gXuVDIQnmKRhZKk6PmaVXN2PUaLsZhj2hUOJU-JTupIJLJYSzxpzeacheLXFL2nNrkrfW8SKFnhDYt8QA */\n initial: 'idle',\n states: {\n idle: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n refreshing: {\n on: {\n ERROR: {\n target: 'error',\n },\n REFRESHED: {\n target: 'refreshed',\n },\n },\n },\n refreshed: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n error: {\n on: {\n REFRESH: {\n target: 'refreshing',\n },\n },\n },\n },\n})\n\nexport default refreshMachine\n","import {useTheme_v2} from '@sanity/ui'\n\nexport function useCardColor(): {border: string} {\n const {color} = useTheme_v2()\n return {border: color.border}\n}\n","import {assign, setup, fromPromise} from 'xstate'\n\nimport {type Vercel} from '../types'\n\ntype Context = {\n deployHook: string\n disabled: boolean\n feedback?: string\n label?: string\n error?: string\n}\n\ntype Event = {type: 'DEPLOY'}\n\ninterface DeployActorInput {\n deployHook: string\n}\n\nexport const deployMachine = setup({\n types: {\n context: {} as Context,\n events: {} as Event,\n input: {} as DeployActorInput,\n },\n actors: {\n deploy: fromPromise(async ({input, signal}: {input: DeployActorInput; signal: AbortSignal}) => {\n try {\n if (!input.deployHook) {\n throw new Error('No deployHook URL defined')\n }\n const res = await fetch(input.deployHook, {method: 'POST', signal})\n const data: {error?: Vercel.Error} | null = await res.json()\n if (!res.ok) {\n const errorMessage = data?.error?.message || res.statusText\n throw errorMessage\n }\n } catch (err) {\n if (typeof err === 'string') {\n throw err\n }\n console.error('Unable to deploy with error:', err)\n throw new Error('Please check the developer console for more information', {cause: err})\n }\n }),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QTABwDYHsCeA6AlhOmAMQAiAogAoAyA8gJoDaADALqKiqaz4Au+TADtOIAB6IATCxa4AnADYAHAHYArArUslAZjksNAGhDZEARk3yVmhSxVyHC-QBYAvq+MoMOXF6zZ8ISgSCGEwAiEAN0wAa3C-HwSAoIRA6IBjAEMBYVY2PNFuXhyRJHFENTMzXElFJSUzNTVnWx0FY1MESXVcZzUdM2k1OTUVBoV3TzR-X2mcQOCwACclzCXcDGyAMzWAW1nvPCSF1KjMLJK8grKi-kFS0AkESura5QamlpY2jvMB+QcDkqLH0wxYEw8ICSuFgAFd0uk4LByNR6Mx2IUeHdhKIns1ZN9BtYQVpRnJfl1JM55P1BnY1Ep9CpGpMoXM8MtVksUbRGNcuFiSriKs4CQNurYRgZ7BSGr1ASNupIzEo+kp3JChJgUPAyklMcV7sKEABadomRAmtQAhW2wE6VnQwjEA3Yh7lBDOSQUsxeqyaPoWYbWFSO9kHfwLV1CspPHSSHQ1ZyA1UKJzJlQ+iz+5oKewKWrfNyQ6FwhFI6NG2OINOSXDiypKAxtMyZi1dEE1Qk6L0FpTSUMl8OctaVnHVhC1+uDRvNhStin6XDaHQ9liSXTJiUa1xAA */\n id: 'deploy',\n initial: 'idle',\n context: ({input}) => ({\n disabled: false,\n feedback: undefined,\n label: undefined,\n error: undefined,\n deployHook: input.deployHook,\n }),\n states: {\n idle: {\n entry: assign({\n feedback: () => undefined,\n label: () => 'Deploy',\n }),\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n deploying: {\n entry: assign({\n disabled: () => true,\n label: () => 'Deploying',\n }),\n exit: assign({\n disabled: () => false,\n label: () => 'Deploy',\n }),\n invoke: {\n src: 'deploy',\n input: ({context}) => ({deployHook: context.deployHook}),\n onDone: {\n target: 'success',\n },\n onError: {\n target: 'error',\n actions: assign({\n error: ({event}) => {\n if ('error' in event) {\n const {error} = event\n if (typeof error === 'string') {\n return error\n }\n if (error instanceof Error) {\n return error.message\n }\n }\n return 'Unknown error'\n },\n }),\n },\n },\n },\n success: {\n entry: assign({\n feedback: () => 'Successfully started!',\n }),\n exit: assign({\n feedback: () => undefined,\n }),\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n error: {\n on: {\n DEPLOY: {\n target: 'deploying',\n },\n },\n },\n },\n})\n","import {Box, Card, Stack, Text} from '@sanity/ui'\n\nimport {DEBUG_MODE} from '../../constants'\n\ntype Props = {\n name: string\n state: any // TODO: type correctly\n}\n\nconst StateDebug = (props: Props) => {\n const {name, state} = props\n\n if (!DEBUG_MODE) {\n return null\n }\n\n return (\n <Card\n scheme=\"dark\"\n style={{\n backgroundColor: 'rgba(0, 0, 255, 0.9)',\n borderRadius: '3px',\n fontSize: 1,\n fontWeight: 500,\n lineHeight: 'body',\n right: 0,\n opacity: 0.75,\n pointerEvents: 'none',\n position: 'absolute',\n textAlign: 'left',\n top: 0,\n zIndex: 9000,\n }}\n >\n <Box padding={2}>\n <Stack gap={2}>\n <Text size={0}>Name: {name}</Text>\n <Text size={0}>state.value: {JSON.stringify(state.value)}</Text>\n </Stack>\n </Box>\n </Card>\n )\n}\n\nexport default StateDebug\n","import {UploadIcon} from '@sanity/icons/Upload'\nimport {Box, Button} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect} from 'react'\n\nimport {WIDGET_NAME} from '../../constants'\nimport {deployMachine} from '../../machines/deploy'\nimport StateDebug from '../StateDebug'\n\ntype Props = {\n deployHook: string\n onDeploySuccess?: () => void\n targetName: string\n}\n\nconst DeployButton = (props: Props) => {\n const {deployHook, onDeploySuccess, targetName} = props\n\n const [deployState, deployStateTransition, deployStateInterpreter] = useMachine(deployMachine, {\n input: {deployHook},\n })\n\n const toast = useToast()\n\n const isError = deployState.matches('error')\n const isSuccess = deployState.matches('success')\n\n // Callbacks\n const handleDeploy = () => {\n deployStateTransition({type: 'DEPLOY'})\n }\n\n // Effects\n useEffect(() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to queue deploy for ${targetName}: ${deployState.context.error}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n\n if (isSuccess) {\n toast.push({\n closable: true,\n description: `Deploy queued for ${targetName}`,\n duration: 8000,\n status: 'success',\n title: WIDGET_NAME,\n })\n }\n }, [isError, isSuccess, toast, targetName, deployState.context.error])\n\n useEffect(() => {\n const subscription = deployStateInterpreter.subscribe((state) => {\n if (state.value === 'success') {\n if (onDeploySuccess) {\n onDeploySuccess()\n }\n }\n })\n\n return () => subscription.unsubscribe()\n }, [deployStateInterpreter, onDeploySuccess])\n\n return (\n <Box padding={3} style={{position: 'relative'}}>\n <StateDebug name=\"Deploy\" state={deployState} />\n\n <Button\n disabled={deployState.context.disabled}\n fontSize={1}\n icon={UploadIcon}\n mode=\"ghost\"\n onClick={handleDeploy}\n padding={3}\n text={`${deployState.context.label} ${targetName}`}\n tone=\"default\"\n />\n </Box>\n )\n}\n\nexport default DeployButton\n","import {Box} from '@sanity/ui'\n\nimport {VERCEL_STATUS_COLORS} from '../../constants'\nimport {type Vercel} from '../../types'\n\ntype Props = {\n state: Vercel.DeploymentState\n}\n\nconst StatusDot = ({state}: Props) => (\n <Box\n style={{\n backgroundColor: VERCEL_STATUS_COLORS[state],\n borderRadius: '20px',\n height: '9px',\n width: '9px',\n }}\n />\n)\n\nexport default StatusDot\n","import {Box, Label} from '@sanity/ui'\nimport type {ReactNode} from 'react'\n\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n children: ReactNode\n colSpan?: number\n header?: boolean\n variant?: 'age' | 'branch' | 'creator' | 'state'\n}\n\nconst TableCell = (props: Props) => {\n const {children, colSpan, header, variant} = props\n\n let display: Sanity.BoxDisplay | Sanity.BoxDisplay[] = 'table-cell'\n let cellWidth: string = 'auto'\n\n switch (variant) {\n case 'age':\n cellWidth = '50px'\n break\n case 'branch':\n cellWidth = '300px'\n display = ['none', 'none', 'none', 'table-cell']\n break\n case 'creator':\n cellWidth = '80px'\n break\n case 'state':\n cellWidth = '110px'\n display = ['none', 'none', 'none', 'none', 'table-cell']\n break\n default:\n break\n }\n\n const {border} = useCardColor()\n\n if (header) {\n return (\n <Box\n as=\"th\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={2}\n style={{\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n <Label size={0}>{children}</Label>\n </Box>\n )\n }\n return (\n <Box\n as=\"td\"\n colSpan={colSpan}\n // @ts-expect-error -- local `display` allows 'table-cell', which is not part of @sanity/ui's `BoxDisplay` union\n display={display}\n paddingX={3}\n paddingY={[2, 2, 3]}\n style={{\n borderTop: `1px solid ${border}`,\n maxWidth: cellWidth,\n position: 'relative',\n textAlign: 'left',\n width: cellWidth,\n }}\n >\n {children}\n </Box>\n )\n}\n\nexport default TableCell\n","import {LinkIcon} from '@sanity/icons/Link'\nimport {Box, Flex, Stack, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\n// oxlint-disable-next-line import/no-unassigned-import\nimport 'react-time-ago/locale/en'\nimport ReactTimeAgo from 'react-time-ago'\n\nimport {type Vercel} from '../../types'\nimport StatusDot from '../StatusDot'\nimport TableCell from '../TableCell'\n\ntype Props = {\n deployment: Vercel.DeploymentWithAlias\n}\n\nconst Deployment = (props: Props) => {\n const {deployment} = props\n\n const date = useMemo(() => new Date(deployment.created), [deployment.created])\n\n const commitMessage = deployment?.meta?.['githubCommitMessage']\n const commitRef = deployment?.meta?.['githubCommitRef']\n\n const targetUrl = deployment.alias ?? deployment.url\n\n return (\n <tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <Flex align=\"center\">\n <Box\n display={['block', 'block', 'block', 'block', 'none']}\n marginRight={3}\n style={{flexShrink: 0}}\n >\n <StatusDot state={deployment.state} />\n </Box>\n\n {targetUrl ? (\n <>\n {/* Alias icon */}\n {deployment.alias && <LinkIcon />}\n\n <Box marginLeft={deployment.alias ? 1 : 0}>\n <Text\n muted={!(deployment.state === 'READY')}\n size={1}\n style={{\n textDecoration:\n deployment.state === 'CANCELED' || deployment.state === 'ERROR'\n ? 'line-through'\n : 'normal',\n }}\n textOverflow=\"ellipsis\"\n >\n {deployment.state === 'READY' ? (\n <a href={`https://${targetUrl}`} rel=\"noopener noreferrer\" target=\"_blank\">\n {targetUrl}\n </a>\n ) : (\n targetUrl\n )}\n </Text>\n </Box>\n </>\n ) : (\n <Text size={1}>Uploading...</Text>\n )}\n </Flex>\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <Flex align=\"center\">\n <StatusDot state={deployment.state} />\n <Box marginLeft={2}>\n <Text size={1}>\n {deployment.state\n .trim()\n .toLowerCase()\n .replace(/^[a-z]/i, (t) => t.toUpperCase())}\n </Text>\n </Box>\n </Flex>\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <Stack gap={2}>\n <Text size={1} textOverflow=\"ellipsis\">\n {commitRef}\n </Text>\n {commitMessage && (\n <Text muted size={1} textOverflow=\"ellipsis\">\n {commitMessage}\n </Text>\n )}\n </Stack>\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <Flex align=\"center\">\n <Text size={1}>\n <ReactTimeAgo date={date} locale=\"en-US\" timeStyle=\"mini\" />\n </Text>\n </Flex>\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex align=\"center\" justify=\"center\">\n <img\n alt={deployment?.creator?.username || 'Deployment creator avatar'}\n draggable={false}\n src={`https://vercel.com/api/www/avatar/${deployment?.creator?.uid}?&s=48`}\n style={{\n borderRadius: '20px',\n height: '20px',\n width: '20px',\n }}\n />\n </Flex>\n </TableCell>\n </tr>\n )\n}\n\nexport default Deployment\n","import {Box} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\nconst PlaceholderAvatar = () => {\n const {border} = useCardColor()\n return (\n <Box\n style={{\n backgroundColor: border,\n borderRadius: '20px',\n height: '20px',\n userSelect: 'none',\n width: '20px',\n }}\n />\n )\n}\n\nexport default PlaceholderAvatar\n","import {Box, Stack, Text} from '@sanity/ui'\n\nimport {useCardColor} from '../../utils/useCardColor'\n\ntype Props = {\n rows: number\n}\n\nconst PlaceholderText = (props: Props) => {\n const {rows} = props\n const {border} = useCardColor()\n return (\n <Box\n style={{\n backgroundColor: border,\n borderRadius: '3px',\n userSelect: 'none',\n width: '100%',\n }}\n >\n <Stack gap={2}>\n {Array.from({length: rows}, (_, index) => (\n <Text key={index} size={1}>\n \n </Text>\n ))}\n </Stack>\n </Box>\n )\n}\n\nexport default PlaceholderText\n","import {Flex} from '@sanity/ui'\n\nimport PlaceholderAvatar from '../PlaceholderAvatar'\nimport PlaceholderText from '../PlaceholderText'\nimport TableCell from '../TableCell'\n\nconst DeploymentPlaceholder = () => {\n return (\n <tr>\n {/* Deployment - alias or regular deployment URL */}\n <TableCell>\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* State */}\n <TableCell variant=\"state\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Branch */}\n <TableCell variant=\"branch\">\n <PlaceholderText rows={2} />\n </TableCell>\n\n {/* Age */}\n <TableCell variant=\"age\">\n <PlaceholderText rows={1} />\n </TableCell>\n\n {/* Creator */}\n <TableCell variant=\"creator\">\n <Flex justify=\"center\">\n <PlaceholderAvatar />\n </Flex>\n </TableCell>\n </tr>\n )\n}\n\nexport default DeploymentPlaceholder\n","import {Box, Text} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useMachine} from '@xstate/react'\nimport {useEffect, useRef} from 'react'\nimport useDeepCompareEffect from 'use-deep-compare-effect'\n\nimport {WIDGET_NAME} from '../../constants'\nimport useDeployments from '../../hooks/useDeployments'\nimport refreshMachine from '../../machines/refresh'\nimport {type Sanity} from '../../types'\nimport {useCardColor} from '../../utils/useCardColor'\nimport DeployButton from '../DeployButton'\nimport Deployment from '../Deployment'\nimport DeploymentPlaceholder from '../DeploymentPlaceholder'\nimport StateDebug from '../StateDebug'\nimport TableCell from '../TableCell'\n\ntype Props = {\n deploymentTarget: Sanity.DeploymentTargetConfig\n}\n\nconst Deployments = (props: Props) => {\n const {deploymentTarget} = props\n\n // Refs\n const refTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // XState\n const [refreshState, refreshStateTransition] = useMachine(refreshMachine)\n\n // Fetch deployments - disable hook / auto-refetching on error state\n const {deployments, error, isFetching, isSuccess, refetch} = useDeployments(deploymentTarget, {\n enabled: !refreshState.matches('error'),\n })\n\n const toast = useToast()\n const isError = refreshState.matches('error')\n\n const handleDeploySuccess = () => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n refTimeout.current = setTimeout(() => {\n void refetch({\n cancelRefetch: true,\n throwOnError: true,\n })\n }, 4000)\n }\n\n useEffect(() => {\n return () => {\n if (refTimeout.current) {\n clearTimeout(refTimeout.current)\n }\n }\n }, [])\n\n useEffect(() => {\n if (error) {\n refreshStateTransition({type: 'ERROR'})\n }\n\n if (isFetching) {\n refreshStateTransition({type: 'REFRESH'})\n }\n\n if (!isFetching && isSuccess) {\n refreshStateTransition({type: 'REFRESHED'})\n }\n }, [error, isFetching, isSuccess, refreshStateTransition])\n\n useDeepCompareEffect(() => {\n if (!refreshState.matches('refreshing')) {\n refreshStateTransition({type: 'REFRESH'})\n }\n }, [deploymentTarget])\n\n useDeepCompareEffect(() => {\n if (isError) {\n toast.push({\n closable: true,\n description: `Unable to fetch deployments for ${deploymentTarget.name}`,\n duration: 8000,\n status: 'error',\n title: WIDGET_NAME,\n })\n }\n }, [deploymentTarget, isError])\n\n const hasFetched = typeof deployments !== 'undefined'\n const hasDeployments = deployments && deployments.length > 0\n\n const {border} = useCardColor()\n return (\n <Box marginTop={3} style={{position: 'relative'}}>\n {/* xstate debug */}\n <StateDebug name=\"Refresh\" state={refreshState} />\n\n {!refreshState.matches('error') && (\n <>\n <Box\n as=\"table\"\n style={{\n borderBottom: `1px solid ${border}`,\n borderCollapse: 'collapse',\n display: 'table',\n tableLayout: 'fixed',\n width: '100%',\n }}\n >\n <Box as=\"thead\" style={{display: 'table-header-group'}}>\n <tr>\n {/* Deployment */}\n <TableCell header>Deployment</TableCell>\n\n {/* State */}\n <TableCell header variant=\"state\">\n State\n </TableCell>\n\n {/* Branch */}\n <TableCell header variant=\"branch\">\n Branch\n </TableCell>\n\n {/* Age */}\n <TableCell header variant=\"age\">\n Age\n </TableCell>\n\n {/* Creator */}\n <TableCell header variant=\"creator\">\n Creator\n </TableCell>\n </tr>\n </Box>\n\n <Box as=\"tbody\" style={{display: 'table-row-group'}}>\n {/* Placeholders */}\n {!deployments &&\n Array.from({length: deploymentTarget.deployLimit}, (_, index) => (\n <DeploymentPlaceholder key={index} />\n ))}\n {/* Deployments */}\n {hasDeployments &&\n deployments?.map((deployment) => (\n <Deployment deployment={deployment} key={deployment.uid} />\n ))}\n </Box>\n </Box>\n\n {/* No results */}\n {hasFetched && !hasDeployments && (\n <Box padding={3} style={{width: '100%'}}>\n <Text muted size={1}>\n No deployments found. Don't forget to specify a valid team ID if your project\n belongs to a team.\n </Text>\n </Box>\n )}\n </>\n )}\n\n {/* Error message */}\n {refreshState.matches('error') && (\n <Box padding={3}>\n <Text muted size={1}>\n Unable to fetch recent deployments. Please check your network and deployment settings.\n </Text>\n </Box>\n )}\n\n {/* Deploy button */}\n {!refreshState.matches('error') && deploymentTarget.deployHook && (\n <Box>\n <DeployButton\n deployHook={deploymentTarget.deployHook}\n onDeploySuccess={handleDeploySuccess}\n targetName={deploymentTarget.name}\n />\n </Box>\n )}\n </Box>\n )\n}\n\nexport default Deployments\n","import {EditIcon} from '@sanity/icons/Edit'\nimport {Box, Button, Flex, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\n\nimport {type Sanity} from '../../types'\nimport Deployments from '../Deployments'\n\ntype Props = {\n item: Sanity.DeploymentTarget\n onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTarget: FC<Props> = (props: Props) => {\n const {item, onDialogEdit} = props\n\n const deploymentTarget: Sanity.DeploymentTargetConfig = {\n deployHook: item.deployHook,\n deployLimit: item.deployLimit,\n name: item.name,\n projectId: item.projectId,\n teamId: item.teamId,\n token: item.token,\n }\n\n return (\n <Box style={{position: 'relative'}}>\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" marginTop={2} paddingX={3}>\n <Text size={2}>{item.name}</Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Edit deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={EditIcon} mode=\"bleed\" onClick={() => onDialogEdit(item)} />\n </Tooltip>\n </Flex>\n\n {/* Content */}\n <Deployments deploymentTarget={deploymentTarget} />\n </Box>\n )\n}\n\nexport default DeploymentTarget\n","import {Stack} from '@sanity/ui'\n\nimport {type Sanity} from '../../types'\nimport DeploymentTarget from '../DeploymentTarget'\n\ntype Props = {\n items: Sanity.DeploymentTarget[]\n onDialogEdit: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\nconst DeploymentTargets = (props: Props) => {\n const {items, onDialogEdit} = props\n\n return (\n <Stack gap={5}>\n {items?.map((item) => (\n <DeploymentTarget item={item} key={item._id} onDialogEdit={onDialogEdit} />\n ))}\n </Stack>\n )\n}\n\nexport default DeploymentTargets\n","import {uuid} from '@sanity/uuid'\nimport type {SanityClient, SanityDocument} from 'sanity'\nimport {assertEvent, assign, fromPromise, setup} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport type {Sanity} from '../types'\n\n// Named locally so dts emit does not reach into `@sanity/client` (TS2883).\ntype DeleteMutationResult = {\n transactionId: string\n documentIds: string[]\n results: {id: string; operation: string}[]\n}\n\ntype Context = {\n client: SanityClient\n document?: Sanity.DeploymentTarget\n id?: string\n formData?: Record<string, any>\n message: string\n}\n\ntype Event =\n | {type: 'CREATE'; formData: Record<string, any>}\n | {type: 'UPDATE'; id: string; formData: Record<string, any>}\n | {type: 'DELETE'; id: string}\n\ninterface Input {\n client: SanityClient\n}\n\nexport const formMachine = setup({\n types: {} as {\n children: {\n createDocumentActor: 'create document'\n updateDocumentActor: 'update document'\n deleteDocumentActor: 'delete document'\n }\n context: Context\n events: Event\n input: Input\n tags: 'busy'\n },\n actions: {\n setId: assign({\n id: ({event}) => {\n assertEvent(event, ['UPDATE', 'DELETE'])\n return event.id\n },\n }),\n setFormData: assign({\n formData: ({event}) => {\n assertEvent(event, ['CREATE', 'UPDATE'])\n return event.formData\n },\n }),\n setMessage: assign({\n message: ({event}) => {\n if (\n 'data' in event &&\n event.data &&\n typeof event.data === 'object' &&\n 'details' in event.data &&\n event.data.details &&\n typeof event.data.details === 'object' &&\n 'description' in event.data.details\n ) {\n return event.data.details.description as string\n }\n return 'An error occurred'\n },\n }),\n setDocument: assign({\n document: ({event}) => {\n // @ts-expect-error - fix typings later\n return event.output\n },\n }),\n },\n actors: {\n // Explicit return types keep the inferred machine type portable for\n // declaration emit (TS2883), by referencing aliases imported from `sanity`\n // instead of a deep `@sanity/client` path. `delete` returns a mutation\n // result in client v8, not the deleted document.\n 'create document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'formData'>>\n }): Promise<SanityDocument> => {\n return input.client.create({\n _id: `vercel.${uuid()}`,\n _type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n ...input.formData,\n })\n },\n ),\n 'update document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'id' | 'formData'>>\n }): Promise<SanityDocument> => {\n return input.client.patch(input.id).set(input.formData).commit()\n },\n ),\n 'delete document': fromPromise(\n ({\n input,\n }: {\n input: Required<Pick<Context, 'client' | 'id'>>\n }): Promise<DeleteMutationResult> => {\n return input.client.delete(input.id)\n },\n ),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAIwBmAGwkuGjQFYALAE4AHACYdWgwYA0IAJ6IjKgOwkdXFUYVa9h-Ua5KAvv5WaFh4hKTkVNQAqgAKACJsnLwywqISUjLyCMpqmtr6xqbmVrYIBgokWvlGWkpaCgZeKoHBGDgExGSUNPGMADKM7Nx8SCBp4pLSY9m56vm6hiZmljaIOipqdXpcDk1aWiYqBlqtICEd4SSYAE5g6BL4UNQQUmBk+ABuQgDW77f3MRgeJCTAAV1QYHwYmYmDEQhuI1SIkmmRmiGOShIDiUOh0SiaCgUegcDj0pTsjhI5iMewUpPsTSMZwuYS6AIeBGeYBuNwRJAEFAeADMEahrncHsDQRCoTC4QikWMJhlpqBspjsbj8YTiaTyWsEKouNT6noiX5zUpiQEgud2mzSGCBBBOU8Xm8Pt8-iRna6gSDwZDobD4YiUsqUaqshiDFicXiCea9WSKeVKiSVIclEYlIY-BUWQ7Ok6XW7ubz+YKRWLfWWAzLg-Kw0rBFGpjGEJqEzrkyTU4b6ToSHojHos7VXEc6kXQiWSBAwFRHs9XoQvb93ovl9Kg3LQ4qI230h30V241rE7r+wayro1A4dO4VHotA5fPTTnbWfPt2AV9QPJ8jcApCmIoo3OKf4NnuIYKuGozHqiapyLG8bakmRI3mmpjxk0XAuEoXAHI+DgtGc+BCIu8BjD+4TIieaLqogAC0Khpmxs6XF0kRgAxyGdk+aYKLSVR7Fweg6A4IkGFwChcY6EqAly-HRmeY7DnSY5GHGL4qFwRhpjpJpmriDjVMRLgGAp84ckCECqaezEIHoObUuZuwKH4xGPgoRnmCQpmOAcqhmPJ37Flcfrlo5TGoQgY4mgYHkeAS+iqH5hqSc4dSuCo+I6SoSjvjZUX1pAsUodkrlGO51TSd5b46JlZRebVuG7IcjRmA05FtHOVzQSpkaMVVdivs4CibHGxg6biSg4ZsJD2AccaFEVGwOKVXTQRVI0CWeNV1Z5jW+WmujDj4HjmMRnhEttpBAQilWdkdyX1V5RFNS1iAEpU1pHER9JWjogSBEAA */\n context: ({input}) => ({\n client: input.client,\n formData: {},\n message: '',\n }),\n initial: 'idle',\n states: {\n idle: {\n on: {\n CREATE: {\n actions: ['setFormData'],\n target: 'creating',\n },\n UPDATE: {\n actions: ['setId', 'setFormData'],\n target: 'updating',\n },\n DELETE: {\n actions: 'setId',\n target: 'deleting',\n },\n },\n },\n creating: {\n tags: ['busy'],\n invoke: {\n src: 'create document',\n id: 'createDocumentActor',\n input: ({context}) => ({client: context.client, formData: context.formData!}),\n onDone: {actions: 'setDocument', target: 'created'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n created: {type: 'final'},\n updating: {\n tags: ['busy'],\n invoke: {\n src: 'update document',\n id: 'updateDocumentActor',\n input: ({context}) => ({\n client: context.client,\n id: context.id!,\n formData: context.formData!,\n }),\n onDone: {actions: 'setDocument', target: 'updated'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n updated: {type: 'final'},\n deleting: {\n tags: ['busy'],\n invoke: {\n src: 'delete document',\n id: 'deleteDocumentActor',\n input: ({context}) => ({client: context.client, id: context.id!}),\n onDone: {target: 'deleted'},\n onError: {actions: 'setMessage', target: 'error'},\n },\n },\n deleted: {type: 'final'},\n error: {type: 'final'},\n },\n})\n","// Recursively sanitize form data:\n// - convert empty strings, undefined values and empty arrays to null (to correctly unset / delete fields)\n// - trim whitespace on string fields\n\ntype FormData = Record<string, any>\n\nconst sanitizeFormData = (formData: FormData): FormData => {\n return Object.keys(formData).reduce((acc: FormData, key) => {\n const val = formData[key]\n\n // TODO: refactor\n if (typeof val === 'object' && val !== null && val.constructor !== Array) {\n acc[key] = sanitizeFormData(val)\n } else if (val === '' || typeof val === 'undefined' || val?.length === 0) {\n acc[key] = null\n } else if (typeof val === 'string' && val) {\n acc[key] = formData[key].trim()\n } else {\n acc[key] = formData[key]\n }\n\n return acc\n }, {})\n}\n\nexport default sanitizeFormData\n","import {red} from '@sanity/color'\nimport {ErrorOutlineIcon} from '@sanity/icons/ErrorOutline'\nimport {Box, Inline, Text} from '@sanity/ui'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport type {FC} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\ntype Props = {\n description?: string\n error?: FieldError\n label: string\n name: string\n}\n\nconst errorIconStyle = {color: red[500].hex}\n\nconst FormFieldInputLabel: FC<Props> = (props: Props) => {\n const {description, error, label, name} = props\n\n return (\n <Box marginBottom={3}>\n {/* Label */}\n <Inline gap={2}>\n <Text as=\"label\" htmlFor={name} size={1} weight=\"semibold\">\n {label}\n </Text>\n\n {/* Error icon + tooltip */}\n {error && (\n <Text size={1}>\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n <ErrorOutlineIcon style={{...errorIconStyle, marginRight: '0.1em'}} />\n {error.message}\n </Text>\n </Box>\n }\n fallbackPlacements={['top', 'left']}\n placement=\"right\"\n portal\n >\n <ErrorOutlineIcon style={errorIconStyle} />\n </Tooltip>\n </Text>\n )}\n </Inline>\n\n {/* Description */}\n {description && (\n <Box marginY={3}>\n <Text as=\"p\" muted size={1}>\n {description}\n </Text>\n </Box>\n )}\n </Box>\n )\n}\n\nexport default FormFieldInputLabel\n","import {Box, TextInput} from '@sanity/ui'\nimport {type ChangeEventHandler, type FocusEventHandler, type Ref} from 'react'\nimport {type FieldError} from 'react-hook-form'\n\nimport FormFieldInputLabel from '../FormFieldInputLabel'\n\ntype Props = {\n description?: string\n disabled?: boolean\n error?: FieldError\n label: string\n name: string\n placeholder?: string\n value?: string\n onChange?: ChangeEventHandler<HTMLInputElement>\n onBlur?: FocusEventHandler<HTMLInputElement>\n ref?: Ref<HTMLInputElement>\n}\n\nconst FormFieldInputText = (props: Props) => {\n const {description, disabled, error, label, name, placeholder, value, onChange, onBlur, ref} =\n props\n\n return (\n <Box>\n {/* Label */}\n <FormFieldInputLabel description={description} error={error} label={label} name={name} />\n {/* Input */}\n <TextInput\n autoComplete=\"off\"\n autoFocus\n defaultValue={value}\n disabled={disabled}\n id={name}\n name={name}\n placeholder={placeholder}\n onChange={onChange}\n onBlur={onBlur}\n ref={ref}\n />\n </Box>\n )\n}\n\nexport default FormFieldInputText\n","import {yupResolver} from '@hookform/resolvers/yup'\nimport {Box, Button, Dialog, Flex, Stack} from '@sanity/ui'\nimport {useToast} from '@sanity/ui/toast'\nimport {useActor} from '@xstate/react'\nimport {type FC, useEffect} from 'react'\nimport {useForm} from 'react-hook-form'\nimport {toPromise} from 'xstate'\nimport * as yup from 'yup'\n\nimport {useSanityClient} from '../../client'\nimport {Z_INDEX_DIALOG} from '../../constants'\nimport {formMachine} from '../../machines/form'\nimport {type Sanity} from '../../types'\nimport sanitizeFormData from '../../utils/sanitizeFormData'\nimport FormFieldInputText from '../FormFieldInputText'\n\ntype Props = {\n deploymentTarget?: Sanity.DeploymentTarget\n onClose: () => void\n onCreate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n onDelete?: (id: string) => void\n onUpdate?: (deploymentTarget: Sanity.DeploymentTarget) => void\n}\n\ntype FormData = yup.InferType<typeof formSchema>\n\nconst formSchema = yup.object().shape({\n deployHook: yup.string().url('Deploy hook must be a valid URL'),\n deployLimit: yup\n .number()\n .positive()\n .integer()\n .min(1, 'Deploy limit must no less than 1')\n .max(15, 'Deploy limit must no higher than 15')\n .typeError('Deploy limit must be a number')\n .required('Deploy limit must be a positive integer between 1 and 15'),\n name: yup.string().required('Name cannot be empty'),\n projectId: yup.string().required('Vercel Project ID cannot be empty'),\n teamId: yup.string(),\n token: yup.string().required('Vercel Account Token cannot be empty'),\n})\n\nconst DialogForm: FC<Props> = (props: Props) => {\n const {deploymentTarget, onClose, onCreate, onDelete, onUpdate} = props\n const client = useSanityClient()\n const toast = useToast()\n\n const [formState, formStateTransition, formStateActorRef] = useActor(formMachine, {\n input: {client},\n })\n\n const formUpdating = formState.hasTag('busy')\n\n // react-hook-form v7\n const {\n formState: {errors, isDirty, isValid},\n handleSubmit,\n register,\n } = useForm<FormData>({\n // @ts-expect-error - fix typings later\n defaultValues: {\n deployHook: deploymentTarget?.deployHook || '',\n deployLimit: deploymentTarget?.deployLimit || 5,\n name: deploymentTarget?.name || '',\n projectId: deploymentTarget?.projectId || '',\n teamId: deploymentTarget?.teamId || '',\n token: deploymentTarget?.token || '',\n },\n mode: 'onChange',\n resolver: yupResolver(formSchema),\n })\n\n /**\n * Handle errors and reaching the done state\n */\n useEffect(() => {\n if (formState.matches('error')) {\n toast.push({\n status: 'error',\n title: formState.context.message || 'An error occurred',\n })\n }\n /**\n * If the machine is done it means it reached updated, created, deleted or error state.\n * We don't care which one, we just want to close the dialog\n */\n if (formState.status === 'done') {\n onClose()\n }\n }, [formState, onClose, toast])\n\n // Callbacks\n // - submit react-hook-form\n const onSubmit = async (formData: FormData) => {\n const sanitizedFormData = sanitizeFormData(formData)\n if (deploymentTarget) {\n formStateTransition({type: 'UPDATE', id: deploymentTarget._id, formData: sanitizedFormData})\n } else {\n formStateTransition({type: 'CREATE', formData: sanitizedFormData})\n }\n await toPromise(formStateActorRef)\n const snapshot = formStateActorRef.getSnapshot()\n const {document} = snapshot.context\n if (!document) return\n if (snapshot.matches('created')) {\n onCreate?.(document)\n } else if (snapshot.matches('updated')) {\n onUpdate?.(document)\n }\n }\n\n const handleDelete = async () => {\n if (!deploymentTarget) {\n return\n }\n const id = deploymentTarget._id\n formStateTransition({type: 'DELETE', id})\n await toPromise(formStateActorRef)\n if (formStateActorRef.getSnapshot().matches('deleted')) {\n onDelete?.(id)\n }\n }\n\n return (\n <Dialog\n footer={\n <Box padding={3}>\n <Flex justify={deploymentTarget ? 'space-between' : 'flex-end'}>\n {/* Delete button */}\n {deploymentTarget && (\n <Button\n loading={formState.matches('deleting')}\n disabled={formUpdating}\n fontSize={1}\n mode=\"bleed\"\n onClick={handleDelete}\n text=\"Delete\"\n tone=\"critical\"\n />\n )}\n\n {/* Submit button */}\n <Button\n loading={formState.matches('creating') || formState.matches('updating')}\n disabled={!isDirty || !isValid}\n fontSize={1}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onClick={handleSubmit(onSubmit)}\n text={deploymentTarget ? 'Update and close' : 'Create'}\n tone=\"primary\"\n />\n </Flex>\n </Box>\n }\n header={`${deploymentTarget ? 'Edit' : 'Create'} deployment target`}\n id=\"create\"\n onClose={onClose}\n width={1}\n zOffset={Z_INDEX_DIALOG}\n >\n {/* We reverse direction to ensure that inline links dont autofocus before other form elements */}\n <Box\n as=\"form\"\n padding={4}\n // @ts-expect-error - yup 0.32 schema types do not line up with @hookform/resolvers, fix typings later\n onSubmit={handleSubmit(onSubmit)}\n >\n {/* Hidden button to enable enter key submissions */}\n <button aria-label=\"Submit\" style={{display: 'none'}} tabIndex={-1} type=\"submit\" />\n\n {/* Form fields */}\n <Stack gap={5}>\n {/* Title */}\n <FormFieldInputText\n disabled={formUpdating}\n description=\"Name displayed in this plugin (e.g. production, staging)\"\n error={errors?.name}\n label=\"Name\"\n // @ts-expect-error - fix typings later\n {...register('name')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.token}\n label=\"Vercel Account Token\"\n // @ts-expect-error - fix typings later\n {...register('token')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.projectId}\n label=\"Vercel Project ID\"\n // @ts-expect-error - fix typings later\n {...register('projectId')}\n />\n\n <FormFieldInputText\n description=\"Required only if your project is owned by a team account\"\n disabled={formUpdating}\n error={errors?.teamId}\n label=\"Vercel Team ID (optional)\"\n // @ts-expect-error - fix typings later\n {...register('teamId')}\n />\n\n <FormFieldInputText\n description=\"Enter a valid deploy hook URL to enable manual deploys\"\n disabled={formUpdating}\n error={errors?.deployHook}\n label=\"Vercel Deploy Hook (optional)\"\n // @ts-expect-error - fix typings later\n {...register('deployHook')}\n />\n\n <FormFieldInputText\n disabled={formUpdating}\n error={errors?.deployLimit}\n label=\"Number of deploys to display\"\n // @ts-expect-error - fix typings later\n {...register('deployLimit', {valueAsNumber: true})}\n />\n </Stack>\n </Box>\n </Dialog>\n )\n}\n\nexport default DialogForm\n","import type {SanityClient} from 'sanity'\nimport {assign, setup, fromPromise, assertEvent} from 'xstate'\n\nimport {DEPLOYMENT_TARGET_DOCUMENT_TYPE} from '../constants'\nimport {type Sanity} from '../types'\n\ntype Context = {\n client: SanityClient\n results: Sanity.DeploymentTarget[] // TODO: type correctly\n}\n\ntype Event =\n | {type: 'CLOSE'}\n | {type: 'CREATE'; deploymentTarget: Sanity.DeploymentTarget}\n | {type: 'DELETE'; id: string}\n | {type: 'FETCH'}\n | {type: 'UPDATE'; deploymentTarget: Sanity.DeploymentTarget}\n\ninterface Input {\n client: SanityClient\n}\n\nconst sortByTargetName = (items: Sanity.DeploymentTarget[]) => {\n return items.sort((a, b) => {\n if (a.name > b.name) {\n return 1\n }\n if (a.name < b.name) {\n return -1\n }\n return 0\n })\n}\n\nexport const deploymentTargetListMachine = setup({\n types: {} as {\n children: {fetchData: 'fetch data'}\n context: Context\n events: Event\n input: Input\n },\n actions: {\n targetCreate: assign({\n results: ({context, event}) => {\n assertEvent(event, 'CREATE')\n return sortByTargetName([...context.results, event.deploymentTarget])\n },\n }),\n targetDelete: assign({\n results: ({context, event}) => {\n assertEvent(event, 'DELETE')\n return context.results.filter((target) => target._id !== event.id)\n },\n }),\n targetUpdate: assign({\n results: ({context, event}) => {\n assertEvent(event, 'UPDATE')\n const {deploymentTarget} = event\n const index = context.results.findIndex((target) => target._id === deploymentTarget._id)\n const updatedResults = Object.assign([], context.results, {\n [index]: deploymentTarget,\n })\n return sortByTargetName(updatedResults)\n },\n }),\n },\n guards: {\n hasData: ({context}) => {\n return context?.results?.length > 0\n },\n hasNoData: ({context}) => {\n return context?.results?.length === 0\n },\n },\n actors: {\n 'fetch data': fromPromise(\n ({input, signal}: {input: {client: SanityClient}; signal: AbortSignal}) => {\n return input.client\n .fetch<Sanity.DeploymentTarget[]>(\n '*[_type == $type] | order(name asc)',\n {\n type: DEPLOYMENT_TARGET_DOCUMENT_TYPE,\n },\n {signal},\n )\n .catch((error) => {\n if (error instanceof Error && error.name === 'AbortError') {\n return []\n }\n console.error('Failed to fetch deployment targets', error)\n throw error\n })\n },\n ),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOgAcx8ICoBiCAe0JIIDcGBrMEgMzABccAEXT90AbQAMAXUSgyDWLn64mckAA9EAZkkBOEgHYAjAA5DAFgBsFgEwnJAVkMAaEAE9Ep4yUeT-klbGesbaoYaGAL6RbmhYeISkFFQ0tGAATukM6eQANqI82ai8AsKiEjLqCkoqakiaOvpGZpY29sZOrh6IxpYkFo5h2oaOpnqOxraSFtGxGDgExCTpYOgQ7rQAwgBKAKIAggAqu1Ky9dXKqvjqWggWHSS9eoaS9ibao6aObp4IVh8kL56OzGII2PT-WYgOILRLLVbrWhCXYAGV2x1OVUUlzqoFu90kRm8tlM2gsL1eJJ+iEGBj0gVsFm0YWmVkctihMISSxWaw2AFUAApCI4nSrnbG1a71fGSUz9WzBezTFWvb7dO5MkjjMITZykwxjTnzbmkXnrEgAV3wHHwDAA7vhaJiJTUrjces9fFZGc9TLYrGqA9SEM9CcT7sznH5HHpjfFFmaEe4rTa7Y7ncYzvJJe6ZZ7DN7fYaA0GrCHvD4xs4S+yPnGYtCTYn4XySPblNgRGJneKc27cQ0EI4BiQ2T77noAzXyxrTIESGFGd4rP9DONTPHYTzk+3OwxLfxu+he9mQBcpR7h6Px4ylWyIrPfl9bIvJhZJIYA-7zFZoo27QgOB1C5RMsQHaU8UQABaYIQ2gv9G1AuFkmofAoHAnFIKHOwQz0bRtUMcd-j8WwpnuLdTVbdZMMvfMEFsPQQxMeViQmZkLC+f0oiQ5s4XNFNrVtB1sIvPMoIQCIK1BIsmXXWxtFJcZKJbAS934Ltylo8ShysfDHl9PRxjlekrC6Z9BhIBk5MkXpzFBFT+N3DsNIPI8tNdLCr20L0Wmscw5V0e5pMJYwBiI8kwrDRC5gTOEeHQXBckgbTB1uZwQw6RwrEBd9bEcQZYzsRDoiAA */\n context: ({input}) => ({\n client: input.client,\n results: [],\n }),\n initial: 'pending',\n states: {\n pending: {\n invoke: {\n src: 'fetch data',\n id: 'fetchData',\n input: ({context}) => ({client: context.client}),\n onDone: {\n actions: assign({results: ({event}) => event.output}),\n target: 'ready',\n },\n onError: {\n target: 'failed',\n },\n },\n },\n ready: {\n initial: 'unknown',\n on: {\n CREATE: {\n actions: 'targetCreate',\n },\n DELETE: {\n actions: 'targetDelete',\n },\n UPDATE: {\n actions: 'targetUpdate',\n },\n },\n states: {\n unknown: {\n always: [\n {target: 'withData', guard: 'hasData'},\n {target: 'withoutData', guard: 'hasNoData'},\n ],\n },\n withData: {\n always: [{target: 'withoutData', guard: 'hasNoData'}],\n },\n withoutData: {\n always: [{target: 'withData', guard: 'hasData'}],\n },\n },\n },\n failed: {\n type: 'final',\n },\n },\n})\n","import {assertEvent, assign, setup} from 'xstate'\n\nimport {type Sanity} from '../types'\n\ntype Context = {\n editDeploymentTarget?: Sanity.DeploymentTarget\n}\n\ntype Event =\n | {type: 'CREATE'}\n | {type: 'CLOSE'}\n | {type: 'EDIT'; deploymentTarget: Sanity.DeploymentTarget}\n\nexport const dialogMachine = setup({\n types: {\n context: {} as Context,\n events: {} as Event,\n },\n actions: {\n setEditDeploymentTarget: assign({\n editDeploymentTarget: ({event}) => {\n assertEvent(event, 'EDIT')\n return event.deploymentTarget\n },\n }),\n },\n}).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QAoC2BDAxgCwJYDswBKAOlwgBswBiAYQCUBRAQQBVGBtABgF1FQADgHtYuAC64h+fiAAeiAEwKArCQCcANgAcAdmUbNOhVx0BGLQBoQAT0SmAzApJcXXexoAsW5fbWaFAL4BVmhYeISk5FTUjAAiAJKs3HxIIMKiElIy8ghKqpq6+obGZpY2ivb2zq4e5moeXKZc3kEhGDgExCSQ4nQAMgDyAMqcvDLp4pLSqTn2DSQefn7uyq5aWvZWtgjmTqsuvnU6XMoK9q0goR0RJJgATmDoYjS0gyPJ4yKTWTOIc1wLJZqFZrDZbRBaUwkfZuew6SFcepuILBED4IQQOAyK7hYifDJTbKIAC0GnBCFJFxxnUilDA+O+01AOQ8CnJGxIGn29lMpjUxhcCh0VPauNIPTEDMyTLkiA8PhIxh5Cg8DS8pgM5L5UOalSMah0cP05hFYRptweT3pqQm0qJCHlVSVphVashmvKCDUAN17j0XNMqrUyhRASAA */\n context: {\n editDeploymentTarget: undefined,\n },\n initial: 'idle',\n states: {\n idle: {\n entry: assign({\n editDeploymentTarget: () => undefined,\n }),\n on: {\n CREATE: {\n target: 'create',\n },\n EDIT: {\n actions: 'setEditDeploymentTarget',\n target: 'edit',\n },\n },\n },\n edit: {\n on: {\n CLOSE: {\n target: 'idle',\n },\n },\n },\n create: {\n on: {\n CLOSE: {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {AddIcon} from '@sanity/icons/Add'\nimport {Box, Button, Card, Flex, Text} from '@sanity/ui'\nimport {ToastProvider} from '@sanity/ui/toast'\nimport {Tooltip} from '@sanity/ui/tooltip'\nimport {QueryClient, QueryClientProvider} from '@tanstack/react-query'\nimport {useMachine} from '@xstate/react'\n\nimport {useSanityClient} from './client'\nimport DeploymentTargets from './components/DeploymentTargets'\nimport DialogForm from './components/DialogForm'\nimport StateDebug from './components/StateDebug'\nimport {Z_INDEX_TOAST_PROVIDER} from './constants'\nimport {deploymentTargetListMachine} from './machines/deploymentTargetList'\nimport {dialogMachine} from './machines/dialog'\nimport {type Sanity} from './types'\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n gcTime: 0,\n staleTime: 0,\n },\n },\n})\n\nconst Widget = () => {\n const client = useSanityClient()\n\n const [deploymentTargetListState, deploymentTargetListStateTransition] = useMachine(\n deploymentTargetListMachine,\n {input: {client}},\n )\n const [dialogState, dialogStateTransition] = useMachine(dialogMachine)\n\n // Callbacks\n const handleDialogClose = () => {\n dialogStateTransition({type: 'CLOSE'})\n }\n const handleDialogShowCreate = () => {\n dialogStateTransition({type: 'CREATE'})\n }\n const handleDialogShowEdit = (deploymentTarget: Sanity.DeploymentTarget) => {\n dialogStateTransition({type: 'EDIT', deploymentTarget})\n }\n const handleTargetCreate = (deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'CREATE', deploymentTarget})\n }\n const handleTargetDelete = (id: string) => {\n deploymentTargetListStateTransition({type: 'DELETE', id})\n }\n const handleTargetUpdate = (deploymentTarget: Sanity.DeploymentTarget) => {\n deploymentTargetListStateTransition({type: 'UPDATE', deploymentTarget})\n }\n\n return (\n <ToastProvider zOffset={Z_INDEX_TOAST_PROVIDER}>\n <QueryClientProvider client={queryClient}>\n <Card radius={2} style={{overflow: 'hidden '}}>\n {/* xstate debug */}\n <StateDebug name=\"List\" state={deploymentTargetListState} />\n\n {/* Header */}\n <Flex align=\"center\" justify=\"space-between\" paddingX={3} paddingY={2}>\n <Text size={5} weight=\"semibold\">\n Vercel deployments\n </Text>\n\n <Tooltip\n content={\n <Box padding={2}>\n <Text muted size={1}>\n Create new deployment target\n </Text>\n </Box>\n }\n placement=\"left\"\n >\n <Button fontSize={1} icon={AddIcon} onClick={handleDialogShowCreate} mode=\"bleed\" />\n </Tooltip>\n </Flex>\n\n <Box>\n {deploymentTargetListState.matches('pending') && (\n <Box paddingX={3} paddingY={4}>\n <Text>Loading...</Text>\n </Box>\n )}\n\n {deploymentTargetListState.matches({ready: 'withoutData'}) && (\n <Flex align=\"center\" gap={3} paddingX={3} paddingY={4}>\n <Text>No deployment targets found.</Text>\n <Button\n fontSize={1}\n mode=\"ghost\"\n onClick={handleDialogShowCreate}\n text=\"Create a new target\"\n />\n </Flex>\n )}\n\n {deploymentTargetListState.matches({ready: 'withData'}) && (\n <DeploymentTargets\n items={deploymentTargetListState.context.results}\n onDialogEdit={handleDialogShowEdit}\n />\n )}\n\n {deploymentTargetListState.matches('failed') && (\n <Box paddingX={3} paddingY={4}>\n <Text>\n Failed to retrieve deployment targets. Please check the developer console log for\n more information.\n </Text>\n </Box>\n )}\n </Box>\n </Card>\n\n {/* Dialogs */}\n {dialogState.matches('create') && (\n <DialogForm onClose={handleDialogClose} onCreate={handleTargetCreate} />\n )}\n\n {dialogState.matches('edit') && (\n <DialogForm\n deploymentTarget={dialogState.context.editDeploymentTarget}\n onClose={handleDialogClose}\n onDelete={handleTargetDelete}\n onUpdate={handleTargetUpdate}\n />\n )}\n </QueryClientProvider>\n </ToastProvider>\n )\n}\n\nexport default Widget\n","import '@sanity/ui/styles.css'\nimport type {DashboardWidget, LayoutConfig} from '@sanity/dashboard'\n\nimport Widget from './app'\n\nexport function vercelWidget(config: {layout?: LayoutConfig} = {}): DashboardWidget {\n return {\n name: 'vercel',\n component: Widget,\n layout: config.layout ?? {width: 'full'},\n }\n}\n"],"mappings":"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"}
\ No newline at end of file