itube-specs 0.0.289 → 0.0.291

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.
@@ -1,25 +1,28 @@
1
1
  export function useApiFetcher<T>(
2
- key: string,
3
- apiMethod: (...args: any[]) => Promise<T>,
4
- ...apiArgs: any[]
2
+ key: string | null,
3
+ apiMethod: (...args: any[]) => Promise<T>,
4
+ ...apiArgs: any[]
5
5
  ) {
6
- return async function fetchData() {
7
- const state = useState<T | null>(key, () => null);
6
+ return async function fetchData() {
7
+ const hasKey = key?.trim();
8
+ const state = hasKey ? useState<T | null>(key!, () => null) : null;
8
9
 
9
- if (state.value !== null) {
10
- return state.value;
11
- }
10
+ if (state && state.value !== null && state.value !== undefined) {
11
+ return state.value;
12
+ }
12
13
 
13
- try {
14
- const result = await apiMethod(...apiArgs);
15
- state.value = result;
16
- return result;
17
- } catch (err) {
18
- throw createError({
19
- statusCode: 500,
20
- statusMessage: `Error fetching ${key}`,
21
- message: err instanceof Error ? err.message : 'An unknown error occurred',
22
- });
23
- }
24
- };
14
+ try {
15
+ const result = await apiMethod(...apiArgs);
16
+
17
+ if (state) state.value = result;
18
+
19
+ return result;
20
+ } catch (err) {
21
+ throw createError({
22
+ statusCode: 500,
23
+ statusMessage: `Error fetching ${key}`,
24
+ message: err instanceof Error ? err.message : 'An unknown error occurred',
25
+ });
26
+ }
27
+ };
25
28
  }
