{"version":3,"file":"aucotomplete.mjs","sources":["../../../lib/data-provider-interface/composables/aucotomplete.ts"],"sourcesContent":["import { computed, inject, InjectionKey, toValue } from \"vue\";\nimport axios from \"axios\";\nimport { ComputedDpiContext, useDpiContext } from \"./useDpiContext\";\nimport { useRuntimeEnv } from \"../../composables/useRuntimeEnv\";\nimport { ResolvedConfig } from \"../../configurations/config-schema\";\n\nexport interface AutocompleteInstance {\n  requestFirstEntrySuggestions(voc: string, base: string): Promise<any>;\n  requestAutocompleteSuggestions(options: {\n    voc: string;\n    text: string;\n    base: string;\n  }): Promise<any>;\n  requestResourceName(options: {\n    voc: string;\n    uri: string;\n    envs: any;\n  }): Promise<any>;\n}\n\nexport interface AutocompleteOptions {\n  name: string;\n  adapter: AutocompleteInstance;\n}\n\nexport const autocompleteKey = Symbol(\n  \"autocomplete\"\n) as InjectionKey<AutocompleteInstance>;\n\nexport function defaultAutocompleteAdapter(options: {\n  envs: ResolvedConfig;\n  dpiContext: ComputedDpiContext;\n}): AutocompleteOptions {\n  const { envs, dpiContext } = options;\n\n  const getVocabularyKey = (voc: string) => {\n    const specification = toValue(dpiContext)?.specification;\n    const vocabPrefixes = (specification?.vocabPrefixes as Record<string, string>) ?? {};\n\n    if (voc === \"licence\" && vocabPrefixes[\"licenses\"]) {\n      return \"licenses\";\n    }\n\n    if (voc === \"licenses\" && !vocabPrefixes[\"licenses\"] && vocabPrefixes[\"licence\"]) {\n      return \"licence\";\n    }\n\n    return voc;\n  };\n\n  return {\n    name: \"default\",\n    adapter: {\n      requestFirstEntrySuggestions: async (voc, base) => {\n        const vocabulary = getVocabularyKey(voc);\n\n        return axios.get(`${base}search?filter=vocabulary&vocabulary=${vocabulary}`);\n      },\n      requestAutocompleteSuggestions: async (options) => {\n        const vocabulary = getVocabularyKey(options.voc);\n\n        return axios.get(\n          `${options.base}search?filter=vocabulary&vocabulary=${vocabulary}&q=${options.text}&limit=14`\n        );\n      },\n      requestResourceName: async (options) => {\n        const { voc, uri } = options;\n        const vocabulary = getVocabularyKey(voc);\n        const specification = computed(\n          () => toValue(dpiContext)?.specification\n        );\n\n        // console.log('Options:', voc, uri);\n\n        // // Catching invalid URIs\n        if (vocabulary === undefined) return;\n        if (vocabulary === \"application\") return;\n\n        let req = \"\";\n\n        // vocabularies for spdx checksum and inana-media-types are structured differently in the backend then other vocabularies\n        if (vocabulary === \"iana-media-types\" || vocabulary === \"spdx-checksum-algorithm\" || vocabulary ==='dataset-status') {\n          req = `${envs.api.baseUrl}vocabularies/${vocabulary}`;\n        }    \n        else {\n          const vocabPrefixes = (specification.value.vocabPrefixes as Record<string, string>) ?? {};\n          const prefix = vocabPrefixes[vocabulary] ?? vocabPrefixes[voc];\n          const value = uri.replace(\n            prefix,\n            \"\"\n          );\n          const valueEncoded = encodeURIComponent(value);\n          const requestByUri = value !== valueEncoded;\n          req = !requestByUri\n            ? `${envs.api.baseUrl}vocabularies/${vocabulary}/${valueEncoded}`\n            : `${\n                envs.api.baseUrl\n              }vocabularies/${vocabulary}/vocable?resource=${encodeURIComponent(uri)}`;\n        }\n\n        let result = axios.get(req);\n\n        // console.log(\"#### Req:\", req);\n\n        return result;\n      },\n    },\n  };\n}\n\nexport function useAutocomplete() {\n  const autocomplete = inject(autocompleteKey);\n\n  if (!autocomplete) {\n    throw new Error(\n      \"[useAutocomplete] Autocomplete not found. Did you forget to inject it?\"\n    );\n  }\n\n  return autocomplete;\n}\n"],"names":["autocompleteKey","defaultAutocompleteAdapter","options","envs","dpiContext","getVocabularyKey","voc","specification","_a","toValue","vocabPrefixes","base","vocabulary","axios","uri","computed","req","prefix","value","valueEncoded","useAutocomplete","autocomplete","inject"],"mappings":";;AAyBO,MAAMA,IAAkB;AAAA,EAC7B;AACF;AAEO,SAASC,EAA2BC,GAGnB;AAChB,QAAA,EAAE,MAAAC,GAAM,YAAAC,EAAe,IAAAF,GAEvBG,IAAmB,CAACC,MAAgB;;AAClC,UAAAC,KAAgBC,IAAAC,EAAQL,CAAU,MAAlB,gBAAAI,EAAqB,eACrCE,KAAiBH,KAAA,gBAAAA,EAAe,kBAA4C;AAElF,WAAID,MAAQ,aAAaI,EAAc,WAC9B,aAGLJ,MAAQ,cAAc,CAACI,EAAc,YAAeA,EAAc,UAC7D,YAGFJ;AAAA,EAAA;AAGF,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,8BAA8B,OAAOA,GAAKK,MAAS;AAC3C,cAAAC,IAAaP,EAAiBC,CAAG;AAEvC,eAAOO,EAAM,IAAI,GAAGF,CAAI,uCAAuCC,CAAU,EAAE;AAAA,MAC7E;AAAA,MACA,gCAAgC,OAAOV,MAAY;AAC3C,cAAAU,IAAaP,EAAiBH,EAAQ,GAAG;AAE/C,eAAOW,EAAM;AAAA,UACX,GAAGX,EAAQ,IAAI,uCAAuCU,CAAU,MAAMV,EAAQ,IAAI;AAAA,QAAA;AAAA,MAEtF;AAAA,MACA,qBAAqB,OAAOA,MAAY;AAChC,cAAA,EAAE,KAAAI,GAAK,KAAAQ,EAAQZ,IAAAA,GACfU,IAAaP,EAAiBC,CAAG,GACjCC,IAAgBQ;AAAA,UACpB;;AAAM,oBAAAP,IAAAC,EAAQL,CAAU,MAAlB,gBAAAI,EAAqB;AAAA;AAAA,QAAA;AAO7B,YADII,MAAe,UACfA,MAAe;AAAe;AAElC,YAAII,IAAM;AAGV,YAAIJ,MAAe,sBAAsBA,MAAe,6BAA6BA,MAAc;AACjG,UAAAI,IAAM,GAAGb,EAAK,IAAI,OAAO,gBAAgBS,CAAU;AAAA,aAEhD;AACH,gBAAMF,IAAiBH,EAAc,MAAM,iBAA4C,CAAA,GACjFU,IAASP,EAAcE,CAAU,KAAKF,EAAcJ,CAAG,GACvDY,IAAQJ,EAAI;AAAA,YAChBG;AAAA,YACA;AAAA,UAAA,GAEIE,IAAe,mBAAmBD,CAAK;AAEvC,UAAAF,IADeE,MAAUC,IAG3B,GACEhB,EAAK,IAAI,OACX,gBAAgBS,CAAU,qBAAqB,mBAAmBE,CAAG,CAAC,KAHtE,GAAGX,EAAK,IAAI,OAAO,gBAAgBS,CAAU,IAAIO,CAAY;AAAA,QAInE;AAMO,eAJMN,EAAM,IAAIG,CAAG;AAAA,MAK5B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEO,SAASI,IAAkB;AAC1B,QAAAC,IAAeC,EAAOtB,CAAe;AAE3C,MAAI,CAACqB;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIG,SAAAA;AACT;"}