@sveltekit-i18n/base 1.0.0-beta.1 → 1.0.0-beta.2

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 ADDED
@@ -0,0 +1 @@
1
+ var T=Object.defineProperty,k=Object.defineProperties,E=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyDescriptors,W=Object.getOwnPropertyNames,y=Object.getOwnPropertySymbols;var v=Object.prototype.hasOwnProperty,P=Object.prototype.propertyIsEnumerable;var F=(t,e,o)=>e in t?T(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,r=(t,e)=>{for(var o in e||(e={}))v.call(e,o)&&F(t,o,e[o]);if(y)for(var o of y(e))P.call(e,o)&&F(t,o,e[o]);return t},l=(t,e)=>k(t,O(e)),K=t=>T(t,"__esModule",{value:!0});var b=(t,e)=>{var o={};for(var s in t)v.call(t,s)&&e.indexOf(s)<0&&(o[s]=t[s]);if(t!=null&&y)for(var s of y(t))e.indexOf(s)<0&&P.call(t,s)&&(o[s]=t[s]);return o};var D=(t,e)=>{for(var o in e)T(t,o,{get:e[o],enumerable:!0})},N=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of W(e))!v.call(t,i)&&(o||i!=="default")&&T(t,i,{get:()=>e[i],enumerable:!(s=E(e,i))||s.enumerable});return t};var M=(t=>(e,o)=>t&&t.get(e)||(o=N(K({}),e,1),t&&t.set(e,o),o))(typeof WeakMap!="undefined"?new WeakMap:0);var A={};D(A,{default:()=>j});var a=require("svelte/store");var c=(t,e={})=>t||e,m=(t,e)=>Object.keys(c(t)).reduce((o,s)=>{let i=t[s],n=e?`${e}.${s}`:`${s}`;return i&&typeof i=="object"?r(r({},o),m(i,n)):l(r({},o),{[n]:i})},{}),x=async t=>{try{return(await Promise.all(t.map(i=>{var n=i,{loader:o}=n,s=b(n,["loader"]);return new Promise(async p=>{let u;try{u=await o()}catch(w){console.error(`Failed to load translation. Verify your '${s.locale}' > '${s.key}' loader.`),console.error(w)}p(l(r({loader:o},s),{data:u}))})}))).reduce((o,{key:s,data:i,locale:n})=>i?l(r({},o),{[n]:m(l(r({},c(o[n])),{[s]:i}))}):o,{})}catch(e){console.error(e)}return{}},$=t=>e=>{try{if(typeof e=="string")return e===t;if(typeof e=="object")return e.test(t)}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=l(r({},(0,a.derived)([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:o=[]}=t,s=o.map(({locale:n})=>`${n}`.toLowerCase()),i=Object.keys(e).map(n=>`${n}`.toLowerCase());return[...new Set([...s,...i])]},[])),{get:()=>(0,a.get)(this.locales)});this.internalLocale=(0,a.writable)();this.locale=l(r({set:this.internalLocale.set,update:this.internalLocale.update},(0,a.derived)(this.internalLocale,(t,e)=>{let o=t&&`${t}`.toLowerCase(),s=this.getLocale(o);s&&s!==this.locale.get()&&e(s)})),{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],s)=>{(0,a.get)(this.initialized)||s(t!==void 0&&e!==void 0&&!!Object.keys(o).length)});this.translation=(0,a.derived)([this.privateTranslations,this.locale,this.isLoading],([t,e,o],s)=>{let i=t[e];i&&Object.keys(i).length&&!o&&s(i)},{});this.t=l(r({},(0,a.derived)([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)=>(0,a.get)(this.t)(...t)});this.l=l(r({},(0,a.derived)([this.config,this.translations],([{parser:t,fallbackLocale:e},o])=>(s,i,n)=>t.parse({key:i,payload:n,translations:o,locale:s,fallbackLocale:e}))),{get:(...t)=>(0,a.get)(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!==(0,a.get)(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async 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)};this.addTranslations=(t,e)=>{if(!t)return;let o=Object.keys(c(t));this.privateTranslations.update(s=>o.reduce((i,n)=>l(r({},i),{[n]:r(r({},c(i[n])),m(t[n]))}),s)),o.forEach(s=>{let i=Object.keys(t[s]).map(n=>`${n}`.split(".")[0]);e&&(i=e[s]),this.loadedKeys[s]=Array.from(new Set([...c(this.loadedKeys[s],[]),...c(i,[])]))})};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 s=this.translations.get(),{loaders:i,fallbackLocale:n=""}=c(o),p=`${t}`.toLowerCase(),u=n&&`${n}`.toLowerCase(),w=s[p],S=s[u],R=c(i,[]).map(C=>{var g=C,{locale:d}=g,h=b(g,["locale"]);return l(r({},h),{locale:`${d}`.toLowerCase()})}).filter(({routes:d})=>!d||c(d,[]).some($(e))).filter(({key:d,locale:h})=>h===p&&(!w||!c(this.loadedKeys[p],[]).includes(d))||n&&h===u&&(!S||!c(this.loadedKeys[u],[]).includes(d)));if(R.length){this.isLoading.set(!0);let d=await x(R);this.isLoading.set(!1);let h=Object.keys(d).reduce((g,f)=>l(r({},g),{[f]:Object.keys(d[f])}),{}),C=R.filter(({key:g,locale:f})=>c(h[f],[]).some(L=>`${L}`.startsWith(g))).reduce((g,{key:f,locale:L})=>l(r({},g),{[L]:[...g[L]||[],f]}),{});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=(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())}};module.exports=M(A);0&&(module.exports={});
@@ -0,0 +1,73 @@
1
+ import { Readable, Writable } from 'svelte/store';
2
+
3
+ type LoadingStore = Readable<boolean> & { toPromise: () => Promise<void[]>, get: () => boolean };
4
+
5
+ type Loader = () => Promise<Record<any, any>>;
6
+
7
+ type Route = string | RegExp;
8
+
9
+ type LoaderModule = {
10
+ key: string;
11
+ locale: string;
12
+ routes?: Route[];
13
+ loader: Loader;
14
+ };
15
+
16
+ type TranslationFunction = (key: string, vars?: Record<any, any>) => string;
17
+
18
+ type LocalTranslationFunction = (locale: string, key: string, vars?: Record<any, any>) => string;
19
+
20
+ type ExtendedStore<T, Get = () => T, Store = Readable<T>> = Store & { get: Get };
21
+
22
+ type ConfigTranslations = { [locale: string]: Record<string, any> };
23
+
24
+ type Translations = { [locale: string]: Record<string, string> };
25
+
26
+ type Parser = {
27
+ parse: (props: {
28
+ key: string;
29
+ payload: any;
30
+ translations: Translations;
31
+ locale: string;
32
+ fallbackLocale?: string;
33
+ }) => string;
34
+ };
35
+
36
+ type Config = {
37
+ parser: Parser;
38
+ loaders?: LoaderModule[];
39
+ translations?: ConfigTranslations;
40
+ initLocale?: string;
41
+ fallbackLocale?: string;
42
+ };
43
+
44
+ declare class export_default{
45
+ constructor(config?: Config);
46
+ private loadedKeys;
47
+ private currentRoute;
48
+ private config;
49
+ private isLoading;
50
+ private promises;
51
+ loading: LoadingStore;
52
+ private privateTranslations;
53
+ translations: ExtendedStore<Translations>;
54
+ locales: ExtendedStore<string[]>;
55
+ private internalLocale;
56
+ locale: ExtendedStore<string, () => string, Writable<string>>;
57
+ private loaderTrigger;
58
+ initialized: Readable<boolean>;
59
+ private translation;
60
+ t: ExtendedStore<TranslationFunction, TranslationFunction>;
61
+ l: ExtendedStore<LocalTranslationFunction, LocalTranslationFunction>;
62
+ private getLocale;
63
+ setLocale: (locale?: string | undefined) => Promise<void>;
64
+ setRoute: (route: string) => Promise<void>;
65
+ loadConfig: (config: Config) => Promise<void>;
66
+ addTranslations: (translations?: ConfigTranslations | undefined, keys?: Record<string, string[]> | undefined) => void;
67
+ getTranslationProps: ($locale?: string, $route?: string) => Promise<[ConfigTranslations, Record<string, string[]>] | [
68
+ ]>;
69
+ private translationLoader;
70
+ loadTranslations: (locale: string, route?: string) => Promise<void>;
71
+ }
72
+
73
+ export { Config, Parser, export_default as default };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ var k=Object.defineProperty,E=Object.defineProperties;var O=Object.getOwnPropertyDescriptors;var b=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable;var F=(t,e,o)=>e in t?k(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,n=(t,e)=>{for(var o in e||(e={}))P.call(e,o)&&F(t,o,e[o]);if(b)for(var o of b(e))x.call(e,o)&&F(t,o,e[o]);return t},r=(t,e)=>E(t,O(e));var m=(t,e)=>{var o={};for(var s in t)P.call(t,s)&&e.indexOf(s)<0&&(o[s]=t[s]);if(t!=null&&b)for(var s of b(t))e.indexOf(s)<0&&x.call(t,s)&&(o[s]=t[s]);return o};import{derived as u,get as d,writable as y}from"svelte/store";var l=(t,e={})=>t||e,w=(t,e)=>Object.keys(l(t)).reduce((o,s)=>{let i=t[s],a=e?`${e}.${s}`:`${s}`;return i&&typeof i=="object"?n(n({},o),w(i,a)):r(n({},o),{[a]:i})},{}),$=async t=>{try{return(await Promise.all(t.map(i=>{var a=i,{loader:o}=a,s=m(a,["loader"]);return new Promise(async L=>{let h;try{h=await o()}catch(R){console.error(`Failed to load translation. Verify your '${s.locale}' > '${s.key}' loader.`),console.error(R)}L(r(n({loader:o},s),{data:h}))})}))).reduce((o,{key:s,data:i,locale:a})=>i?r(n({},o),{[a]:w(r(n({},l(o[a])),{[s]:i}))}):o,{})}catch(e){console.error(e)}return{}},j=t=>e=>{try{if(typeof e=="string")return e===t;if(typeof e=="object")return e.test(t)}catch{throw new Error("Invalid route config!")}return!1};var D=class{constructor(t){this.loadedKeys={};this.currentRoute=y();this.config=y();this.isLoading=y(!1);this.promises=[];this.loading={subscribe:this.isLoading.subscribe,toPromise:()=>Promise.all(this.promises),get:()=>d(this.isLoading)};this.privateTranslations=y({});this.translations={subscribe:this.privateTranslations.subscribe,get:()=>d(this.translations)};this.locales=r(n({},u([this.config,this.privateTranslations],([t,e])=>{if(!t)return[];let{loaders:o=[]}=t,s=o.map(({locale:a})=>`${a}`.toLowerCase()),i=Object.keys(e).map(a=>`${a}`.toLowerCase());return[...new Set([...s,...i])]},[])),{get:()=>d(this.locales)});this.internalLocale=y();this.locale=r(n({set:this.internalLocale.set,update:this.internalLocale.update},u(this.internalLocale,(t,e)=>{let o=t&&`${t}`.toLowerCase(),s=this.getLocale(o);s&&s!==this.locale.get()&&e(s)})),{get:()=>d(this.locale)});this.loaderTrigger=u([this.internalLocale,this.currentRoute],([t,e],o)=>{t!==void 0&&e!==void 0&&o([t,e])},[]);this.initialized=u([this.locale,this.currentRoute,this.privateTranslations],([t,e,o],s)=>{d(this.initialized)||s(t!==void 0&&e!==void 0&&!!Object.keys(o).length)});this.translation=u([this.privateTranslations,this.locale,this.isLoading],([t,e,o],s)=>{let i=t[e];i&&Object.keys(i).length&&!o&&s(i)},{});this.t=r(n({},u([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)=>d(this.t)(...t)});this.l=r(n({},u([this.config,this.translations],([{parser:t,fallbackLocale:e},o])=>(s,i,a)=>t.parse({key:i,payload:a,translations:o,locale:s,fallbackLocale:e}))),{get:(...t)=>d(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!==d(this.currentRoute)&&this.currentRoute.set(t),await this.loading.toPromise()};this.loadConfig=async 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)};this.addTranslations=(t,e)=>{if(!t)return;let o=Object.keys(l(t));this.privateTranslations.update(s=>o.reduce((i,a)=>r(n({},i),{[a]:n(n({},l(i[a])),w(t[a]))}),s)),o.forEach(s=>{let i=Object.keys(t[s]).map(a=>`${a}`.split(".")[0]);e&&(i=e[s]),this.loadedKeys[s]=Array.from(new Set([...l(this.loadedKeys[s],[]),...l(i,[])]))})};this.getTranslationProps=async(t=this.locale.get(),e=d(this.currentRoute))=>{let o=d(this.config);if(!o||!t)return[];let s=this.translations.get(),{loaders:i,fallbackLocale:a=""}=l(o),L=`${t}`.toLowerCase(),h=a&&`${a}`.toLowerCase(),R=s[L],S=s[h],v=l(i,[]).map(C=>{var g=C,{locale:c}=g,f=m(g,["locale"]);return r(n({},f),{locale:`${c}`.toLowerCase()})}).filter(({routes:c})=>!c||l(c,[]).some(j(e))).filter(({key:c,locale:f})=>f===L&&(!R||!l(this.loadedKeys[L],[]).includes(c))||a&&f===h&&(!S||!l(this.loadedKeys[h],[]).includes(c)));if(v.length){this.isLoading.set(!0);let c=await $(v);this.isLoading.set(!1);let f=Object.keys(c).reduce((g,p)=>r(n({},g),{[p]:Object.keys(c[p])}),{}),C=v.filter(({key:g,locale:p})=>l(f[p],[]).some(T=>`${T}`.startsWith(g))).reduce((g,{key:p,locale:T})=>r(n({},g),{[T]:[...g[T]||[],p]}),{});return[c,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=d(this.currentRoute)||"")=>{!t||(this.setRoute(e),this.setLocale(t),await this.loading.toPromise())};t&&this.loadConfig(t),this.loaderTrigger.subscribe(()=>this.translationLoader())}};export{D as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sveltekit-i18n/base",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.2",
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",
@@ -22,8 +22,7 @@
22
22
  "lint": "eslint --fix --ext .ts,.js --ignore-path .gitignore ."
23
23
  },
24
24
  "files": [
25
- "lib",
26
- "types"
25
+ "dist"
27
26
  ],
28
27
  "pre-commit": [
29
28
  "lint"