@@ -4,13 +4,15 @@ import type { ICategoryCard } from '../types';
4
4
  export const useFetchCategoriesByLetter = (
5
5
  apiMethod: (...args: any[]) => Promise<Array<ICategoryCard>>
6
6
  ) => {
7
+ const key = EAsyncData.Categories;
7
8
  const lang = useI18n().locale.value as ELanguage;
8
9
  const slug = useSlug();
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
9
11
 
10
12
  const { data, status, error } = useAsyncData<Array<ICategoryCard>>(
11
- EAsyncData.Categories,
13
+ key,
12
14
  () => useApiFetcher<Array<ICategoryCard>>(
13
- EAsyncData.Categories,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  slug.value,
@@ -4,13 +4,15 @@ import type { ICardInfo } from '../types';
4
4
  export const useFetchCategoriesByName = async (
5
5
  apiMethod: (...args: any[]) => Promise<ICardInfo>
6
6
  ) => {
7
+ const key = EAsyncData.CategoriesByName;
7
8
  const lang = useI18n().locale.value as ELanguage;
8
9
  const slug = useSlug();
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
9
11
 
10
12
  const { data, status, error } = await useAsyncData<ICardInfo>(
11
- EAsyncData.CategoriesByName,
13
+ key,
12
14
  () => useApiFetcher<ICardInfo>(
13
- EAsyncData.CategoriesByName,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  slug.value,
@@ -4,13 +4,15 @@ import type { IChipsItem } from '../types';
4
4
  export const useFetchCategoriesByPhrase = async (
5
5
  apiMethod: (...args: any[]) => Promise<Array<IChipsItem>>
6
6
  ) => {
7
+ const key = EAsyncData.CategoriesByPhrase;
7
8
  const lang = useI18n().locale.value as ELanguage;
8
9
  const slug = useSlug();
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
9
11
 
10
12
  const { data, status, error } = await useAsyncData<Array<IChipsItem>>(
11
- EAsyncData.CategoriesByPhrase,
13
+ key,
12
14
  () => useApiFetcher<Array<IChipsItem>>(
13
- EAsyncData.CategoriesByPhrase,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  slug.value,
@@ -4,13 +4,15 @@ import type { ICategoryCard } from '../types';
4
4
  export const useFetchCategoriesGroupByLetter = (
5
5
  apiMethod: (...args: any[]) => Promise<Record<string, Array<ICategoryCard>>>
6
6
  ) => {
7
+ const key = EAsyncData.GroupsCategoriesByLetter;
7
8
  const { locale } = useI18n();
8
9
  const lang = locale.value as ELanguage;
10
+ const stateKey = computed(() => `data-${key}-${lang}`);
9
11
 
10
12
  const { data, error, refresh, status } = useAsyncData<Record<string, Array<ICategoryCard>>>(
11
- EAsyncData.GroupsCategoriesByLetter,
13
+ key,
12
14
  () => useApiFetcher<Record<string, Array<ICategoryCard>>>(
13
- EAsyncData.GroupsCategoriesByLetter,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  )(),
@@ -4,14 +4,15 @@ import type { IRelatedPhrases } from '../types';
4
4
  export const useFetchCategoriesRelated = (
5
5
  apiMethod: (...args: any[]) => Promise<IRelatedPhrases>
6
6
  ) => {
7
-
8
7
  const lang = useI18n().locale.value as ELanguage;
9
8
  const slug = useSlug();
9
+ const key = EAsyncData.CategoriesRelated;
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
10
11
 
11
12
  const { data, status, error } = useAsyncData<IRelatedPhrases>(
12
- EAsyncData.CategoriesRelated,
13
+ key,
13
14
  () => useApiFetcher<IRelatedPhrases>(
14
- EAsyncData.CategoriesRelated,
15
+ stateKey.value,
15
16
  apiMethod,
16
17
  lang,
17
18
  slug.value,
@@ -6,11 +6,13 @@ export const useFetchChannelsByName = (
6
6
  ) => {
7
7
  const lang = useI18n().locale.value as ELanguage;
8
8
  const slug = useSlug();
9
+ const key = EAsyncData.ChannelByName;
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
9
11
 
10
12
  const { data, status, error } = useAsyncData<ICardInfo>(
11
- EAsyncData.ChannelByName,
13
+ key,
12
14
  () => useApiFetcher<ICardInfo>(
13
- EAsyncData.ChannelByName,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  slug.value,
@@ -8,11 +8,13 @@ export const useFetchChannelsByNetworkName = (
8
8
  const lang = useI18n().locale.value as ELanguage;
9
9
  const route = useRoute();
10
10
  const slug = useSlug();
11
+ const key = EAsyncData.ChannelsByNetworkName;
12
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
11
13
 
12
14
  const { data, status, error } = useAsyncData<PaginatedResponse<IChannelCard>>(
13
- EAsyncData.ChannelsByNetworkName,
15
+ key,
14
16
  () => useApiFetcher<PaginatedResponse<IChannelCard>>(
15
- EAsyncData.ChannelsByNetworkName,
17
+ stateKey.value,
16
18
  apiMethod,
17
19
  lang,
18
20
  {
@@ -8,11 +8,13 @@ export const useFetchChannels = async (
8
8
  ) => {
9
9
  const route = useRoute();
10
10
  const lang = useI18n().locale.value as ELanguage;
11
+ const key = EAsyncData.Channels;
12
+ const stateKey = computed(() => `data-${key}-${JSON.stringify(route.query)}-${lang}`);
11
13
 
12
14
  const { data, status, error } = await useAsyncData<PaginatedResponse<IChannelCard>>(
13
- EAsyncData.Channels,
15
+ key,
14
16
  () => useApiFetcher<PaginatedResponse<IChannelCard>>(
15
- EAsyncData.Channels,
17
+ stateKey.value,
16
18
  apiMethod,
17
19
  lang,
18
20
  {
@@ -5,11 +5,13 @@ export const useFetchDictionariesCountries = (
5
5
  apiMethod: (...args: any[]) => Promise<ICountries>
6
6
  ) => {
7
7
  const lang = useI18n().locale.value as ELanguage;
8
+ const key = EAsyncData.Countries;
9
+ const stateKey = computed(() => `data-${key}-${lang}`);
8
10
 
9
11
  const { data, status, error } = useAsyncData<ICountries>(
10
- EAsyncData.Countries,
12
+ key,
11
13
  () => useApiFetcher<ICountries>(
12
- EAsyncData.Countries,
14
+ stateKey.value,
13
15
  apiMethod,
14
16
  lang,
15
17
  )(),
@@ -5,11 +5,13 @@ export const useFetchDictionariesGenders = (
5
5
  apiMethod: (...args: any[]) => Promise<IGenders>
6
6
  ) => {
7
7
  const lang = useI18n().locale.value as ELanguage;
8
+ const key = EAsyncData.Genders;
9
+ const stateKey = computed(() => `data-${key}-${lang}`);
8
10
 
9
11
  const { data, status, error } = useAsyncData<IGenders>(
10
- EAsyncData.Genders,
12
+ key,
11
13
  () => useApiFetcher<IGenders>(
12
- EAsyncData.Genders,
14
+ stateKey.value,
13
15
  apiMethod,
14
16
  lang,
15
17
  )(),
@@ -6,11 +6,13 @@ export const useFetchFooterCategories = (
6
6
  ) => {
7
7
  const { locale } = useI18n();
8
8
  const lang = locale.value as ELanguage;
9
+ const key = EAsyncData.CategoriesTopRandomFooter;
10
+ const stateKey = computed(() => `data-${key}-${lang}`);
9
11
 
10
12
  const { data, status, error } = useAsyncData<IChipsItem[]>(
11
- EAsyncData.CategoriesTopRandomFooter,
13
+ key,
12
14
  () => useApiFetcher<IChipsItem[]>(
13
- EAsyncData.CategoriesTopRandomFooter,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  )(),
@@ -6,11 +6,13 @@ export const useFetchGroupsCategories = async (
6
6
  ) => {
7
7
  const { locale } = useI18n();
8
8
  const lang = locale.value as ELanguage;
9
+ const key = EAsyncData.GroupsCategoriesFilter;
10
+ const stateKey = computed(() => `data-${key}-${lang}`);
9
11
 
10
12
  const { data, pending: status, error } = await useAsyncData<IGroupCategories[]>(
11
- EAsyncData.GroupsCategoriesFilter,
13
+ key,
12
14
  () => useApiFetcher<IGroupCategories[]>(
13
- EAsyncData.Categories,
15
+ stateKey.value,
14
16
  apiMethod,
15
17
  lang,
16
18
  )(),
@@ -4,18 +4,20 @@ import type { ICardInfo } from '../types';
4
4
  export const useFetchModelByName = async (
5
5
  apiMethod: (...args: any[]) => Promise<ICardInfo>
6
6
  ) => {
7
- const lang = useI18n().locale.value as ELanguage;
8
- const slug = useSlug();
7
+ const lang = useI18n().locale.value as ELanguage;
8
+ const slug = useSlug();
9
+ const key = EAsyncData.GroupsCategoriesFilter;
10
+ const stateKey = computed(() => `data-${key}-${slug.value}-${lang}`);
9
11
 
10
- const { data, status, error } = await useAsyncData<ICardInfo>(
11
- EAsyncData.ModelsByName,
12
- () => useApiFetcher<ICardInfo>(
13
- EAsyncData.ModelsByName,
14
- apiMethod,
15
- lang,
16
- slug.value,
17
- )()
18
- );
12
+ const { data, status, error } = await useAsyncData<ICardInfo>(
13
+ key,
14
+ () => useApiFetcher<ICardInfo>(
15
+ stateKey.value,
16
+ apiMethod,
17
+ lang,
18
+ slug.value,
19
+ )()
20
+ );
19
21
 
20
- return { data, status, error };
22
+ return { data, status, error };
21
23
  };
@@ -7,7 +7,10 @@ export const useFetchModelsByLetter = async (
7
7
  apiMethod: (...args: any[]) => Promise<PaginatedResponse<IModelCard>>
8
8
  ) => {
9
9
  const route = useRoute();
10
+ const slug = useSlug();
10
11
  const lang = useI18n().locale.value as ELanguage;
12
+ const key = EAsyncData.ModelsByFirstLetter;
13
+ const stateKey = computed(() => `data-${key}-${slug.value}-${JSON.stringify(route.query)}-${lang}`);
11
14
 
12
15
  const filters = computed(() => Object.entries(route.query)
13
16
  .filter(([key]) => key.startsWith('filter_'))
@@ -16,12 +19,10 @@ export const useFetchModelsByLetter = async (
16
19
  value: Array.isArray(value) ? value[ 0 ] : (value as string),
17
20
  })));
18
21
 
19
- const slug = useSlug();
20
-
21
22
  const { data, status, refresh } = await useAsyncData<PaginatedResponse<IModelCard>>(
22
- () => `${EAsyncData.Models}-${route.params.slug || ''}`,
23
+ stateKey.value,
23
24
  () => useApiFetcher<PaginatedResponse<IModelCard>>(
24
- EAsyncData.Models,
25
+ stateKey.value,
25
26
  apiMethod,
26
27
  lang,
27
28
  {
@@ -9,11 +9,13 @@ export const useFetchModelsByPhrases = async (
9
9
  const { locale } = useI18n();
10
10
  const lang = locale.value as ELanguage;
11
11
  const slug = useSlug();
12
+ const key = EAsyncData.ModelsByPhrases;
13
+ const stateKey = computed(() => `data-${key}-${slug.value}-${JSON.stringify(route.query)}-${lang}`);
12
14
 
13
15
  const { data, status, error } = await useAsyncData<PaginatedResponse<IModelCard>>(
14
- EAsyncData.ModelsByPhrases,
16
+ key,
15
17
  () => useApiFetcher<PaginatedResponse<IModelCard>>(
16
- EAsyncData.ModelsByPhrases,
18
+ stateKey.value,
17
19
  apiMethod,
18
20
  {
19
21
  'per-page': 48,
@@ -7,17 +7,20 @@ export const useFetchRelatedModels = (
7
7
  cacheId: string
8
8
  ) => {
9
9
  const { locale } = useI18n();
10
+ const lang = locale.value as ELanguage;
10
11
  const slug = useSlug();
12
+ const key = EAsyncData.TopModelsMore;
13
+ const stateKey = computed(() => `data-${key}-${slug.value}-${cacheId}-${lang}`);
11
14
 
12
15
  const { data, status, refresh } = useAsyncData<PaginatedResponse<IModelCard>>(
13
- `${EAsyncData.TopModelsMore} ${cacheId}`,
16
+ stateKey.value,
14
17
  () => useApiFetcher<PaginatedResponse<IModelCard>>(
15
- EAsyncData.TopModelsMore,
18
+ stateKey.value,
16
19
  apiMethod,
17
20
  slug.value,
18
21
  limit,
19
22
  0,
20
- locale.value as ELanguage,
23
+ lang,
21
24
  cacheId
22
25
  )(),
23
26
  );
@@ -8,6 +8,8 @@ export const useFetchModels = async (
8
8
  ) => {
9
9
  const route = useRoute();
10
10
  const lang = useI18n().locale.value as ELanguage;
11
+ const key = EAsyncData.Models;
12
+ const stateKey = computed(() => `data-${key}-${JSON.stringify(route.query)}-${lang}`);
11
13
 
12
14
  const filters = computed(() => Object.entries(route.query)
13
15
  .filter(([key]) => key.startsWith('filter_'))
@@ -17,9 +19,9 @@ export const useFetchModels = async (
17
19
  })));
18
20
 
19
21
  const { data, status, refresh } = await useAsyncData<PaginatedResponse<IModelCard>>(
20
- EAsyncData.Models,
22
+ key,
21
23
  () => useApiFetcher<PaginatedResponse<IModelCard>>(
22
- EAsyncData.Models,
24
+ stateKey.value,
23
25
  apiMethod,
24
26
  lang,
25
27
  {
@@ -15,11 +15,13 @@ export function useFetchMultiSuggest(
15
15
  const { locale } = useI18n();
16
16
  const lang = locale.value as ELanguage;
17
17
  const slug = useSlug();
18
+ const key = watchRoute ? EAsyncData.MultiSuggestRouteSearch : EAsyncData.MultiSuggestSearch;
19
+ const stateKey = computed(() => `data-${key}-${watchRoute ? slug.value : searchValue.value}-${lang}`);
18
20
 
19
21
  const { data, status } = useAsyncData<IMultiSuggest | null>(
20
- watchRoute ? EAsyncData.MultiSuggestRouteSearch : EAsyncData.MultiSuggestSearch,
22
+ key,
21
23
  () => useApiFetcher<IMultiSuggest | null>(
22
- EAsyncData.Channels,
24
+ stateKey.value,
23
25
  apiMethod,
24
26
  lang,
25
27
  watchRoute ? slug.value : searchValue.value,
@@ -4,13 +4,16 @@ import type { IPlaylistInfoType } from '../types';
4
4
 
5
5
  export const useFetchPlaylistsById = async (apiMethod: (...args: any[]) => Promise<IPlaylistInfoType>) => {
6
6
  const route = useRoute();
7
+ const id = computed(() => String(route.params['id']));
8
+ const key = EAsyncData.PlaylistById;
9
+ const stateKey = computed(() => `data-${key}-${id.value}-${JSON.stringify(route.query)}`);
7
10
 
8
11
  const { data, status, error, refresh } = await useAsyncData<IPlaylistInfoType>(
9
- EAsyncData.PlaylistById,
12
+ key,
10
13
  () => useApiFetcher<IPlaylistInfoType>(
11
- EAsyncData.PlaylistById,
14
+ stateKey.value,
12
15
  apiMethod,
13
- String(route.params['id'])
16
+ id.value
14
17
  )(),
15
18
  );
16
19
 
@@ -14,7 +14,7 @@ export const useFetchVideosByCategories = async (
14
14
  const { data, status, error } = await useAsyncData<PaginatedResponse<IVideoCard>>(
15
15
  EAsyncData.VideosByCategory,
16
16
  () => useApiFetcher<PaginatedResponse<IVideoCard>>(
17
- EAsyncData.VideosByCategory,
17
+ null,
18
18
  apiMethod,
19
19
  lang,
20
20
  {
@@ -10,10 +10,11 @@ export const useFetchVideos = async (
10
10
  const perPage = 48;
11
11
  const lang = useI18n().locale.value as ELanguage;
12
12
  const filters = computed(() => useGetVideosFilterRequest(route, selectDurationItems, selectAddedItems));
13
- const stateKey = computed(() => `data-${EAsyncData.Videos}-${JSON.stringify(route.query)}`);
13
+ const key = EAsyncData.Videos;
14
+ const stateKey = computed(() => `data-${key}-${JSON.stringify(route.query)}-${lang}`);
14
15
 
15
16
  const { data, status, error } = await useAsyncData<PaginatedResponse<IVideoCard>>(
16
- EAsyncData.Videos,
17
+ key,
17
18
  () => useApiFetcher<PaginatedResponse<IVideoCard>>(
18
19
  stateKey.value,
19
20
  apiMethod,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.289",
4
+ "version": "0.0.291",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {