{"version":3,"file":"action-Bcc5Q6S0.js","sources":["../../../../../node_modules/.pnpm/@solidjs+router@0.13.1_solid-js@1.8.15/node_modules/@solidjs/router/dist/data/action.js"],"sourcesContent":["import { $TRACK, createMemo, createSignal, onCleanup, getOwner } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useRouter } from \"../routing.js\";\nimport { mockBase } from \"../utils.js\";\nimport { cacheKeyOp, hashKey, revalidate, cache } from \"./cache.js\";\nexport const actions = /* #__PURE__ */ new Map();\nexport function useSubmissions(fn, filter) {\n const router = useRouter();\n const subs = createMemo(() => router.submissions[0]().filter(s => s.url === fn.toString() && (!filter || filter(s.input))));\n return new Proxy([], {\n get(_, property) {\n if (property === $TRACK)\n return subs();\n if (property === \"pending\")\n return subs().some(sub => !sub.result);\n return subs()[property];\n }\n });\n}\nexport function useSubmission(fn, filter) {\n const submissions = useSubmissions(fn, filter);\n return new Proxy({}, {\n get(_, property) {\n return submissions[submissions.length - 1]?.[property];\n }\n });\n}\nexport function useAction(action) {\n const r = useRouter();\n return (...args) => action.apply({ r }, args);\n}\nexport function action(fn, name) {\n function mutate(...variables) {\n const router = this.r;\n const form = this.f;\n const p = (router.singleFlight && fn.withOptions\n ? fn.withOptions({ headers: { \"X-Single-Flight\": \"true\" } })\n : fn)(...variables);\n const [result, setResult] = createSignal();\n let submission;\n function handler(error) {\n return async (res) => {\n const result = await handleResponse(res, error, router.navigatorFactory());\n if (!result)\n return submission.clear();\n setResult(result);\n if (result.error && !form)\n throw result.error;\n return result.data;\n };\n }\n router.submissions[1](s => [\n ...s,\n (submission = {\n input: variables,\n url,\n get result() {\n return result()?.data;\n },\n get error() {\n return result()?.error;\n },\n get pending() {\n return !result();\n },\n clear() {\n router.submissions[1](v => v.filter(i => i.input !== variables));\n },\n retry() {\n setResult(undefined);\n const p = fn(...variables);\n return p.then(handler(), handler(true));\n }\n })\n ]);\n return p.then(handler(), handler(true));\n }\n const url = fn.url ||\n (name && `https://action/${name}`) ||\n (!isServer ? `https://action/${hashString(fn.toString())}` : \"\");\n return toAction(mutate, url);\n}\nfunction toAction(fn, url) {\n fn.toString = () => {\n if (!url)\n throw new Error(\"Client Actions need explicit names if server rendered\");\n return url;\n };\n fn.with = function (...args) {\n const newFn = function (...passedArgs) {\n return fn.call(this, ...args, ...passedArgs);\n };\n const uri = new URL(url, mockBase);\n uri.searchParams.set(\"args\", hashKey(args));\n return toAction(newFn, (uri.origin === \"https://action\" ? uri.origin : \"\") + uri.pathname + uri.search);\n };\n fn.url = url;\n if (!isServer) {\n actions.set(url, fn);\n getOwner() && onCleanup(() => actions.delete(url));\n }\n return fn;\n}\nconst hashString = (s) => s.split(\"\").reduce((a, b) => ((a << 5) - a + b.charCodeAt(0)) | 0, 0);\nasync function handleResponse(response, error, navigate) {\n let data;\n let keys;\n let invalidateKeys;\n if (response instanceof Response) {\n if (response.headers.has(\"X-Revalidate\"))\n keys = invalidateKeys = response.headers.get(\"X-Revalidate\").split(\",\");\n if (response.customBody) {\n data = await response.customBody();\n if (response.headers.has(\"X-Single-Flight\")) {\n keys || (keys = []);\n invalidateKeys || (invalidateKeys = []);\n Object.keys(data).forEach(key => {\n if (key === \"_$value\")\n return;\n keys.push(key);\n cache.set(key, data[key]);\n });\n data = data._$value;\n }\n }\n if (response.headers.has(\"Location\")) {\n const locationUrl = response.headers.get(\"Location\") || \"/\";\n if (locationUrl.startsWith(\"http\")) {\n window.location.href = locationUrl;\n }\n else {\n navigate(locationUrl);\n }\n }\n }\n else if (error)\n return { error: response };\n else\n data = response;\n // invalidate\n cacheKeyOp(invalidateKeys, entry => (entry[0] = 0));\n // trigger revalidation\n await revalidate(keys, false);\n return data != null ? { data } : undefined;\n}\n"],"names":["actions","Map","useSubmissions","fn","filter","router","useRouter","subs","createMemo","submissions","s","url","toString","input","Proxy","get","_","property","$TRACK","some","sub","result","useSubmission","length","useAction","action","r","args","apply","name","mutate","variables","form","f","p","singleFlight","withOptions","headers","setResult","createSignal","submission","handler","error","res","handleResponse","navigatorFactory","clear","data","pending","v","i","retry","undefined","then","hashString","toAction","Error","with","newFn","passedArgs","call","uri","URL","mockBase","searchParams","set","hashKey","origin","pathname","search","getOwner","onCleanup","delete","split","reduce","a","b","charCodeAt","response","navigate","keys","invalidateKeys","Response","has","customBody","Object","forEach","key","push","cache","_$value","locationUrl","startsWith","window","location","href","cacheKeyOp","entry","revalidate"],"mappings":"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","x_google_ignoreList":[0]}