{"record":{"id":"124741a60cd152b2","repo":"sveltejs/kit","slug":"updates-expects-a-query-or-live-query-function","errorCode":null,"errorMessage":"updates() expects a query or live query function, query resource, or query override","messagePattern":"updates\\(\\) expects a query or live query function, query resource, or query override","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/kit/src/runtime/client/remote-functions/shared.svelte.js","lineNumber":295,"sourceCode":"\t\t\t}\n\n\t\t\t// this is just a regular function provided by some user integration, so we can just stash it in the overrides array\n\t\t\toverrides.push(/** @type {() => void} */ (update));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof update === 'object' &&\n\t\t\tupdate !== null &&\n\t\t\tObject.hasOwn(update, QUERY_RESOURCE_KEY)\n\t\t) {\n\t\t\t// this is a query instance, so we just need to request that it be refreshed\n\t\t\t// @ts-expect-error\n\t\t\trefreshes.add(/** @type {string} */ (update[QUERY_RESOURCE_KEY]));\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(\n\t\t\t'updates() expects a query or live query function, query resource, or query override'\n\t\t);\n\t}\n\n\treturn { overrides, refreshes };\n}\n","sourceCodeStart":277,"sourceCodeEnd":302,"githubUrl":"https://github.com/sveltejs/kit/blob/03f1687fe612ce3d2d9131139b5b188d9cf90c64/packages/kit/src/runtime/client/remote-functions/shared.svelte.js#L277-L302","documentation":"Every element passed to updates() inside a command function or submit must be a query function, live query function, query resource, or a query override created by the library. Anything else (a plain value, unknown function, or malformed entry) fails categorize_updates and throws this error.","triggerScenarios":"Passing a plain function that is not a query, a Promise, an object, a string, or a query created outside the library's remote query system into the updates() array.","commonSituations":"Passing the result of calling a query (its returned value/Promise) instead of the query function itself; mixing in arbitrary effect code; typos in imports so a helper returns something unexpected.","solutions":["Only pass query functions, live query functions, query resources, or overrides returned by the library's query helpers into updates().","If you meant to refresh a query, pass the query function itself (optionally with args) rather than its awaited result.","Check imports: the item must originate from .remote.ts/.remote.js exports, not a locally defined function."],"exampleFix":"// before\nupdates([async () => { await getTodos(); }]);\n// after\nupdates([getTodos]);","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"function isQueryable(u) {\n  return (\n    typeof u === 'function' ||\n    (u != null && typeof u === 'object' && (QUERY_OVERRIDE_KEY in u || QUERY_RESOURCE_KEY in u || QUERY_KEY in u))\n  );\n}\n// updates(items.every(isQueryable) ? items : [])","tryCatchPattern":"try {\n  runCommand(data, updates(items));\n} catch (e) {\n  if (e.message.startsWith('updates() expects')) console.error('non-query passed to updates()', items);\n  else throw e;\n}","preventionTips":["Pass query functions/resources, never their awaited results or Promises.","Only use exports from your .remote.ts module inside updates().","Rely on TypeScript so invalid entries are rejected at compile time."],"tags":["remote-functions","api-misuse","type-error"],"backgroundTag":"invalid-updates-argument","analyzedSha":"03f1687fe612ce3d2d9131139b5b188d9cf90c64","analyzedAt":"2026-09-02T02:01:50.504Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}