{"version":3,"file":"gen-channel-types.mjs","names":[],"sources":["../bin/gen-channel-types.ts"],"sourcesContent":["#!/usr/bin/env bun\n\nimport { resolve } from \"node:path\";\nimport { discoverChannels } from \"../src/channels/discovery\";\n\nexport async function generateChannelTypes(channelsDir: string): Promise<string> {\n  const discovered = await discoverChannels(channelsDir);\n  const lines = [\n    \"/**\",\n    \" * Project-specific channel metadata discovered from `<app_root>/channels/`.\",\n    \" *\",\n    \" * Used by `tako.sh/client` and `tako.sh/react` to type route params, messages, and transports.\",\n    \" */\",\n    \"export interface TakoChannels {\",\n    ...discovered.flatMap((channel) => {\n      return [\n        `  /** Channel \\`${escapeJsdocText(JSON.stringify(channel.name))}\\` route params, message metadata, and transport. */`,\n        `  ${JSON.stringify(channel.name)}: import(\"tako.sh\").InferChannel<typeof import(${JSON.stringify(`./channels/${channel.fileStem}`)}).default>;`,\n      ];\n    }),\n    \"}\",\n    \"\",\n  ];\n  return lines.join(\"\\n\");\n}\n\nfunction escapeJsdocText(value: string): string {\n  return value.replaceAll(\"*/\", \"* /\");\n}\n\nif (import.meta.main) {\n  const channelsDir = Bun.argv[2];\n  if (!channelsDir) {\n    console.error(\"usage: tako-sh-gen-channel-types <channels-dir>\");\n    process.exit(2);\n  }\n  process.stdout.write(await generateChannelTypes(resolve(channelsDir)));\n}\n"],"mappings":";;;;;AAKA,eAAsB,qBAAqB,aAAsC;CAkB/E,OAAO;EAfL;EACA;EACA;EACA;EACA;EACA;EACA,IAAG,MARoB,iBAAiB,YAAY,EAQtC,SAAS,YAAY;GACjC,OAAO,CACL,mBAAmB,gBAAgB,KAAK,UAAU,QAAQ,KAAK,CAAC,CAAC,uDACjE,KAAK,KAAK,UAAU,QAAQ,KAAK,CAAC,iDAAiD,KAAK,UAAU,cAAc,QAAQ,WAAW,CAAC,aACrI;IACD;EACF;EACA;EAEU,CAAC,KAAK,KAAK;;AAGzB,SAAS,gBAAgB,OAAuB;CAC9C,OAAO,MAAM,WAAW,MAAM,MAAM;;AAGtC,IAAI,OAAO,KAAK,MAAM;CACpB,MAAM,cAAc,IAAI,KAAK;CAC7B,IAAI,CAAC,aAAa;EAChB,QAAQ,MAAM,kDAAkD;EAChE,QAAQ,KAAK,EAAE;;CAEjB,QAAQ,OAAO,MAAM,MAAM,qBAAqB,QAAQ,YAAY,CAAC,CAAC"}