{"version":3,"sources":["../../src/serve/server.ts"],"names":["Server","factories","Map","members","metadataByInput","config","registerFactory","ref","factory","override","get","set","Error","register","input","metadata","getFactory","includes","push","registerMany","forEach","item","deregister","removeFromArray","obj","traversePrototypeChain","name"],"mappings":";;;;;;;AAgBO,MAAeA,MAAAA,CAAAA;EAhBtB;;;;;EAuBE,OAAuBC,SAAAA,uBAAgBC,GAAAA,EAAAA;AAEvBC,EAAAA,OAAAA,GAAoB,EAAA;AACjBC,EAAAA,eAAAA,uBAAsBF,GAAAA,EAAAA;AAEzC,EAAA,WAAA,CAAsBG,MAAAA,EAAiB;SAAjBA,MAAAA,GAAAA,MAAAA;AAAkB,EAAA;AAExC,EAAA,OAAcC,eAAAA,CAEZC,GAAAA,EACAC,OAAAA,EACAC,QAAAA,GAAW,KAAA,EACL;AACN,IAAA,IAAI,CAAC,IAAA,CAAKR,SAAAA,CAAUS,GAAAA,CAAIH,GAAAA,KAAQE,QAAAA,EAAU;AACxC,MAAA,IAAA,CAAKR,SAAAA,CAAUU,GAAAA,CAAIJ,GAAAA,EAAKC,OAAAA,CAAAA;AAC1B,IAAA,CAAA,MAAA,IAAW,IAAA,CAAKP,SAAAA,CAAUS,GAAAA,CAAIH,GAAAA,MAASC,OAAAA,EAAS;AAC9C,MAAA,MAAM,IAAII,MAAM,CAAA,8BAAA,CAAgC,CAAA;AAClD,IAAA;AACF,EAAA;AAEOC,EAAAA,QAAAA,CAASC,OAAeC,QAAAA,EAA4B;AAEzD,IAAA,IAAA,CAAKC,WAAWF,KAAAA,CAAAA;AAChB,IAAA,IAAI,CAAC,IAAA,CAAKX,OAAAA,CAAQc,QAAAA,CAASH,KAAAA,CAAAA,EAAQ;AACjC,MAAA,IAAA,CAAKX,OAAAA,CAAQe,KAAKJ,KAAAA,CAAAA;AAClB,MAAA,IAAIC,QAAAA,EAAU;AACZ,QAAA,IAAA,CAAKX,eAAAA,CAAgBO,GAAAA,CAAIG,KAAAA,EAAOC,QAAAA,CAAAA;AAClC,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAA;AACT,EAAA;AAEOI,EAAAA,YAAAA,CAAaL,KAAAA,EAAuB;AACzCA,IAAAA,KAAAA,CAAMM,QAAQ,CAACC,IAAAA,KAAS,IAAA,CAAKR,QAAAA,CAASQ,IAAAA,CAAAA,CAAAA;AACtC,IAAA,OAAO,IAAA;AACT,EAAA;AAEOC,EAAAA,UAAAA,CAAWR,KAAAA,EAAqB;AACrCS,IAAAA,yBAAAA,CAAgB,IAAA,CAAKpB,SAASW,KAAAA,CAAAA;AAC9B,IAAA,OAAO,IAAA;AACT,EAAA;AAEUE,EAAAA,UAAAA,CAAWF,KAAAA,EAAiD;AACpE,IAAA,KAAA,MAAWU,GAAAA,IAAOC,oCAAAA,CAAuBX,KAAAA,CAAAA,EAAQ;AAC/C,MAAA,MAAMN,UAAW,IAAA,CAAK,WAAA,CAA8BP,SAAAA,CAAUS,GAAAA,CAC3Dc,IAA8B,WAAW,CAAA;AAE5C,MAAA,IAAIhB,OAAAA,EAAS;AACX,QAAA,OAAOA,OAAAA;AACT,MAAA;AACF,IAAA;AACA,IAAA,MAAM,IAAII,KAAAA,CAAM,CAAA,0BAAA,EAA6BE,KAAAA,CAAM,WAAA,CAAYY,IAAI,CAAA,CAAA,CAAG,CAAA;AACxE,EAAA;AAGF","file":"server.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { removeFromArray } from \"@/internals/helpers/array.js\";\nimport { traversePrototypeChain } from \"@/internals/helpers/prototype.js\";\n\ntype ServerFactory<TInput, TInternal> = (\n  input: TInput,\n  config?: Record<string, any>,\n) => Promise<TInternal>;\nexport type FactoryMember<TInput> = abstract new (\n  ...args: any[]\n) => TInput | (new (...args: any[]) => TInput) | ((...args: any[]) => TInput);\n\nexport abstract class Server<\n  TInput extends object = object,\n  TInternal extends object = object,\n  TConfig extends object = object,\n  TMetadata extends object = object,\n> {\n  // @ts-expect-error\n  public static readonly factories = new Map<object, ServerFactory<TInput, TInternal>>();\n\n  public readonly members: TInput[] = [];\n  protected readonly metadataByInput = new Map<TInput, TMetadata>();\n\n  constructor(protected config: TConfig) {}\n\n  public static registerFactory<TInput2 extends object, TInternal2 extends object>(\n    this: typeof Server<TInput2, TInternal2, any>,\n    ref: FactoryMember<TInput2>,\n    factory: ServerFactory<TInput2, TInternal2>,\n    override = false,\n  ): void {\n    if (!this.factories.get(ref) || override) {\n      this.factories.set(ref, factory);\n    } else if (this.factories.get(ref) !== factory) {\n      throw new Error(`Factory is already registered.`);\n    }\n  }\n\n  public register(input: TInput, metadata?: TMetadata): this {\n    // check if the type has a factory registered\n    this.getFactory(input);\n    if (!this.members.includes(input)) {\n      this.members.push(input);\n      if (metadata) {\n        this.metadataByInput.set(input, metadata);\n      }\n    }\n    return this;\n  }\n\n  public registerMany(input: TInput[]): this {\n    input.forEach((item) => this.register(item));\n    return this;\n  }\n\n  public deregister(input: TInput): this {\n    removeFromArray(this.members, input);\n    return this;\n  }\n\n  protected getFactory(input: TInput): ServerFactory<TInput, TInternal> {\n    for (const obj of traversePrototypeChain(input)) {\n      const factory = (this.constructor as typeof Server).factories.get(\n        (obj as FactoryMember<TInput>).constructor,\n      );\n      if (factory) {\n        return factory;\n      }\n    }\n    throw new Error(`No factory registered for ${input.constructor.name}.`);\n  }\n\n  public abstract serve(): void;\n}\n"]}