{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";AAoDO,SAAS,yBACd,MACmD;AACnD,MAAI,SAAwB,OAAO,SAAS,aAAa,OAAO;AAEhE,MAAI;AACJ,iBAAe,aAAa;AAC1B,QAAI;AAAQ,aAAO;AACnB,QAAI;AAAe,aAAO;AAC1B,oBAAgB,OAAO,SAAS,aAAa,KAAK,IAAI,QAAQ,QAAQ,IAAI;AAC1E,aAAS,MAAM;AACf,WAAO;AAAA,EACT;AAEA,WAAS,aACP,SACqC;AACrC,WAAO;AAAA,MACL,MAAM,OAAO,EAAE,KAAK,UAAU,aAAa,GAAqB;AAC9D,cAAM,WAAW;AACjB,YAAI,CAAC;AAAQ,iBAAO;AACpB,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YACP,SACoC;AACpC,WAAO;AAAA,MACL,MAAM,OAAO,EAAE,KAAK,UAAU,aAAa,GAAoB;AAC7D,cAAM,WAAW;AACjB,YAAI,CAAC;AAAQ,iBAAO;AACpB,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YACP,SACoC;AACpC,WAAO;AAAA,MACL,MAAM,OAAO,EAAE,KAAK,UAAU,aAAa,GAAoB;AAC7D,cAAM,WAAW;AACjB,YAAI,CAAC;AAAQ,iBAAO;AACpB,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,WAAS,YACP,SACuC;AACvC,WAAO;AAAA,MACL,MAAM,OAAO,EAAE,KAAK,UAAU,aAAa,GAAuB;AAChE,cAAM,WAAW;AACjB,YAAI,CAAC;AAAQ,iBAAO;AACpB,eAAO,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QACE,OAAO,SAAS,aACZ,YAAY;AACV,YAAM,WAAW;AACjB,UAAI,CAAC;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AACF,aAAO;AAAA,IACT,IACA;AAAA,EACR;AACF","sourcesContent":["import type { Adapter } from 'flags';\nimport type {\n  Client,\n  EvaluationContext,\n  FlagEvaluationOptions,\n  JsonValue,\n} from '@openfeature/server-sdk';\n\ntype AdapterResponse<ClientType> = {\n  booleanValue: (\n    options?: FlagEvaluationOptions,\n  ) => Adapter<boolean, EvaluationContext>;\n  stringValue: (\n    options?: FlagEvaluationOptions,\n  ) => Adapter<string, EvaluationContext>;\n  numberValue: (\n    options?: FlagEvaluationOptions,\n  ) => Adapter<number, EvaluationContext>;\n  objectValue: <ValueType>(\n    options?: FlagEvaluationOptions,\n  ) => Adapter<ValueType, EvaluationContext>;\n  client: ClientType;\n};\n\n/**\n * Creates a sync OpenFeature adapter.\n * @param init Client\n * @example\n * ```\n * const openFeatureAdapter = createOpenFeatureAdapter(async () => {\n *   await OpenFeature.setProviderAndWait(\n *     new LaunchDarklyProvider(\"sdk-3eb98afb-a6ff-4d8c-a648-ddd35cad4140\")\n *   );\n *   return OpenFeature.getClient();\n * });\n * ```\n */\nexport function createOpenFeatureAdapter(init: Client): AdapterResponse<Client>;\n\n/**\n * Creates an async OpenFeature adapter.\n *\n * @param init () => Promise<Client>\n * @example\n * ```\n * OpenFeature.setProvider(someProvider);\n * const openFeatureAdapter = createOpenFeatureAdapter(OpenFeature.getClient());\n * ```\n */\nexport function createOpenFeatureAdapter(\n  init: () => Promise<Client>,\n): AdapterResponse<() => Promise<Client>>;\nexport function createOpenFeatureAdapter(\n  init: Client | (() => Promise<Client>),\n): AdapterResponse<Client | (() => Promise<Client>)> {\n  let client: Client | null = typeof init === 'function' ? null : init;\n\n  let clientPromise: Promise<Client>;\n  async function initialize() {\n    if (client) return client;\n    if (clientPromise) return clientPromise;\n    clientPromise = typeof init === 'function' ? init() : Promise.resolve(init);\n    client = await clientPromise;\n    return clientPromise;\n  }\n\n  function booleanValue(\n    options?: FlagEvaluationOptions,\n  ): Adapter<boolean, EvaluationContext> {\n    return {\n      async decide({ key, entities, defaultValue }): Promise<boolean> {\n        await initialize();\n        if (!client) return defaultValue as boolean;\n        return client.getBooleanValue(\n          key,\n          defaultValue as boolean,\n          entities,\n          options,\n        );\n      },\n    };\n  }\n\n  function stringValue(\n    options?: FlagEvaluationOptions,\n  ): Adapter<string, EvaluationContext> {\n    return {\n      async decide({ key, entities, defaultValue }): Promise<string> {\n        await initialize();\n        if (!client) return defaultValue as string;\n        return client.getStringValue(\n          key,\n          defaultValue as string,\n          entities,\n          options,\n        );\n      },\n    };\n  }\n\n  function numberValue(\n    options?: FlagEvaluationOptions,\n  ): Adapter<number, EvaluationContext> {\n    return {\n      async decide({ key, entities, defaultValue }): Promise<number> {\n        await initialize();\n        if (!client) return defaultValue as number;\n        return client.getNumberValue(\n          key,\n          defaultValue as number,\n          entities,\n          options,\n        );\n      },\n    };\n  }\n\n  function objectValue<ValueType>(\n    options?: FlagEvaluationOptions,\n  ): Adapter<ValueType, EvaluationContext> {\n    return {\n      async decide({ key, entities, defaultValue }): Promise<ValueType> {\n        await initialize();\n        if (!client) return defaultValue as ValueType;\n        return client.getObjectValue(\n          key,\n          defaultValue as JsonValue,\n          entities,\n          options,\n        ) as ValueType;\n      },\n    };\n  }\n\n  return {\n    booleanValue,\n    stringValue,\n    numberValue,\n    objectValue,\n    client:\n      typeof init === 'function'\n        ? async () => {\n            await initialize();\n            if (!client)\n              throw new Error(\n                '@flags-sdk/openfeature: OpenFeature client failed to initialize',\n              );\n            return client;\n          }\n        : init,\n  };\n}\n"]}