{"version":3,"file":"utils.cjs","names":[],"sources":["../../src/ui/utils.ts"],"sourcesContent":["/**\n * Returns true when `onFinish` declares at least one parameter and therefore\n * needs the server-fetched thread head. A zero-arity `onFinish` is treated as\n * side-effect-only and does not trigger a post-stream `getHistory` when\n * branching history is not enabled.\n *\n * Note: functions with only default parameters report `.length === 0` in\n * JavaScript; if you need the thread state, declare at least one non-default\n * parameter (e.g. `(state)` or `(_state, run)`).\n */\nexport function onFinishRequiresThreadState(onFinish: unknown): boolean {\n  if (typeof onFinish !== \"function\") return false;\n  return onFinish.length > 0;\n}\n\nexport function unique<T>(array: T[]) {\n  return [...new Set(array)] as T[];\n}\n\nexport function findLast<T>(array: T[], predicate: (item: T) => boolean) {\n  for (let i = array.length - 1; i >= 0; i -= 1) {\n    if (predicate(array[i])) return array[i];\n  }\n  return undefined;\n}\n\nexport async function* filterStream<T, TReturn>(\n  stream: AsyncGenerator<T, TReturn>,\n  filter: (event: T) => boolean\n): AsyncGenerator<T, TReturn> {\n  while (true) {\n    const { value, done } = await stream.next();\n    if (done) return value as TReturn;\n    if (filter(value)) yield value as T;\n  }\n}\n"],"mappings":";;;;;;;;;;;AAUA,SAAgB,4BAA4B,UAA4B;AACtE,KAAI,OAAO,aAAa,WAAY,QAAO;AAC3C,QAAO,SAAS,SAAS;;AAG3B,SAAgB,OAAU,OAAY;AACpC,QAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;;AAG5B,SAAgB,SAAY,OAAY,WAAiC;AACvE,MAAK,IAAI,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,EAC1C,KAAI,UAAU,MAAM,GAAG,CAAE,QAAO,MAAM;;AAK1C,gBAAuB,aACrB,QACA,QAC4B;AAC5B,QAAO,MAAM;EACX,MAAM,EAAE,OAAO,SAAS,MAAM,OAAO,MAAM;AAC3C,MAAI,KAAM,QAAO;AACjB,MAAI,OAAO,MAAM,CAAE,OAAM"}