@localazy/cdn-client
Version:
Node.js module that allows you to easily interact with the Localazy CDN.
446 lines (391 loc) • 11.6 kB
TypeScript
export declare class Api {
protected context: Context;
constructor(context: Context);
fetchLocale(options: ApiLocaleRequest): Promise<object | string>;
fetchMetafile(): Promise<IMetafile>;
}
export declare type ApiLocaleRequest = ILocalesCacheItem;
export declare type CacheGetLocalesRequest = ILocalesCacheItem;
export declare type CacheHasLocalesRequest = ILocalesCacheItem;
export declare type CacheKeyMetafileOptions = ILocalesCacheItem;
export declare type CacheStoreLocalesRequest = ILocalesCacheItem & {
data: object | string;
};
export declare abstract class CdnBase {
protected context: Context;
constructor(context: Context);
}
export declare class CdnCache extends CdnBase {
flush: () => void;
}
export declare class CdnClient {
metafile: CdnMetafile;
cache: CdnCache;
protected context: Context;
static version: string;
protected constructor(options: CdnClientOptions);
fetch: (options?: CdnFetchOptions) => Promise<CdnResponse>;
static create(options: CdnClientOptions): Promise<CdnClient>;
}
export declare type CdnClientOptions = {
/**
* Project metafile URL.
*/
metafile: string;
};
export declare type CdnFetchOptions = {
/**
* Select single or multiple files to fetch from the CDN.
*
* Default: all files in the metafile.
*/
files?: (CdnFile | string)[] | CdnFile | string;
/**
* Select single or multiple locales to fetch from the CDN.
*
* Default: all locales in the metafile.
*/
locales?: string[] | string;
/**
* Exclude the base locale from the list of locales to fetch.
*/
excludeBaseLocale?: boolean;
};
export declare type CdnFile = {
/**
* File ID.
*/
id: string;
/**
* File name.
*/
file: string;
/**
* File path.
*/
path: string;
/**
* File library.
*/
library: string;
/**
* File module.
*/
module: string;
/**
* File build type.
*/
buildType: string;
/**
* File product flavors.
*/
productFlavors: string[];
/**
* File locales.
*/
locales: CdnFileLocale[];
};
export declare type CdnFileLocale = {
/**
* Locale code.
*/
locale: string;
/**
* Boolean indicating if this is the base locale.
*/
isBaseLocale: boolean;
/**
* File URI.
*/
uri: string;
};
export declare type CdnLocale = {
/**
* Locale code.
*/
locale: string;
/**
* Boolean indicating if this is the base locale.
*/
isBaseLocale: boolean;
/**
* Language code.
*/
language: string;
/**
* Region code.
*/
region?: string;
/**
* Script code.
*/
script?: string;
/**
* Boolean indicating if the locale is right-to-left.
*/
isRtl: boolean;
/**
* Locale name.
*/
name: string;
/**
* Localized locale name.
*/
localizedName: string;
};
export declare type CdnLocalesOptions = {
/**
* Exclude the base locale from the list of locales.
*/
excludeBaseLocale?: boolean;
};
export declare class CdnMetafile extends CdnBase {
get projectUrl(): string;
get baseLocale(): CdnLocale;
get url(): string;
get files(): CdnFile[];
locales: (options?: CdnLocalesOptions) => CdnLocale[];
refresh: () => Promise<void>;
switch: (options: CdnClientOptions) => Promise<void>;
}
export declare type CdnResponse =
/**
* Map of file IDs with locales map as value.
*/
{
[fileId: string]: {
/**
* Map of locales with file content as value.
*/
[locale: string]: object | string;
};
}
/**
* Map of locales with file content as value.
*/
| {
[locale: string]: object | string;
}
/**
* File content.
*/
| object
/**
* File content as string for non-JSON files.
*/
| string;
export declare class Context {
metafile: MetafileContext;
cdn: CdnClient;
client: IHttpAdapter;
api: Api;
cache: LocalesCache;
responseFactory: ResponseFactory;
constructor(options: ContextOptions);
}
export declare type ContextOptions = {
metafileContext: MetafileContext;
cdn: CdnClient;
client: IHttpAdapter;
};
export declare class FetchHttpAdapter implements IHttpAdapter {
protected baseUrl: string;
constructor(baseUrl: string);
get(url: string): Promise<string | object>;
}
export declare type FilesMap = {
[id: string]: MetafileFile;
};
export declare interface ICacheAdapter<K, V> {
has: (key: K) => boolean;
get: (key: K) => V | undefined;
set: (key: K, value: V) => void;
flush: () => void;
}
export declare interface IHttpAdapter<T = object> {
get: (url: string, config?: T) => Promise<object | string>;
}
export declare interface ILocalesCacheItem {
metafileFile: MetafileFile;
metafileLocale: MetafileLocale;
}
export declare interface IMetafile {
projectUrl: string;
baseLocale: string;
timestamp: number;
files: IMetafileFiles;
}
export declare interface IMetafileFile {
file: string;
path: string;
library: string;
module: string;
buildType: string;
timestamp: number;
productFlavors: string[];
locales: IMetafileFileLocale[];
}
export declare interface IMetafileFileLocale {
language: string;
region: string;
script: string;
isRtl: boolean;
name: string;
localizedName: string;
uri: string;
timestamp: number;
}
export declare interface IMetafileFiles {
[id: string]: IMetafileFile;
}
export declare interface IMetafileParams {
url: string;
baseUrl: string;
cdnId: string;
jsonPath: string;
}
export declare interface IRequestBuilder {
addFiles(request?: (CdnFile | string)[] | CdnFile | string): IRequestBuilder;
addLocales(request?: string[] | string, excludeBaseLocale?: boolean): IRequestBuilder;
getCdnRequest(): Request_2;
}
export declare const isArray: <T>(value: unknown) => value is T[];
export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
export declare const isString: (value: unknown) => value is string;
export declare const isUndefined: (value: unknown) => value is undefined;
export declare type JsonResponse = {
[key: string]: Record<string, object>;
};
export declare type LocaleResponse = {
[locale: string]: JsonResponse;
};
export declare class LocalesCache {
protected context: Context;
protected cacheAdapter: ICacheAdapter<string, object | string>;
constructor(context: Context);
setIfMissed(options: CacheStoreLocalesRequest): void;
has(options: CacheHasLocalesRequest): boolean;
get(options: CacheGetLocalesRequest): object | string | undefined;
flush(): void;
protected keyFromMetafile(options: CacheKeyMetafileOptions): string;
}
export declare class LocalesMap {
data: LocalesMapData;
protected context: Context;
constructor(options: LocalesMapOptions);
}
export declare type LocalesMapData = {
[key: string]: MetafileLocale[];
};
export declare type LocalesMapOptions = {
context: Context;
data?: LocalesMapData;
};
export declare class MemoryCacheAdapter<K, V> implements ICacheAdapter<K, V> {
protected map: Map<K, V>;
constructor();
get(key: K): V | undefined;
has(key: K): boolean;
set(key: K, value: V): void;
flush(): void;
}
export declare class MetafileContext {
params: MetafileParams;
parsedData: IMetafile | null;
data: MetafileData;
constructor(options: CdnClientOptions);
setMetafile(metafile: IMetafile): void;
}
export declare class MetafileData implements Omit<IMetafile, 'files' | 'baseLocale'> {
projectUrl: string;
baseLocale: CdnLocale;
locales: CdnLocale[];
timestamp: number;
files: MetafileFile[];
filesMap: FilesMap;
constructor(options: MetafileOptions, params: MetafileParams);
static createEmpty(params: MetafileParams): MetafileData;
protected static filesFactory(files: IMetafileFiles, baseLocale: string, params: MetafileParams): MetafileFile[];
protected static filesMapFactory(files: MetafileFile[]): FilesMap;
protected static localesFactory(files: MetafileFile[]): CdnLocale[];
}
export declare class MetafileFile implements Omit<IMetafileFile, 'locales'> {
id: string;
file: string;
path: string;
library: string;
module: string;
buildType: string;
timestamp: number;
productFlavors: string[];
locales: MetafileLocale[];
protected baseUrl: string;
constructor(options: MetafileFileOptions);
toCdnFile(): CdnFile;
}
export declare type MetafileFileOptions = Omit<IMetafileFile, 'locales'> & {
id: string;
locales: MetafileLocale[];
baseUrl: string;
};
export declare class MetafileLocale implements IMetafileFileLocale {
language: string;
region: string;
script: string;
isRtl: boolean;
name: string;
localizedName: string;
uri: string;
timestamp: number;
protected baseLocale: string;
constructor(options: IMetafileFileLocale, baseLocale: string);
get locale(): string;
get isBaseLocale(): boolean;
toCdnLocale(): CdnLocale;
}
export declare type MetafileOptions = IMetafile;
export declare class MetafileParams implements IMetafileParams {
protected options: IMetafileParams;
constructor(metafileUrl: string);
get url(): string;
get baseUrl(): string;
get cdnId(): string;
get jsonPath(): string;
protected static parseMetafileUrl(metafileUrl: string): IMetafileParams;
}
declare class Request_2 {
files: MetafileFile[];
localesMap: LocalesMap;
hasSingleFileResponse: boolean;
hasSingleLocaleResponse: boolean;
protected context: Context;
constructor(context: Context);
execute(): Promise<CdnResponse>;
protected getPromises(): [Promise<string | object>, ApiLocaleRequest][];
}
export { Request_2 as Request }
export declare class RequestBuilder implements IRequestBuilder {
protected context: Context;
protected request: Request_2;
constructor(context: Context);
addFiles(files?: (CdnFile | string)[] | CdnFile | string): RequestBuilder;
addLocales(locales?: string[] | string, excludeBaseLocale?: boolean): RequestBuilder;
getCdnRequest(): Request_2;
}
export declare class ResponseFactory {
protected context: Context;
constructor(context: Context);
createCdnResponse(options: ResponseFactoryOptions): CdnResponse;
protected cacheResponses(requests: ApiLocaleRequest[], responses: (object | string)[]): void;
protected static transformResponses(options: ResponseFactoryOptions): CdnResponse;
}
export declare type ResponseFactoryOptions = {
requests: ApiLocaleRequest[];
responses: (string | object)[];
localesMap: LocalesMap;
hasSingleFileResponse: boolean;
hasSingleLocaleResponse: boolean;
};
export declare const uniq: <T>(array: T[]) => T[];
export declare const uniqBy: <T>(array: T[], predicate: (item: T) => string) => T[];
export { }