import { MapOf } from "@implab/core-amd/interfaces"; import { NlsBundle } from "./NlsBundle"; import { isPromise } from "@implab/core-amd/safe"; export interface OnLoad { (result?: any): void; error(err: any): void; } export function bundle(nls: T, locales?: MapOf) { const nlsBundle = new NlsBundle(nls, locales); const fn = (locale?: string) => { const result = locale ? nlsBundle.getLocale(locale) : nlsBundle.default; if (isPromise(result)) throw new Error(`The bundle '${locale}' isn't loaded`); else return result; }; fn.define = (pack: Partial) => pack; fn.default = nlsBundle.default; fn.load = async (id: string, require: Require, cb: OnLoad, config: any) => { if (config && config.isBuild) { cb(); } else { try { await nlsBundle.getLocale(id); cb(); } catch (e) { cb.error(e); } } }; return fn; }