@sanity/personalization-plugin

3.1.63.1.7
dist/launchDarkly/index.js.map
~dist/launchDarkly/index.js.mapModified
+1−1
Index: package/dist/launchDarkly/index.js.map
===================================================================
--- package/dist/launchDarkly/index.js.map
+++ package/dist/launchDarkly/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["() => {\n    if (loading) return undefined\n    if (!secrets && !loading) {\n      setSecret(undefined)\n      // oxlint-disable-next-line react/set-state-in-effect\n      return setShowSettings(true)\n    }\n    setSecret(secrets.apiKey)\n    return setShowSettings(false)\n  }","[secrets, loading, setSecret]","props.renderDefault(props)","props.renderDefault","<SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />","<>\n      <SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />\n      {props.renderDefault(props)}\n    </>","{...launchDarklyFieldPluginConfig, secret, setSecret}","useMemo(\n    () => ({...launchDarklyFieldPluginConfig, secret, setSecret}),\n    [launchDarklyFieldPluginConfig, secret, setSecret],\n  )","<Secrets {...props} />","<LaunchDarklyContext.Provider value={context}>\n      <Secrets {...props} />\n    </LaunchDarklyContext.Provider>","LaunchDarklyContext.Provider"],"sources":["../../src/launchDarkly/components/Secrets.tsx","../../src/launchDarkly/components/LaunchDarklyContext.tsx","../../src/launchDarkly/utils.ts","../../src/launchDarkly/index.ts"],"sourcesContent":["import {SettingsView, useSecrets} from '@sanity/studio-secrets'\nimport {useEffect, useState} from 'react'\nimport type {ObjectInputProps} from 'sanity'\n\nimport {useLaunchDarklyContext} from './LaunchDarklyContext'\n\nconst namespace = 'launchdarkly'\nconst pluginConfigKeys = [\n  {\n    key: 'apiKey',\n    title: 'Your secret API key',\n  },\n]\n\nexport const Secrets = (props: ObjectInputProps) => {\n  const {secrets, loading} = useSecrets(namespace) as {secrets: {apiKey: string}; loading: boolean}\n  const {setSecret} = useLaunchDarklyContext()\n  const [showSettings, setShowSettings] = useState<boolean>(false)\n\n  useEffect(() => {\n    if (loading) return undefined\n    if (!secrets && !loading) {\n      setSecret(undefined)\n      // oxlint-disable-next-line react/set-state-in-effect\n      return setShowSettings(true)\n    }\n    setSecret(secrets.apiKey)\n    return setShowSettings(false)\n  }, [secrets, loading, setSecret])\n\n  if (!showSettings) {\n    return props.renderDefault(props)\n  }\n  return (\n    <>\n      <SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />\n      {props.renderDefault(props)}\n    </>\n  )\n}\n","import {createContext, useContext, useMemo, useState} from 'react'\nimport type {ObjectInputProps} from 'sanity'\n\nimport type {LaunchDarklyContextProps, LaunchDarklyFieldLevelConfig} from '../types'\nimport {Secrets} from './Secrets'\n\nexport const LAUNCHDARKLY_CONFIG_DEFAULT = {}\n\nconst LaunchDarklyContext = createContext<LaunchDarklyContextProps>({\n  setSecret: () => undefined,\n  secret: undefined,\n})\n\nexport function useLaunchDarklyContext() {\n  return useContext(LaunchDarklyContext)\n}\n\ntype LaunchDarklyProps = ObjectInputProps & {\n  launchDarklyFieldPluginConfig: LaunchDarklyFieldLevelConfig\n}\n\nexport function LaunchDarklyProvider(props: LaunchDarklyProps) {\n  const {launchDarklyFieldPluginConfig} = props\n  const [secret, setSecret] = useState<string | undefined>()\n\n  const context = useMemo(\n    () => ({...launchDarklyFieldPluginConfig, secret, setSecret}),\n    [launchDarklyFieldPluginConfig, secret, setSecret],\n  )\n\n  return (\n    <LaunchDarklyContext.Provider value={context}>\n      <Secrets {...props} />\n    </LaunchDarklyContext.Provider>\n  )\n}\n","import type {SanityClient} from 'sanity'\n\nimport type {ExperimentType} from '../types'\nimport type {LaunchDarklyFieldLevelConfig, LaunchDarklyFlagItem} from './types'\n\nexport const getExperiments = async ({\n  client,\n  projectKey,\n  tags,\n}: Omit<LaunchDarklyFieldLevelConfig, 'fields'> & {client: SanityClient}): Promise<\n  ExperimentType[]\n> => {\n  const query = `*[_id == 'secrets.launchdarkly'][0].secrets.apiKey`\n\n  const secret = await client.fetch(query) // secret is stored in the content lake using @sanity/studio-secrets\n  if (!secret) return []\n\n  const url = new URL(`https://app.launchdarkly.com/api/v2/flags/${projectKey}`)\n\n  if (tags) {\n    url.searchParams.set('filter', `tags:${tags.join('+')}`)\n  }\n\n  const featureExperiments: ExperimentType[] = []\n  let hasMore = true\n  let offset = 0\n  const limit = 10\n\n  while (hasMore) {\n    url.searchParams.set('offset', offset.toString())\n    url.searchParams.set('limit', limit.toString())\n    const responseFlags = await fetch(url, {\n      headers: {\n        Authorization: secret,\n      },\n    })\n\n    const {items} = await responseFlags.json()\n    const experiments = items.map((flag: LaunchDarklyFlagItem) => ({\n      id: flag.key,\n      label: flag.name,\n      variants: flag.variations.map((variation) => ({\n        id: variation.value.toString(),\n        label: variation.name ?? variation.value.toString(),\n      })),\n    }))\n    featureExperiments.push(...experiments)\n    if (items.length === limit) {\n      offset += limit\n    } else {\n      hasMore = false\n    }\n  }\n\n  return featureExperiments\n}\n","import '@sanity/ui/styles.css'\nimport {definePlugin, isObjectInputProps} from 'sanity'\n\nimport {fieldLevelExperiments as baseFieldLevelExperiments} from '../fieldExperiments'\nimport {flattenSchemaType} from '../utils/flattenSchemaType'\nimport {LAUNCHDARKLY_CONFIG_DEFAULT, LaunchDarklyProvider} from './components/LaunchDarklyContext'\nimport type {LaunchDarklyFieldLevelConfig} from './types'\nimport {getExperiments} from './utils'\n\nexport const fieldLevelExperiments = definePlugin<LaunchDarklyFieldLevelConfig>((config) => {\n  const pluginConfig = {...LAUNCHDARKLY_CONFIG_DEFAULT, ...config}\n  const {fields, projectKey, tags} = pluginConfig\n  return {\n    name: 'sanity-launchdarkly-personalization-plugin-field-level-experiments',\n    plugins: [\n      baseFieldLevelExperiments({\n        fields,\n        experiments: (client) => getExperiments({client, projectKey, tags}),\n        experimentNameOverride: 'flag',\n      }),\n    ],\n\n    form: {\n      components: {\n        input: (props) => {\n          const isRootInput = props.id === 'root' && isObjectInputProps(props)\n\n          if (!isRootInput) {\n            return props.renderDefault(props)\n          }\n\n          const flatFieldTypeNames = flattenSchemaType(props.schemaType).map(\n            (field) => field.type.name,\n          )\n\n          const hasExperiment = flatFieldTypeNames.some((name) => name.startsWith('flag'))\n\n          if (!hasExperiment) {\n            return props.renderDefault(props)\n          }\n\n          const providerProps = {\n            ...props,\n            launchDarklyFieldPluginConfig: {\n              ...pluginConfig,\n            },\n          }\n          return LaunchDarklyProvider(providerProps)\n        },\n      },\n    },\n  }\n})\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["() => {\n    if (loading) return undefined\n    if (!secrets && !loading) {\n      setSecret(undefined)\n      // oxlint-disable-next-line react/set-state-in-effect\n      return setShowSettings(true)\n    }\n    setSecret(secrets.apiKey)\n    return setShowSettings(false)\n  }","[secrets, loading, setSecret]","props.renderDefault(props)","props.renderDefault","<SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />","<>\n      <SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />\n      {props.renderDefault(props)}\n    </>","_c","_Fragment","{...launchDarklyFieldPluginConfig, secret, setSecret}","useMemo(\n    () => ({...launchDarklyFieldPluginConfig, secret, setSecret}),\n    [launchDarklyFieldPluginConfig, secret, setSecret],\n  )","<Secrets {...props} />","<LaunchDarklyContext.Provider value={context}>\n      <Secrets {...props} />\n    </LaunchDarklyContext.Provider>","LaunchDarklyContext.Provider","_c","baseFieldLevelExperiments"],"sources":["../../src/launchDarkly/components/Secrets.tsx","../../src/launchDarkly/components/LaunchDarklyContext.tsx","../../src/launchDarkly/utils.ts","../../src/launchDarkly/index.ts"],"sourcesContent":["import {SettingsView, useSecrets} from '@sanity/studio-secrets'\nimport {useEffect, useState} from 'react'\nimport type {ObjectInputProps} from 'sanity'\n\nimport {useLaunchDarklyContext} from './LaunchDarklyContext'\n\nconst namespace = 'launchdarkly'\nconst pluginConfigKeys = [\n  {\n    key: 'apiKey',\n    title: 'Your secret API key',\n  },\n]\n\nexport const Secrets = (props: ObjectInputProps) => {\n  const {secrets, loading} = useSecrets(namespace) as {secrets: {apiKey: string}; loading: boolean}\n  const {setSecret} = useLaunchDarklyContext()\n  const [showSettings, setShowSettings] = useState<boolean>(false)\n\n  useEffect(() => {\n    if (loading) return undefined\n    if (!secrets && !loading) {\n      setSecret(undefined)\n      // oxlint-disable-next-line react/set-state-in-effect\n      return setShowSettings(true)\n    }\n    setSecret(secrets.apiKey)\n    return setShowSettings(false)\n  }, [secrets, loading, setSecret])\n\n  if (!showSettings) {\n    return props.renderDefault(props)\n  }\n  return (\n    <>\n      <SettingsView\n        title={`${namespace} api key`}\n        namespace={namespace}\n        keys={pluginConfigKeys}\n        onClose={() => {\n          setShowSettings(false)\n        }}\n      />\n      {props.renderDefault(props)}\n    </>\n  )\n}\n","import {createContext, useContext, useMemo, useState} from 'react'\nimport type {ObjectInputProps} from 'sanity'\n\nimport type {LaunchDarklyContextProps, LaunchDarklyFieldLevelConfig} from '../types'\nimport {Secrets} from './Secrets'\n\nexport const LAUNCHDARKLY_CONFIG_DEFAULT = {}\n\nconst LaunchDarklyContext = createContext<LaunchDarklyContextProps>({\n  setSecret: () => undefined,\n  secret: undefined,\n})\n\nexport function useLaunchDarklyContext() {\n  return useContext(LaunchDarklyContext)\n}\n\ntype LaunchDarklyProps = ObjectInputProps & {\n  launchDarklyFieldPluginConfig: LaunchDarklyFieldLevelConfig\n}\n\nexport function LaunchDarklyProvider(props: LaunchDarklyProps) {\n  const {launchDarklyFieldPluginConfig} = props\n  const [secret, setSecret] = useState<string | undefined>()\n\n  const context = useMemo(\n    () => ({...launchDarklyFieldPluginConfig, secret, setSecret}),\n    [launchDarklyFieldPluginConfig, secret, setSecret],\n  )\n\n  return (\n    <LaunchDarklyContext.Provider value={context}>\n      <Secrets {...props} />\n    </LaunchDarklyContext.Provider>\n  )\n}\n","import type {SanityClient} from 'sanity'\n\nimport type {ExperimentType} from '../types'\nimport type {LaunchDarklyFieldLevelConfig, LaunchDarklyFlagItem} from './types'\n\nexport const getExperiments = async ({\n  client,\n  projectKey,\n  tags,\n}: Omit<LaunchDarklyFieldLevelConfig, 'fields'> & {client: SanityClient}): Promise<\n  ExperimentType[]\n> => {\n  const query = `*[_id == 'secrets.launchdarkly'][0].secrets.apiKey`\n\n  const secret = await client.fetch(query) // secret is stored in the content lake using @sanity/studio-secrets\n  if (!secret) return []\n\n  const url = new URL(`https://app.launchdarkly.com/api/v2/flags/${projectKey}`)\n\n  if (tags) {\n    url.searchParams.set('filter', `tags:${tags.join('+')}`)\n  }\n\n  const featureExperiments: ExperimentType[] = []\n  let hasMore = true\n  let offset = 0\n  const limit = 10\n\n  while (hasMore) {\n    url.searchParams.set('offset', offset.toString())\n    url.searchParams.set('limit', limit.toString())\n    const responseFlags = await fetch(url, {\n      headers: {\n        Authorization: secret,\n      },\n    })\n\n    const {items} = await responseFlags.json()\n    const experiments = items.map((flag: LaunchDarklyFlagItem) => ({\n      id: flag.key,\n      label: flag.name,\n      variants: flag.variations.map((variation) => ({\n        id: variation.value.toString(),\n        label: variation.name ?? variation.value.toString(),\n      })),\n    }))\n    featureExperiments.push(...experiments)\n    if (items.length === limit) {\n      offset += limit\n    } else {\n      hasMore = false\n    }\n  }\n\n  return featureExperiments\n}\n","import '@sanity/ui/styles.css'\nimport {definePlugin, isObjectInputProps} from 'sanity'\n\nimport {fieldLevelExperiments as baseFieldLevelExperiments} from '../fieldExperiments'\nimport {flattenSchemaType} from '../utils/flattenSchemaType'\nimport {LAUNCHDARKLY_CONFIG_DEFAULT, LaunchDarklyProvider} from './components/LaunchDarklyContext'\nimport type {LaunchDarklyFieldLevelConfig} from './types'\nimport {getExperiments} from './utils'\n\nexport const fieldLevelExperiments = definePlugin<LaunchDarklyFieldLevelConfig>((config) => {\n  const pluginConfig = {...LAUNCHDARKLY_CONFIG_DEFAULT, ...config}\n  const {fields, projectKey, tags} = pluginConfig\n  return {\n    name: 'sanity-launchdarkly-personalization-plugin-field-level-experiments',\n    plugins: [\n      baseFieldLevelExperiments({\n        fields,\n        experiments: (client) => getExperiments({client, projectKey, tags}),\n        experimentNameOverride: 'flag',\n      }),\n    ],\n\n    form: {\n      components: {\n        input: (props) => {\n          const isRootInput = props.id === 'root' && isObjectInputProps(props)\n\n          if (!isRootInput) {\n            return props.renderDefault(props)\n          }\n\n          const flatFieldTypeNames = flattenSchemaType(props.schemaType).map(\n            (field) => field.type.name,\n          )\n\n          const hasExperiment = flatFieldTypeNames.some((name) => name.startsWith('flag'))\n\n          if (!hasExperiment) {\n            return props.renderDefault(props)\n          }\n\n          const providerProps = {\n            ...props,\n            launchDarklyFieldPluginConfig: {\n              ...pluginConfig,\n            },\n          }\n          return LaunchDarklyProvider(providerProps)\n        },\n      },\n    },\n  }\n})\n"],"mappings":";;;;;;;AAMA,MAAM,YAAY,gBACZ,mBAAmB,CACvB;CACE,KAAK;CACL,OAAO;AACT,CACF,GAEa,WAAW,UAA4B;gBAC5C,EAAC,SAAS,YAAW,WAAW,SAAS,GACzC,EAAC,cAAa,uBAAuB,GACrC,CAAC,cAAc,mBAAmB,SAAkB,EAAK,GAErDA,IASPC;CAEH,IAVM,EAAA,OAAA,WAAA,EAAA,OACC,WAAA,EAAA,OACH,aAHM,WAAM;EACd,IAAI,UAOJ,OANI,CAAC,WAAW,CAAC,WACf,UAAU,KAAA,CAAS,GAEZ,gBAAgB,EAAI,MAE7B,UAAU,QAAQ,MAAM,GACjB,gBAAgB,EAAK;CAC9B,GAAG,KAAA;EAAC;EAAS;EAAS;CAAS,GARzB,EAAA,KAAA,SACC,EAAA,KAAA,SACH,EAAA,KAAA,2DAHJ,UAAUD,IASPC,EAA6B,GAE5B,CAAC,cAAc;EACVC,IAAAA;EAAP,qCAAa,KAAA,MAAA,cAAc,KAAK,GAAzBC,EAAAA,KAAAA,mBAAAD;CACT;CAGIE,IAAAA;qDAAC,KAAA,oBAAA,cAAD;EACE,OAAO,GAAG,UAAU;EACT;EACX,MAAM;EACN,eAAe;GACb,gBAAgB,EAAK;EACvB;CACD,CAAA;CACAF,IAAAA;+BAAM,KAAA,MAAA,cAAc,KAAK,GAAzBC,EAAAA,KAAAA;CATHE,IAAAA;CADF,OAUKH,EAAAA,QAAAA,mBATH,KAAA,qBAAAK,UAAA,EAAA,UAAA,CACEH,IAQCF,EACD,EAAA,CAAA,GADCA,EAAAA,MAAAA,iBATHG;AAYJ,GCxCa,8BAA8B,CAAC,GAEtC,sBAAsB,cAAwC;CAClE,iBAAiB,KAAA;CACjB,QAAQ,KAAA;AACV,CAAC;AAED,SAAgB,yBAAyB;CACvC,OAAO,WAAW,mBAAmB;AACvC;AAMA,SAAgB,qBAAqB,OAA0B;eACvD,EAAC,kCAAiC,OAClC,CAAC,QAAQ,aAAa,SAA6B,GAGhDG;CAAI,AAAA,EAAA,OAAA,iCAAA,EAAA,OAA+B,UAAnC,KAAA;EAAC,GAAG;EAA+B;EAAQ;CAAS,GAAhD,EAAA,KAAA,+BAA+B,EAAA,KAAA;CAD5C,IAAM,UAAUC,IAOZC;CAAa,AAAA,EAAA,OAAA,qBAAb,KAAA,oBAAC,SAAD,EAAS,GAAI,MAAQ,CAAA,GAAR,EAAA,KAAA;CADfC,IAAAA;CADF,OACuC,EAAA,OAAA,WAAA,EAAA,OACnCD,MADF,KAAA,oBAACE,oBAAAA,UAAD;EAA8B,OAAO;EACnCF,UAAAA;CAC4B,CAAA,GAFO,EAAA,KAAA,SACnCA,EAAAA,KAAAA,4BADFC;AAIJ;AC9BA,MAAa,iBAAiB,OAAO,EACnC,QACA,YACA,WAGG;CAGH,IAAM,SAAS,MAAM,OAAO,MAAM,oDAAK;CACvC,IAAI,CAAC,QAAQ,OAAO,CAAC;CAErB,IAAM,MAAM,IAAI,IAAI,6CAA6C,YAAY;CAE7E,AAAI,QACF,IAAI,aAAa,IAAI,UAAU,QAAQ,KAAK,KAAK,GAAG,GAAG;CAGzD,IAAM,qBAAuC,CAAC,GAC1C,UAAU,IACV,SAAS;CAGb,OAAO,UAAS;EAEd,AADA,IAAI,aAAa,IAAI,UAAU,OAAO,SAAS,CAAC,GAChD,IAAI,aAAa,IAAI,SAAS,IAAgB;EAO9C,IAAM,EAAC,UAAS,OAAM,MANM,MAAM,KAAK,EACrC,SAAS,EACP,eAAe,OACjB,EACF,CAAC,EAAA,CAEmC,KAAK,GACnC,cAAc,MAAM,KAAK,UAAgC;GAC7D,IAAI,KAAK;GACT,OAAO,KAAK;GACZ,UAAU,KAAK,WAAW,KAAK,eAAe;IAC5C,IAAI,UAAU,MAAM,SAAS;IAC7B,OAAO,UAAU,QAAQ,UAAU,MAAM,SAAS;GACpD,EAAE;EACJ,EAAE;EAEF,AADA,mBAAmB,KAAK,GAAG,WAAW,GAClC,MAAM,WAAW,KACnB,UAAU,KAEV,UAAU;CAEd;CAEA,OAAO;AACT,GC9Ca,wBAAwB,cAA4C,WAAW;CAC1F,IAAM,eAAe;EAAC,GAAG;EAA6B,GAAG;CAAM,GACzD,EAAC,QAAQ,YAAY,SAAQ;CACnC,OAAO;EACL,MAAM;EACN,SAAS,CACPG,wBAA0B;GACxB;GACA,cAAc,WAAW,eAAe;IAAC;IAAQ;IAAY;GAAI,CAAC;GAClE,wBAAwB;EAC1B,CAAC,CACH;EAEA,MAAM,EACJ,YAAY,EACV,QAAQ,UAGF,EAFgB,MAAM,OAAO,UAAU,mBAAmB,KAAK,MAY/D,CANuB,kBAAkB,MAAM,UAAU,CAAC,CAAC,KAC5D,UAAU,MAAM,KAAK,IAGF,CAAA,CAAmB,MAAM,SAAS,KAAK,WAAW,MAAM,CAEzE,IACI,MAAM,cAAc,KAAK,IAS3B,qBAAqB;GAL1B,GAAG;GACH,+BAA+B,EAC7B,GAAG,aACL;EAE0B,CAAa,EAE7C,EACF;CACF;AACF,CAAC"}
\ No newline at end of file