{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAOA,SAAS,iBAAiB,kBAAkB,cAAc;AAY1D,SAAS,yBAAyB;AAYlC,SAAS,cAAc,QAAoC;AACzD,SAAO,UAAU,OAAO,WAAW,YAAY,aAAa,UAAU,cAAc;AACtF;AAEA,SAAS,kBAAkB,QAA0C;AACnE,SAAO,WAAW,kBAAkB,qBAAqB,OAAO,YAAY,SAAS;AACvF;AAEA,SAAS,gBAAgB,QAAiC;AACxD,SAAO,UAAU,OAAO,WAAW,YAAY,QAAQ,UAAU,eAAe;AAClF;AAEO,IAAM,SAAN,MAAoC;AAAA,EACjC,qBACN;AAAA,EACF;AAAA,EACA;AAAA,EACA,UAAmB;AAAA,EACnB,OAAgB;AAAA,EAChB,SAAkB;AAAA,EAElB,YAAY,QAA2B;AACrC,SAAK,SAAS;AAEd,YAAQ,MAAM;AAAA,MACZ,KAAK,kBAAkB,MAAM;AAC3B,aAAK,aAAa;AAClB,aAAK,SAAS;AACd;AAAA,MACF,KAAK,cAAc,MAAM;AACvB,aAAK,aAAa;AAClB,aAAK,UAAU;AACf;AAAA,MACF,KAAK,gBAAgB,MAAM;AACzB,aAAK,aAAa;AAClB,aAAK,OAAO;AACZ;AAAA,MACF;AACE,cAAM,IAAI,MAAM,KAAK,kBAAkB;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAM,OACJ,QACA,QAC+B;AAC/B,YAAQ,MAAM;AAAA,MAEZ,KAAK,KAAK;AACR,eAAQ,KAAK,OAAuB,OAAO,QAA8D,MAAM;AAAA,MAGjH,KAAK,KAAK,QAAQ;AAChB,cAAM,UAAU,MAAO,KAAK,OAA6B;AAAA,UACvD;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAGA,KAAK,KAAK;AACR,eAAO,OAAO,KAAK,QAAoB,MAAgC;AAAA,MACzE;AACE,cAAM,IAAI,MAAM,KAAK,kBAAkB;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,oBACE,QAKqB;AACrB,YAAQ,MAAM;AAAA,MAEZ,KAAK,KAAK,SAAS;AACjB,cAAM,IAAI;AACV,eAAQ,KAAK,OAAuB,oBAAoB,CAAC;AAAA,MAK3D;AAAA,MAGA,KAAK,KAAK,QAAQ;AAChB,cAAM,IAAI;AACV,eAAQ,KAAK,OAA6B,oBAAoB,CAAC;AAAA,MAKjE;AAAA,MAGA,KAAK,KAAK,MAAM;AACd,cAAM,IAAI;AACV,eAAO,IAAI,iBAAiB,KAAK,QAAoB;AAAA,UACnD,gBAAgB,EAAE;AAAA,UAClB,iBAAiB,EAAE;AAAA,UACnB,QAAQ,EAAE;AAAA,UACV,aAAa,EAAE;AAAA,UACf,cAAc,EAAE;AAAA,QAClB,CAAC;AAAA,MAKH;AAAA,MAEA;AACE,cAAM,IAAI,MAAM,KAAK,kBAAkB;AAAA,IAC3C;AAAA,EACF;AACF","sourcesContent":["import type {\n  AnyOrama,\n  IAnswerSessionConfig as OSSAnswerSessionConfig,\n  Nullable,\n  Results,\n  SearchParams\n} from '@orama/orama'\nimport { AnswerSession as OSSAnswerSession, search } from '@orama/orama'\nimport {\n  AnswerSession as CloudAnswerSession,\n  AnswerSessionParams as CloudAnswerSessionConfig,\n  ClientSearchParams,\n  OramaClient\n} from '@oramacloud/client'\nimport type {\n  AnswerSession as OramaCoreAnswerSession,\n  AnswerSessionConfig as OramaCoreAnswerSessionConfig,\n  SearchParams as OramaCoreSearchParams\n} from '@orama/core'\nimport { CollectionManager } from '@orama/core'\n\nexport type OramaSwitchClient = AnyOrama | OramaClient | CollectionManager\n\nexport type ClientType = 'oss' | 'cloud' | 'core'\n\nexport type SearchConfig = {\n  abortController?: AbortController\n  fresh?: boolean\n  debounce?: number\n}\n\nfunction isOramaClient(client: any): client is OramaClient {\n  return client && typeof client === 'object' && 'api_key' in client && 'endpoint' in client\n}\n\nfunction isOramaCoreClient(client: any): client is CollectionManager {\n  return client && (client instanceof CollectionManager || client.constructor.name === 'CollectionManager')\n}\n\nfunction isOramaJSClient(client: any): client is AnyOrama {\n  return client && typeof client === 'object' && 'id' in client && 'tokenizer' in client\n}\n\nexport class Switch<T = OramaSwitchClient> {\n  private invalidClientError =\n    'Invalid client. Expected either an OramaClient, CollectionManager, or an Orama JS database.'\n  client: OramaSwitchClient\n  clientType: ClientType\n  isCloud: boolean = false\n  isJS: boolean = false\n  isCore: boolean = false\n\n  constructor(client: OramaSwitchClient) {\n    this.client = client\n\n    switch (true) {\n      case isOramaCoreClient(client):\n        this.clientType = 'core'\n        this.isCore = true\n        break\n      case isOramaClient(client):\n        this.clientType = 'cloud'\n        this.isCloud = true\n        break\n      case isOramaJSClient(client):\n        this.clientType = 'oss'\n        this.isJS = true\n        break\n      default:\n        throw new Error(this.invalidClientError)\n    }\n  }\n\n  async search<R = unknown>(\n    params: T extends OramaClient ? ClientSearchParams : T extends CollectionManager ? SearchParams<AnyOrama> : never,\n    config?: SearchConfig\n  ): Promise<Nullable<Results<R>>> {\n    switch (true) {\n      // OramaCloud - Old client\n      case this.isCloud:\n        return (this.client as OramaClient).search(params as T extends OramaClient ? ClientSearchParams : never, config)\n\n      // OramaCore - New client\n      case this.isCore: {\n        const results = await (this.client as CollectionManager).search(\n          params as T extends CollectionManager ? OramaCoreSearchParams : never\n        )\n\n        return results as unknown as Nullable<Results<R>>\n      }\n\n      // OramaJS - JavaScript client\n      case this.isJS:\n        return search(this.client as AnyOrama, params as SearchParams<AnyOrama>) as Promise<Nullable<Results<R>>>\n      default:\n        throw new Error(this.invalidClientError)\n    }\n  }\n\n  createAnswerSession(\n    params: T extends OramaClient ? CloudAnswerSessionConfig : OSSAnswerSessionConfig\n  ): T extends OramaClient\n    ? CloudAnswerSession<true>\n    : T extends CollectionManager\n      ? OramaCoreAnswerSession\n      : OSSAnswerSession {\n    switch (true) {\n      // OramaCloud - Old client\n      case this.isCloud: {\n        const p = params as CloudAnswerSessionConfig\n        return (this.client as OramaClient).createAnswerSession(p) as unknown as T extends OramaClient\n          ? CloudAnswerSession<true>\n          : T extends CollectionManager\n            ? OramaCoreAnswerSession\n            : OSSAnswerSession\n      }\n\n      // OramaCore - New client\n      case this.isCore: {\n        const p = params as OramaCoreAnswerSessionConfig\n        return (this.client as CollectionManager).createAnswerSession(p) as unknown as T extends OramaClient\n          ? CloudAnswerSession<true>\n          : T extends CollectionManager\n            ? OramaCoreAnswerSession\n            : OSSAnswerSession\n      }\n\n      // OramaJS - JavaScript client\n      case this.isJS: {\n        const p = params as OSSAnswerSessionConfig\n        return new OSSAnswerSession(this.client as AnyOrama, {\n          conversationID: p.conversationID,\n          initialMessages: p.initialMessages,\n          events: p.events,\n          userContext: p.userContext,\n          systemPrompt: p.systemPrompt\n        }) as unknown as T extends OramaClient\n          ? CloudAnswerSession<true>\n          : T extends CollectionManager\n            ? OramaCoreAnswerSession\n            : OSSAnswerSession\n      }\n\n      default:\n        throw new Error(this.invalidClientError)\n    }\n  }\n}\n"]}