@sveltekit-i18n/base 1.0.0-beta.5 → 1.0.0-beta.6

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.cjs CHANGED
@@ -1 +1 @@
1
- var b=Object.defineProperty,E=Object.defineProperties,O=Object.getOwnPropertyDescriptor,W=Object.getOwnPropertyDescriptors,K=Object.getOwnPropertyNames,T=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;var P=(s,t,e)=>t in s?b(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e,r=(s,t)=>{for(var e in t||(t={}))v.call(t,e)&&P(s,e,t[e]);if(T)for(var e of T(t))F.call(t,e)&&P(s,e,t[e]);return s},c=(s,t)=>E(s,W(t)),D=s=>b(s,"__esModule",{value:!0});var m=(s,t)=>{var e={};for(var o in s)v.call(s,o)&&t.indexOf(o)<0&&(e[o]=s[o]);if(s!=null&&T)for(var o of T(s))t.indexOf(o)<0&&F.call(s,o)&&(e[o]=s[o]);return e};var N=(s,t)=>{for(var e in t)b(s,e,{get:t[e],enumerable:!0})},M=(s,t,e,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of K(t))!v.call(s,i)&&(e||i!=="default")&&b(s,i,{get:()=>t[i],enumerable:!(o=O(t,i))||o.enumerable});return s};var z=(s=>(t,e)=>s&&s.get(t)||(e=M(D({}),t,1),s&&s.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var V={};N(V,{default:()=>I});var a=require("svelte/store");var d=(s,t={})=>s||t,w=(s,t)=>Object.keys(d(s)).reduce((e,o)=>{let i=s[o],n=t?`${t}.${o}`:`${o}`;return i&&typeof i=="object"?r(r({},e),w(i,n)):c(r({},e),{[n]:i})},{}),x=async s=>{try{return(await Promise.all(s.map(i=>{var n=i,{loader:e}=n,o=m(n,["loader"]);return new Promise(async l=>{let h;try{h=await e()}catch(p){console.error(`Failed to load translation. Verify your '${o.locale}' > '${o.key}' loader.`),console.error(p)}l(c(r({loader:e},o),{data:h}))})}))).reduce((e,{key:o,data:i,locale:n})=>i?c(r({},e),{[n]:w(c(r({},d(e[n])),{[o]:i}))}):e,{})}catch(t){console.error(t)}return{}},$=s=>t=>{try{if(typeof t=="string")return t===s;if(typeof t=="object")return t.test(s)}catch{throw new Error("Invalid route config!")}return!1};var j=class{constructor(t){this.loadedKeys={};this.currentRoute=(0,a.writable)();this.config=(0,a.writable)();this.isLoading=(0,a.writable)(!1);this.promises=[];this.loading={subscribe:this.isLoading.subscribe,toPromise:()=>Promise.all(this.promises),get:()=>(0,a.get)(this.isLoading)};this.privateTranslations=(0,a.writable)({});this.translations={subscribe:this.privateTranslations.subscribe,get:()=>(0,a.get)(this.translations)};this.locales=c(r({},(0,a.derived)([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:o=[]}=t,i=o.map(({locale:l})=>`${l}`.toLowerCase()),n=Object.keys(e).map(l=>`${l}`.toLowerCase());return[...new Set([...i,...n])]},[])),{get:()=>(0,a.get)(this.locales)});this.internalLocale=(0,a.writable)();this.locale=c(r({set:this.internalLocale.set,update:this.internalLocale.update},(0,a.derived)(this.internalLocale,(t,e)=>{let o=t&&`${t}`.toLowerCase(),i=this.getLocale(o);i&&i!==this.locale.get()&&e(i)})),{get:()=>(0,a.get)(this.locale)});this.loaderTrigger=(0,a.derived)([this.internalLocale,this.currentRoute],([t,e],o)=>{t!==void 0&&e!==void 0&&o([t,e])},[]);this.initialized=(0,a.derived)([this.locale,this.currentRoute,this.privateTranslations],([t,e,o],i)=>{(0,a.get)(this.initialized)||i(t!==void 0&&e!==void 0&&!!Object.keys(o).length)});this.translation=(0,a.derived)([this.privateTranslations,this.locale,this.isLoading],([t,e,o],i)=>{let n=t[e];n&&Object.keys(n).length&&!o&&i(n)},{});this.t=c(r({},(0,a.derived)([this.config,this.translation],([{parser:t,fallbackLocale:e}])=>(o,i)=>t==null?void 0:t.parse({key:o,payload:i,translations:this.translations.get(),locale:this.locale.get(),fallbackLocale:e}))),{get:(...t)=>(0,a.get)(this.t)(...t)});this.l=c(r({},(0,a.derived)([this.config,this.translations],([{parser:t,fallbackLocale:e},o])=>(i,n,l)=>t.parse({key:n,payload:l,translations:o,locale:i,fallbackLocale:e}))),{get:(...t)=>(0,a.get)(this.l)(...t)});this.getLocale=t=>t?`${this.locales.get().find(i=>`${i}`.toLowerCase()===`${t}`.toLowerCase())||""}`.toLowerCase():"";this.setLocale=async t=>{!t||(this.internalLocale.set(t),await this.loading.toPromise())};this.setRoute=async t=>{t!==(0,a.get)(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async t=>{await this.configLoader(t)};this.addTranslations=(t,e)=>{if(!t)return;let o=Object.keys(d(t));this.privateTranslations.update(i=>o.reduce((n,l)=>c(r({},n),{[l]:r(r({},d(n[l])),w(t[l]))}),i)),o.forEach(i=>{let n=Object.keys(t[i]).map(l=>`${l}`.split(".")[0]);e&&(n=e[i]),this.loadedKeys[i]=Array.from(new Set([...d(this.loadedKeys[i],[]),...d(n,[])]))})};this.getTranslationProps=async(t=this.locale.get(),e=(0,a.get)(this.currentRoute))=>{let o=(0,a.get)(this.config);if(!o||!t)return[];let i=this.translations.get(),{loaders:n,fallbackLocale:l=""}=d(o),h=`${t}`.toLowerCase(),p=l&&`${l}`.toLowerCase(),S=i[h],k=i[p],R=d(n,[]).map(C=>{var u=C,{locale:g}=u,f=m(u,["locale"]);return c(r({},f),{locale:`${g}`.toLowerCase()})}).filter(({routes:g})=>!g||d(g,[]).some($(e))).filter(({key:g,locale:f})=>f===h&&(!S||!d(this.loadedKeys[h],[]).includes(g))||l&&f===p&&(!k||!d(this.loadedKeys[p],[]).includes(g)));if(R.length){this.isLoading.set(!0);let g=await x(R);this.isLoading.set(!1);let f=Object.keys(g).reduce((u,L)=>c(r({},u),{[L]:Object.keys(g[L])}),{}),C=R.filter(({key:u,locale:L})=>d(f[L],[]).some(y=>`${y}`.startsWith(u))).reduce((u,{key:L,locale:y})=>c(r({},u),{[y]:[...u[y]||[],L]}),{});return[g,C]}return[]};this.translationLoader=async t=>{this.promises.push(new Promise(async e=>{let o=await this.getTranslationProps(t);o.length&&this.addTranslations(...o),e()})),await this.loading.toPromise()};this.loadTranslations=async(t,e=(0,a.get)(this.currentRoute)||"")=>{!t||(this.setRoute(e),this.setLocale(t),await this.loading.toPromise())};t&&this.loadConfig(t),this.loaderTrigger.subscribe(()=>this.translationLoader())}async configLoader(t){if(!t)throw new Error("No config!");this.config.set(t);let{initLocale:e="",translations:o}=t;o&&this.addTranslations(o),await this.loadTranslations(e)}};var I=j;module.exports=z(V);0&&(module.exports={});
1
+ var P=Object.defineProperty,S=Object.defineProperties,O=Object.getOwnPropertyDescriptor,W=Object.getOwnPropertyDescriptors,K=Object.getOwnPropertyNames,m=Object.getOwnPropertySymbols;var w=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable;var R=(a,t,e)=>t in a?P(a,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):a[t]=e,l=(a,t)=>{for(var e in t||(t={}))w.call(t,e)&&R(a,e,t[e]);if(m)for(var e of m(t))C.call(t,e)&&R(a,e,t[e]);return a},c=(a,t)=>S(a,W(t)),N=a=>P(a,"__esModule",{value:!0});var y=(a,t)=>{var e={};for(var s in a)w.call(a,s)&&t.indexOf(s)<0&&(e[s]=a[s]);if(a!=null&&m)for(var s of m(a))t.indexOf(s)<0&&C.call(a,s)&&(e[s]=a[s]);return e};var k=(a,t)=>{for(var e in t)P(a,e,{get:t[e],enumerable:!0})},D=(a,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of K(t))!w.call(a,r)&&(e||r!=="default")&&P(a,r,{get:()=>t[r],enumerable:!(s=O(t,r))||s.enumerable});return a};var z=(a=>(t,e)=>a&&a.get(t)||(e=D(N({}),t,1),a&&a.set(t,e),e))(typeof WeakMap!="undefined"?new WeakMap:0);var I={};k(I,{default:()=>A});var i=require("svelte/store");var T=(a,t)=>Object.keys(a||{}).reduce((e,s)=>{let r=a[s],o=t?`${t}.${s}`:`${s}`;return r&&typeof r=="object"?l(l({},e),T(r,o)):c(l({},e),{[o]:r})},{}),F=async a=>{try{return(await Promise.all(a.map(r=>{var o=r,{loader:e}=o,s=y(o,["loader"]);return new Promise(async n=>{let g;try{g=await e()}catch(p){console.error(`Failed to load translation. Verify your '${s.locale}' > '${s.key}' loader.`),console.error(p)}n(c(l({loader:e},s),{data:g}))})}))).reduce((e,{key:s,data:r,locale:o})=>r?c(l({},e),{[o]:T(c(l({},e[o]||{}),{[s]:r}))}):e,{})}catch(t){console.error(t)}return{}},x=a=>t=>{try{if(typeof t=="string")return t===a;if(typeof t=="object")return t.test(a)}catch{throw new Error("Invalid route config!")}return!1};var $=class{constructor(t){this.loadedKeys={};this.currentRoute=(0,i.writable)();this.config=(0,i.writable)();this.isLoading=(0,i.writable)(!1);this.promises=[];this.loading={subscribe:this.isLoading.subscribe,toPromise:()=>Promise.all(this.promises),get:()=>(0,i.get)(this.isLoading)};this.privateTranslations=(0,i.writable)({});this.translations={subscribe:this.privateTranslations.subscribe,get:()=>(0,i.get)(this.translations)};this.locales=c(l({},(0,i.derived)([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:s=[]}=t,r=s.map(({locale:n})=>`${n}`.toLowerCase()),o=Object.keys(e).map(n=>`${n}`.toLowerCase());return[...new Set([...r,...o])]},[])),{get:()=>(0,i.get)(this.locales)});this.internalLocale=(0,i.writable)();this.locale=c(l({set:this.internalLocale.set,update:this.internalLocale.update},(0,i.derived)(this.internalLocale,(t,e)=>{let s=t&&`${t}`.toLowerCase(),r=this.getLocale(s);r&&r!==this.locale.get()&&e(r)})),{get:()=>(0,i.get)(this.locale)});this.loaderTrigger=(0,i.derived)([this.internalLocale,this.currentRoute],([t,e],s)=>{t!==void 0&&e!==void 0&&s([t,e])},[]);this.initialized=(0,i.derived)([this.locale,this.currentRoute,this.privateTranslations],([t,e,s],r)=>{(0,i.get)(this.initialized)||r(t!==void 0&&e!==void 0&&!!Object.keys(s).length)});this.translation=(0,i.derived)([this.privateTranslations,this.locale,this.isLoading],([t,e,s],r)=>{let o=t[e];o&&Object.keys(o).length&&!s&&r(o)},{});this.translate=({parser:t,key:e,params:s,translations:r,locale:o,fallbackLocale:n})=>{if(!e)throw new Error("No key provided to $t()");if(!o)throw new Error("No locale set!");let g=(r[o]||{})[e];return n&&g===void 0&&(g=(r[n]||{})[e]),t.parse(g,s,o,e)};this.t=c(l({},(0,i.derived)([this.config,this.translation],([{parser:t,fallbackLocale:e}])=>(s,...r)=>this.translate({parser:t,key:s,params:r,translations:this.translations.get(),locale:this.locale.get(),fallbackLocale:e}))),{get:(t,...e)=>(0,i.get)(this.t)(t,...e)});this.l=c(l({},(0,i.derived)([this.config,this.translations],([{parser:t,fallbackLocale:e},s])=>(r,o,...n)=>this.translate({parser:t,key:o,params:n,translations:s,locale:r,fallbackLocale:e}))),{get:(t,e,...s)=>(0,i.get)(this.l)(t,e,...s)});this.getLocale=t=>t?`${this.locales.get().find(r=>`${r}`.toLowerCase()===`${t}`.toLowerCase())||""}`.toLowerCase():"";this.setLocale=async t=>{!t||(this.internalLocale.set(t),await this.loading.toPromise())};this.setRoute=async t=>{t!==(0,i.get)(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async t=>{await this.configLoader(t)};this.addTranslations=(t,e)=>{if(!t)return;let s=Object.keys(t||{});this.privateTranslations.update(r=>s.reduce((o,n)=>c(l({},o),{[n]:l(l({},o[n]||{}),T(t[n]))}),r)),s.forEach(r=>{let o=Object.keys(t[r]).map(n=>`${n}`.split(".")[0]);e&&(o=e[r]),this.loadedKeys[r]=Array.from(new Set([...this.loadedKeys[r]||[],...o||[]]))})};this.getTranslationProps=async(t=this.locale.get(),e=(0,i.get)(this.currentRoute))=>{let s=(0,i.get)(this.config);if(!s||!t)return[];let r=this.translations.get(),{loaders:o,fallbackLocale:n=""}=s||{},g=`${t}`.toLowerCase(),p=n&&`${n}`.toLowerCase(),E=r[g],j=r[p],b=(o||[]).map(v=>{var h=v,{locale:d}=h,u=y(h,["locale"]);return c(l({},u),{locale:`${d}`.toLowerCase()})}).filter(({routes:d})=>!d||(d||[]).some(x(e))).filter(({key:d,locale:u})=>u===g&&(!E||!(this.loadedKeys[g]||[]).includes(d))||n&&u===p&&(!j||!(this.loadedKeys[p]||[]).includes(d)));if(b.length){this.isLoading.set(!0);let d=await F(b);this.isLoading.set(!1);let u=Object.keys(d).reduce((h,f)=>c(l({},h),{[f]:Object.keys(d[f])}),{}),v=b.filter(({key:h,locale:f})=>(u[f]||[]).some(L=>`${L}`.startsWith(h))).reduce((h,{key:f,locale:L})=>c(l({},h),{[L]:[...h[L]||[],f]}),{});return[d,v]}return[]};this.translationLoader=async t=>{this.promises.push(new Promise(async e=>{let s=await this.getTranslationProps(t);s.length&&this.addTranslations(...s),e()})),await this.loading.toPromise()};this.loadTranslations=async(t,e=(0,i.get)(this.currentRoute)||"")=>{!t||(this.setRoute(e),this.setLocale(t),await this.loading.toPromise())};t&&this.loadConfig(t),this.loaderTrigger.subscribe(()=>this.translationLoader())}async configLoader(t){if(!t)throw new Error("No config!");this.config.set(t);let{initLocale:e="",translations:s}=t;s&&this.addTranslations(s),await this.loadTranslations(e)}};var A=$;module.exports=z(I);0&&(module.exports={});
package/dist/index.d.ts CHANGED
@@ -13,9 +13,11 @@ type LoaderModule = {
13
13
  loader: Loader;
14
14
  };
15
15
 
16
- type TranslationFunction = (key: string, vars?: Record<any, any>) => string;
16
+ type ParserParamsDefault = any[] | [];
17
17
 
18
- type LocalTranslationFunction = (locale: string, key: string, vars?: Record<any, any>) => string;
18
+ type TranslationFunction<ParserParams extends ParserParamsDefault> = (key: string, ...restParams: ParserParams) => string;
19
+
20
+ type LocalTranslationFunction<ParserParams extends ParserParamsDefault> = (locale: string, key: string, ...restParams: ParserParams) => string;
19
21
 
20
22
  type ExtendedStore<T, Get = () => T, Store = Readable<T>> = Store & { get: Get };
21
23
 
@@ -23,28 +25,27 @@ type ConfigTranslations = { [locale: string]: Record<string, any> };
23
25
 
24
26
  type Translations = { [locale: string]: Record<string, string> };
25
27
 
26
- type Parse<Payload = Record<any, any>> = (props: {
27
- key: string;
28
- payload?: Payload;
29
- translations: Translations;
30
- locale: string;
31
- fallbackLocale?: string;
32
- }) => string;
28
+ type Parse<ParserParams = ParserParamsDefault> = (
29
+ text: string | undefined,
30
+ params: ParserParams,
31
+ locale: string,
32
+ key: string,
33
+ ) => string;
33
34
 
34
- type Parser = {
35
- parse: Parse;
35
+ type Parser<ParserParams = ParserParamsDefault> = {
36
+ parse: Parse<ParserParams>;
36
37
  };
37
38
 
38
- type Config = {
39
- parser: Parser;
39
+ type Config<ParserParams = ParserParamsDefault> = {
40
40
  loaders?: LoaderModule[];
41
41
  translations?: ConfigTranslations;
42
42
  initLocale?: string;
43
43
  fallbackLocale?: string;
44
+ parser: Parser<ParserParams>;
44
45
  };
45
46
 
46
- declare class I18n {
47
- constructor(config?: Config);
47
+ declare class I18n<ParserParams extends ParserParamsDefault> {
48
+ constructor(config?: Config<ParserParams>);
48
49
  private loadedKeys;
49
50
  private currentRoute;
50
51
  private config;
@@ -59,13 +60,14 @@ declare class I18n {
59
60
  private loaderTrigger;
60
61
  initialized: Readable<boolean>;
61
62
  private translation;
62
- t: ExtendedStore<TranslationFunction, TranslationFunction>;
63
- l: ExtendedStore<LocalTranslationFunction, LocalTranslationFunction>;
63
+ private translate;
64
+ t: ExtendedStore<TranslationFunction<ParserParams>, TranslationFunction<ParserParams>>;
65
+ l: ExtendedStore<LocalTranslationFunction<ParserParams>, LocalTranslationFunction<ParserParams>>;
64
66
  private getLocale;
65
67
  setLocale: (locale?: string | undefined) => Promise<void>;
66
68
  setRoute: (route: string) => Promise<void>;
67
- configLoader(config: Config): Promise<void>;
68
- loadConfig: (config: Config) => Promise<void>;
69
+ configLoader(config: Config<ParserParams>): Promise<void>;
70
+ loadConfig: (config: Config<ParserParams>) => Promise<void>;
69
71
  addTranslations: (translations?: ConfigTranslations | undefined, keys?: Record<string, string[]> | undefined) => void;
70
72
  getTranslationProps: ($locale?: string, $route?: string) => Promise<[ConfigTranslations, Record<string, string[]>] | [
71
73
  ]>;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- var O=Object.defineProperty,W=Object.defineProperties;var K=Object.getOwnPropertyDescriptors;var m=Object.getOwnPropertySymbols;var F=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable;var P=(i,t,e)=>t in i?O(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,n=(i,t)=>{for(var e in t||(t={}))F.call(t,e)&&P(i,e,t[e]);if(m)for(var e of m(t))x.call(t,e)&&P(i,e,t[e]);return i},l=(i,t)=>W(i,K(t));var w=(i,t)=>{var e={};for(var o in i)F.call(i,o)&&t.indexOf(o)<0&&(e[o]=i[o]);if(i!=null&&m)for(var o of m(i))t.indexOf(o)<0&&x.call(i,o)&&(e[o]=i[o]);return e};import{derived as h,get as g,writable as T}from"svelte/store";var c=(i,t={})=>i||t,R=(i,t)=>Object.keys(c(i)).reduce((e,o)=>{let s=i[o],a=t?`${t}.${o}`:`${o}`;return s&&typeof s=="object"?n(n({},e),R(s,a)):l(n({},e),{[a]:s})},{}),$=async i=>{try{return(await Promise.all(i.map(s=>{var a=s,{loader:e}=a,o=w(a,["loader"]);return new Promise(async r=>{let f;try{f=await e()}catch(y){console.error(`Failed to load translation. Verify your '${o.locale}' > '${o.key}' loader.`),console.error(y)}r(l(n({loader:e},o),{data:f}))})}))).reduce((e,{key:o,data:s,locale:a})=>s?l(n({},e),{[a]:R(l(n({},c(e[a])),{[o]:s}))}):e,{})}catch(t){console.error(t)}return{}},j=i=>t=>{try{if(typeof t=="string")return t===i;if(typeof t=="object")return t.test(i)}catch{throw new Error("Invalid route config!")}return!1};var S=class{constructor(t){this.loadedKeys={};this.currentRoute=T();this.config=T();this.isLoading=T(!1);this.promises=[];this.loading={subscribe:this.isLoading.subscribe,toPromise:()=>Promise.all(this.promises),get:()=>g(this.isLoading)};this.privateTranslations=T({});this.translations={subscribe:this.privateTranslations.subscribe,get:()=>g(this.translations)};this.locales=l(n({},h([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:o=[]}=t,s=o.map(({locale:r})=>`${r}`.toLowerCase()),a=Object.keys(e).map(r=>`${r}`.toLowerCase());return[...new Set([...s,...a])]},[])),{get:()=>g(this.locales)});this.internalLocale=T();this.locale=l(n({set:this.internalLocale.set,update:this.internalLocale.update},h(this.internalLocale,(t,e)=>{let o=t&&`${t}`.toLowerCase(),s=this.getLocale(o);s&&s!==this.locale.get()&&e(s)})),{get:()=>g(this.locale)});this.loaderTrigger=h([this.internalLocale,this.currentRoute],([t,e],o)=>{t!==void 0&&e!==void 0&&o([t,e])},[]);this.initialized=h([this.locale,this.currentRoute,this.privateTranslations],([t,e,o],s)=>{g(this.initialized)||s(t!==void 0&&e!==void 0&&!!Object.keys(o).length)});this.translation=h([this.privateTranslations,this.locale,this.isLoading],([t,e,o],s)=>{let a=t[e];a&&Object.keys(a).length&&!o&&s(a)},{});this.t=l(n({},h([this.config,this.translation],([{parser:t,fallbackLocale:e}])=>(o,s)=>t==null?void 0:t.parse({key:o,payload:s,translations:this.translations.get(),locale:this.locale.get(),fallbackLocale:e}))),{get:(...t)=>g(this.t)(...t)});this.l=l(n({},h([this.config,this.translations],([{parser:t,fallbackLocale:e},o])=>(s,a,r)=>t.parse({key:a,payload:r,translations:o,locale:s,fallbackLocale:e}))),{get:(...t)=>g(this.l)(...t)});this.getLocale=t=>t?`${this.locales.get().find(s=>`${s}`.toLowerCase()===`${t}`.toLowerCase())||""}`.toLowerCase():"";this.setLocale=async t=>{!t||(this.internalLocale.set(t),await this.loading.toPromise())};this.setRoute=async t=>{t!==g(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async t=>{await this.configLoader(t)};this.addTranslations=(t,e)=>{if(!t)return;let o=Object.keys(c(t));this.privateTranslations.update(s=>o.reduce((a,r)=>l(n({},a),{[r]:n(n({},c(a[r])),R(t[r]))}),s)),o.forEach(s=>{let a=Object.keys(t[s]).map(r=>`${r}`.split(".")[0]);e&&(a=e[s]),this.loadedKeys[s]=Array.from(new Set([...c(this.loadedKeys[s],[]),...c(a,[])]))})};this.getTranslationProps=async(t=this.locale.get(),e=g(this.currentRoute))=>{let o=g(this.config);if(!o||!t)return[];let s=this.translations.get(),{loaders:a,fallbackLocale:r=""}=c(o),f=`${t}`.toLowerCase(),y=r&&`${r}`.toLowerCase(),k=s[f],E=s[y],v=c(a,[]).map(C=>{var u=C,{locale:d}=u,L=w(u,["locale"]);return l(n({},L),{locale:`${d}`.toLowerCase()})}).filter(({routes:d})=>!d||c(d,[]).some(j(e))).filter(({key:d,locale:L})=>L===f&&(!k||!c(this.loadedKeys[f],[]).includes(d))||r&&L===y&&(!E||!c(this.loadedKeys[y],[]).includes(d)));if(v.length){this.isLoading.set(!0);let d=await $(v);this.isLoading.set(!1);let L=Object.keys(d).reduce((u,p)=>l(n({},u),{[p]:Object.keys(d[p])}),{}),C=v.filter(({key:u,locale:p})=>c(L[p],[]).some(b=>`${b}`.startsWith(u))).reduce((u,{key:p,locale:b})=>l(n({},u),{[b]:[...u[b]||[],p]}),{});return[d,C]}return[]};this.translationLoader=async t=>{this.promises.push(new Promise(async e=>{let o=await this.getTranslationProps(t);o.length&&this.addTranslations(...o),e()})),await this.loading.toPromise()};this.loadTranslations=async(t,e=g(this.currentRoute)||"")=>{!t||(this.setRoute(e),this.setLocale(t),await this.loading.toPromise())};t&&this.loadConfig(t),this.loaderTrigger.subscribe(()=>this.translationLoader())}async configLoader(t){if(!t)throw new Error("No config!");this.config.set(t);let{initLocale:e="",translations:o}=t;o&&this.addTranslations(o),await this.loadTranslations(e)}};var V=S;export{V as default};
1
+ var O=Object.defineProperty,W=Object.defineProperties;var K=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var C=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable;var R=(o,t,e)=>t in o?O(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,n=(o,t)=>{for(var e in t||(t={}))C.call(t,e)&&R(o,e,t[e]);if(y)for(var e of y(t))F.call(t,e)&&R(o,e,t[e]);return o},l=(o,t)=>W(o,K(t));var T=(o,t)=>{var e={};for(var s in o)C.call(o,s)&&t.indexOf(s)<0&&(e[s]=o[s]);if(o!=null&&y)for(var s of y(o))t.indexOf(s)<0&&F.call(o,s)&&(e[s]=o[s]);return e};import{derived as u,get as d,writable as m}from"svelte/store";var b=(o,t)=>Object.keys(o||{}).reduce((e,s)=>{let r=o[s],a=t?`${t}.${s}`:`${s}`;return r&&typeof r=="object"?n(n({},e),b(r,a)):l(n({},e),{[a]:r})},{}),x=async o=>{try{return(await Promise.all(o.map(r=>{var a=r,{loader:e}=a,s=T(a,["loader"]);return new Promise(async i=>{let g;try{g=await e()}catch(L){console.error(`Failed to load translation. Verify your '${s.locale}' > '${s.key}' loader.`),console.error(L)}i(l(n({loader:e},s),{data:g}))})}))).reduce((e,{key:s,data:r,locale:a})=>r?l(n({},e),{[a]:b(l(n({},e[a]||{}),{[s]:r}))}):e,{})}catch(t){console.error(t)}return{}},$=o=>t=>{try{if(typeof t=="string")return t===o;if(typeof t=="object")return t.test(o)}catch{throw new Error("Invalid route config!")}return!1};var E=class{constructor(t){this.loadedKeys={};this.currentRoute=m();this.config=m();this.isLoading=m(!1);this.promises=[];this.loading={subscribe:this.isLoading.subscribe,toPromise:()=>Promise.all(this.promises),get:()=>d(this.isLoading)};this.privateTranslations=m({});this.translations={subscribe:this.privateTranslations.subscribe,get:()=>d(this.translations)};this.locales=l(n({},u([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:s=[]}=t,r=s.map(({locale:i})=>`${i}`.toLowerCase()),a=Object.keys(e).map(i=>`${i}`.toLowerCase());return[...new Set([...r,...a])]},[])),{get:()=>d(this.locales)});this.internalLocale=m();this.locale=l(n({set:this.internalLocale.set,update:this.internalLocale.update},u(this.internalLocale,(t,e)=>{let s=t&&`${t}`.toLowerCase(),r=this.getLocale(s);r&&r!==this.locale.get()&&e(r)})),{get:()=>d(this.locale)});this.loaderTrigger=u([this.internalLocale,this.currentRoute],([t,e],s)=>{t!==void 0&&e!==void 0&&s([t,e])},[]);this.initialized=u([this.locale,this.currentRoute,this.privateTranslations],([t,e,s],r)=>{d(this.initialized)||r(t!==void 0&&e!==void 0&&!!Object.keys(s).length)});this.translation=u([this.privateTranslations,this.locale,this.isLoading],([t,e,s],r)=>{let a=t[e];a&&Object.keys(a).length&&!s&&r(a)},{});this.translate=({parser:t,key:e,params:s,translations:r,locale:a,fallbackLocale:i})=>{if(!e)throw new Error("No key provided to $t()");if(!a)throw new Error("No locale set!");let g=(r[a]||{})[e];return i&&g===void 0&&(g=(r[i]||{})[e]),t.parse(g,s,a,e)};this.t=l(n({},u([this.config,this.translation],([{parser:t,fallbackLocale:e}])=>(s,...r)=>this.translate({parser:t,key:s,params:r,translations:this.translations.get(),locale:this.locale.get(),fallbackLocale:e}))),{get:(t,...e)=>d(this.t)(t,...e)});this.l=l(n({},u([this.config,this.translations],([{parser:t,fallbackLocale:e},s])=>(r,a,...i)=>this.translate({parser:t,key:a,params:i,translations:s,locale:r,fallbackLocale:e}))),{get:(t,e,...s)=>d(this.l)(t,e,...s)});this.getLocale=t=>t?`${this.locales.get().find(r=>`${r}`.toLowerCase()===`${t}`.toLowerCase())||""}`.toLowerCase():"";this.setLocale=async t=>{!t||(this.internalLocale.set(t),await this.loading.toPromise())};this.setRoute=async t=>{t!==d(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async t=>{await this.configLoader(t)};this.addTranslations=(t,e)=>{if(!t)return;let s=Object.keys(t||{});this.privateTranslations.update(r=>s.reduce((a,i)=>l(n({},a),{[i]:n(n({},a[i]||{}),b(t[i]))}),r)),s.forEach(r=>{let a=Object.keys(t[r]).map(i=>`${i}`.split(".")[0]);e&&(a=e[r]),this.loadedKeys[r]=Array.from(new Set([...this.loadedKeys[r]||[],...a||[]]))})};this.getTranslationProps=async(t=this.locale.get(),e=d(this.currentRoute))=>{let s=d(this.config);if(!s||!t)return[];let r=this.translations.get(),{loaders:a,fallbackLocale:i=""}=s||{},g=`${t}`.toLowerCase(),L=i&&`${i}`.toLowerCase(),j=r[g],S=r[L],w=(a||[]).map(v=>{var h=v,{locale:c}=h,f=T(h,["locale"]);return l(n({},f),{locale:`${c}`.toLowerCase()})}).filter(({routes:c})=>!c||(c||[]).some($(e))).filter(({key:c,locale:f})=>f===g&&(!j||!(this.loadedKeys[g]||[]).includes(c))||i&&f===L&&(!S||!(this.loadedKeys[L]||[]).includes(c)));if(w.length){this.isLoading.set(!0);let c=await x(w);this.isLoading.set(!1);let f=Object.keys(c).reduce((h,p)=>l(n({},h),{[p]:Object.keys(c[p])}),{}),v=w.filter(({key:h,locale:p})=>(f[p]||[]).some(P=>`${P}`.startsWith(h))).reduce((h,{key:p,locale:P})=>l(n({},h),{[P]:[...h[P]||[],p]}),{});return[c,v]}return[]};this.translationLoader=async t=>{this.promises.push(new Promise(async e=>{let s=await this.getTranslationProps(t);s.length&&this.addTranslations(...s),e()})),await this.loading.toPromise()};this.loadTranslations=async(t,e=d(this.currentRoute)||"")=>{!t||(this.setRoute(e),this.setLocale(t),await this.loading.toPromise())};t&&this.loadConfig(t),this.loaderTrigger.subscribe(()=>this.translationLoader())}async configLoader(t){if(!t)throw new Error("No config!");this.config.set(t);let{initLocale:e="",translations:s}=t;s&&this.addTranslations(s),await this.loadTranslations(e)}};var I=E;export{I as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltekit-i18n/base",
3
- "version": "1.0.0-beta.5",
3
+ "version": "1.0.0-beta.6",
4
4
  "description": "Base functionality of sveltekit-i18n library with a support for external message parsers.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -15,7 +15,7 @@
15
15
  "./package.json": "./package.json"
16
16
  },
17
17
  "scripts": {
18
- "dev": "tsup src/index.ts --watch",
18
+ "dev": "tsup src/index.ts --dts --format cjs,esm --sourcemap --watch",
19
19
  "test": "jest",
20
20
  "build": "tsup src/index.ts --dts --format cjs,esm --minify",
21
21
  "prepublishOnly": "rm -rf dist && npm run build",