UNPKG

inngest

Version:

Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.

1 lines 3.19 kB
{"version":3,"file":"channel.cjs","names":["accessors: Record<string, Realtime.TopicRef>"],"sources":["../../../src/components/realtime/channel.ts"],"sourcesContent":["import type { Realtime } from \"./types.ts\";\n\ntype ChannelOptions<\n TName extends string | ((...args: never[]) => string),\n TTopics extends Realtime.TopicsConfig,\n> = {\n name: TName;\n topics: TTopics;\n};\n\ntype InferChannelReturn<\n TName extends string | ((...args: never[]) => string),\n TTopics extends Realtime.TopicsConfig,\n> = TName extends string\n ? Realtime.ChannelInstance<TName, TTopics> & {\n $infer: { [K in keyof TTopics]: Realtime.InferTopicData<TTopics[K]> };\n }\n : TName extends (...args: infer TArgs) => string\n ? Realtime.ChannelDef<(...args: TArgs) => string, TTopics> & {\n $infer: { [K in keyof TTopics]: Realtime.InferTopicData<TTopics[K]> };\n $params: TArgs[0];\n }\n : never;\n\nconst createTopicAccessors = (\n channelName: string,\n topics: Realtime.TopicsConfig,\n): Record<string, Realtime.TopicRef> => {\n const accessors: Record<string, Realtime.TopicRef> = {};\n for (const [topicName, config] of Object.entries(topics)) {\n accessors[topicName] = {\n channel: channelName,\n topic: topicName,\n config,\n };\n }\n return accessors;\n};\n\nexport const channel = <\n const TName extends string | ((...args: never[]) => string),\n const TTopics extends Realtime.TopicsConfig,\n>(\n options: ChannelOptions<TName, TTopics>,\n): InferChannelReturn<TName, TTopics> => {\n const { name, topics } = options;\n\n if (typeof name === \"function\") {\n //\n // Parameterized channel: calling the definition with params returns a ChannelInstance\n const def = (...args: unknown[]) => {\n const resolvedName = (name as (...args: unknown[]) => string)(...args);\n return {\n name: resolvedName,\n topics,\n ...createTopicAccessors(resolvedName, topics),\n };\n };\n\n Object.defineProperties(def, {\n topics: { value: topics, enumerable: true },\n $infer: { get: () => topics },\n $params: { get: () => undefined },\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: sacrifice for clean generics\n return def as any;\n }\n\n //\n // Static channel: the definition itself acts as a ChannelInstance\n const instance = {\n name,\n topics,\n ...createTopicAccessors(name, topics),\n get $infer() {\n return topics;\n },\n };\n\n // biome-ignore lint/suspicious/noExplicitAny: sacrifice for clean generics\n return instance as any;\n};\n"],"mappings":";;AAwBA,MAAM,wBACJ,aACA,WACsC;CACtC,MAAMA,YAA+C,EAAE;AACvD,MAAK,MAAM,CAAC,WAAW,WAAW,OAAO,QAAQ,OAAO,CACtD,WAAU,aAAa;EACrB,SAAS;EACT,OAAO;EACP;EACD;AAEH,QAAO;;AAGT,MAAa,WAIX,YACuC;CACvC,MAAM,EAAE,MAAM,WAAW;AAEzB,KAAI,OAAO,SAAS,YAAY;EAG9B,MAAM,OAAO,GAAG,SAAoB;GAClC,MAAM,eAAgB,KAAwC,GAAG,KAAK;AACtE,UAAO;IACL,MAAM;IACN;IACA,GAAG,qBAAqB,cAAc,OAAO;IAC9C;;AAGH,SAAO,iBAAiB,KAAK;GAC3B,QAAQ;IAAE,OAAO;IAAQ,YAAY;IAAM;GAC3C,QAAQ,EAAE,WAAW,QAAQ;GAC7B,SAAS,EAAE,WAAW,QAAW;GAClC,CAAC;AAGF,SAAO;;AAeT,QAViB;EACf;EACA;EACA,GAAG,qBAAqB,MAAM,OAAO;EACrC,IAAI,SAAS;AACX,UAAO;;EAEV"}