@piveau/sdk-vue 1.0.0-beta.1 → 1.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.mjs +8 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useQuery, keepPreviousData, QueryClient } from '@tanstack/vue-query';
|
|
2
2
|
import { toValue, inject, shallowRef, ref, computed, reactive, markRaw, toRefs, Fragment, unref, isVue2 } from 'vue-demi';
|
|
3
|
-
import {
|
|
3
|
+
import { normalizeDate, formatDate, toValue as toValue$1 } from '@vueuse/core';
|
|
4
4
|
import { merge } from 'merge-anything';
|
|
5
5
|
import { replace, getObjectValueByPath } from './utils/vHelpers.mjs';
|
|
6
6
|
export { getNestedValue } from './utils/vHelpers.mjs';
|
|
@@ -30,6 +30,9 @@ function useLocale() {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
const LANG_PREFIX = "__pv.";
|
|
33
|
+
function isValidDate(d) {
|
|
34
|
+
return d instanceof Date && !Number.isNaN(d);
|
|
35
|
+
}
|
|
33
36
|
function createTranslateFunction(current, fallback, messages) {
|
|
34
37
|
return (key, ...params) => {
|
|
35
38
|
if (!key.startsWith(LANG_PREFIX))
|
|
@@ -62,7 +65,10 @@ function createNumberFunction(current, fallback) {
|
|
|
62
65
|
function createDateFunction(current, fallback, dateFormatStrings) {
|
|
63
66
|
return (value, format = "short", locale) => {
|
|
64
67
|
const locales = locale ? Array.isArray(locale) ? locale : [locale] : [current.value, fallback.value];
|
|
65
|
-
|
|
68
|
+
const normalizedDate = normalizeDate(value);
|
|
69
|
+
if (!isValidDate(normalizedDate))
|
|
70
|
+
return "";
|
|
71
|
+
return formatDate(normalizedDate, dateFormatStrings.value?.[format] || "", { locales });
|
|
66
72
|
};
|
|
67
73
|
}
|
|
68
74
|
function defaultLocaleAdapter(options) {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/composables/locale.ts","../src/locale/adapters/default.ts","../src/utils.ts","../src/useResourceFactory.ts","../src/useSearchQueryParams.ts","../src/utils/helpers.ts","../src/useSearchFactory.ts","../src/defineHubSearch.ts","../src/integrations/dcatAp/dcatAp.ts","../src/utils/propertyTable.ts","../src/integrations/dcatAp/properties.ts","../src/index.ts"],"sourcesContent":["import type { InjectionKey, MaybeRefOrGetter } from 'vue-demi'\nimport { inject, toValue } from 'vue-demi'\n\nexport interface LocaleMessages {\n [key: string]: LocaleMessages | string\n}\n\nexport type DateFormats = 'short' | 'medium' | 'long'\nexport type DateLike = Date | string | number\nexport type DateFormatStrings = {\n [key in DateFormats]?: string\n}\n\nexport interface LocaleInstance {\n name: string\n messages: MaybeRefOrGetter<LocaleMessages>\n currentLocale: MaybeRefOrGetter<string>\n fallbackLocale: MaybeRefOrGetter<string>\n setLocale: (locale: MaybeRefOrGetter<string>) => void\n t: (key: string, ...params: unknown[]) => string\n n: (value: number) => string\n d: (value: DateLike, format?: DateFormats, locale?: Intl.LocalesArgument) => string\n}\n\nexport interface UnwrappedLocaleInstance extends LocaleInstance {\n messages: LocaleMessages\n currentLocale: string\n fallbackLocale: string\n}\n\nexport interface LocaleOptions {\n messages?: LocaleMessages\n locale?: string\n fallback?: string\n dateFormatStrings?: DateFormatStrings\n adapter?: LocaleInstance\n}\n\nexport function unwrapLocaleInstance(instance: LocaleInstance): UnwrappedLocaleInstance {\n return {\n ...instance,\n messages: toValue(instance.messages),\n currentLocale: toValue(instance.currentLocale),\n fallbackLocale: toValue(instance.fallbackLocale),\n }\n}\n\nexport function useLocaleUnwrapped() {\n return unwrapLocaleInstance(useLocale())\n}\n\nexport const localeKey = Symbol('locale') as InjectionKey<LocaleInstance>\nexport function useLocale() {\n const locale = inject(localeKey)\n\n if (!locale)\n throw new Error('[piveau-kit] Could not inject locale instance. Did you forget to install the `@piveau/sdk-vue` plugin?')\n\n return locale\n}\n","import type { MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { DateFormats, DateFormatStrings, DateLike, LocaleInstance, LocaleMessages, LocaleOptions } from '../../composables/locale.js'\nimport { formatDate, normalizeDate } from '@vueuse/core'\nimport { merge } from 'merge-anything'\nimport { ref, shallowRef, toValue } from 'vue-demi'\nimport { getObjectValueByPath, replace } from '../../utils/vHelpers.js'\nimport { de, en } from '../index.js'\n\nconst LANG_PREFIX = '__pv.'\n\nexport function createTranslateFunction(current: Ref<string>, fallback: Ref<string>, messages: Ref<LocaleMessages>) {\n return (key: string, ...params: unknown[]) => {\n if (!key.startsWith(LANG_PREFIX))\n return replace(key, params)\n\n const shortKey = key.replace(LANG_PREFIX, '')\n const currentLocale = current.value && messages.value[current.value]\n const fallbackLocale = fallback.value && messages.value[fallback.value]\n let str: string = getObjectValueByPath(currentLocale, shortKey, null)\n\n if (!str) {\n console.warn(`[pv-kit] Translation key \"${key}\" not found in \"${current.value}\", trying fallback locale`)\n str = getObjectValueByPath(fallbackLocale, shortKey, null)\n }\n\n if (!str) {\n console.error(`[pv-kit] Translation key \"${key}\" not found in fallback`)\n str = key\n }\n\n if (typeof str !== 'string') {\n console.error(`[pv-kit] Translation key \"${key}\" has a non-string value`)\n str = key\n }\n\n return replace(str, params)\n }\n}\n\nexport function createNumberFunction(current: Ref<string>, fallback: Ref<string>) {\n return (value: number, options?: Intl.NumberFormatOptions) => {\n const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options)\n\n return numberFormat.format(value)\n }\n}\n\nexport function createDateFunction(current: Ref<string>, fallback: Ref<string>, dateFormatStrings: Ref<DateFormatStrings>) {\n return (value: DateLike, format: DateFormats = 'short', locale?: Intl.LocalesArgument) => {\n const locales = locale\n ? Array.isArray(locale) ? locale : [locale]\n : [current.value, fallback.value]\n return formatDate(normalizeDate(value), dateFormatStrings.value?.[format] || '', { locales })\n }\n}\n\nexport function defaultLocaleAdapter(options?: LocaleOptions): LocaleInstance {\n const currentLocale = shallowRef(options?.locale ?? 'en')\n const fallbackLocale = shallowRef(options?.fallback ?? 'en')\n const messages = ref(merge({ en, de }, { ...options?.messages }))\n const dateFormatStrings = shallowRef({\n short: 'YYYY-MM-DD',\n medium: 'YYYY-MM-DD HH:mm',\n long: 'YYYY-MM-DD HH:mm:ss',\n ...options?.dateFormatStrings,\n })\n\n function setLocale(locale: MaybeRefOrGetter<string>) {\n currentLocale.value = toValue(locale)\n }\n\n return {\n name: '__default',\n currentLocale,\n fallbackLocale,\n messages,\n setLocale,\n t: createTranslateFunction(currentLocale, fallbackLocale, messages),\n n: createNumberFunction(currentLocale, fallbackLocale),\n d: createDateFunction(currentLocale, fallbackLocale, dateFormatStrings),\n }\n}\n","import type { SearchParamsBase } from '@piveau/sdk-core'\nimport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nimport type { MaybeRef } from 'vue-demi'\n\nexport function assertQueryClient(qc: QueryClient | null): asserts qc is QueryClient {\n if (!qc)\n throw new Error('[piveau-kit] QueryClient not found')\n}\n\nexport type Reffify<T> = {\n [key in keyof T]: MaybeRef<T[key]>\n}\n\nexport type SearchParamsRef = Reffify<SearchParamsBase>\n\nexport interface SelectedFacetItemObject {\n id: string\n title: Record<string, string> | string\n count: number\n}\n\nexport type SelectedFacetItemList = (SelectedFacetItemObject | string)[]\n\nexport type FacetRef<TFacetNames extends string = string> = {\n readonly [key in TFacetNames]?: MaybeRef<SelectedFacetItemList>\n}\n\nexport type UnwrappedFacetRef<TFacetNames extends string = string> = {\n readonly [key in TFacetNames]?: SelectedFacetItemList\n}\n\nexport function extractFacetId(facet: string | SelectedFacetItemObject): string {\n return typeof facet === 'string' ? facet : facet.id\n}\n\nexport function mapToFacetIds(facets: SelectedFacetItemList): string[] {\n if (typeof facets === 'string')\n return [facets]\n\n return facets.map(extractFacetId)\n}\n\n// todo deleting this line causes weird error \"\"The inferred type of X cannot be named without a reference to Y\" (TS2742) occurs when multiple modules with the same package ID are resolved\"\n// this is a workaround for the issue\nexport type _UseQueryReturnType<TData, TError> = UseQueryReturnType<\n TData,\n TError\n>\n","import type { GetResourceByIdParams, GetResourceResult, SearchResult } from '@piveau/sdk-core'\nimport type { QueryClient } from '@tanstack/vue-query'\nimport type { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { SetupFn } from './defineHubSearch.js'\nimport type { _UseQueryReturnType } from './utils.js'\nimport { useQuery } from '@tanstack/vue-query'\nimport { computed, markRaw, reactive, toValue } from 'vue-demi'\nimport { z } from 'zod'\nimport { unwrapLocaleInstance, useLocale } from './composables/locale.js'\nimport { getCurrentApp } from './index.js'\nimport { assertQueryClient } from './utils.js'\n\nexport type { _UseQueryReturnType } from './utils.js'\n\nexport interface UseResourceResultNoData {\n isSuccess: false\n result: ComputedRef<undefined>\n resultEnhanced: ComputedRef<undefined>\n}\n\nexport interface UseResourceResultWithData<TSetup extends object, TModelSchema = any> {\n isSuccess: true\n result: ComputedRef<TModelSchema>\n resultEnhanced: ComputedRef<TSetup>\n}\n\nexport type UseResourceResultBase<TSetup extends object, TModelSchema = any> = UseResourceResultNoData | UseResourceResultWithData<TSetup, TModelSchema>\n\nexport type UseResourceResult<\n TSetup extends object,\n TModelSchema = any,\n TResult = UseResourceResultBase<TSetup, TModelSchema>,\n> = {\n [K in keyof TResult]: K extends 'isSuccess' ? Ref<TResult[K]> : TResult[K]\n} & {\n query: _UseQueryReturnType<GetResourceResult<TModelSchema>, Error>\n isLoading: Ref<boolean> | Ref<true> | Ref<false>\n isFetching: Ref<boolean>\n}\n\nexport interface UseResourceParams {\n additionalParams?: MaybeRefOrGetter<any>\n headers?: MaybeRefOrGetter<Record<string, string>>\n queryOptions?: {\n staleTime?: MaybeRef<number>\n refetchOnWindowFocus?: MaybeRef<boolean>\n refetchInterval?: MaybeRef<number>\n suspense?: MaybeRef<boolean>\n retry?: MaybeRef<number>\n }\n}\n\nexport type UseResourceFunction<\n TSetup extends object,\n TModelSchema = any,\n> = (resourceId: MaybeRefOrGetter<string>, params?: UseResourceParams) => UseResourceResult<TSetup, TModelSchema>\n\nexport interface UseResourceFactoryParams<\n TModelSchema = any,\n> {\n baseUrl: string\n schema: z.Schema<TModelSchema>\n index: MaybeRefOrGetter<string>\n indexSearch?: MaybeRefOrGetter<string>\n enabled?: MaybeRefOrGetter<boolean>\n qc: QueryClient\n fetcherFn: (\n _options: GetResourceByIdParams\n ) => Promise<GetResourceResult<TModelSchema>>\n}\n\nexport function useResourceFactory<\n TSetup extends object,\n TModelSchema = any,\n>(options: UseResourceFactoryParams<TModelSchema>, setup?: SetupFn<TSetup, TModelSchema>): UseResourceFunction<TSetup, TModelSchema> {\n const useResource: UseResourceFunction<TSetup, TModelSchema> = (resourceId: MaybeRefOrGetter<string>, params?: UseResourceParams) => {\n const {\n index,\n indexSearch = index,\n baseUrl,\n enabled = true,\n qc,\n fetcherFn,\n schema,\n } = options\n\n const {\n additionalParams,\n headers,\n queryOptions,\n } = params ?? {}\n\n assertQueryClient(qc)\n const queryOptionsResolved = {\n staleTime: queryOptions?.staleTime ?? 1000 * 60 * 2,\n refetchOnWindowFocus: queryOptions?.refetchOnWindowFocus ?? true,\n refetchInterval: queryOptions?.refetchInterval,\n suspense: queryOptions?.suspense,\n retry: queryOptions?.retry,\n }\n const localeInstance = useLocale()\n const resolvedIndex = computed(() => toValue(index) ?? toValue(indexSearch))\n const queryKey = computed(() => [\n 'pv-resource',\n toValue(resolvedIndex),\n toValue(resourceId),\n ...toValue(additionalParams) ? [toValue(additionalParams)] : [],\n ...toValue(headers) ? [toValue(headers)] : [],\n ])\n\n const query = useQuery(\n {\n queryKey,\n queryFn: async () => {\n const res = await fetcherFn({\n baseUrl,\n resource: toValue(resolvedIndex),\n id: toValue(resourceId),\n additionalParams: toValue(additionalParams),\n headers: toValue(headers),\n })\n return res\n },\n // placeholderData: keepPreviousData,\n initialData() {\n // Scan through the search results cache to see if we have the resource already\n const cache = qc.getQueriesData<SearchResult<TModelSchema>>({\n queryKey: computed(() => (['pv-resources', resolvedIndex.value])),\n })\n\n const values = cache\n .flatMap(([_, value]) => value?.result?.results ?? [])\n .find((resource) => {\n const schema = z.object({\n id: z.string(),\n })\n\n const result = schema.safeParse(resource)\n\n if (result.success)\n return result.data.id === toValue(resourceId)\n\n return false\n })\n\n if (!values)\n return undefined\n\n const resultObj: GetResourceResult<TModelSchema> = {\n result: values,\n success: true,\n }\n\n return resultObj\n },\n enabled,\n ...queryOptionsResolved,\n },\n qc,\n )\n\n const result = computed(() => query.data.value?.result)\n const _app = getCurrentApp()\n\n const resultEnhanced = computed(() => {\n if (!setup || typeof setup !== 'function')\n return undefined\n\n const _query = reactive(query)\n const _result = _query.data\n if (!_app || !_query.isSuccess || !_result || !_result.result)\n return undefined\n const getters = setup(_result.result, {\n ...unwrapLocaleInstance(localeInstance),\n qc,\n queryKey: toValue(queryKey),\n params: {\n id: toValue(resourceId),\n },\n queryParams: {\n ...toValue(additionalParams),\n },\n headers: toValue(headers) || {},\n schema,\n })\n\n return markRaw(getters)\n })\n\n const obj: any = {\n query,\n isSuccess: query.isSuccess,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n result,\n resultEnhanced,\n }\n\n return obj as UseResourceResult<TSetup, TModelSchema>\n }\n\n return useResource\n}\n","import type { SearchParamsBase } from '@piveau/sdk-core'\nimport type { Reffify } from './utils.js'\nimport { reactive, toRefs } from 'vue-demi'\n\n/**\n * Creates reactive query parameters for hub search (excluding `filter` and `facets`)\n */\nexport function useSearchQueryParams(initialValue?: Reffify<SearchParamsBase>) {\n const queryParams = reactive({\n ...{\n aggregation: null,\n aggregationAllFields: null,\n aggregationFields: null,\n autocomplete: null,\n bboxMaxLat: null,\n bboxMaxLon: null,\n bboxMinLat: null,\n bboxMinLon: null,\n boost: null,\n countryData: null,\n dataServices: null,\n facetGroupOperator: null,\n facetOperator: null,\n fields: null,\n filterDistributions: null,\n globalAggregation: null,\n includes: null,\n limit: null,\n maxDate: null,\n minDate: null,\n maxScoring: null,\n minScoring: null,\n page: null,\n q: null,\n scroll: null,\n sort: null,\n showScore: null,\n vocabulary: null,\n superCatalogue: null,\n } satisfies Required<SearchParamsBase>,\n ...initialValue,\n })\n\n function setFacetOperator(operator: SearchParamsBase['facetOperator']) {\n queryParams.facetOperator = operator\n }\n\n function setFacetGroupOperator(operator: SearchParamsBase['facetGroupOperator']) {\n queryParams.facetGroupOperator = operator\n }\n\n function setDataServices(dataServices: SearchParamsBase['dataServices']) {\n queryParams.dataServices = dataServices\n }\n\n function setSuperCatalogue(val: SearchParamsBase['superCatalogue']) {\n queryParams.superCatalogue = val\n }\n\n function setPage(val: SearchParamsBase['page']) {\n queryParams.page = val\n }\n\n function setQuery(val: SearchParamsBase['q']) {\n queryParams.q = val\n }\n\n function setSort(val: SearchParamsBase['sort']) {\n queryParams.sort = val\n }\n\n function setLimit(val: SearchParamsBase['limit']) {\n queryParams.limit = val\n }\n\n function setDatasetGeoBounds({ minLon, minLat, maxLon, maxLat }: { minLon: SearchParamsBase['bboxMinLon'], minLat: SearchParamsBase['bboxMinLat'], maxLon: SearchParamsBase['bboxMaxLon'], maxLat: SearchParamsBase['bboxMaxLat'] }) {\n queryParams.bboxMinLon = minLon\n queryParams.bboxMinLat = minLat\n queryParams.bboxMaxLon = maxLon\n queryParams.bboxMaxLat = maxLat\n }\n\n function setMinScoring(val: SearchParamsBase['minScoring']) {\n queryParams.minScoring = val\n }\n\n function setCountryData(val: SearchParamsBase['countryData']) {\n queryParams.countryData = val\n }\n\n /**\n *\n * @deprecated Use `setCountryData` instead\n */\n function setDataScope(val: SearchParamsBase['countryData']) {\n queryParams.countryData = val\n }\n\n return {\n queryParams: toRefs(queryParams),\n setFacetOperator,\n setFacetGroupOperator,\n setDataServices,\n setSuperCatalogue,\n setPage,\n setQuery,\n setSort,\n setLimit,\n setDatasetGeoBounds,\n setMinScoring,\n setCountryData,\n setDataScope,\n }\n}\n","import { toValue } from '@vueuse/core'\nimport { Fragment, type MaybeRefOrGetter, type Slot, type VNode } from 'vue-demi'\n\n/**\n * Returns the representative locale from the given candidates based on the priority list.\n * If none of the locales in the priority list are found in the candidates, the first candidate is returned.\n * @returns The representative locale.\n *\n * @example\n * ```ts\n * const candidates = ['en-US', 'en-GB', 'en']\n * const preferredLocale = ['en-GB', 'en-US']\n * const representativeLocale = getRepresentativeLocaleOf({ candidates, preferredLocale })\n * console.log(representativeLocale) // 'en-GB'\n * ```\n */\nexport function getRepresentativeLocaleOf({\n candidates = [],\n preferredLocale = [],\n}: {\n candidates: string[]\n preferredLocale?: string | string[] | null\n}) {\n if (candidates.length === 0)\n return ''\n if (!preferredLocale || preferredLocale.length === 0)\n return candidates[0]\n\n const priorityListArray = Array.isArray(preferredLocale) ? preferredLocale : [preferredLocale]\n for (const locale of priorityListArray) {\n if (candidates.includes(locale))\n return locale\n }\n\n return candidates[0]\n}\n\n/**\n * Retrieves the translation for the specified object based on the preferred locale.\n * If the preferred locale is not found, an empty string is returned.\n *\n * @param obj - A record containing key-value pairs where keys represent locale codes and values represent translations.\n * @param preferredLocale - A single locale or an array of locales representing the preference order.\n * @returns The translation string for the most preferred available locale, or an empty string if no match is found.\n *\n * @example\n * ```ts\n * const translations = { 'en': 'Hello', 'fr': 'Bonjour' }\n * const locale = getTranslationFor(translations, ['fr', 'en'])\n * console.log(locale) // 'Bonjour'\n * ```\n */\nexport function getTranslationFor(obj?: Record<string, string> | null, preferredLocale?: string | string[] | null) {\n if (!obj)\n return ''\n const locale = getRepresentativeLocaleOf({ candidates: Object.keys(obj), preferredLocale })\n return locale ? obj[locale] : ''\n}\n\n/**\n * Retrieves a localized value from an object based on the preferred locale.\n * If a translation is not found for the preferred locale, it attempts to use the fallback locale.\n *\n * @returns The translation string for the most preferred available locale, or an empty string if no match is found.\n */\nexport function getLocalizedValue({\n obj,\n fallbackLocale,\n}: {\n obj?: Record<string, string> | null\n fallbackLocale: MaybeRefOrGetter<string>\n}) {\n const localizedValue = getTranslationFor(obj, toValue(fallbackLocale))\n return localizedValue || obj?.[toValue(fallbackLocale)] || ''\n}\n\n/**\n * Type guard that checks if the given value is not null or undefined. Helps with typings when\n * filtering out null or undefined values from an array.\n *\n * @example\n * ```ts\n * const filteredArray = array.filter(nonNullable)\n * ```\n *\n * @param value - The value to check.\n * @returns true if the value is not null or undefined, false otherwise.\n */\nexport function nonNullable<T>(value: T): value is NonNullable<T> {\n // See https://stackoverflow.com/a/58110124\n return value !== null && value !== undefined\n}\n\nexport function isUrl(str: string): boolean {\n try {\n const _url = new URL(str)\n return true\n }\n catch {\n return false\n }\n}\n\n/**\n * Type guard for arrays that checks if all elements are strings.\n *\n */\nexport function isStringArray(x: any[]): x is string[] {\n // See: https://stackoverflow.com/a/68929116\n return x.every(i => typeof i === 'string')\n}\n\n/**\n * Checks if the given value is empty.\n *\n * @param value - The value to check.\n * @returns true if the value is empty, false otherwise.\n *\n * A value is considered empty if it is:\n * - undefined\n * - null\n * - An object with no keys\n * - A string with no content (after trimming)\n */\nexport function isEmpty(value: any): boolean {\n // See: https://stackoverflow.com/a/43233163\n return value === undefined\n || value === null\n || (typeof value === 'object' && Object.keys(value).length === 0)\n || (typeof value === 'string' && value.trim().length === 0)\n}\n\n/**\n * Converts the given value to an array if it is not already an array.\n */\nexport function asArray<T>(arg: T | T[] | null) {\n return Array.isArray(arg) ? arg : arg !== null ? [arg] : []\n}\n\nexport function hasSlotContent(slot: Slot | undefined | null, props: any = {}) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return !isSlotEmpty(slot, props)\n}\n\nexport function isSlotEmpty(slot: Slot | undefined | null, props: any = {}) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return isVNodeEmpty(slot?.(props))\n}\n\nexport function isVNodeEmpty(vnode: VNode | VNode[] | undefined | null) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return (\n !vnode\n || asArray(vnode).every(\n vnode =>\n vnode.type === Comment\n || (vnode.type === Text && !vnode.children?.length)\n || (vnode.type === Fragment && !vnode.children),\n )\n )\n}\n\nexport interface SelectOption {\n label: string\n value: string\n}\n\nexport type SelectOptionList = SelectOption[]\n\nexport interface Facet {\n id: string\n label: string\n value?: string\n count?: number\n}\n\nexport type FacetList<T extends string = string> = {\n id: T\n label: string\n items: Facet[]\n}[]\n","import type { SearchParams, SearchResult, SearchResultFacetGroup } from '@piveau/sdk-core'\nimport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nimport type { ComputedRef, MaybeRef, MaybeRefOrGetter } from 'vue-demi'\nimport type { z } from 'zod'\nimport type { SetupFn } from './index.js'\nimport { keepPreviousData, useQuery } from '@tanstack/vue-query'\nimport { computed, markRaw, reactive, toRefs, toValue, unref } from 'vue-demi'\nimport { unwrapLocaleInstance, useLocale } from './composables/locale.js'\nimport { useSearchQueryParams } from './useSearchQueryParams.js'\nimport { type _UseQueryReturnType, assertQueryClient, type FacetRef, mapToFacetIds, type SearchParamsRef, type SelectedFacetItemList } from './utils.js'\nimport { getTranslationFor } from './utils/helpers.js'\n\nexport type { _UseQueryReturnType } from './utils.js'\nexport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nexport type { Schema } from 'zod'\n\nexport interface SearchResultFacetGroupLocalized {\n id: string\n title: string\n items: {\n id: string\n title: string | undefined\n count: number\n }[]\n}\n\nexport interface UseSearchFactoryParams<\n TFacetNames extends string,\n TIndex extends string = string,\n TModelSchema = any,\n> {\n schema: z.Schema<TModelSchema>\n index: TIndex\n facets?: TFacetNames[]\n enabled?: MaybeRefOrGetter<boolean>\n qc: QueryClient\n fetcherFn: (\n _options: {\n params: SearchParams\n additionalParams?: any\n headers?: Record<string, string>\n }\n ) => Promise<SearchResult<TModelSchema>>\n}\n\nexport interface UseSearchFactoryReturn<\n TFacetNames extends string,\n TModelSchema,\n TSetup,\n> {\n /**\n * The search query object.\n *\n * @see https://tanstack.com/query/latest/docs/framework/vue/reference/useQuery\n */\n query: _UseQueryReturnType<\n SearchResult<TModelSchema>,\n Error\n >\n\n /**\n * The available facets for the current search results.\n */\n getAvailableFacets: ComputedRef<SearchResultFacetGroup[]>\n\n /**\n * The available facets for the current search results with localized titles.\n */\n getAvailableFacetsLocalized: (locale?: MaybeRefOrGetter<string>) => ComputedRef<SearchResultFacetGroupLocalized[]>\n\n /**\n * The search results.\n */\n getSearchResults: ComputedRef<TModelSchema[] | undefined>\n\n getSearchResultsEnhanced: ComputedRef<TSetup[] | undefined>\n\n /**\n * The total number of search results.\n */\n getSearchResultsCount: ComputedRef<number>\n\n /**\n * The total number of pages of search results based on the current limit parameter.\n * If the limit is not set or is less than or equal to 0, this will return `NaN`.\n */\n getSearchResultsPagesCount: ComputedRef<number>\n\n /**\n * Whether the search query is loading.\n */\n isLoading: ComputedRef<boolean>\n\n /**\n * Whether the search query is fetching.\n */\n isFetching: ComputedRef<boolean>\n\n /**\n * Get a facet by its ID.\n */\n getFacetById: <TFacetName extends TFacetNames>(\n facetId: TFacetName\n ) => ComputedRef<SearchResultFacetGroup | undefined>\n\n /**\n * Go to the next page of search results.\n */\n nextPage: () => void\n\n /**\n * Go to the previous page of search results.\n */\n previousPage: () => void\n\n queryParams: SearchParamsRef\n}\n\nexport interface UseSearchParams<TFacetNames extends string> {\n queryParams?: SearchParamsRef\n selectedFacets?: FacetRef<TFacetNames>\n additionalParams?: MaybeRefOrGetter<any>\n headers?: MaybeRefOrGetter<Record<string, string>>\n queryOptions?: {\n staleTime?: MaybeRef<number>\n refetchOnWindowFocus?: MaybeRef<boolean>\n refetchInterval?: MaybeRef<number>\n suspense?: MaybeRef<boolean>\n retry?: MaybeRef<number>\n }\n}\n\nexport function useSearchFactory<\n TSetup extends object,\n TFacetNames extends string,\n TIndex extends string = string,\n TModelSchema = any,\n>(options: UseSearchFactoryParams<TFacetNames, TIndex, TModelSchema>, setup?: SetupFn<TSetup, TModelSchema>): (\n params: UseSearchParams<TFacetNames>\n) => UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup> {\n const useSearch = function ({\n queryParams = {},\n selectedFacets = {},\n additionalParams = {},\n headers = {},\n queryOptions,\n }: UseSearchParams<TFacetNames>) {\n const {\n index,\n schema,\n enabled = true,\n qc,\n fetcherFn,\n } = options\n\n assertQueryClient(qc)\n const localeInstance = useLocale()\n\n const queryOptionsResolved = {\n staleTime: queryOptions?.staleTime ?? 1000 * 60 * 2,\n refetchOnWindowFocus: queryOptions?.refetchOnWindowFocus ?? true,\n refetchInterval: queryOptions?.refetchInterval,\n suspense: queryOptions?.suspense,\n retry: queryOptions?.retry,\n }\n\n const { queryParams: resolvedQueryParams } = useSearchQueryParams(queryParams)\n const reactiveQueryParams = reactive(resolvedQueryParams)\n reactiveQueryParams.limit = reactiveQueryParams.limit || 10\n\n const computedSelectedFacetIds = computed(() => {\n const facets = toValue(selectedFacets)\n const keys = Object.keys(facets) as TFacetNames[]\n const selected = {} as Record<TFacetNames, string[]>\n for (const key of keys) {\n const value = facets[key] as MaybeRef<SelectedFacetItemList>\n selected[key] = mapToFacetIds(unref(value))\n }\n return selected\n })\n\n const queryKey = computed(() => [\n 'pv-resources',\n index,\n reactiveQueryParams,\n unref(computedSelectedFacetIds),\n toValue(additionalParams),\n toValue(headers),\n ])\n\n // NOTE: Explicitly typing the query here to work around a TypeScript bug\n const query: UseQueryReturnType<\n // https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n SearchResult<TModelSchema>,\n Error\n > = useQuery(\n {\n queryKey,\n queryFn: async () =>\n markRaw((await fetcherFn({\n params: {\n ...reactiveQueryParams,\n facets: computedSelectedFacetIds.value,\n },\n additionalParams: toValue(additionalParams),\n headers: toValue(headers),\n }))),\n placeholderData: keepPreviousData,\n enabled,\n ...queryOptionsResolved,\n },\n qc,\n )\n\n const getAvailableFacets = computed<SearchResultFacetGroup[]>(() => {\n if (query.isError.value)\n return []\n\n const facets = query.data?.value?.result.facets\n return facets || []\n })\n\n const getAvailableFacetsLocalized = (locale?: MaybeRefOrGetter<string>) => {\n return computed(() => {\n const resolvedLocale = toValue(locale) || toValue(localeInstance.currentLocale) || 'en'\n const facets = getAvailableFacets.value\n if (!facets)\n return []\n\n return facets.map((facet) => {\n return {\n ...facet,\n items: facet.items.filter(maybeNullishItem => maybeNullishItem !== null && maybeNullishItem !== undefined).map((item) => {\n return {\n ...item,\n title: typeof item.title === 'string'\n ? item.title\n : getTranslationFor(item.title, resolvedLocale),\n }\n }),\n }\n })\n })\n }\n\n const getSearchResults = computed<TModelSchema[] | undefined>(() => {\n if (query.isError.value)\n return undefined\n\n const results = query.data?.value?.result.results\n return results\n })\n\n const getSearchResultsEnhanced = computed<TSetup[]>(() => {\n const searchResultsRaw = getSearchResults.value\n if (!searchResultsRaw || !setup || typeof setup !== 'function')\n return []\n\n const searchResults = searchResultsRaw.map((data) => {\n const maybeGetters = setup(data, {\n ...unwrapLocaleInstance(localeInstance),\n qc,\n queryKey: toValue(queryKey),\n params: {},\n queryParams: {\n ...toValue(reactiveQueryParams),\n ...toValue(additionalParams),\n facets: computedSelectedFacetIds.value,\n },\n headers: toValue(headers),\n schema,\n })\n\n return maybeGetters\n })\n\n return searchResults as TSetup[]\n })\n\n /**\n * The total number of search results.\n */\n const getSearchResultsCount = computed(() => {\n const count = query.data?.value?.result.count\n return count ?? 0\n })\n\n /**\n * The total number of pages of search results based on the current limit parameter.\n * If the limit is not set or is less than or equal to 0, this will return `NaN`.\n */\n const getSearchResultsPagesCount = computed(() => {\n const count = getSearchResultsCount.value\n const limit = reactiveQueryParams.limit\n\n if (!limit || limit <= 0)\n return Number.NaN\n\n return Math.ceil((count ?? 0) / limit)\n })\n\n const isLoading = computed(() => {\n return query.isLoading.value\n })\n\n const isFetching = computed(() => {\n return query.isFetching.value\n })\n\n function getFacetById<TFacetName extends TFacetNames>(facetId: TFacetName) {\n return computed(() => {\n const facets = query.data?.value?.result.facets\n\n if (!facets)\n return undefined\n\n const facet = facets?.find(f => f.id === facetId)\n\n if (!facet)\n return undefined\n\n return {\n ...facet,\n id: facetId,\n }\n })\n }\n\n function nextPage() {\n reactiveQueryParams.page = (reactiveQueryParams.page || 0) + 1\n }\n\n function previousPage() {\n reactiveQueryParams.page = Math.max(\n (reactiveQueryParams.page || 0) - 1,\n 0,\n )\n }\n\n const returnObject: UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup> = {\n query,\n getAvailableFacets,\n getSearchResults,\n getSearchResultsCount,\n getSearchResultsPagesCount,\n isLoading,\n isFetching,\n getAvailableFacetsLocalized,\n getFacetById,\n nextPage,\n previousPage,\n queryParams: toRefs(reactiveQueryParams),\n getSearchResultsEnhanced,\n }\n\n return returnObject\n }\n\n return useSearch\n}\n","import type { GetResourceByIdParams, SearchParams, SearchParamsBase, SearchResult } from '@piveau/sdk-core'\nimport type { QueryClient } from '@tanstack/vue-query'\nimport type { MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { ZodSchema } from 'zod'\nimport type { UnwrappedLocaleInstance } from './composables/locale.js'\nimport type { UseSearchFactoryReturn, UseSearchParams } from './index.js'\nimport type { UseResourceFunction } from './useResourceFactory.js'\nimport type { RefSyncedWithRouteQueryFacetFn, RefSyncedWithRouteQueryFn } from './utils/types.js'\nimport { getResourceById, searchResource } from '@piveau/sdk-core'\nimport { useRouteQuery } from '@vueuse/router'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useQueryClient } from './index.js'\nimport { useResourceFactory } from './useResourceFactory.js'\nimport { useSearchFactory } from './useSearchFactory.js'\nimport { assertQueryClient } from './utils.js'\n\nexport interface DefineHubSearchOptions<\n TIndex extends string,\n TFacetNames extends string,\n TModelSchema,\n> {\n baseUrl: string\n index: TIndex\n indexDetails?: string\n enabled?: MaybeRefOrGetter<boolean>\n schema: ZodSchema<TModelSchema>\n facets?: TFacetNames[]\n defaultOptions?: {\n searchFetcherFn?: () => Promise<SearchResult<TModelSchema>>\n resourceFetcherFn?: () => Promise<SearchResult<TModelSchema>>\n qc?: QueryClient\n }\n}\n\nexport type SetupContext<TModelSchema = any> = {\n qc?: QueryClient\n queryKey?: string[]\n params?: Record<string, string>\n queryParams?: Record<string, any>\n headers?: Record<string, string>\n schema?: ZodSchema<TModelSchema>\n} & UnwrappedLocaleInstance\n\nexport type SetupFn<TSetup extends object, TModelSchema = any> = (data: TModelSchema, ctx: SetupContext<TModelSchema>) => TSetup\nexport type ResolvedSetupFn<TSetup extends object, TModelSchema = any> = (data: TModelSchema) => TSetup\n\nexport function defineHubSearch<\n TIndex extends string,\n TFacetNames extends string,\n TModelSchema,\n TSetup extends object,\n>(\n options: DefineHubSearchOptions<TIndex, TFacetNames, TModelSchema>,\n setup?: SetupFn<TSetup, TModelSchema>,\n): HubSearchDefinition<TFacetNames, TModelSchema, TSetup> {\n const {\n baseUrl,\n index,\n indexDetails,\n schema,\n facets = [],\n defaultOptions = {},\n enabled = true,\n } = options\n\n async function defaultFetcherFn(_opts: {\n\n params: SearchParams\n additionalParams?: any\n headers?: Record<string, string>\n }) {\n const res = await searchResource<SearchResult<TModelSchema>>({\n baseUrl,\n params: {\n ..._opts.params,\n filter: index,\n },\n additionalParams: _opts.additionalParams,\n headers: _opts.headers,\n })\n\n return res.data\n }\n\n const {\n qc = useQueryClient(),\n searchFetcherFn = defaultFetcherFn,\n } = defaultOptions\n\n assertQueryClient(qc)\n\n const useSearch = useSearchFactory({\n schema,\n facets,\n index,\n fetcherFn: searchFetcherFn,\n enabled,\n qc,\n }, setup)\n\n const useResource = useResourceFactory({\n schema,\n baseUrl,\n index: indexDetails ?? index,\n enabled,\n fetcherFn: async (_options: GetResourceByIdParams) => {\n return getResourceById<TModelSchema>(_options)\n },\n qc,\n }, setup)\n\n const refSyncedWithRouteQuery: RefSyncedWithRouteQueryFn = <\n T extends string | number,\n K = T extends string ? string : T extends number ? number : never,\n >(\n searchParam: keyof SearchParamsBase,\n defaultValue?: MaybeRefOrGetter<T>,\n ): Ref<K> => {\n const route = useRoute()\n const router = useRouter()\n return useRouteQuery(searchParam, defaultValue, {\n router,\n route,\n mode: 'push',\n })\n }\n\n const refSyncedWithRouteQueryFacet: RefSyncedWithRouteQueryFacetFn<TFacetNames> = <T extends string[]>(\n searchParam: TFacetNames,\n defaultValue?: MaybeRefOrGetter<T>,\n ) => {\n const route = useRoute()\n const router = useRouter()\n return useRouteQuery<T, string[]>(searchParam, defaultValue, {\n // always transform the value to an array\n transform: (value) => {\n if (Array.isArray(value))\n return value\n\n if (typeof value === 'string')\n return [value]\n\n return []\n },\n router,\n route,\n mode: 'push',\n })\n }\n\n return {\n useSearch,\n useResource,\n refSyncedWithRouteQuery,\n refSyncedWithRouteQueryFacet,\n setup,\n }\n}\n\nexport interface HubSearchDefinition<\n TFacetNames extends string,\n TModelSchema,\n TSetup extends object,\n> {\n useSearch: (params: UseSearchParams<TFacetNames>) => UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup>\n useResource: UseResourceFunction<TSetup, TModelSchema>\n refSyncedWithRouteQuery: RefSyncedWithRouteQueryFn\n refSyncedWithRouteQueryFacet: RefSyncedWithRouteQueryFacetFn<TFacetNames>\n setup?: SetupFn<TSetup, TModelSchema>\n}\n\nexport type HubSearchIntegrationOptions<TModelSchema> = DefineHubSearchOptions<string, string, TModelSchema>\nexport function defineHubSearchIntegration<TModelSchema, TSetup extends object>(schema: ZodSchema<TModelSchema>, setup: SetupFn<TSetup, TModelSchema>) {\n return { setup, schema }\n}\n","import type { SelectNodesOptions } from '../../index.js'\n\nimport { SchemaDataset } from '@piveau/sdk-core'\nimport { defineHubSearchIntegration, getPropertyTableDataset, getPropertyTableDistribution } from '../../index.js'\nimport { getTranslationFor, nonNullable } from '../../utils/helpers.js'\n\nexport interface DcatApDatasetParams {\n datasetProperties?: SelectNodesOptions\n distributionProperties?: SelectNodesOptions\n}\n\n// todo: must import ZodObject type or else build gets error\n// \"node_modules/zod/lib/types.js\" is imported by \"src/integrations/dcatAp/dcatAp.ts\", but could not be resolved – treating it as an external dependency.\n/** @private */\nexport type { ZodObject as _ZodObject } from 'zod'\n\n/**\n * Integration dcat-ap datasets.\n * It contains computed getters for dcat-ap properties and opinionated computed getters for common use cases\n *\n */\nexport function dcatApDataset(options?: DcatApDatasetParams) {\n const { datasetProperties, distributionProperties } = options || {}\n\n return defineHubSearchIntegration(SchemaDataset, (_dataset, localeInstance) => {\n const { d, currentLocale, fallbackLocale } = localeInstance\n const ds = _dataset\n\n /**\n * Returns the id of the dataset\n */\n const getId = ds.id\n\n /**\n * Returns the localized title of the dataset\n */\n const getTitle = getTranslationFor(ds.title, [currentLocale, fallbackLocale])\n\n const getFormats = [...new Set(ds.distributions?.map(d => d.format?.id || d.format?.label || d.format?.resource).filter(nonNullable))]\n\n const getLicenses = [...new Set(ds.distributions?.flatMap(d => d.license?.label || d.license?.id || d.license?.resource).filter(nonNullable))]\n\n const getIssued = ds.issued ? d(ds.issued, 'medium') : undefined\n\n const getCreated = getIssued\n\n const getModified = ds.modified ? d(ds.modified, 'medium') : undefined\n\n /**\n * Returns the localized description of the dataset\n */\n const getDescription = getTranslationFor(ds.description, [currentLocale, fallbackLocale])\n\n const getCategories = ds.categories || []\n\n const getPublisher = ds.publisher\n\n const { getPropertyTable: _propertyTableDataset } = getPropertyTableDataset({ data: ds, localeInstance, selectProperties: datasetProperties })\n\n const getDistributions = () => {\n if (!ds || !ds.distributions)\n return []\n\n const dist = ds.distributions?.map((dist) => {\n return {\n /**\n * The ID of the distribution\n */\n id: dist.id,\n\n /** The localized title of the distribution */\n title: dist.title\n ? getTranslationFor(dist.title, [currentLocale, fallbackLocale])\n : '',\n\n /**\n * The localized description of the distribution\n */\n description: dist.description\n ? getTranslationFor(dist.description, [currentLocale, fallbackLocale])\n : '',\n\n /**\n * The format of the distribution\n * Fallback order: label, id, resource\n */\n format: dist.format?.label || dist.format?.id || dist.format?.resource || '',\n\n /**\n * The modified date of the distribution\n */\n modified: dist.modified ? d(dist.modified) : undefined,\n\n /**\n * The license of the distribution\n */\n license: dist.license || undefined,\n created: dist.issued ? d(dist.issued) : undefined,\n issued: dist.issued ? d(dist.issued) : undefined,\n languages: dist.language?.map(language => language?.label).filter(nonNullable) || [],\n accessUrls: dist.access_url || [],\n downloadUrls: dist.download_url || [],\n\n /**\n * Opinionated recursive property table\n */\n getPropertyTable: getPropertyTableDistribution({ data: dist, localeInstance, selectProperties: distributionProperties }),\n }\n }) || []\n\n return dist\n }\n\n return {\n getId,\n getTitle,\n getDescription,\n getCategories,\n getPublisher,\n getFormats,\n getLicenses,\n getIssued,\n getCreated,\n getModified,\n getDistributions: getDistributions(),\n getPropertyTable: _propertyTableDataset,\n getPropertyTable2: _propertyTableDataset,\n }\n })\n}\n","import type { Resource } from '@piveau/sdk-core'\nimport { z } from 'zod'\nimport { isEmpty, nonNullable } from './helpers.js'\n\n/** @public */\nexport interface PropertyTableEntryBase {\n id: string\n}\n\n// export interface PropertyTableEntry {\n// label: string\n// id: string\n// data: PropertyTableRow\n// }\n\n/** @public */\nexport interface PropertyTableCellHref {\n label: string\n href: string\n}\n\n/** @public */\nexport interface PropertyTableCellContact {\n type: 'adress'\n name: string\n address: string\n telephone: string\n email: string\n organization: string\n}\n\n/** @public */\nexport type PropertyTableCell = string | number\n\n/** @public */\nexport interface PropertyTableEntryNode extends PropertyTableEntryBase {\n type: 'node'\n label: string\n help?: string\n isRoot?: boolean\n data?: PropertyTableEntry[]\n\n /** @private */\n __processed?: boolean\n}\n\n/** @public */\nexport interface PropertyTableRoot extends PropertyTableEntryNode {\n type: 'node'\n isRoot: true\n data?: PropertyTableEntry[]\n}\n\n/** @public */\nexport interface PropertyTableEntryNodeSimplified extends PropertyTableEntryBase {\n data: PropertyTableEntrySimplified | PropertyTableEntrySimplified[]\n}\n\n/** @public */\nexport interface PropertyTableEntryValue extends PropertyTableEntryBase {\n type: 'value'\n badge?: string\n data: PropertyTableCell[] | PropertyTableCell\n}\n\n/** @public */\nexport interface PropertyTableEntryHref extends PropertyTableEntryBase {\n type: 'href'\n badge?: string\n data: PropertyTableCellHref | PropertyTableCellHref[]\n}\n\n/** @public */\nexport interface PropertyTableLeafValue extends PropertyTableEntryBase {\n type: 'value'\n badge?: string\n data: string\n}\n\n/** @public */\nexport interface PropertyTableLeafHref extends PropertyTableEntryBase {\n type: 'href'\n badge?: string\n data: { href: string, label?: string }\n}\n\n/** @public */\nexport type PropertyTableEntryLeaf = PropertyTableLeafValue | PropertyTableLeafHref\n\n/** @public */\nexport type PropertyTableEntry = PropertyTableEntryNode | PropertyTableEntryLeaf\n\n/** @public */\nexport type PropertyTableEntrySimplified = undefined | null | string | string[] | PropertyTableEntry | DefinePropertyNodeOptions & {\n type: 'node'\n}\n\n/** @public */\nexport type PropertyTableProps = PropertyTableEntry[]\n\n/** @public */\nexport interface DefinePropertyNodeOptions {\n id: string\n label?: string\n help?: string\n data?: PropertyTableEntrySimplified | PropertyTableEntrySimplified[] | null\n __processed?: boolean\n}\n\n/** @public */\nexport interface DefinePropertyNodeGeneralOptions {\n compact?: boolean\n debug?: boolean\n maxDepth?: number\n}\n\n/** @public */\nexport function definePropertyNode(nodeOptions: DefinePropertyNodeOptions, options?: DefinePropertyNodeGeneralOptions): PropertyTableEntryNode {\n const {\n id: _id,\n label: _label,\n help: _help,\n data: _data,\n } = nodeOptions\n\n const {\n compact = false,\n maxDepth = 10,\n } = options || {}\n\n const resolvedPropertyNode: PropertyTableEntryNode = {\n type: 'node',\n id: _id,\n label: _label || _id,\n help: _help,\n data: [{ type: 'value', id: `${_id}_value`, data: '' }],\n __processed: true,\n }\n\n if (!_data || maxDepth <= 0)\n return { ...resolvedPropertyNode, ...compact ? { data: undefined } : {} }\n\n if (compact && isEmpty(_data))\n return { ...resolvedPropertyNode, data: undefined }\n\n const dataAsArray = Array.isArray(_data) ? _data : [_data]\n const normalizedData: (PropertyTableEntry | undefined)[] = dataAsArray.map((entry) => {\n if (!entry)\n return compact ? undefined : { type: 'value', id: `${_id}_value`, data: '' }\n\n if (typeof entry === 'string' || Array.isArray(entry)) {\n return compact && !entry || isEmpty(entry) || (Array.isArray(entry) && entry.every(e => !e))\n ? undefined\n : definePropertyValue({ id: `${_id}_value`, data: entry })\n }\n\n if (entry.type === 'node') {\n const resolvedData = compact && (!entry.data || isEmpty(entry.data))\n ? undefined\n : entry.data\n\n // Skip recursive processing if the entry has already been processed, i.e\n // nested definePropertyNode calls.\n const child = entry.__processed\n ? { ...entry } as PropertyTableEntryNode\n : definePropertyNode({\n id: entry.id,\n label: entry.label,\n help: entry.help,\n data: resolvedData,\n }, {\n ...options,\n maxDepth: maxDepth - 1,\n })\n\n return compact && (!child.data || isEmpty(child.data))\n ? undefined\n : child\n }\n\n return entry\n })\n\n const cleanedData = normalizedData.filter(nonNullable)\n if (compact && isEmpty(cleanedData))\n return { ...resolvedPropertyNode, data: undefined }\n\n return {\n ...resolvedPropertyNode,\n data: cleanedData,\n }\n}\n\n/** @public */\nexport function definePropertyNodeCompact(nodeOptions: DefinePropertyNodeOptions, options?: Omit<DefinePropertyNodeGeneralOptions, 'compact'>): PropertyTableEntryNode {\n return definePropertyNode(nodeOptions, { ...options, compact: true })\n}\n\n/** @public */\nexport interface DefinePropertyValueOptions {\n id?: string\n data?: string | string[]\n}\n\n/** @public */\nexport function definePropertyValue(propertyOptions: DefinePropertyValueOptions): PropertyTableEntryLeaf {\n const { id: _id, data: _data } = propertyOptions\n\n if (typeof _data === 'string') {\n // auto resolve URL\n try {\n const _url = z.string().url().parse(_data)\n return { type: 'href', id: `${_id}`, data: { label: _data.startsWith('mailto:') ? _data.slice(7) : _data, href: _data } }\n }\n // eslint-disable-next-line unused-imports/no-unused-vars\n catch (e) {}\n\n return { type: 'value', id: `${_id}`, data: _data }\n }\n\n throw new Error(`[pv-kit] Invalid data type: ${_data}`)\n}\n\n/**\n * Parses a Resource object to a PropertyTableEntry.\n * Determines the type of entry based on the presence of a resource URL.\n * If the resource URL exists, it returns an entry of type 'href'.\n * Otherwise, it returns an entry of type 'value'.\n *\n * @param obj - The Resource object to be parsed.\n * @param id - An optional string used as a fallback for the entry's id.\n * @returns A PropertyTableEntry object with type 'href' or 'value', or undefined if the input object is invalid.\n * @public\n */\nexport function parseResource(obj?: Resource | null, id?: string): PropertyTableEntryLeaf | undefined {\n if (!obj || (!obj.id && !obj.resource && !obj.label))\n return undefined\n\n return obj?.resource\n ? {\n type: 'href',\n id: obj?.id || id || '',\n data: { href: obj?.resource || '', label: obj?.label || obj?.id || obj?.resource || '' },\n }\n : {\n type: 'value',\n id: obj?.id || id || '',\n data: obj?.label || obj?.id || obj?.resource || '',\n }\n}\n\n/**\n * Parses an array of Resource objects to an array of PropertyTableEntry objects.\n * It applies the parseResource function to each element and filters out any undefined values.\n *\n * @param obj - The array of Resource objects to be parsed.\n * @param id - An optional string used as a fallback for the entry's id.\n * @returns An array of PropertyTableEntry objects with type 'href' or 'value'.\n * @public\n */\nexport function parseResourceList(obj?: Resource[] | null, id?: string): PropertyTableEntryLeaf[] {\n if (!obj)\n return []\n return obj.map((resource, idx) => parseResource(resource, `${id}@${idx}`)).filter(nonNullable)\n}\n\n/** @public */\nexport function parseUrl(url?: string | null, id?: string): PropertyTableLeafHref | undefined {\n if (!url)\n return\n\n // check if url is valid\n try {\n const _ = new URL(url)\n }\n catch (e) {\n console.warn(`[pv-kit] Invalid URL: ${url}`, e)\n return\n }\n\n return {\n type: 'href',\n id: id || url,\n data: { href: url, label: url },\n }\n}\n\n/** @public */\nexport function parseUrlList(urls?: string[] | null): PropertyTableLeafHref[] {\n if (!urls)\n return []\n return urls.map(url => parseUrl(url)).filter(nonNullable)\n}\n\nexport interface SelectNodesOptions {\n select?: string[]\n discardUnused?: boolean\n}\n\n/** @public */\nexport interface SelectNodesByIdParams extends SelectNodesOptions {\n nodes: PropertyTableEntryNode[]\n}\n/**\n * Selects nodes by their id from a list of nodes.\n *\n * The function returns a new list of nodes that is sorted according to the order of their ids in the `select` array and does not contain any nodes that are not in the `select` array.\n *\n * @returns A new list of nodes that is sorted and filtered according to the options.\n * @public\n */\nexport function selectNodesById(options: SelectNodesByIdParams): PropertyTableEntryNode[] {\n const { select, discardUnused, nodes: _nodes } = options\n let nodes = [..._nodes]\n if (select) {\n if (discardUnused) {\n nodes = nodes.filter((entry) => {\n return select.includes(entry.id)\n })\n }\n\n nodes = nodes.sort((a, b) => {\n const scoreA = select.indexOf(a.id)\n const scoreB = select.indexOf(b.id)\n\n if (scoreA === scoreB)\n return 0\n\n if (scoreA === -1)\n return 1\n\n if (scoreB === -1)\n return -1\n\n return scoreA - scoreB\n })\n }\n return nodes\n}\n","import type { Dataset, Distribution } from '@piveau/sdk-core'\nimport { toRef, toValue } from 'vue-demi'\nimport type { UnwrappedLocaleInstance } from '../../composables/locale.js'\nimport type { PropertyTableEntryNode, SelectNodesOptions } from '../../utils/propertyTable.js'\nimport { parseResource, parseResourceList, parseUrl, definePropertyNodeCompact as pn, selectNodesById } from '../../utils/propertyTable.js'\nimport { getTranslationFor } from '../../utils/helpers.js'\n\nexport interface GetPropertyTableBase<T> {\n data: T\n localeInstance: UnwrappedLocaleInstance\n selectProperties?: SelectNodesOptions\n}\n\nexport interface GetPropertyTableDatasetParams extends GetPropertyTableBase<Dataset> {}\nexport interface GetPropertyTableDistributionParams extends GetPropertyTableBase<Distribution> {}\n\nexport function getPropertyTableDataset(options: GetPropertyTableDatasetParams) {\n const { data: dataset, localeInstance, selectProperties } = options\n\n const {\n t,\n d,\n currentLocale: _currentLocale,\n fallbackLocale: _fallbackLocale,\n } = localeInstance\n\n const ds = dataset\n const currentLocale = _currentLocale\n const fallbackLocale = _fallbackLocale\n\n const getPropertyTable: () => PropertyTableEntryNode[] = () => {\n const created = pn({ id: 'created', label: t('__pv.metadata.created'), help: t('__pv.tooltip.datasetDetails.created'), data: ds.issued ? d(ds.issued ?? '', 'medium') : undefined })\n const modified = pn({ id: 'modified', label: t('__pv.metadata.modificationDate'), help: t('__pv.tooltip.datasetDetails.updated'), data: ds.modified ? d(ds.modified ?? '', 'medium') : undefined })\n const landingPage = pn({ id: 'landingPage', label: t('__pv.metadata.landingPage'), help: t('__pv.tooltip.datasetDetails.landingPage'), data: parseResourceList(ds.landing_page, 'landingPageVal') })\n // const sources = pn({ id: 'sources', label: t('__pv.metadata.sources'), help: t('__pv.tooltip.datasetDetails.sources'), data: dataset.source })\n const languages = pn({ id: 'languages', label: t('__pv.metadata.languages'), help: t('__pv.metadata.languages'), data: parseResourceList(ds.language) })\n const publisher = pn({ id: 'publisher', label: t('__pv.metadata.publisher'), help: t('__pv.tooltip.datasetDetails.publisher'), data: [\n pn({ id: 'publisherName', label: t('__pv.metadata.name'), help: t('__pv.metadata.tooltipPublisherName'), data: ds.publisher?.name }),\n pn({ id: 'publisherHomepage', label: t('__pv.metadata.homepage'), help: t('__pv.metadata.tooltipPublisherHomepage'), data: parseUrl(ds.publisher?.homepage) }),\n pn({ id: 'publisherEmail', label: t('__pv.metadata.email'), data: ds.publisher?.email }),\n ] })\n const contactPointItems = ds.contact_point\n ? ds.contact_point.map((contactPoint) => {\n return pn({ id: 'contactPoint', label: contactPoint.name || contactPoint.organisation_name || '', data: [\n pn({ id: 'contactPointName', label: t('__pv.metadata.name'), data: contactPoint.name }),\n pn({ id: 'contactPointOrganization', label: t('__pv.metadata.organizationName'), data: contactPoint.organisation_name }),\n pn({ id: 'contactPointEmail', label: t('__pv.metadata.email'), data: contactPoint.email }),\n pn({ id: 'contactPointTelephone', label: t('__pv.metadata.telephone'), data: contactPoint.telephone }),\n pn({ id: 'contactPointAddressCity', label: t('__pv.metadata.address'), data: contactPoint.address }),\n pn({ id: 'contactPointUrl', label: t('__pv.metadata.url'), data: contactPoint.url }),\n ] })\n })\n : []\n const contactPoint = pn({ id: 'contactPoint', label: t('__pv.metadata.contactPoints'), help: t('__pv.tooltip.contactPoints'), data: contactPointItems })\n const catalogRecord = pn({ id: 'catalogRecord', label: t('__pv.metadata.catalogRecord'), help: t('__pv.tooltip.catalogRecord'), data: [\n `${t('__pv.metadata.created')} ${d(ds.catalog_record?.issued ?? '', 'medium')}`,\n `${t('__pv.metadata.modificationDate')} ${d(ds.catalog_record?.modified ?? '', 'medium')}`,\n ] })\n const conformsTo = pn({ id: 'conformsTo', label: t('__pv.metadata.conformsTo'), help: t('__pv.tooltip.datasetDetails.conformsTo'), data: parseResourceList(ds.conforms_to) })\n const provenance = pn({ id: 'provenance', label: t('__pv.metadata.provenances'), help: t('__pv.tooltip.datasetDetails.provenance'), data: parseResourceList(ds.provenance) })\n const identifiers = pn({ id: 'identifiers', label: t('__pv.metadata.identifiers'), help: t('__pv.metadata.identifiers'), data: ds.identifier })\n const admsIdentifierItems = ds.adms_identifier\n ? ds.adms_identifier.map((adms) => {\n return pn({ id: 'admsIdentifier', label: '', data: [\n `${t('__pv.metadata.identifier')} ${adms.identifier}`,\n `${t('__pv.metadata.scheme')} ${adms.scheme}`,\n ] })\n })\n : []\n const admsIdentifiers = pn({ id: 'admsIdentifiers', label: t('__pv.metadata.otherIdentifiers'), help: t('__pv.tooltip.datasetDetails.otherIdentifier'), data: admsIdentifierItems })\n const resource = pn({ id: 'resource', label: t('__pv.metadata.resource'), help: t('__pv.tooltip.datasetDetails.relatedResource'), data: ds.resource })\n const accessRight = pn({ id: 'accessRight', label: t('__pv.metadata.accessRights'), data: parseResource(ds.access_right) })\n const accrualPeriodicity = pn({ id: 'accrualPeriodicity', label: t('__pv.metadata.accrualPeriodicity'), data: parseResource(ds.accrual_periodicity) })\n const hasVersion = pn({ id: 'hasVersion', label: t('__pv.metadata.hasVersion'), help: t('__pv.tooltip.datasetDetails.hasVersion'), data: ds.has_version })\n const isVersionOf = pn({ id: 'isVersionOf', label: t('__pv.metadata.isVersionOf'), data: ds.is_version_of })\n const temporal = pn({ id: 'temporal', label: t('__pv.metadata.temporal'), data: ds.temporal && ds.temporal.map(t =>\n `${d(t.gte, 'medium')} - ${d(t.lte, 'medium')}`,\n ) })\n const versionInfo = pn({ id: 'version', label: t('__pv.metadata.versionInfo'), help: t('__pv.tooltip.datasetDetails.versionInfo'), data: ds.version_info })\n const versionNotes = pn({ id: 'versionNotes', label: t('__pv.metadata.versionNotes'), help: t('__pv.tooltip.datasetDetails.versionNotes'), data: getTranslationFor(ds.version_notes, [currentLocale, fallbackLocale]) })\n const isReferencedBy = pn({ id: 'isReferencedBy', label: t('__pv.metadata.isReferencedBy'), help: t('__pv.tooltip.datasetDetails.isReferencedBy'), data: ds.is_referenced_by })\n const qualifiedRelationItems = ds.qualified_relation\n ? ds.qualified_relation.map((relation) => {\n return pn({ id: 'qualifiedRelation', label: '', data: [\n `${t('__pv.metadata.relation')} ${relation.relation}`,\n `${t('__pv.metadata.role')} ${relation.had_role}`,\n ] })\n })\n : []\n const qualifiedRelation = pn({ id: 'qualifiedRelation', label: t('__pv.metadata.qualifiedRelation'), help: t('__pv.tooltip.datasetDetails.qualifiedRelation'), data: qualifiedRelationItems })\n const sample = pn({ id: 'sample', label: t('__pv.metadata.sample'), help: t('__pv.tooltip.datasetDetails.sample'), data: ds.sample })\n const type = pn({ id: 'type', label: t('__pv.metadata.type'), help: t('__pv.tooltip.datasetDetails.type'), data: parseResource(ds.type) })\n const temporalResolution = pn({ id: 'temporalResolution', label: t('__pv.metadata.temporalResolution'), help: t('__pv.tooltip.datasetDetails.temporalResolution'), data: ds.temporal_resolution })\n\n const table: PropertyTableEntryNode[] = [\n created,\n modified,\n landingPage,\n // sources,\n languages,\n publisher,\n contactPoint,\n catalogRecord,\n conformsTo,\n provenance,\n identifiers,\n admsIdentifiers,\n resource,\n accessRight,\n accrualPeriodicity,\n hasVersion,\n isVersionOf,\n temporal,\n versionInfo,\n versionNotes,\n isReferencedBy,\n qualifiedRelation,\n sample,\n type,\n temporalResolution,\n ]\n return table\n }\n\n return {\n getPropertyTable: selectProperties?.select\n ? selectNodesById({ select: selectProperties.select, discardUnused: selectProperties.discardUnused, nodes: getPropertyTable() })\n : getPropertyTable(),\n }\n}\n\nexport function getPropertyTableDistribution(options: GetPropertyTableDistributionParams) {\n const { data: distribution, localeInstance } = options\n const {\n t,\n d,\n n,\n currentLocale: _currentLocale,\n fallbackLocale: _fallbackLocale,\n } = localeInstance\n\n const getPropertyTable = () => {\n if (!distribution)\n return []\n\n const di = distribution\n\n const propertyTable: PropertyTableEntryNode[] = [\n pn({ id: 'license', label: t('__pv.metadata.license'), help: t('__pv.tooltip.datasetDetails.distributions.licence'), data: [\n { type: 'href', id: 'licenseVal', data: { href: di.license?.resource || '', label: di.license?.label || di.license?.description || di.license?.id || '' } },\n ] }),\n pn({ id: 'modified', label: t('__pv.metadata.modificationDate'), help: t('__pv.tooltip.datasetDetails.updated'), data: di.modified ? d(di.modified, 'medium') : undefined }),\n pn({ id: 'created', label: t('__pv.metadata.created'), help: t('__pv.tooltip.datasetDetails.distributions.created'), data: di.issued ? d(di.issued, 'medium') : undefined }),\n pn({ id: 'languages', label: t('__pv.metadata.languages'), help: t('__pv.tooltip.datasetDetails.language'), data: parseResourceList(di.language || []) }),\n pn({ id: 'status', label: t('__pv.metadata.status'), help: t('__pv.tooltip.datasetDetails.distributions.status'), data: parseResource(di.status) }),\n pn({ id: 'rights', label: t('__pv.metadata.rights'), help: t('__pv.tooltip.datasetDetails.distributions.rights'), data: parseResource(di.rights) }),\n pn({ id: 'mediaType', label: t('__pv.metadata.mediaType'), help: t('__pv.tooltip.datasetDetails.distributions.mediaType'), data: di.media_type }),\n pn({ id: 'byteSize', label: t('__pv.metadata.byteSize'), help: t('__pv.tooltip.datasetDetails.distributions.byteSize'), data: di.byte_size ? n(di.byte_size) : undefined }),\n pn({ id: 'pages', label: t('__pv.metadata.pages'), help: t('__pv.metadata.pages'), data: di.page?.map(p => p?.resource) }),\n pn({ id: 'compressFormat', label: t('__pv.metadata.compressFormat'), help: t('__pv.tooltip.datasetDetails.distributions.compressFormat'), data: parseResource(di.compress_format) }),\n pn({ id: 'packageFormat', label: t('__pv.metadata.packageFormat'), help: t('__pv.tooltip.datasetDetails.distributions.packageFormat'), data: parseResource(di.package_format) }),\n pn({ id: 'conformsTo', label: t('__pv.metadata.conformsTo'), help: t('__pv.tooltip.datasetDetails.conformsTo'), data: parseResourceList(di.conforms_to || []) }),\n ]\n return propertyTable\n }\n\n return getPropertyTable()\n}\n","import type { App, InjectionKey } from 'vue-demi'\nimport { QueryClient } from '@tanstack/vue-query'\nimport { inject, isVue2 } from 'vue-demi'\nimport { localeKey, type LocaleOptions } from './composables/locale.js'\nimport { defaultLocaleAdapter } from './locale/adapters/default.js'\n\nexport interface PiveauKitPluginOptions {\n queryClient?: QueryClient\n locale?: LocaleOptions\n}\n\nexport const keyQueryClient = Symbol('') as InjectionKey<QueryClient>\n\nlet _app: App | undefined\n\nexport function getCurrentApp() {\n return _app\n}\n\nexport const plugin = {\n install(app: App, options: PiveauKitPluginOptions = {}) {\n _app = app\n const {\n queryClient = new QueryClient(),\n locale,\n } = options || {}\n\n if (isVue2) { throw new Error('Vue 2 is not supported') }\n else {\n const resolvedLocale = locale?.adapter ?? defaultLocaleAdapter(locale)\n app.provide(keyQueryClient, queryClient)\n app.provide(localeKey, resolvedLocale)\n }\n },\n}\n\nexport function useQueryClient() {\n const maybeQueryClient = inject(keyQueryClient, null)\n return maybeQueryClient\n}\n\n/** @alias */\nexport const piveauKitPlugin = plugin\nexport * from './composables/intex.js'\nexport * from './defineHubSearch.js'\nexport * from './integrations/index.js'\n// export * from './createUseResourceSearch.js'\nexport * from './useResourceFactory.js'\nexport * from './useSearchFactory.js'\nexport * from './utils/index.js'\n\n// export { createUseDcatApSearch } from './integrations/dcat-ap/dataset.js'\n"],"names":["schema","result","toValue","vnode","d","dist","pn","contactPoint","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/composables/locale.ts","../src/locale/adapters/default.ts","../src/utils.ts","../src/useResourceFactory.ts","../src/useSearchQueryParams.ts","../src/utils/helpers.ts","../src/useSearchFactory.ts","../src/defineHubSearch.ts","../src/integrations/dcatAp/dcatAp.ts","../src/utils/propertyTable.ts","../src/integrations/dcatAp/properties.ts","../src/index.ts"],"sourcesContent":["import type { InjectionKey, MaybeRefOrGetter } from 'vue-demi'\nimport { inject, toValue } from 'vue-demi'\n\nexport interface LocaleMessages {\n [key: string]: LocaleMessages | string\n}\n\nexport type DateFormats = 'short' | 'medium' | 'long'\nexport type DateLike = Date | string | number\nexport type DateFormatStrings = {\n [key in DateFormats]?: string\n}\n\nexport interface LocaleInstance {\n name: string\n messages: MaybeRefOrGetter<LocaleMessages>\n currentLocale: MaybeRefOrGetter<string>\n fallbackLocale: MaybeRefOrGetter<string>\n setLocale: (locale: MaybeRefOrGetter<string>) => void\n t: (key: string, ...params: unknown[]) => string\n n: (value: number) => string\n d: (value: DateLike, format?: DateFormats, locale?: Intl.LocalesArgument) => string\n}\n\nexport interface UnwrappedLocaleInstance extends LocaleInstance {\n messages: LocaleMessages\n currentLocale: string\n fallbackLocale: string\n}\n\nexport interface LocaleOptions {\n messages?: LocaleMessages\n locale?: string\n fallback?: string\n dateFormatStrings?: DateFormatStrings\n adapter?: LocaleInstance\n}\n\nexport function unwrapLocaleInstance(instance: LocaleInstance): UnwrappedLocaleInstance {\n return {\n ...instance,\n messages: toValue(instance.messages),\n currentLocale: toValue(instance.currentLocale),\n fallbackLocale: toValue(instance.fallbackLocale),\n }\n}\n\nexport function useLocaleUnwrapped() {\n return unwrapLocaleInstance(useLocale())\n}\n\nexport const localeKey = Symbol('locale') as InjectionKey<LocaleInstance>\nexport function useLocale() {\n const locale = inject(localeKey)\n\n if (!locale)\n throw new Error('[piveau-kit] Could not inject locale instance. Did you forget to install the `@piveau/sdk-vue` plugin?')\n\n return locale\n}\n","import type { MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { DateFormats, DateFormatStrings, DateLike, LocaleInstance, LocaleMessages, LocaleOptions } from '../../composables/locale.js'\nimport { formatDate, normalizeDate } from '@vueuse/core'\nimport { merge } from 'merge-anything'\nimport { ref, shallowRef, toValue } from 'vue-demi'\nimport { getObjectValueByPath, replace } from '../../utils/vHelpers.js'\nimport { de, en } from '../index.js'\n\nconst LANG_PREFIX = '__pv.'\n\n/**\n * @see https://stackoverflow.com/a/1353711\n */\nfunction isValidDate(d: unknown): d is Date {\n return d instanceof Date && !Number.isNaN(d)\n}\n\nexport function createTranslateFunction(current: Ref<string>, fallback: Ref<string>, messages: Ref<LocaleMessages>) {\n return (key: string, ...params: unknown[]) => {\n if (!key.startsWith(LANG_PREFIX))\n return replace(key, params)\n\n const shortKey = key.replace(LANG_PREFIX, '')\n const currentLocale = current.value && messages.value[current.value]\n const fallbackLocale = fallback.value && messages.value[fallback.value]\n let str: string = getObjectValueByPath(currentLocale, shortKey, null)\n\n if (!str) {\n console.warn(`[pv-kit] Translation key \"${key}\" not found in \"${current.value}\", trying fallback locale`)\n str = getObjectValueByPath(fallbackLocale, shortKey, null)\n }\n\n if (!str) {\n console.error(`[pv-kit] Translation key \"${key}\" not found in fallback`)\n str = key\n }\n\n if (typeof str !== 'string') {\n console.error(`[pv-kit] Translation key \"${key}\" has a non-string value`)\n str = key\n }\n\n return replace(str, params)\n }\n}\n\nexport function createNumberFunction(current: Ref<string>, fallback: Ref<string>) {\n return (value: number, options?: Intl.NumberFormatOptions) => {\n const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options)\n\n return numberFormat.format(value)\n }\n}\n\nexport function createDateFunction(current: Ref<string>, fallback: Ref<string>, dateFormatStrings: Ref<DateFormatStrings>) {\n return (value: DateLike, format: DateFormats = 'short', locale?: Intl.LocalesArgument) => {\n const locales = locale\n ? Array.isArray(locale) ? locale : [locale]\n : [current.value, fallback.value]\n\n const normalizedDate = normalizeDate(value)\n if (!isValidDate(normalizedDate))\n return ''\n\n return formatDate(normalizedDate, dateFormatStrings.value?.[format] || '', { locales })\n }\n}\n\nexport function defaultLocaleAdapter(options?: LocaleOptions): LocaleInstance {\n const currentLocale = shallowRef(options?.locale ?? 'en')\n const fallbackLocale = shallowRef(options?.fallback ?? 'en')\n const messages = ref(merge({ en, de }, { ...options?.messages }))\n const dateFormatStrings = shallowRef({\n short: 'YYYY-MM-DD',\n medium: 'YYYY-MM-DD HH:mm',\n long: 'YYYY-MM-DD HH:mm:ss',\n ...options?.dateFormatStrings,\n })\n\n function setLocale(locale: MaybeRefOrGetter<string>) {\n currentLocale.value = toValue(locale)\n }\n\n return {\n name: '__default',\n currentLocale,\n fallbackLocale,\n messages,\n setLocale,\n t: createTranslateFunction(currentLocale, fallbackLocale, messages),\n n: createNumberFunction(currentLocale, fallbackLocale),\n d: createDateFunction(currentLocale, fallbackLocale, dateFormatStrings),\n }\n}\n","import type { SearchParamsBase } from '@piveau/sdk-core'\nimport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nimport type { MaybeRef } from 'vue-demi'\n\nexport function assertQueryClient(qc: QueryClient | null): asserts qc is QueryClient {\n if (!qc)\n throw new Error('[piveau-kit] QueryClient not found')\n}\n\nexport type Reffify<T> = {\n [key in keyof T]: MaybeRef<T[key]>\n}\n\nexport type SearchParamsRef = Reffify<SearchParamsBase>\n\nexport interface SelectedFacetItemObject {\n id: string\n title: Record<string, string> | string\n count: number\n}\n\nexport type SelectedFacetItemList = (SelectedFacetItemObject | string)[]\n\nexport type FacetRef<TFacetNames extends string = string> = {\n readonly [key in TFacetNames]?: MaybeRef<SelectedFacetItemList>\n}\n\nexport type UnwrappedFacetRef<TFacetNames extends string = string> = {\n readonly [key in TFacetNames]?: SelectedFacetItemList\n}\n\nexport function extractFacetId(facet: string | SelectedFacetItemObject): string {\n return typeof facet === 'string' ? facet : facet.id\n}\n\nexport function mapToFacetIds(facets: SelectedFacetItemList): string[] {\n if (typeof facets === 'string')\n return [facets]\n\n return facets.map(extractFacetId)\n}\n\n// todo deleting this line causes weird error \"\"The inferred type of X cannot be named without a reference to Y\" (TS2742) occurs when multiple modules with the same package ID are resolved\"\n// this is a workaround for the issue\nexport type _UseQueryReturnType<TData, TError> = UseQueryReturnType<\n TData,\n TError\n>\n","import type { GetResourceByIdParams, GetResourceResult, SearchResult } from '@piveau/sdk-core'\nimport type { QueryClient } from '@tanstack/vue-query'\nimport type { ComputedRef, MaybeRef, MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { SetupFn } from './defineHubSearch.js'\nimport type { _UseQueryReturnType } from './utils.js'\nimport { useQuery } from '@tanstack/vue-query'\nimport { computed, markRaw, reactive, toValue } from 'vue-demi'\nimport { z } from 'zod'\nimport { unwrapLocaleInstance, useLocale } from './composables/locale.js'\nimport { getCurrentApp } from './index.js'\nimport { assertQueryClient } from './utils.js'\n\nexport type { _UseQueryReturnType } from './utils.js'\n\nexport interface UseResourceResultNoData {\n isSuccess: false\n result: ComputedRef<undefined>\n resultEnhanced: ComputedRef<undefined>\n}\n\nexport interface UseResourceResultWithData<TSetup extends object, TModelSchema = any> {\n isSuccess: true\n result: ComputedRef<TModelSchema>\n resultEnhanced: ComputedRef<TSetup>\n}\n\nexport type UseResourceResultBase<TSetup extends object, TModelSchema = any> = UseResourceResultNoData | UseResourceResultWithData<TSetup, TModelSchema>\n\nexport type UseResourceResult<\n TSetup extends object,\n TModelSchema = any,\n TResult = UseResourceResultBase<TSetup, TModelSchema>,\n> = {\n [K in keyof TResult]: K extends 'isSuccess' ? Ref<TResult[K]> : TResult[K]\n} & {\n query: _UseQueryReturnType<GetResourceResult<TModelSchema>, Error>\n isLoading: Ref<boolean> | Ref<true> | Ref<false>\n isFetching: Ref<boolean>\n}\n\nexport interface UseResourceParams {\n additionalParams?: MaybeRefOrGetter<any>\n headers?: MaybeRefOrGetter<Record<string, string>>\n queryOptions?: {\n staleTime?: MaybeRef<number>\n refetchOnWindowFocus?: MaybeRef<boolean>\n refetchInterval?: MaybeRef<number>\n suspense?: MaybeRef<boolean>\n retry?: MaybeRef<number>\n }\n}\n\nexport type UseResourceFunction<\n TSetup extends object,\n TModelSchema = any,\n> = (resourceId: MaybeRefOrGetter<string>, params?: UseResourceParams) => UseResourceResult<TSetup, TModelSchema>\n\nexport interface UseResourceFactoryParams<\n TModelSchema = any,\n> {\n baseUrl: string\n schema: z.Schema<TModelSchema>\n index: MaybeRefOrGetter<string>\n indexSearch?: MaybeRefOrGetter<string>\n enabled?: MaybeRefOrGetter<boolean>\n qc: QueryClient\n fetcherFn: (\n _options: GetResourceByIdParams\n ) => Promise<GetResourceResult<TModelSchema>>\n}\n\nexport function useResourceFactory<\n TSetup extends object,\n TModelSchema = any,\n>(options: UseResourceFactoryParams<TModelSchema>, setup?: SetupFn<TSetup, TModelSchema>): UseResourceFunction<TSetup, TModelSchema> {\n const useResource: UseResourceFunction<TSetup, TModelSchema> = (resourceId: MaybeRefOrGetter<string>, params?: UseResourceParams) => {\n const {\n index,\n indexSearch = index,\n baseUrl,\n enabled = true,\n qc,\n fetcherFn,\n schema,\n } = options\n\n const {\n additionalParams,\n headers,\n queryOptions,\n } = params ?? {}\n\n assertQueryClient(qc)\n const queryOptionsResolved = {\n staleTime: queryOptions?.staleTime ?? 1000 * 60 * 2,\n refetchOnWindowFocus: queryOptions?.refetchOnWindowFocus ?? true,\n refetchInterval: queryOptions?.refetchInterval,\n suspense: queryOptions?.suspense,\n retry: queryOptions?.retry,\n }\n const localeInstance = useLocale()\n const resolvedIndex = computed(() => toValue(index) ?? toValue(indexSearch))\n const queryKey = computed(() => [\n 'pv-resource',\n toValue(resolvedIndex),\n toValue(resourceId),\n ...toValue(additionalParams) ? [toValue(additionalParams)] : [],\n ...toValue(headers) ? [toValue(headers)] : [],\n ])\n\n const query = useQuery(\n {\n queryKey,\n queryFn: async () => {\n const res = await fetcherFn({\n baseUrl,\n resource: toValue(resolvedIndex),\n id: toValue(resourceId),\n additionalParams: toValue(additionalParams),\n headers: toValue(headers),\n })\n return res\n },\n // placeholderData: keepPreviousData,\n initialData() {\n // Scan through the search results cache to see if we have the resource already\n const cache = qc.getQueriesData<SearchResult<TModelSchema>>({\n queryKey: computed(() => (['pv-resources', resolvedIndex.value])),\n })\n\n const values = cache\n .flatMap(([_, value]) => value?.result?.results ?? [])\n .find((resource) => {\n const schema = z.object({\n id: z.string(),\n })\n\n const result = schema.safeParse(resource)\n\n if (result.success)\n return result.data.id === toValue(resourceId)\n\n return false\n })\n\n if (!values)\n return undefined\n\n const resultObj: GetResourceResult<TModelSchema> = {\n result: values,\n success: true,\n }\n\n return resultObj\n },\n enabled,\n ...queryOptionsResolved,\n },\n qc,\n )\n\n const result = computed(() => query.data.value?.result)\n const _app = getCurrentApp()\n\n const resultEnhanced = computed(() => {\n if (!setup || typeof setup !== 'function')\n return undefined\n\n const _query = reactive(query)\n const _result = _query.data\n if (!_app || !_query.isSuccess || !_result || !_result.result)\n return undefined\n const getters = setup(_result.result, {\n ...unwrapLocaleInstance(localeInstance),\n qc,\n queryKey: toValue(queryKey),\n params: {\n id: toValue(resourceId),\n },\n queryParams: {\n ...toValue(additionalParams),\n },\n headers: toValue(headers) || {},\n schema,\n })\n\n return markRaw(getters)\n })\n\n const obj: any = {\n query,\n isSuccess: query.isSuccess,\n isLoading: query.isLoading,\n isFetching: query.isFetching,\n result,\n resultEnhanced,\n }\n\n return obj as UseResourceResult<TSetup, TModelSchema>\n }\n\n return useResource\n}\n","import type { SearchParamsBase } from '@piveau/sdk-core'\nimport type { Reffify } from './utils.js'\nimport { reactive, toRefs } from 'vue-demi'\n\n/**\n * Creates reactive query parameters for hub search (excluding `filter` and `facets`)\n */\nexport function useSearchQueryParams(initialValue?: Reffify<SearchParamsBase>) {\n const queryParams = reactive({\n ...{\n aggregation: null,\n aggregationAllFields: null,\n aggregationFields: null,\n autocomplete: null,\n bboxMaxLat: null,\n bboxMaxLon: null,\n bboxMinLat: null,\n bboxMinLon: null,\n boost: null,\n countryData: null,\n dataServices: null,\n facetGroupOperator: null,\n facetOperator: null,\n fields: null,\n filterDistributions: null,\n globalAggregation: null,\n includes: null,\n limit: null,\n maxDate: null,\n minDate: null,\n maxScoring: null,\n minScoring: null,\n page: null,\n q: null,\n scroll: null,\n sort: null,\n showScore: null,\n vocabulary: null,\n superCatalogue: null,\n } satisfies Required<SearchParamsBase>,\n ...initialValue,\n })\n\n function setFacetOperator(operator: SearchParamsBase['facetOperator']) {\n queryParams.facetOperator = operator\n }\n\n function setFacetGroupOperator(operator: SearchParamsBase['facetGroupOperator']) {\n queryParams.facetGroupOperator = operator\n }\n\n function setDataServices(dataServices: SearchParamsBase['dataServices']) {\n queryParams.dataServices = dataServices\n }\n\n function setSuperCatalogue(val: SearchParamsBase['superCatalogue']) {\n queryParams.superCatalogue = val\n }\n\n function setPage(val: SearchParamsBase['page']) {\n queryParams.page = val\n }\n\n function setQuery(val: SearchParamsBase['q']) {\n queryParams.q = val\n }\n\n function setSort(val: SearchParamsBase['sort']) {\n queryParams.sort = val\n }\n\n function setLimit(val: SearchParamsBase['limit']) {\n queryParams.limit = val\n }\n\n function setDatasetGeoBounds({ minLon, minLat, maxLon, maxLat }: { minLon: SearchParamsBase['bboxMinLon'], minLat: SearchParamsBase['bboxMinLat'], maxLon: SearchParamsBase['bboxMaxLon'], maxLat: SearchParamsBase['bboxMaxLat'] }) {\n queryParams.bboxMinLon = minLon\n queryParams.bboxMinLat = minLat\n queryParams.bboxMaxLon = maxLon\n queryParams.bboxMaxLat = maxLat\n }\n\n function setMinScoring(val: SearchParamsBase['minScoring']) {\n queryParams.minScoring = val\n }\n\n function setCountryData(val: SearchParamsBase['countryData']) {\n queryParams.countryData = val\n }\n\n /**\n *\n * @deprecated Use `setCountryData` instead\n */\n function setDataScope(val: SearchParamsBase['countryData']) {\n queryParams.countryData = val\n }\n\n return {\n queryParams: toRefs(queryParams),\n setFacetOperator,\n setFacetGroupOperator,\n setDataServices,\n setSuperCatalogue,\n setPage,\n setQuery,\n setSort,\n setLimit,\n setDatasetGeoBounds,\n setMinScoring,\n setCountryData,\n setDataScope,\n }\n}\n","import { toValue } from '@vueuse/core'\nimport { Fragment, type MaybeRefOrGetter, type Slot, type VNode } from 'vue-demi'\n\n/**\n * Returns the representative locale from the given candidates based on the priority list.\n * If none of the locales in the priority list are found in the candidates, the first candidate is returned.\n * @returns The representative locale.\n *\n * @example\n * ```ts\n * const candidates = ['en-US', 'en-GB', 'en']\n * const preferredLocale = ['en-GB', 'en-US']\n * const representativeLocale = getRepresentativeLocaleOf({ candidates, preferredLocale })\n * console.log(representativeLocale) // 'en-GB'\n * ```\n */\nexport function getRepresentativeLocaleOf({\n candidates = [],\n preferredLocale = [],\n}: {\n candidates: string[]\n preferredLocale?: string | string[] | null\n}) {\n if (candidates.length === 0)\n return ''\n if (!preferredLocale || preferredLocale.length === 0)\n return candidates[0]\n\n const priorityListArray = Array.isArray(preferredLocale) ? preferredLocale : [preferredLocale]\n for (const locale of priorityListArray) {\n if (candidates.includes(locale))\n return locale\n }\n\n return candidates[0]\n}\n\n/**\n * Retrieves the translation for the specified object based on the preferred locale.\n * If the preferred locale is not found, an empty string is returned.\n *\n * @param obj - A record containing key-value pairs where keys represent locale codes and values represent translations.\n * @param preferredLocale - A single locale or an array of locales representing the preference order.\n * @returns The translation string for the most preferred available locale, or an empty string if no match is found.\n *\n * @example\n * ```ts\n * const translations = { 'en': 'Hello', 'fr': 'Bonjour' }\n * const locale = getTranslationFor(translations, ['fr', 'en'])\n * console.log(locale) // 'Bonjour'\n * ```\n */\nexport function getTranslationFor(obj?: Record<string, string> | null, preferredLocale?: string | string[] | null) {\n if (!obj)\n return ''\n const locale = getRepresentativeLocaleOf({ candidates: Object.keys(obj), preferredLocale })\n return locale ? obj[locale] : ''\n}\n\n/**\n * Retrieves a localized value from an object based on the preferred locale.\n * If a translation is not found for the preferred locale, it attempts to use the fallback locale.\n *\n * @returns The translation string for the most preferred available locale, or an empty string if no match is found.\n */\nexport function getLocalizedValue({\n obj,\n fallbackLocale,\n}: {\n obj?: Record<string, string> | null\n fallbackLocale: MaybeRefOrGetter<string>\n}) {\n const localizedValue = getTranslationFor(obj, toValue(fallbackLocale))\n return localizedValue || obj?.[toValue(fallbackLocale)] || ''\n}\n\n/**\n * Type guard that checks if the given value is not null or undefined. Helps with typings when\n * filtering out null or undefined values from an array.\n *\n * @example\n * ```ts\n * const filteredArray = array.filter(nonNullable)\n * ```\n *\n * @param value - The value to check.\n * @returns true if the value is not null or undefined, false otherwise.\n */\nexport function nonNullable<T>(value: T): value is NonNullable<T> {\n // See https://stackoverflow.com/a/58110124\n return value !== null && value !== undefined\n}\n\nexport function isUrl(str: string): boolean {\n try {\n const _url = new URL(str)\n return true\n }\n catch {\n return false\n }\n}\n\n/**\n * Type guard for arrays that checks if all elements are strings.\n *\n */\nexport function isStringArray(x: any[]): x is string[] {\n // See: https://stackoverflow.com/a/68929116\n return x.every(i => typeof i === 'string')\n}\n\n/**\n * Checks if the given value is empty.\n *\n * @param value - The value to check.\n * @returns true if the value is empty, false otherwise.\n *\n * A value is considered empty if it is:\n * - undefined\n * - null\n * - An object with no keys\n * - A string with no content (after trimming)\n */\nexport function isEmpty(value: any): boolean {\n // See: https://stackoverflow.com/a/43233163\n return value === undefined\n || value === null\n || (typeof value === 'object' && Object.keys(value).length === 0)\n || (typeof value === 'string' && value.trim().length === 0)\n}\n\n/**\n * Converts the given value to an array if it is not already an array.\n */\nexport function asArray<T>(arg: T | T[] | null) {\n return Array.isArray(arg) ? arg : arg !== null ? [arg] : []\n}\n\nexport function hasSlotContent(slot: Slot | undefined | null, props: any = {}) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return !isSlotEmpty(slot, props)\n}\n\nexport function isSlotEmpty(slot: Slot | undefined | null, props: any = {}) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return isVNodeEmpty(slot?.(props))\n}\n\nexport function isVNodeEmpty(vnode: VNode | VNode[] | undefined | null) {\n // See: https://github.com/vuejs/core/issues/4733#issuecomment-1512876503\n return (\n !vnode\n || asArray(vnode).every(\n vnode =>\n vnode.type === Comment\n || (vnode.type === Text && !vnode.children?.length)\n || (vnode.type === Fragment && !vnode.children),\n )\n )\n}\n\nexport interface SelectOption {\n label: string\n value: string\n}\n\nexport type SelectOptionList = SelectOption[]\n\nexport interface Facet {\n id: string\n label: string\n value?: string\n count?: number\n}\n\nexport type FacetList<T extends string = string> = {\n id: T\n label: string\n items: Facet[]\n}[]\n","import type { SearchParams, SearchResult, SearchResultFacetGroup } from '@piveau/sdk-core'\nimport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nimport type { ComputedRef, MaybeRef, MaybeRefOrGetter } from 'vue-demi'\nimport type { z } from 'zod'\nimport type { SetupFn } from './index.js'\nimport { keepPreviousData, useQuery } from '@tanstack/vue-query'\nimport { computed, markRaw, reactive, toRefs, toValue, unref } from 'vue-demi'\nimport { unwrapLocaleInstance, useLocale } from './composables/locale.js'\nimport { useSearchQueryParams } from './useSearchQueryParams.js'\nimport { type _UseQueryReturnType, assertQueryClient, type FacetRef, mapToFacetIds, type SearchParamsRef, type SelectedFacetItemList } from './utils.js'\nimport { getTranslationFor } from './utils/helpers.js'\n\nexport type { _UseQueryReturnType } from './utils.js'\nexport type { QueryClient, UseQueryReturnType } from '@tanstack/vue-query'\nexport type { Schema } from 'zod'\n\nexport interface SearchResultFacetGroupLocalized {\n id: string\n title: string\n items: {\n id: string\n title: string | undefined\n count: number\n }[]\n}\n\nexport interface UseSearchFactoryParams<\n TFacetNames extends string,\n TIndex extends string = string,\n TModelSchema = any,\n> {\n schema: z.Schema<TModelSchema>\n index: TIndex\n facets?: TFacetNames[]\n enabled?: MaybeRefOrGetter<boolean>\n qc: QueryClient\n fetcherFn: (\n _options: {\n params: SearchParams\n additionalParams?: any\n headers?: Record<string, string>\n }\n ) => Promise<SearchResult<TModelSchema>>\n}\n\nexport interface UseSearchFactoryReturn<\n TFacetNames extends string,\n TModelSchema,\n TSetup,\n> {\n /**\n * The search query object.\n *\n * @see https://tanstack.com/query/latest/docs/framework/vue/reference/useQuery\n */\n query: _UseQueryReturnType<\n SearchResult<TModelSchema>,\n Error\n >\n\n /**\n * The available facets for the current search results.\n */\n getAvailableFacets: ComputedRef<SearchResultFacetGroup[]>\n\n /**\n * The available facets for the current search results with localized titles.\n */\n getAvailableFacetsLocalized: (locale?: MaybeRefOrGetter<string>) => ComputedRef<SearchResultFacetGroupLocalized[]>\n\n /**\n * The search results.\n */\n getSearchResults: ComputedRef<TModelSchema[] | undefined>\n\n getSearchResultsEnhanced: ComputedRef<TSetup[] | undefined>\n\n /**\n * The total number of search results.\n */\n getSearchResultsCount: ComputedRef<number>\n\n /**\n * The total number of pages of search results based on the current limit parameter.\n * If the limit is not set or is less than or equal to 0, this will return `NaN`.\n */\n getSearchResultsPagesCount: ComputedRef<number>\n\n /**\n * Whether the search query is loading.\n */\n isLoading: ComputedRef<boolean>\n\n /**\n * Whether the search query is fetching.\n */\n isFetching: ComputedRef<boolean>\n\n /**\n * Get a facet by its ID.\n */\n getFacetById: <TFacetName extends TFacetNames>(\n facetId: TFacetName\n ) => ComputedRef<SearchResultFacetGroup | undefined>\n\n /**\n * Go to the next page of search results.\n */\n nextPage: () => void\n\n /**\n * Go to the previous page of search results.\n */\n previousPage: () => void\n\n queryParams: SearchParamsRef\n}\n\nexport interface UseSearchParams<TFacetNames extends string> {\n queryParams?: SearchParamsRef\n selectedFacets?: FacetRef<TFacetNames>\n additionalParams?: MaybeRefOrGetter<any>\n headers?: MaybeRefOrGetter<Record<string, string>>\n queryOptions?: {\n staleTime?: MaybeRef<number>\n refetchOnWindowFocus?: MaybeRef<boolean>\n refetchInterval?: MaybeRef<number>\n suspense?: MaybeRef<boolean>\n retry?: MaybeRef<number>\n }\n}\n\nexport function useSearchFactory<\n TSetup extends object,\n TFacetNames extends string,\n TIndex extends string = string,\n TModelSchema = any,\n>(options: UseSearchFactoryParams<TFacetNames, TIndex, TModelSchema>, setup?: SetupFn<TSetup, TModelSchema>): (\n params: UseSearchParams<TFacetNames>\n) => UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup> {\n const useSearch = function ({\n queryParams = {},\n selectedFacets = {},\n additionalParams = {},\n headers = {},\n queryOptions,\n }: UseSearchParams<TFacetNames>) {\n const {\n index,\n schema,\n enabled = true,\n qc,\n fetcherFn,\n } = options\n\n assertQueryClient(qc)\n const localeInstance = useLocale()\n\n const queryOptionsResolved = {\n staleTime: queryOptions?.staleTime ?? 1000 * 60 * 2,\n refetchOnWindowFocus: queryOptions?.refetchOnWindowFocus ?? true,\n refetchInterval: queryOptions?.refetchInterval,\n suspense: queryOptions?.suspense,\n retry: queryOptions?.retry,\n }\n\n const { queryParams: resolvedQueryParams } = useSearchQueryParams(queryParams)\n const reactiveQueryParams = reactive(resolvedQueryParams)\n reactiveQueryParams.limit = reactiveQueryParams.limit || 10\n\n const computedSelectedFacetIds = computed(() => {\n const facets = toValue(selectedFacets)\n const keys = Object.keys(facets) as TFacetNames[]\n const selected = {} as Record<TFacetNames, string[]>\n for (const key of keys) {\n const value = facets[key] as MaybeRef<SelectedFacetItemList>\n selected[key] = mapToFacetIds(unref(value))\n }\n return selected\n })\n\n const queryKey = computed(() => [\n 'pv-resources',\n index,\n reactiveQueryParams,\n unref(computedSelectedFacetIds),\n toValue(additionalParams),\n toValue(headers),\n ])\n\n // NOTE: Explicitly typing the query here to work around a TypeScript bug\n const query: UseQueryReturnType<\n // https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189\n SearchResult<TModelSchema>,\n Error\n > = useQuery(\n {\n queryKey,\n queryFn: async () =>\n markRaw((await fetcherFn({\n params: {\n ...reactiveQueryParams,\n facets: computedSelectedFacetIds.value,\n },\n additionalParams: toValue(additionalParams),\n headers: toValue(headers),\n }))),\n placeholderData: keepPreviousData,\n enabled,\n ...queryOptionsResolved,\n },\n qc,\n )\n\n const getAvailableFacets = computed<SearchResultFacetGroup[]>(() => {\n if (query.isError.value)\n return []\n\n const facets = query.data?.value?.result.facets\n return facets || []\n })\n\n const getAvailableFacetsLocalized = (locale?: MaybeRefOrGetter<string>) => {\n return computed(() => {\n const resolvedLocale = toValue(locale) || toValue(localeInstance.currentLocale) || 'en'\n const facets = getAvailableFacets.value\n if (!facets)\n return []\n\n return facets.map((facet) => {\n return {\n ...facet,\n items: facet.items.filter(maybeNullishItem => maybeNullishItem !== null && maybeNullishItem !== undefined).map((item) => {\n return {\n ...item,\n title: typeof item.title === 'string'\n ? item.title\n : getTranslationFor(item.title, resolvedLocale),\n }\n }),\n }\n })\n })\n }\n\n const getSearchResults = computed<TModelSchema[] | undefined>(() => {\n if (query.isError.value)\n return undefined\n\n const results = query.data?.value?.result.results\n return results\n })\n\n const getSearchResultsEnhanced = computed<TSetup[]>(() => {\n const searchResultsRaw = getSearchResults.value\n if (!searchResultsRaw || !setup || typeof setup !== 'function')\n return []\n\n const searchResults = searchResultsRaw.map((data) => {\n const maybeGetters = setup(data, {\n ...unwrapLocaleInstance(localeInstance),\n qc,\n queryKey: toValue(queryKey),\n params: {},\n queryParams: {\n ...toValue(reactiveQueryParams),\n ...toValue(additionalParams),\n facets: computedSelectedFacetIds.value,\n },\n headers: toValue(headers),\n schema,\n })\n\n return maybeGetters\n })\n\n return searchResults as TSetup[]\n })\n\n /**\n * The total number of search results.\n */\n const getSearchResultsCount = computed(() => {\n const count = query.data?.value?.result.count\n return count ?? 0\n })\n\n /**\n * The total number of pages of search results based on the current limit parameter.\n * If the limit is not set or is less than or equal to 0, this will return `NaN`.\n */\n const getSearchResultsPagesCount = computed(() => {\n const count = getSearchResultsCount.value\n const limit = reactiveQueryParams.limit\n\n if (!limit || limit <= 0)\n return Number.NaN\n\n return Math.ceil((count ?? 0) / limit)\n })\n\n const isLoading = computed(() => {\n return query.isLoading.value\n })\n\n const isFetching = computed(() => {\n return query.isFetching.value\n })\n\n function getFacetById<TFacetName extends TFacetNames>(facetId: TFacetName) {\n return computed(() => {\n const facets = query.data?.value?.result.facets\n\n if (!facets)\n return undefined\n\n const facet = facets?.find(f => f.id === facetId)\n\n if (!facet)\n return undefined\n\n return {\n ...facet,\n id: facetId,\n }\n })\n }\n\n function nextPage() {\n reactiveQueryParams.page = (reactiveQueryParams.page || 0) + 1\n }\n\n function previousPage() {\n reactiveQueryParams.page = Math.max(\n (reactiveQueryParams.page || 0) - 1,\n 0,\n )\n }\n\n const returnObject: UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup> = {\n query,\n getAvailableFacets,\n getSearchResults,\n getSearchResultsCount,\n getSearchResultsPagesCount,\n isLoading,\n isFetching,\n getAvailableFacetsLocalized,\n getFacetById,\n nextPage,\n previousPage,\n queryParams: toRefs(reactiveQueryParams),\n getSearchResultsEnhanced,\n }\n\n return returnObject\n }\n\n return useSearch\n}\n","import type { GetResourceByIdParams, SearchParams, SearchParamsBase, SearchResult } from '@piveau/sdk-core'\nimport type { QueryClient } from '@tanstack/vue-query'\nimport type { MaybeRefOrGetter, Ref } from 'vue-demi'\nimport type { ZodSchema } from 'zod'\nimport type { UnwrappedLocaleInstance } from './composables/locale.js'\nimport type { UseSearchFactoryReturn, UseSearchParams } from './index.js'\nimport type { UseResourceFunction } from './useResourceFactory.js'\nimport type { RefSyncedWithRouteQueryFacetFn, RefSyncedWithRouteQueryFn } from './utils/types.js'\nimport { getResourceById, searchResource } from '@piveau/sdk-core'\nimport { useRouteQuery } from '@vueuse/router'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useQueryClient } from './index.js'\nimport { useResourceFactory } from './useResourceFactory.js'\nimport { useSearchFactory } from './useSearchFactory.js'\nimport { assertQueryClient } from './utils.js'\n\nexport interface DefineHubSearchOptions<\n TIndex extends string,\n TFacetNames extends string,\n TModelSchema,\n> {\n baseUrl: string\n index: TIndex\n indexDetails?: string\n enabled?: MaybeRefOrGetter<boolean>\n schema: ZodSchema<TModelSchema>\n facets?: TFacetNames[]\n defaultOptions?: {\n searchFetcherFn?: () => Promise<SearchResult<TModelSchema>>\n resourceFetcherFn?: () => Promise<SearchResult<TModelSchema>>\n qc?: QueryClient\n }\n}\n\nexport type SetupContext<TModelSchema = any> = {\n qc?: QueryClient\n queryKey?: string[]\n params?: Record<string, string>\n queryParams?: Record<string, any>\n headers?: Record<string, string>\n schema?: ZodSchema<TModelSchema>\n} & UnwrappedLocaleInstance\n\nexport type SetupFn<TSetup extends object, TModelSchema = any> = (data: TModelSchema, ctx: SetupContext<TModelSchema>) => TSetup\nexport type ResolvedSetupFn<TSetup extends object, TModelSchema = any> = (data: TModelSchema) => TSetup\n\nexport function defineHubSearch<\n TIndex extends string,\n TFacetNames extends string,\n TModelSchema,\n TSetup extends object,\n>(\n options: DefineHubSearchOptions<TIndex, TFacetNames, TModelSchema>,\n setup?: SetupFn<TSetup, TModelSchema>,\n): HubSearchDefinition<TFacetNames, TModelSchema, TSetup> {\n const {\n baseUrl,\n index,\n indexDetails,\n schema,\n facets = [],\n defaultOptions = {},\n enabled = true,\n } = options\n\n async function defaultFetcherFn(_opts: {\n\n params: SearchParams\n additionalParams?: any\n headers?: Record<string, string>\n }) {\n const res = await searchResource<SearchResult<TModelSchema>>({\n baseUrl,\n params: {\n ..._opts.params,\n filter: index,\n },\n additionalParams: _opts.additionalParams,\n headers: _opts.headers,\n })\n\n return res.data\n }\n\n const {\n qc = useQueryClient(),\n searchFetcherFn = defaultFetcherFn,\n } = defaultOptions\n\n assertQueryClient(qc)\n\n const useSearch = useSearchFactory({\n schema,\n facets,\n index,\n fetcherFn: searchFetcherFn,\n enabled,\n qc,\n }, setup)\n\n const useResource = useResourceFactory({\n schema,\n baseUrl,\n index: indexDetails ?? index,\n enabled,\n fetcherFn: async (_options: GetResourceByIdParams) => {\n return getResourceById<TModelSchema>(_options)\n },\n qc,\n }, setup)\n\n const refSyncedWithRouteQuery: RefSyncedWithRouteQueryFn = <\n T extends string | number,\n K = T extends string ? string : T extends number ? number : never,\n >(\n searchParam: keyof SearchParamsBase,\n defaultValue?: MaybeRefOrGetter<T>,\n ): Ref<K> => {\n const route = useRoute()\n const router = useRouter()\n return useRouteQuery(searchParam, defaultValue, {\n router,\n route,\n mode: 'push',\n })\n }\n\n const refSyncedWithRouteQueryFacet: RefSyncedWithRouteQueryFacetFn<TFacetNames> = <T extends string[]>(\n searchParam: TFacetNames,\n defaultValue?: MaybeRefOrGetter<T>,\n ) => {\n const route = useRoute()\n const router = useRouter()\n return useRouteQuery<T, string[]>(searchParam, defaultValue, {\n // always transform the value to an array\n transform: (value) => {\n if (Array.isArray(value))\n return value\n\n if (typeof value === 'string')\n return [value]\n\n return []\n },\n router,\n route,\n mode: 'push',\n })\n }\n\n return {\n useSearch,\n useResource,\n refSyncedWithRouteQuery,\n refSyncedWithRouteQueryFacet,\n setup,\n }\n}\n\nexport interface HubSearchDefinition<\n TFacetNames extends string,\n TModelSchema,\n TSetup extends object,\n> {\n useSearch: (params: UseSearchParams<TFacetNames>) => UseSearchFactoryReturn<TFacetNames, TModelSchema, TSetup>\n useResource: UseResourceFunction<TSetup, TModelSchema>\n refSyncedWithRouteQuery: RefSyncedWithRouteQueryFn\n refSyncedWithRouteQueryFacet: RefSyncedWithRouteQueryFacetFn<TFacetNames>\n setup?: SetupFn<TSetup, TModelSchema>\n}\n\nexport type HubSearchIntegrationOptions<TModelSchema> = DefineHubSearchOptions<string, string, TModelSchema>\nexport function defineHubSearchIntegration<TModelSchema, TSetup extends object>(schema: ZodSchema<TModelSchema>, setup: SetupFn<TSetup, TModelSchema>) {\n return { setup, schema }\n}\n","import type { SelectNodesOptions } from '../../index.js'\n\nimport { SchemaDataset } from '@piveau/sdk-core'\nimport { defineHubSearchIntegration, getPropertyTableDataset, getPropertyTableDistribution } from '../../index.js'\nimport { getTranslationFor, nonNullable } from '../../utils/helpers.js'\n\nexport interface DcatApDatasetParams {\n datasetProperties?: SelectNodesOptions\n distributionProperties?: SelectNodesOptions\n}\n\n// todo: must import ZodObject type or else build gets error\n// \"node_modules/zod/lib/types.js\" is imported by \"src/integrations/dcatAp/dcatAp.ts\", but could not be resolved – treating it as an external dependency.\n/** @private */\nexport type { ZodObject as _ZodObject } from 'zod'\n\n/**\n * Integration dcat-ap datasets.\n * It contains computed getters for dcat-ap properties and opinionated computed getters for common use cases\n *\n */\nexport function dcatApDataset(options?: DcatApDatasetParams) {\n const { datasetProperties, distributionProperties } = options || {}\n\n return defineHubSearchIntegration(SchemaDataset, (_dataset, localeInstance) => {\n const { d, currentLocale, fallbackLocale } = localeInstance\n const ds = _dataset\n\n /**\n * Returns the id of the dataset\n */\n const getId = ds.id\n\n /**\n * Returns the localized title of the dataset\n */\n const getTitle = getTranslationFor(ds.title, [currentLocale, fallbackLocale])\n\n const getFormats = [...new Set(ds.distributions?.map(d => d.format?.id || d.format?.label || d.format?.resource).filter(nonNullable))]\n\n const getLicenses = [...new Set(ds.distributions?.flatMap(d => d.license?.label || d.license?.id || d.license?.resource).filter(nonNullable))]\n\n const getIssued = ds.issued ? d(ds.issued, 'medium') : undefined\n\n const getCreated = getIssued\n\n const getModified = ds.modified ? d(ds.modified, 'medium') : undefined\n\n /**\n * Returns the localized description of the dataset\n */\n const getDescription = getTranslationFor(ds.description, [currentLocale, fallbackLocale])\n\n const getCategories = ds.categories || []\n\n const getPublisher = ds.publisher\n\n const { getPropertyTable: _propertyTableDataset } = getPropertyTableDataset({ data: ds, localeInstance, selectProperties: datasetProperties })\n\n const getDistributions = () => {\n if (!ds || !ds.distributions)\n return []\n\n const dist = ds.distributions?.map((dist) => {\n return {\n /**\n * The ID of the distribution\n */\n id: dist.id,\n\n /** The localized title of the distribution */\n title: dist.title\n ? getTranslationFor(dist.title, [currentLocale, fallbackLocale])\n : '',\n\n /**\n * The localized description of the distribution\n */\n description: dist.description\n ? getTranslationFor(dist.description, [currentLocale, fallbackLocale])\n : '',\n\n /**\n * The format of the distribution\n * Fallback order: label, id, resource\n */\n format: dist.format?.label || dist.format?.id || dist.format?.resource || '',\n\n /**\n * The modified date of the distribution\n */\n modified: dist.modified ? d(dist.modified) : undefined,\n\n /**\n * The license of the distribution\n */\n license: dist.license || undefined,\n created: dist.issued ? d(dist.issued) : undefined,\n issued: dist.issued ? d(dist.issued) : undefined,\n languages: dist.language?.map(language => language?.label).filter(nonNullable) || [],\n accessUrls: dist.access_url || [],\n downloadUrls: dist.download_url || [],\n\n /**\n * Opinionated recursive property table\n */\n getPropertyTable: getPropertyTableDistribution({ data: dist, localeInstance, selectProperties: distributionProperties }),\n }\n }) || []\n\n return dist\n }\n\n return {\n getId,\n getTitle,\n getDescription,\n getCategories,\n getPublisher,\n getFormats,\n getLicenses,\n getIssued,\n getCreated,\n getModified,\n getDistributions: getDistributions(),\n getPropertyTable: _propertyTableDataset,\n getPropertyTable2: _propertyTableDataset,\n }\n })\n}\n","import type { Resource } from '@piveau/sdk-core'\nimport { z } from 'zod'\nimport { isEmpty, nonNullable } from './helpers.js'\n\n/** @public */\nexport interface PropertyTableEntryBase {\n id: string\n}\n\n// export interface PropertyTableEntry {\n// label: string\n// id: string\n// data: PropertyTableRow\n// }\n\n/** @public */\nexport interface PropertyTableCellHref {\n label: string\n href: string\n}\n\n/** @public */\nexport interface PropertyTableCellContact {\n type: 'adress'\n name: string\n address: string\n telephone: string\n email: string\n organization: string\n}\n\n/** @public */\nexport type PropertyTableCell = string | number\n\n/** @public */\nexport interface PropertyTableEntryNode extends PropertyTableEntryBase {\n type: 'node'\n label: string\n help?: string\n isRoot?: boolean\n data?: PropertyTableEntry[]\n\n /** @private */\n __processed?: boolean\n}\n\n/** @public */\nexport interface PropertyTableRoot extends PropertyTableEntryNode {\n type: 'node'\n isRoot: true\n data?: PropertyTableEntry[]\n}\n\n/** @public */\nexport interface PropertyTableEntryNodeSimplified extends PropertyTableEntryBase {\n data: PropertyTableEntrySimplified | PropertyTableEntrySimplified[]\n}\n\n/** @public */\nexport interface PropertyTableEntryValue extends PropertyTableEntryBase {\n type: 'value'\n badge?: string\n data: PropertyTableCell[] | PropertyTableCell\n}\n\n/** @public */\nexport interface PropertyTableEntryHref extends PropertyTableEntryBase {\n type: 'href'\n badge?: string\n data: PropertyTableCellHref | PropertyTableCellHref[]\n}\n\n/** @public */\nexport interface PropertyTableLeafValue extends PropertyTableEntryBase {\n type: 'value'\n badge?: string\n data: string\n}\n\n/** @public */\nexport interface PropertyTableLeafHref extends PropertyTableEntryBase {\n type: 'href'\n badge?: string\n data: { href: string, label?: string }\n}\n\n/** @public */\nexport type PropertyTableEntryLeaf = PropertyTableLeafValue | PropertyTableLeafHref\n\n/** @public */\nexport type PropertyTableEntry = PropertyTableEntryNode | PropertyTableEntryLeaf\n\n/** @public */\nexport type PropertyTableEntrySimplified = undefined | null | string | string[] | PropertyTableEntry | DefinePropertyNodeOptions & {\n type: 'node'\n}\n\n/** @public */\nexport type PropertyTableProps = PropertyTableEntry[]\n\n/** @public */\nexport interface DefinePropertyNodeOptions {\n id: string\n label?: string\n help?: string\n data?: PropertyTableEntrySimplified | PropertyTableEntrySimplified[] | null\n __processed?: boolean\n}\n\n/** @public */\nexport interface DefinePropertyNodeGeneralOptions {\n compact?: boolean\n debug?: boolean\n maxDepth?: number\n}\n\n/** @public */\nexport function definePropertyNode(nodeOptions: DefinePropertyNodeOptions, options?: DefinePropertyNodeGeneralOptions): PropertyTableEntryNode {\n const {\n id: _id,\n label: _label,\n help: _help,\n data: _data,\n } = nodeOptions\n\n const {\n compact = false,\n maxDepth = 10,\n } = options || {}\n\n const resolvedPropertyNode: PropertyTableEntryNode = {\n type: 'node',\n id: _id,\n label: _label || _id,\n help: _help,\n data: [{ type: 'value', id: `${_id}_value`, data: '' }],\n __processed: true,\n }\n\n if (!_data || maxDepth <= 0)\n return { ...resolvedPropertyNode, ...compact ? { data: undefined } : {} }\n\n if (compact && isEmpty(_data))\n return { ...resolvedPropertyNode, data: undefined }\n\n const dataAsArray = Array.isArray(_data) ? _data : [_data]\n const normalizedData: (PropertyTableEntry | undefined)[] = dataAsArray.map((entry) => {\n if (!entry)\n return compact ? undefined : { type: 'value', id: `${_id}_value`, data: '' }\n\n if (typeof entry === 'string' || Array.isArray(entry)) {\n return compact && !entry || isEmpty(entry) || (Array.isArray(entry) && entry.every(e => !e))\n ? undefined\n : definePropertyValue({ id: `${_id}_value`, data: entry })\n }\n\n if (entry.type === 'node') {\n const resolvedData = compact && (!entry.data || isEmpty(entry.data))\n ? undefined\n : entry.data\n\n // Skip recursive processing if the entry has already been processed, i.e\n // nested definePropertyNode calls.\n const child = entry.__processed\n ? { ...entry } as PropertyTableEntryNode\n : definePropertyNode({\n id: entry.id,\n label: entry.label,\n help: entry.help,\n data: resolvedData,\n }, {\n ...options,\n maxDepth: maxDepth - 1,\n })\n\n return compact && (!child.data || isEmpty(child.data))\n ? undefined\n : child\n }\n\n return entry\n })\n\n const cleanedData = normalizedData.filter(nonNullable)\n if (compact && isEmpty(cleanedData))\n return { ...resolvedPropertyNode, data: undefined }\n\n return {\n ...resolvedPropertyNode,\n data: cleanedData,\n }\n}\n\n/** @public */\nexport function definePropertyNodeCompact(nodeOptions: DefinePropertyNodeOptions, options?: Omit<DefinePropertyNodeGeneralOptions, 'compact'>): PropertyTableEntryNode {\n return definePropertyNode(nodeOptions, { ...options, compact: true })\n}\n\n/** @public */\nexport interface DefinePropertyValueOptions {\n id?: string\n data?: string | string[]\n}\n\n/** @public */\nexport function definePropertyValue(propertyOptions: DefinePropertyValueOptions): PropertyTableEntryLeaf {\n const { id: _id, data: _data } = propertyOptions\n\n if (typeof _data === 'string') {\n // auto resolve URL\n try {\n const _url = z.string().url().parse(_data)\n return { type: 'href', id: `${_id}`, data: { label: _data.startsWith('mailto:') ? _data.slice(7) : _data, href: _data } }\n }\n // eslint-disable-next-line unused-imports/no-unused-vars\n catch (e) {}\n\n return { type: 'value', id: `${_id}`, data: _data }\n }\n\n throw new Error(`[pv-kit] Invalid data type: ${_data}`)\n}\n\n/**\n * Parses a Resource object to a PropertyTableEntry.\n * Determines the type of entry based on the presence of a resource URL.\n * If the resource URL exists, it returns an entry of type 'href'.\n * Otherwise, it returns an entry of type 'value'.\n *\n * @param obj - The Resource object to be parsed.\n * @param id - An optional string used as a fallback for the entry's id.\n * @returns A PropertyTableEntry object with type 'href' or 'value', or undefined if the input object is invalid.\n * @public\n */\nexport function parseResource(obj?: Resource | null, id?: string): PropertyTableEntryLeaf | undefined {\n if (!obj || (!obj.id && !obj.resource && !obj.label))\n return undefined\n\n return obj?.resource\n ? {\n type: 'href',\n id: obj?.id || id || '',\n data: { href: obj?.resource || '', label: obj?.label || obj?.id || obj?.resource || '' },\n }\n : {\n type: 'value',\n id: obj?.id || id || '',\n data: obj?.label || obj?.id || obj?.resource || '',\n }\n}\n\n/**\n * Parses an array of Resource objects to an array of PropertyTableEntry objects.\n * It applies the parseResource function to each element and filters out any undefined values.\n *\n * @param obj - The array of Resource objects to be parsed.\n * @param id - An optional string used as a fallback for the entry's id.\n * @returns An array of PropertyTableEntry objects with type 'href' or 'value'.\n * @public\n */\nexport function parseResourceList(obj?: Resource[] | null, id?: string): PropertyTableEntryLeaf[] {\n if (!obj)\n return []\n return obj.map((resource, idx) => parseResource(resource, `${id}@${idx}`)).filter(nonNullable)\n}\n\n/** @public */\nexport function parseUrl(url?: string | null, id?: string): PropertyTableLeafHref | undefined {\n if (!url)\n return\n\n // check if url is valid\n try {\n const _ = new URL(url)\n }\n catch (e) {\n console.warn(`[pv-kit] Invalid URL: ${url}`, e)\n return\n }\n\n return {\n type: 'href',\n id: id || url,\n data: { href: url, label: url },\n }\n}\n\n/** @public */\nexport function parseUrlList(urls?: string[] | null): PropertyTableLeafHref[] {\n if (!urls)\n return []\n return urls.map(url => parseUrl(url)).filter(nonNullable)\n}\n\nexport interface SelectNodesOptions {\n select?: string[]\n discardUnused?: boolean\n}\n\n/** @public */\nexport interface SelectNodesByIdParams extends SelectNodesOptions {\n nodes: PropertyTableEntryNode[]\n}\n/**\n * Selects nodes by their id from a list of nodes.\n *\n * The function returns a new list of nodes that is sorted according to the order of their ids in the `select` array and does not contain any nodes that are not in the `select` array.\n *\n * @returns A new list of nodes that is sorted and filtered according to the options.\n * @public\n */\nexport function selectNodesById(options: SelectNodesByIdParams): PropertyTableEntryNode[] {\n const { select, discardUnused, nodes: _nodes } = options\n let nodes = [..._nodes]\n if (select) {\n if (discardUnused) {\n nodes = nodes.filter((entry) => {\n return select.includes(entry.id)\n })\n }\n\n nodes = nodes.sort((a, b) => {\n const scoreA = select.indexOf(a.id)\n const scoreB = select.indexOf(b.id)\n\n if (scoreA === scoreB)\n return 0\n\n if (scoreA === -1)\n return 1\n\n if (scoreB === -1)\n return -1\n\n return scoreA - scoreB\n })\n }\n return nodes\n}\n","import type { Dataset, Distribution } from '@piveau/sdk-core'\nimport { toRef, toValue } from 'vue-demi'\nimport type { UnwrappedLocaleInstance } from '../../composables/locale.js'\nimport type { PropertyTableEntryNode, SelectNodesOptions } from '../../utils/propertyTable.js'\nimport { parseResource, parseResourceList, parseUrl, definePropertyNodeCompact as pn, selectNodesById } from '../../utils/propertyTable.js'\nimport { getTranslationFor } from '../../utils/helpers.js'\n\nexport interface GetPropertyTableBase<T> {\n data: T\n localeInstance: UnwrappedLocaleInstance\n selectProperties?: SelectNodesOptions\n}\n\nexport interface GetPropertyTableDatasetParams extends GetPropertyTableBase<Dataset> {}\nexport interface GetPropertyTableDistributionParams extends GetPropertyTableBase<Distribution> {}\n\nexport function getPropertyTableDataset(options: GetPropertyTableDatasetParams) {\n const { data: dataset, localeInstance, selectProperties } = options\n\n const {\n t,\n d,\n currentLocale: _currentLocale,\n fallbackLocale: _fallbackLocale,\n } = localeInstance\n\n const ds = dataset\n const currentLocale = _currentLocale\n const fallbackLocale = _fallbackLocale\n\n const getPropertyTable: () => PropertyTableEntryNode[] = () => {\n const created = pn({ id: 'created', label: t('__pv.metadata.created'), help: t('__pv.tooltip.datasetDetails.created'), data: ds.issued ? d(ds.issued ?? '', 'medium') : undefined })\n const modified = pn({ id: 'modified', label: t('__pv.metadata.modificationDate'), help: t('__pv.tooltip.datasetDetails.updated'), data: ds.modified ? d(ds.modified ?? '', 'medium') : undefined })\n const landingPage = pn({ id: 'landingPage', label: t('__pv.metadata.landingPage'), help: t('__pv.tooltip.datasetDetails.landingPage'), data: parseResourceList(ds.landing_page, 'landingPageVal') })\n // const sources = pn({ id: 'sources', label: t('__pv.metadata.sources'), help: t('__pv.tooltip.datasetDetails.sources'), data: dataset.source })\n const languages = pn({ id: 'languages', label: t('__pv.metadata.languages'), help: t('__pv.metadata.languages'), data: parseResourceList(ds.language) })\n const publisher = pn({ id: 'publisher', label: t('__pv.metadata.publisher'), help: t('__pv.tooltip.datasetDetails.publisher'), data: [\n pn({ id: 'publisherName', label: t('__pv.metadata.name'), help: t('__pv.metadata.tooltipPublisherName'), data: ds.publisher?.name }),\n pn({ id: 'publisherHomepage', label: t('__pv.metadata.homepage'), help: t('__pv.metadata.tooltipPublisherHomepage'), data: parseUrl(ds.publisher?.homepage) }),\n pn({ id: 'publisherEmail', label: t('__pv.metadata.email'), data: ds.publisher?.email }),\n ] })\n const contactPointItems = ds.contact_point\n ? ds.contact_point.map((contactPoint) => {\n return pn({ id: 'contactPoint', label: contactPoint.name || contactPoint.organisation_name || '', data: [\n pn({ id: 'contactPointName', label: t('__pv.metadata.name'), data: contactPoint.name }),\n pn({ id: 'contactPointOrganization', label: t('__pv.metadata.organizationName'), data: contactPoint.organisation_name }),\n pn({ id: 'contactPointEmail', label: t('__pv.metadata.email'), data: contactPoint.email }),\n pn({ id: 'contactPointTelephone', label: t('__pv.metadata.telephone'), data: contactPoint.telephone }),\n pn({ id: 'contactPointAddressCity', label: t('__pv.metadata.address'), data: contactPoint.address }),\n pn({ id: 'contactPointUrl', label: t('__pv.metadata.url'), data: contactPoint.url }),\n ] })\n })\n : []\n const contactPoint = pn({ id: 'contactPoint', label: t('__pv.metadata.contactPoints'), help: t('__pv.tooltip.contactPoints'), data: contactPointItems })\n const catalogRecord = pn({ id: 'catalogRecord', label: t('__pv.metadata.catalogRecord'), help: t('__pv.tooltip.catalogRecord'), data: [\n `${t('__pv.metadata.created')} ${d(ds.catalog_record?.issued ?? '', 'medium')}`,\n `${t('__pv.metadata.modificationDate')} ${d(ds.catalog_record?.modified ?? '', 'medium')}`,\n ] })\n const conformsTo = pn({ id: 'conformsTo', label: t('__pv.metadata.conformsTo'), help: t('__pv.tooltip.datasetDetails.conformsTo'), data: parseResourceList(ds.conforms_to) })\n const provenance = pn({ id: 'provenance', label: t('__pv.metadata.provenances'), help: t('__pv.tooltip.datasetDetails.provenance'), data: parseResourceList(ds.provenance) })\n const identifiers = pn({ id: 'identifiers', label: t('__pv.metadata.identifiers'), help: t('__pv.metadata.identifiers'), data: ds.identifier })\n const admsIdentifierItems = ds.adms_identifier\n ? ds.adms_identifier.map((adms) => {\n return pn({ id: 'admsIdentifier', label: '', data: [\n `${t('__pv.metadata.identifier')} ${adms.identifier}`,\n `${t('__pv.metadata.scheme')} ${adms.scheme}`,\n ] })\n })\n : []\n const admsIdentifiers = pn({ id: 'admsIdentifiers', label: t('__pv.metadata.otherIdentifiers'), help: t('__pv.tooltip.datasetDetails.otherIdentifier'), data: admsIdentifierItems })\n const resource = pn({ id: 'resource', label: t('__pv.metadata.resource'), help: t('__pv.tooltip.datasetDetails.relatedResource'), data: ds.resource })\n const accessRight = pn({ id: 'accessRight', label: t('__pv.metadata.accessRights'), data: parseResource(ds.access_right) })\n const accrualPeriodicity = pn({ id: 'accrualPeriodicity', label: t('__pv.metadata.accrualPeriodicity'), data: parseResource(ds.accrual_periodicity) })\n const hasVersion = pn({ id: 'hasVersion', label: t('__pv.metadata.hasVersion'), help: t('__pv.tooltip.datasetDetails.hasVersion'), data: ds.has_version })\n const isVersionOf = pn({ id: 'isVersionOf', label: t('__pv.metadata.isVersionOf'), data: ds.is_version_of })\n const temporal = pn({ id: 'temporal', label: t('__pv.metadata.temporal'), data: ds.temporal && ds.temporal.map(t =>\n `${d(t.gte, 'medium')} - ${d(t.lte, 'medium')}`,\n ) })\n const versionInfo = pn({ id: 'version', label: t('__pv.metadata.versionInfo'), help: t('__pv.tooltip.datasetDetails.versionInfo'), data: ds.version_info })\n const versionNotes = pn({ id: 'versionNotes', label: t('__pv.metadata.versionNotes'), help: t('__pv.tooltip.datasetDetails.versionNotes'), data: getTranslationFor(ds.version_notes, [currentLocale, fallbackLocale]) })\n const isReferencedBy = pn({ id: 'isReferencedBy', label: t('__pv.metadata.isReferencedBy'), help: t('__pv.tooltip.datasetDetails.isReferencedBy'), data: ds.is_referenced_by })\n const qualifiedRelationItems = ds.qualified_relation\n ? ds.qualified_relation.map((relation) => {\n return pn({ id: 'qualifiedRelation', label: '', data: [\n `${t('__pv.metadata.relation')} ${relation.relation}`,\n `${t('__pv.metadata.role')} ${relation.had_role}`,\n ] })\n })\n : []\n const qualifiedRelation = pn({ id: 'qualifiedRelation', label: t('__pv.metadata.qualifiedRelation'), help: t('__pv.tooltip.datasetDetails.qualifiedRelation'), data: qualifiedRelationItems })\n const sample = pn({ id: 'sample', label: t('__pv.metadata.sample'), help: t('__pv.tooltip.datasetDetails.sample'), data: ds.sample })\n const type = pn({ id: 'type', label: t('__pv.metadata.type'), help: t('__pv.tooltip.datasetDetails.type'), data: parseResource(ds.type) })\n const temporalResolution = pn({ id: 'temporalResolution', label: t('__pv.metadata.temporalResolution'), help: t('__pv.tooltip.datasetDetails.temporalResolution'), data: ds.temporal_resolution })\n\n const table: PropertyTableEntryNode[] = [\n created,\n modified,\n landingPage,\n // sources,\n languages,\n publisher,\n contactPoint,\n catalogRecord,\n conformsTo,\n provenance,\n identifiers,\n admsIdentifiers,\n resource,\n accessRight,\n accrualPeriodicity,\n hasVersion,\n isVersionOf,\n temporal,\n versionInfo,\n versionNotes,\n isReferencedBy,\n qualifiedRelation,\n sample,\n type,\n temporalResolution,\n ]\n return table\n }\n\n return {\n getPropertyTable: selectProperties?.select\n ? selectNodesById({ select: selectProperties.select, discardUnused: selectProperties.discardUnused, nodes: getPropertyTable() })\n : getPropertyTable(),\n }\n}\n\nexport function getPropertyTableDistribution(options: GetPropertyTableDistributionParams) {\n const { data: distribution, localeInstance } = options\n const {\n t,\n d,\n n,\n currentLocale: _currentLocale,\n fallbackLocale: _fallbackLocale,\n } = localeInstance\n\n const getPropertyTable = () => {\n if (!distribution)\n return []\n\n const di = distribution\n\n const propertyTable: PropertyTableEntryNode[] = [\n pn({ id: 'license', label: t('__pv.metadata.license'), help: t('__pv.tooltip.datasetDetails.distributions.licence'), data: [\n { type: 'href', id: 'licenseVal', data: { href: di.license?.resource || '', label: di.license?.label || di.license?.description || di.license?.id || '' } },\n ] }),\n pn({ id: 'modified', label: t('__pv.metadata.modificationDate'), help: t('__pv.tooltip.datasetDetails.updated'), data: di.modified ? d(di.modified, 'medium') : undefined }),\n pn({ id: 'created', label: t('__pv.metadata.created'), help: t('__pv.tooltip.datasetDetails.distributions.created'), data: di.issued ? d(di.issued, 'medium') : undefined }),\n pn({ id: 'languages', label: t('__pv.metadata.languages'), help: t('__pv.tooltip.datasetDetails.language'), data: parseResourceList(di.language || []) }),\n pn({ id: 'status', label: t('__pv.metadata.status'), help: t('__pv.tooltip.datasetDetails.distributions.status'), data: parseResource(di.status) }),\n pn({ id: 'rights', label: t('__pv.metadata.rights'), help: t('__pv.tooltip.datasetDetails.distributions.rights'), data: parseResource(di.rights) }),\n pn({ id: 'mediaType', label: t('__pv.metadata.mediaType'), help: t('__pv.tooltip.datasetDetails.distributions.mediaType'), data: di.media_type }),\n pn({ id: 'byteSize', label: t('__pv.metadata.byteSize'), help: t('__pv.tooltip.datasetDetails.distributions.byteSize'), data: di.byte_size ? n(di.byte_size) : undefined }),\n pn({ id: 'pages', label: t('__pv.metadata.pages'), help: t('__pv.metadata.pages'), data: di.page?.map(p => p?.resource) }),\n pn({ id: 'compressFormat', label: t('__pv.metadata.compressFormat'), help: t('__pv.tooltip.datasetDetails.distributions.compressFormat'), data: parseResource(di.compress_format) }),\n pn({ id: 'packageFormat', label: t('__pv.metadata.packageFormat'), help: t('__pv.tooltip.datasetDetails.distributions.packageFormat'), data: parseResource(di.package_format) }),\n pn({ id: 'conformsTo', label: t('__pv.metadata.conformsTo'), help: t('__pv.tooltip.datasetDetails.conformsTo'), data: parseResourceList(di.conforms_to || []) }),\n ]\n return propertyTable\n }\n\n return getPropertyTable()\n}\n","import type { App, InjectionKey } from 'vue-demi'\nimport { QueryClient } from '@tanstack/vue-query'\nimport { inject, isVue2 } from 'vue-demi'\nimport { localeKey, type LocaleOptions } from './composables/locale.js'\nimport { defaultLocaleAdapter } from './locale/adapters/default.js'\n\nexport interface PiveauKitPluginOptions {\n queryClient?: QueryClient\n locale?: LocaleOptions\n}\n\nexport const keyQueryClient = Symbol('') as InjectionKey<QueryClient>\n\nlet _app: App | undefined\n\nexport function getCurrentApp() {\n return _app\n}\n\nexport const plugin = {\n install(app: App, options: PiveauKitPluginOptions = {}) {\n _app = app\n const {\n queryClient = new QueryClient(),\n locale,\n } = options || {}\n\n if (isVue2) { throw new Error('Vue 2 is not supported') }\n else {\n const resolvedLocale = locale?.adapter ?? defaultLocaleAdapter(locale)\n app.provide(keyQueryClient, queryClient)\n app.provide(localeKey, resolvedLocale)\n }\n },\n}\n\nexport function useQueryClient() {\n const maybeQueryClient = inject(keyQueryClient, null)\n return maybeQueryClient\n}\n\n/** @alias */\nexport const piveauKitPlugin = plugin\nexport * from './composables/intex.js'\nexport * from './defineHubSearch.js'\nexport * from './integrations/index.js'\n// export * from './createUseResourceSearch.js'\nexport * from './useResourceFactory.js'\nexport * from './useSearchFactory.js'\nexport * from './utils/index.js'\n\n// export { createUseDcatApSearch } from './integrations/dcat-ap/dataset.js'\n"],"names":["schema","result","toValue","vnode","d","dist","pn","contactPoint","t"],"mappings":"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"}
|