fansunited-data-layer 0.9.0 → 0.10.0
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/api/fansunited/index.d.ts +2 -0
- package/api/fansunited/index.d.ts.map +1 -1
- package/api/fansunited/search/__tests__/index.test.d.ts +2 -0
- package/api/fansunited/search/__tests__/index.test.d.ts.map +1 -0
- package/api/fansunited/search/__tests__/transformer.test.d.ts +2 -0
- package/api/fansunited/search/__tests__/transformer.test.d.ts.map +1 -0
- package/api/fansunited/search/constants.d.ts +2 -0
- package/api/fansunited/search/constants.d.ts.map +1 -0
- package/api/fansunited/search/http.d.ts +5 -0
- package/api/fansunited/search/http.d.ts.map +1 -0
- package/api/fansunited/search/index.d.ts +50 -0
- package/api/fansunited/search/index.d.ts.map +1 -0
- package/api/fansunited/search/raw-types.d.ts +93 -0
- package/api/fansunited/search/raw-types.d.ts.map +1 -0
- package/api/fansunited/search/transformer.d.ts +66 -0
- package/api/fansunited/search/transformer.d.ts.map +1 -0
- package/api/fansunited/search/types.d.ts +136 -0
- package/api/fansunited/search/types.d.ts.map +1 -0
- package/cache/__tests__/cache-manager.test.d.ts +2 -0
- package/cache/__tests__/cache-manager.test.d.ts.map +1 -0
- package/cache/__tests__/cleanup.test.d.ts +2 -0
- package/cache/__tests__/cleanup.test.d.ts.map +1 -0
- package/cache/__tests__/memory-store.test.d.ts +2 -0
- package/cache/__tests__/memory-store.test.d.ts.map +1 -0
- package/cache/__tests__/sqlite-store.test.d.ts +2 -0
- package/cache/__tests__/sqlite-store.test.d.ts.map +1 -0
- package/cache/cache-manager.d.ts +42 -0
- package/cache/cache-manager.d.ts.map +1 -0
- package/cache/cleanup.d.ts +7 -0
- package/cache/cleanup.d.ts.map +1 -0
- package/cache/index.d.ts +13 -0
- package/cache/index.d.ts.map +1 -0
- package/cache/memory-store.d.ts +12 -0
- package/cache/memory-store.d.ts.map +1 -0
- package/cache/sqlite-store.d.ts +19 -0
- package/cache/sqlite-store.d.ts.map +1 -0
- package/cache/types.d.ts +15 -0
- package/cache/types.d.ts.map +1 -0
- package/client.js +2 -2
- package/config/types.d.ts +2 -0
- package/config/types.d.ts.map +1 -1
- package/fansunited-data-layer.cjs +1 -1
- package/fansunited-data-layer.js +2600 -1462
- package/index.d.ts +5 -3
- package/index.d.ts.map +1 -1
- package/{matches-CIte0UPI.js → matches-dKvggZia.js} +21 -21
- package/package.json +11 -3
- package/types/canonical/base.types.d.ts +28 -2
- package/types/canonical/base.types.d.ts.map +1 -1
- package/types/canonical/index.d.ts +1 -1
- package/types/canonical/index.d.ts.map +1 -1
|
@@ -6,5 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { getFansUnitedFootballCompetitions, getFansUnitedFootballCompetition, getFansUnitedFootballTeam, getFansUnitedFootballTeams, getFansUnitedFootballPlayer, getFansUnitedFootballPlayers, getFansUnitedFootballMatch, getFansUnitedFootballMatches, getFansUnitedFootballSearch, } from "./football";
|
|
8
8
|
export type { GetFootballCompetitionsOptions, GetFootballCompetitionOptions, GetFootballTeamOptions, GetFootballTeamsOptions, GetFootballPlayerOptions, GetFootballPlayersOptions, GetFootballMatchOptions, GetFootballMatchesOptions, GetFootballSearchOptions, SearchEntityType, FansUnitedFootballSearchResult, } from "./football";
|
|
9
|
+
export { getFansUnitedSearchEntities, getFansUnitedEntityById, getFansUnitedEntitiesByIds, getFansUnitedCompetitions, getFansUnitedTeamsByCountry, getFansUnitedTeamsByCompetition, getFansUnitedCountries, getFansUnitedVenues, } from "./search";
|
|
10
|
+
export type { SearchMode, EntityContentType, EntitySearchOptions, GetEntityByIdOptions, GetEntitiesByIdsOptions, GetCompetitionsOptions, GetTeamsByCountryOptions, GetTeamsByCompetitionOptions, GetCountriesOptions, GetVenuesOptions, RawSearchEntity, SearchEntityResult, SearchEntitySummary, EntitySearchResponse, PaginationMeta, PaginatedResult, } from "./search";
|
|
9
11
|
export type { NextCacheOptions } from "./http";
|
|
10
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/api/fansunited/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,iCAAiC,EACjC,gCAAgC,EAChC,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,GAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EACR,8BAA8B,EAC9B,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,8BAA8B,GACjC,MAAM,YAAY,CAAC;AAGpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/api/fansunited/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACH,iCAAiC,EACjC,gCAAgC,EAChC,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,GAC9B,MAAM,YAAY,CAAC;AAEpB,YAAY,EACR,8BAA8B,EAC9B,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EAChB,8BAA8B,GACjC,MAAM,YAAY,CAAC;AAGpB,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,mBAAmB,GACtB,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,eAAe,GAClB,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/api/fansunited/search/__tests__/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.test.d.ts","sourceRoot":"","sources":["../../../../../src/lib/api/fansunited/search/__tests__/transformer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,qCAAqC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/http.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,eAAO,MAAM,UAAU,wCAA6C,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fans United Search API - Public functions with caching
|
|
3
|
+
*/
|
|
4
|
+
import type { EntitySearchOptions, GetEntityByIdOptions, GetEntitiesByIdsOptions, GetCompetitionsOptions, GetTeamsByCountryOptions, GetTeamsByCompetitionOptions, GetCountriesOptions, GetVenuesOptions, PaginatedResult, SearchEntityResult, SearchEntitySummary } from "./types";
|
|
5
|
+
import type { FUSportsCompetitionSummary, FUSportsTeamSummary, FUSportsCountrySummary, FUSportsVenueSummary } from "../../../types/canonical/base.types";
|
|
6
|
+
/**
|
|
7
|
+
* Search entities across all content types.
|
|
8
|
+
* Returns transformed canonical types.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getFansUnitedSearchEntities(options?: EntitySearchOptions, config?: {
|
|
11
|
+
next?: EntitySearchOptions["next"];
|
|
12
|
+
}): Promise<PaginatedResult<SearchEntitySummary>>;
|
|
13
|
+
/**
|
|
14
|
+
* Get a single entity by ID.
|
|
15
|
+
* Returns transformed canonical type.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getFansUnitedEntityById(id: string, options?: GetEntityByIdOptions): Promise<SearchEntityResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Get multiple entities by IDs — smart batch caching.
|
|
20
|
+
* Only fetches uncached IDs from the API.
|
|
21
|
+
* Returns transformed canonical types.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getFansUnitedEntitiesByIds(ids: string[], options?: GetEntitiesByIdsOptions): Promise<SearchEntityResult[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get competitions with optional filtering.
|
|
26
|
+
* Returns transformed FUSportsCompetition objects.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getFansUnitedCompetitions(options?: GetCompetitionsOptions): Promise<PaginatedResult<FUSportsCompetitionSummary>>;
|
|
29
|
+
/**
|
|
30
|
+
* Get teams filtered by country.
|
|
31
|
+
* Returns transformed FUSportsTeamCompetitor objects.
|
|
32
|
+
*/
|
|
33
|
+
export declare function getFansUnitedTeamsByCountry(countryId: string, options?: GetTeamsByCountryOptions): Promise<PaginatedResult<FUSportsTeamSummary>>;
|
|
34
|
+
/**
|
|
35
|
+
* Get teams filtered by competition.
|
|
36
|
+
* Returns transformed FUSportsTeamCompetitor objects.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getFansUnitedTeamsByCompetition(competitionId: string, options?: GetTeamsByCompetitionOptions): Promise<PaginatedResult<FUSportsTeamSummary>>;
|
|
39
|
+
/**
|
|
40
|
+
* Get countries with optional filtering.
|
|
41
|
+
* Returns transformed FUSportsCountry objects.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getFansUnitedCountries(options?: GetCountriesOptions): Promise<PaginatedResult<FUSportsCountrySummary>>;
|
|
44
|
+
/**
|
|
45
|
+
* Get venues with optional filtering.
|
|
46
|
+
* Returns transformed FUSportsVenue objects.
|
|
47
|
+
*/
|
|
48
|
+
export declare function getFansUnitedVenues(options?: GetVenuesOptions): Promise<PaginatedResult<FUSportsVenueSummary>>;
|
|
49
|
+
export type { SearchMode, EntityContentType, EntitySearchOptions, GetEntityByIdOptions, GetEntitiesByIdsOptions, GetCompetitionsOptions, GetTeamsByCountryOptions, GetTeamsByCompetitionOptions, GetCountriesOptions, GetVenuesOptions, RawSearchEntity, EntitySearchResponse, PaginationMeta, PaginatedResult, SearchEntityResult, SearchEntitySummary, } from "./types";
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACR,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAGhB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACtB,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EACR,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACvB,MAAM,qCAAqC,CAAC;AAgK7C;;;GAGG;AACH,wBAAsB,2BAA2B,CAC7C,OAAO,GAAE,mBAAwB,EACjC,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAA;CAAE,GAChD,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAqC/C;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CACzC,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,oBAAoB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAuB7B;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAC5C,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,CAAC,EAAE,uBAAuB,GAClC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAkC/B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC3C,OAAO,GAAE,sBAA2B,GACrC,OAAO,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CA2BtD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,wBAA6B,GACvC,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CA6B/C;AAED;;;GAGG;AACH,wBAAsB,+BAA+B,CACjD,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,4BAAiC,GAC3C,OAAO,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CA6B/C;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CACxC,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CA0BlD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CA2BhD;AAGD,YAAY,EACR,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,mBAAmB,GACtB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw API response types for the Fans United Search API.
|
|
3
|
+
* These represent the exact shape returned by the API before transformation.
|
|
4
|
+
*/
|
|
5
|
+
export interface RawTranslation {
|
|
6
|
+
language: string;
|
|
7
|
+
name: string;
|
|
8
|
+
short_name?: string | null;
|
|
9
|
+
}
|
|
10
|
+
export interface RawAsset {
|
|
11
|
+
key: string;
|
|
12
|
+
value: string;
|
|
13
|
+
}
|
|
14
|
+
export interface RawRelated {
|
|
15
|
+
relationship: string;
|
|
16
|
+
related_id: string;
|
|
17
|
+
}
|
|
18
|
+
export interface RawProviderRef {
|
|
19
|
+
provider: string;
|
|
20
|
+
id: string;
|
|
21
|
+
}
|
|
22
|
+
export interface RawBranding {
|
|
23
|
+
primary_color?: string | null;
|
|
24
|
+
secondary_color?: string | null;
|
|
25
|
+
text_color?: string | null;
|
|
26
|
+
background_color?: string | null;
|
|
27
|
+
background_gradient_from_color?: string | null;
|
|
28
|
+
background_gradient_to_color?: string | null;
|
|
29
|
+
background_image?: string | null;
|
|
30
|
+
}
|
|
31
|
+
export interface RawTeamBranding {
|
|
32
|
+
primary_color?: string | null;
|
|
33
|
+
secondary_color?: string | null;
|
|
34
|
+
tertiary_color?: string | null;
|
|
35
|
+
text_color?: string | null;
|
|
36
|
+
background_color?: string | null;
|
|
37
|
+
background_gradient_from_color?: string | null;
|
|
38
|
+
background_gradient_to_color?: string | null;
|
|
39
|
+
background_image?: string | null;
|
|
40
|
+
}
|
|
41
|
+
export interface RawSearchEntityBase {
|
|
42
|
+
id: string;
|
|
43
|
+
sport: string;
|
|
44
|
+
name: string;
|
|
45
|
+
short_name?: string | null;
|
|
46
|
+
gender?: string;
|
|
47
|
+
translations: RawTranslation[];
|
|
48
|
+
assets: RawAsset[];
|
|
49
|
+
related: RawRelated[];
|
|
50
|
+
provider_ref: RawProviderRef[];
|
|
51
|
+
}
|
|
52
|
+
export interface RawCompetition extends RawSearchEntityBase {
|
|
53
|
+
content_type: "COMPETITION";
|
|
54
|
+
format?: string;
|
|
55
|
+
branding?: RawBranding;
|
|
56
|
+
}
|
|
57
|
+
export interface RawTeam extends RawSearchEntityBase {
|
|
58
|
+
type?: string;
|
|
59
|
+
full_name?: string | null;
|
|
60
|
+
three_letter_code?: string | null;
|
|
61
|
+
nickname?: string | null;
|
|
62
|
+
country_id?: string | null;
|
|
63
|
+
metadata?: {
|
|
64
|
+
branding?: RawTeamBranding;
|
|
65
|
+
};
|
|
66
|
+
additional_information?: unknown[];
|
|
67
|
+
}
|
|
68
|
+
export interface RawAthlete extends RawSearchEntityBase {
|
|
69
|
+
type?: string;
|
|
70
|
+
position?: string | null;
|
|
71
|
+
birth_date?: string | null;
|
|
72
|
+
shirt_number?: number | null;
|
|
73
|
+
country_id?: string | null;
|
|
74
|
+
metadata?: {
|
|
75
|
+
branding?: RawTeamBranding;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export interface RawCountry extends RawSearchEntityBase {
|
|
79
|
+
country_code?: string | null;
|
|
80
|
+
alias?: string | null;
|
|
81
|
+
}
|
|
82
|
+
export interface RawVenue extends RawSearchEntityBase {
|
|
83
|
+
capacity?: number | null;
|
|
84
|
+
latitude?: number | null;
|
|
85
|
+
longitude?: number | null;
|
|
86
|
+
country_id?: string | null;
|
|
87
|
+
}
|
|
88
|
+
export interface RawCoach extends RawSearchEntityBase {
|
|
89
|
+
type?: string;
|
|
90
|
+
birth_date?: string | null;
|
|
91
|
+
country_id?: string | null;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=raw-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-types.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/raw-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw → Canonical transformer for Search API entities.
|
|
3
|
+
*
|
|
4
|
+
* Resolves translations to a target language (with EN fallback),
|
|
5
|
+
* maps raw snake_case fields to canonical camelCase types,
|
|
6
|
+
* and hydrates related entries (country + related) one level deep from cache.
|
|
7
|
+
*/
|
|
8
|
+
import type { FUSportsCompetition, FUSportsTeamCompetitor, FUSportsPlayerCompetitor, FUSportsCountry, FUSportsVenue, FUSportsCoach, FUSportsRelated, FUBranding, FUSportsCompetitionSummary, FUSportsTeamSummary, FUSportsPlayerSummary, FUSportsCountrySummary, FUSportsVenueSummary, FUSportsCoachSummary } from "../../../types/canonical/base.types";
|
|
9
|
+
import type { SearchEntityResult, SearchEntitySummary } from "./types";
|
|
10
|
+
import type { RawTranslation, RawAsset, RawRelated, RawProviderRef, RawBranding, RawTeamBranding, RawSearchEntityBase, RawCompetition, RawTeam, RawAthlete, RawCountry, RawVenue, RawCoach } from "./raw-types";
|
|
11
|
+
/**
|
|
12
|
+
* Resolve name/shortName in target language.
|
|
13
|
+
* Fallback order: target lang → EN → raw name.
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveTranslation(translations: RawTranslation[], lang: string, fallbackName: string, fallbackShortName?: string | null): {
|
|
16
|
+
name: string;
|
|
17
|
+
shortName?: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Map [{key: "LOGO", value: "url"}] → { logo: "url" }
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveAssets(assets: RawAsset[]): Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Map raw branding snake_case → canonical FUBranding camelCase.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveBranding(raw: RawBranding | RawTeamBranding | undefined | null): FUBranding | undefined;
|
|
27
|
+
/** Map raw provider_ref → canonical providerRef */
|
|
28
|
+
export declare function resolveProviderRef(refs: RawProviderRef[]): {
|
|
29
|
+
provider: string;
|
|
30
|
+
id: string;
|
|
31
|
+
}[];
|
|
32
|
+
/** Extract related IDs by relationship type */
|
|
33
|
+
export declare function getRelatedIds(related: RawRelated[], relationship: string): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a country from cache (one level deep).
|
|
36
|
+
* Returns FUSportsCountry with name in target lang if cached, or { id } if not.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveCountry(countryId: string | null | undefined, related: RawRelated[], lang: string): FUSportsCountry | undefined;
|
|
39
|
+
export declare function transformCountrySummary(raw: RawCountry, lang: string): FUSportsCountrySummary;
|
|
40
|
+
export declare function transformCompetitionSummary(raw: RawCompetition, lang: string): FUSportsCompetitionSummary;
|
|
41
|
+
export declare function transformTeamSummary(raw: RawTeam, lang: string): FUSportsTeamSummary;
|
|
42
|
+
export declare function transformAthleteSummary(raw: RawAthlete, lang: string): FUSportsPlayerSummary;
|
|
43
|
+
export declare function transformVenueSummary(raw: RawVenue, lang: string): FUSportsVenueSummary;
|
|
44
|
+
export declare function transformCoachSummary(raw: RawCoach, lang: string): FUSportsCoachSummary;
|
|
45
|
+
/**
|
|
46
|
+
* Resolve all related entries from cache, grouped by relationship type.
|
|
47
|
+
* Returns undefined if there are no related entries.
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveRelated(related: RawRelated[], lang: string): FUSportsRelated | undefined;
|
|
50
|
+
export declare function transformCompetition(raw: RawCompetition, lang: string): FUSportsCompetition;
|
|
51
|
+
export declare function transformTeam(raw: RawTeam, lang: string): FUSportsTeamCompetitor;
|
|
52
|
+
export declare function transformAthlete(raw: RawAthlete, lang: string): FUSportsPlayerCompetitor;
|
|
53
|
+
export declare function transformCountry(raw: RawCountry, lang: string): FUSportsCountry;
|
|
54
|
+
export declare function transformVenue(raw: RawVenue, lang: string): FUSportsVenue;
|
|
55
|
+
export declare function transformCoach(raw: RawCoach, lang: string): FUSportsCoach;
|
|
56
|
+
/**
|
|
57
|
+
* Determine entity type from raw data and call the appropriate transformer.
|
|
58
|
+
* The raw API uses `content_type` for competitions and `type` / general context for others.
|
|
59
|
+
*/
|
|
60
|
+
export declare function transformEntity(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntityResult;
|
|
61
|
+
/**
|
|
62
|
+
* Summary dispatcher — like transformEntity but calls summary transforms.
|
|
63
|
+
* Returns lightweight types without `related` or `providerRef`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function transformEntitySummary(raw: RawSearchEntityBase & Record<string, unknown>, lang: string): SearchEntitySummary;
|
|
66
|
+
//# sourceMappingURL=transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the Fans United Search API
|
|
3
|
+
*/
|
|
4
|
+
import type { NextCacheOptions } from "../http";
|
|
5
|
+
import type { DataLayerConfig } from "../../../config";
|
|
6
|
+
import type { FUSportsCompetition, FUSportsTeamCompetitor, FUSportsPlayerCompetitor, FUSportsCountry, FUSportsVenue, FUSportsCoach, FUSportsCompetitionSummary, FUSportsTeamSummary, FUSportsPlayerSummary, FUSportsCountrySummary, FUSportsVenueSummary, FUSportsCoachSummary } from "../../../types/canonical/base.types";
|
|
7
|
+
export type SearchMode = "CASE_INSENSITIVE" | "CASE_SENSITIVE" | "FULL_MATCH";
|
|
8
|
+
export type EntityContentType = "venue" | "athlete" | "team" | "competition" | "country" | "coach";
|
|
9
|
+
export interface PaginationMeta {
|
|
10
|
+
current_page: number;
|
|
11
|
+
items_per_page: number;
|
|
12
|
+
total_items: number;
|
|
13
|
+
number_of_pages: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Summary union — returned by list/search functions.
|
|
17
|
+
* No `related` or `providerRef` fields, only lightweight data for rendering lists.
|
|
18
|
+
*/
|
|
19
|
+
export type SearchEntitySummary = (FUSportsCompetitionSummary & {
|
|
20
|
+
entityType: "competition";
|
|
21
|
+
}) | (FUSportsTeamSummary & {
|
|
22
|
+
entityType: "team";
|
|
23
|
+
}) | (FUSportsPlayerSummary & {
|
|
24
|
+
entityType: "athlete";
|
|
25
|
+
}) | (FUSportsCountrySummary & {
|
|
26
|
+
entityType: "country";
|
|
27
|
+
}) | (FUSportsVenueSummary & {
|
|
28
|
+
entityType: "venue";
|
|
29
|
+
}) | (FUSportsCoachSummary & {
|
|
30
|
+
entityType: "coach";
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Full union — returned by getById/getByIds functions.
|
|
34
|
+
* Includes `related` (hydrated one level deep) and `providerRef`.
|
|
35
|
+
*/
|
|
36
|
+
export type SearchEntityResult = (FUSportsCompetition & {
|
|
37
|
+
entityType: "competition";
|
|
38
|
+
}) | (FUSportsTeamCompetitor & {
|
|
39
|
+
entityType: "team";
|
|
40
|
+
}) | (FUSportsPlayerCompetitor & {
|
|
41
|
+
entityType: "athlete";
|
|
42
|
+
}) | (FUSportsCountry & {
|
|
43
|
+
entityType: "country";
|
|
44
|
+
}) | (FUSportsVenue & {
|
|
45
|
+
entityType: "venue";
|
|
46
|
+
}) | (FUSportsCoach & {
|
|
47
|
+
entityType: "coach";
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Raw entity as stored in cache (before transformation).
|
|
51
|
+
* Kept loose so we cache exactly what the API returns.
|
|
52
|
+
*/
|
|
53
|
+
export interface RawSearchEntity {
|
|
54
|
+
id: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
export interface EntitySearchResponse {
|
|
58
|
+
data: RawSearchEntity[];
|
|
59
|
+
meta: {
|
|
60
|
+
pagination: PaginationMeta;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface PaginatedResult<T> {
|
|
64
|
+
data: T[];
|
|
65
|
+
pagination: PaginationMeta;
|
|
66
|
+
}
|
|
67
|
+
export interface EntitySearchOptions {
|
|
68
|
+
query?: string;
|
|
69
|
+
contentType?: EntityContentType;
|
|
70
|
+
ids?: string[];
|
|
71
|
+
limit?: number;
|
|
72
|
+
page?: number;
|
|
73
|
+
mode?: SearchMode;
|
|
74
|
+
sport?: string;
|
|
75
|
+
relationship?: string;
|
|
76
|
+
value?: string;
|
|
77
|
+
lang?: string;
|
|
78
|
+
next?: NextCacheOptions;
|
|
79
|
+
config?: DataLayerConfig;
|
|
80
|
+
}
|
|
81
|
+
export interface GetEntityByIdOptions {
|
|
82
|
+
lang?: string;
|
|
83
|
+
next?: NextCacheOptions;
|
|
84
|
+
config?: DataLayerConfig;
|
|
85
|
+
}
|
|
86
|
+
export interface GetEntitiesByIdsOptions {
|
|
87
|
+
lang?: string;
|
|
88
|
+
next?: NextCacheOptions;
|
|
89
|
+
config?: DataLayerConfig;
|
|
90
|
+
}
|
|
91
|
+
export interface GetCompetitionsOptions {
|
|
92
|
+
query?: string;
|
|
93
|
+
limit?: number;
|
|
94
|
+
page?: number;
|
|
95
|
+
sport?: string;
|
|
96
|
+
lang?: string;
|
|
97
|
+
next?: NextCacheOptions;
|
|
98
|
+
config?: DataLayerConfig;
|
|
99
|
+
}
|
|
100
|
+
export interface GetTeamsByCountryOptions {
|
|
101
|
+
query?: string;
|
|
102
|
+
limit?: number;
|
|
103
|
+
page?: number;
|
|
104
|
+
sport?: string;
|
|
105
|
+
lang?: string;
|
|
106
|
+
next?: NextCacheOptions;
|
|
107
|
+
config?: DataLayerConfig;
|
|
108
|
+
}
|
|
109
|
+
export interface GetTeamsByCompetitionOptions {
|
|
110
|
+
query?: string;
|
|
111
|
+
limit?: number;
|
|
112
|
+
page?: number;
|
|
113
|
+
sport?: string;
|
|
114
|
+
lang?: string;
|
|
115
|
+
next?: NextCacheOptions;
|
|
116
|
+
config?: DataLayerConfig;
|
|
117
|
+
}
|
|
118
|
+
export interface GetCountriesOptions {
|
|
119
|
+
query?: string;
|
|
120
|
+
limit?: number;
|
|
121
|
+
page?: number;
|
|
122
|
+
sport?: string;
|
|
123
|
+
lang?: string;
|
|
124
|
+
next?: NextCacheOptions;
|
|
125
|
+
config?: DataLayerConfig;
|
|
126
|
+
}
|
|
127
|
+
export interface GetVenuesOptions {
|
|
128
|
+
query?: string;
|
|
129
|
+
limit?: number;
|
|
130
|
+
page?: number;
|
|
131
|
+
sport?: string;
|
|
132
|
+
lang?: string;
|
|
133
|
+
next?: NextCacheOptions;
|
|
134
|
+
config?: DataLayerConfig;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/fansunited/search/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-manager.test.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/__tests__/cache-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.test.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/__tests__/cleanup.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.test.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/__tests__/memory-store.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-store.test.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/__tests__/sqlite-store.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache Manager - Orchestrates L1 (memory) + optional L2 with SWR pattern
|
|
3
|
+
*
|
|
4
|
+
* L2 (SQLite) is never statically imported here — it's injected at runtime
|
|
5
|
+
* via initL2() so that browser bundles don't pull in better-sqlite3.
|
|
6
|
+
*/
|
|
7
|
+
import type { CacheEntry, EntityCacheConfig, EntityType } from "./types";
|
|
8
|
+
/** Interface that L2 stores must satisfy */
|
|
9
|
+
export interface L2Store {
|
|
10
|
+
get isInitialized(): boolean;
|
|
11
|
+
get<T>(key: string): CacheEntry<T> | undefined;
|
|
12
|
+
set(key: string, entity: string, data: unknown): void;
|
|
13
|
+
setMany(entries: {
|
|
14
|
+
key: string;
|
|
15
|
+
entity: string;
|
|
16
|
+
data: unknown;
|
|
17
|
+
}[]): void;
|
|
18
|
+
cleanup(entity: string, maxTTLSeconds: number): number;
|
|
19
|
+
clear(): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Initialize L2 cache layer. Call on server startup.
|
|
23
|
+
* Client-side apps skip this — L2 is never loaded.
|
|
24
|
+
*/
|
|
25
|
+
export declare function initL2(store: L2Store): void;
|
|
26
|
+
/** Get the L2 store (if initialized) */
|
|
27
|
+
export declare function getL2(): L2Store | null;
|
|
28
|
+
declare const ENTITY_TTL_CONFIG: Record<EntityType, EntityCacheConfig>;
|
|
29
|
+
/**
|
|
30
|
+
* Single-key cache-through with SWR (Stale-While-Revalidate)
|
|
31
|
+
*/
|
|
32
|
+
export declare function cached<T>(key: string, entity: EntityType, fetcher: () => Promise<T>): Promise<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Smart batch cache — only fetches uncached IDs from the API
|
|
35
|
+
*/
|
|
36
|
+
export declare function cachedBatch<T>(ids: string[], entity: EntityType, batchFetcher: (missingIds: string[]) => Promise<Map<string, T>>, keyFn: (id: string) => string): Promise<Map<string, T>>;
|
|
37
|
+
/**
|
|
38
|
+
* Remove an entry from both cache layers
|
|
39
|
+
*/
|
|
40
|
+
export declare function invalidate(key: string): void;
|
|
41
|
+
export { ENTITY_TTL_CONFIG };
|
|
42
|
+
//# sourceMappingURL=cache-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/lib/cache/cache-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEzE,4CAA4C;AAC5C,MAAM,WAAW,OAAO;IACpB,IAAI,aAAa,IAAI,OAAO,CAAC;IAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IACzE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IACvD,KAAK,IAAI,IAAI,CAAC;CACjB;AAKD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE3C;AAED,wCAAwC;AACxC,wBAAgB,KAAK,IAAI,OAAO,GAAG,IAAI,CAEtC;AAED,QAAA,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAQ5D,CAAC;AAwCF;;GAEG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoCtG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EAAE,EACb,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAC/D,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CA6DzB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE5C;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/lib/cache/cleanup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAgB,UAAU,IAAI,IAAI,CAWjC;AAED,wBAAgB,oBAAoB,CAAC,UAAU,SAAiB,GAAG,IAAI,CAGtE;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAK1C"}
|
package/cache/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache layer - public API
|
|
3
|
+
*
|
|
4
|
+
* NOTE: sqlite-store.ts is NOT exported here to avoid pulling better-sqlite3
|
|
5
|
+
* into browser bundles. Server-side consumers should import it directly:
|
|
6
|
+
* import { initSqliteStore, sqliteStore } from './cache/sqlite-store';
|
|
7
|
+
*/
|
|
8
|
+
export { memoryStore } from "./memory-store";
|
|
9
|
+
export { cached, cachedBatch, invalidate, initL2 } from "./cache-manager";
|
|
10
|
+
export type { L2Store } from "./cache-manager";
|
|
11
|
+
export { runCleanup, startCleanupSchedule, stopCleanupSchedule } from "./cleanup";
|
|
12
|
+
export type { CacheEntry, EntityCacheConfig, EntityType } from "./types";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC1E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAClF,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L1 Cache - LRU in-memory store
|
|
3
|
+
*/
|
|
4
|
+
import type { CacheEntry } from "./types";
|
|
5
|
+
export declare const memoryStore: {
|
|
6
|
+
get<T>(key: string): CacheEntry<T> | undefined;
|
|
7
|
+
set<T>(key: string, data: T): void;
|
|
8
|
+
delete(key: string): void;
|
|
9
|
+
clear(): void;
|
|
10
|
+
readonly size: number;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../src/lib/cache/memory-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,eAAO,MAAM,WAAW;QAChB,CAAC,OAAO,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;QAI1C,CAAC,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI;gBAItB,MAAM,GAAG,IAAI;aAIhB,IAAI;mBAID,MAAM;CAGrB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L2 Cache - SQLite on-disk store (server-only)
|
|
3
|
+
*/
|
|
4
|
+
import type { CacheEntry } from "./types";
|
|
5
|
+
export declare function initSqliteStore(dbPath?: string): void;
|
|
6
|
+
export declare const sqliteStore: {
|
|
7
|
+
readonly isInitialized: boolean;
|
|
8
|
+
get<T>(key: string): CacheEntry<T> | undefined;
|
|
9
|
+
set(key: string, entity: string, data: unknown): void;
|
|
10
|
+
setMany(entries: {
|
|
11
|
+
key: string;
|
|
12
|
+
entity: string;
|
|
13
|
+
data: unknown;
|
|
14
|
+
}[]): void;
|
|
15
|
+
cleanup(entity: string, maxTTLSeconds: number): number;
|
|
16
|
+
clear(): void;
|
|
17
|
+
close(): void;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=sqlite-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/lib/cache/sqlite-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAW1C,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CA4BrD;AAED,eAAO,MAAM,WAAW;4BACC,OAAO;QAIxB,CAAC,OAAO,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS;aAarC,MAAM,UAAU,MAAM,QAAQ,OAAO,GAAG,IAAI;qBASpC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,IAAI;oBAgBxD,MAAM,iBAAiB,MAAM,GAAG,MAAM;aAQ7C,IAAI;aAIJ,IAAI;CAMhB,CAAC"}
|
package/cache/types.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared cache types
|
|
3
|
+
*/
|
|
4
|
+
export interface CacheEntry<T> {
|
|
5
|
+
data: T;
|
|
6
|
+
storedAt: number;
|
|
7
|
+
}
|
|
8
|
+
export interface EntityCacheConfig {
|
|
9
|
+
/** Time in seconds before data is considered stale (triggers background refresh) */
|
|
10
|
+
staleTTL: number;
|
|
11
|
+
/** Time in seconds before data is completely expired and must be re-fetched */
|
|
12
|
+
maxTTL: number;
|
|
13
|
+
}
|
|
14
|
+
export type EntityType = "competitions" | "teams" | "athletes" | "venues" | "countries" | "coaches" | "search";
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/cache/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAC9B,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC"}
|
package/client.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import Ds, { createContext as Xe, useContext as Je, useMemo as P, useCallback as v, useState as U, useEffect as ue, useRef as Ls } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { w as xs, z as Ns, n as Gs, y as ga, A as fa, B as ya, p as wa, r as $s, v as Us, q as Bs, C as Hs, E as Vs, m as Ws } from "./matches-dKvggZia.js";
|
|
4
|
+
import { D as fh } from "./matches-dKvggZia.js";
|
|
5
5
|
var nt = { exports: {} }, Be = {};
|
|
6
6
|
var _a;
|
|
7
7
|
function zs() {
|
package/config/types.d.ts
CHANGED
|
@@ -31,6 +31,8 @@ export interface DataLayerConfig {
|
|
|
31
31
|
apiKey: string;
|
|
32
32
|
/** Client ID for FansUnited services (required) */
|
|
33
33
|
clientId: string;
|
|
34
|
+
/** Default language for search results (e.g., "EN", "BG"). Defaults to "EN" */
|
|
35
|
+
lang?: string;
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
38
|
//# sourceMappingURL=types.d.ts.map
|
package/config/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC5B,kDAAkD;IAClD,qBAAqB,EAAE,kBAAkB,GAAG,qBAAqB,CAAC;IAElE,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAE1C,gCAAgC;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE;QACT,iDAAiD;QACjD,MAAM,EAAE,MAAM,CAAC;QACf,mDAAmD;QACnD,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC5B,kDAAkD;IAClD,qBAAqB,EAAE,kBAAkB,GAAG,qBAAqB,CAAC;IAElE,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAE1C,gCAAgC;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE;QACT,iDAAiD;QACjD,MAAM,EAAE,MAAM,CAAC;QACf,mDAAmD;QACnD,QAAQ,EAAE,MAAM,CAAC;QACjB,+EAA+E;QAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACL"}
|