@smartcorehub/localization-sdk 1.0.3482 → 1.0.3491

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/README.md CHANGED
@@ -41,6 +41,9 @@ const localizationClient = createLocalizationClient({
41
41
  const current = await localizationClient.getCurrentLanguage('home.title');
42
42
  const byLanguage = await localizationClient.getByLanguage('home.title', 'pt-BR');
43
43
  const list = await localizationClient.listResources();
44
+
45
+ // current e byLanguage retornam string
46
+ // list retorna objetos { key, value, language }
44
47
  ~~~
45
48
 
46
49
  ## Integracao com Angular
@@ -78,7 +81,7 @@ export class HomeTitleComponent {
78
81
 
79
82
  ngOnInit(): void {
80
83
  this.localizationService.getCurrentLanguage('home.title').subscribe((result) => {
81
- this.title = result.value;
84
+ this.title = result;
82
85
  });
83
86
  }
84
87
  }
@@ -99,8 +102,8 @@ export function HomeTitle() {
99
102
  const [title, setTitle] = useState('');
100
103
 
101
104
  useEffect(() => {
102
- client.getCurrentLanguage('home.title').then((response) => {
103
- setTitle(response.value);
105
+ client.getCurrentLanguage('home.title').then((value) => {
106
+ setTitle(value);
104
107
  });
105
108
  }, []);
106
109
 
@@ -108,6 +111,20 @@ export function HomeTitle() {
108
111
  }
109
112
  ~~~
110
113
 
114
+ ## Contrato de retorno
115
+
116
+ - `getCurrentLanguage(resourceKey)`: retorna `string`
117
+ - `getByLanguage(resourceKey, languageKey)`: retorna `string`
118
+ - `listResources()`: retorna `LocalizationListResource[]`
119
+
120
+ ~~~ts
121
+ export interface LocalizationListResource {
122
+ key: string;
123
+ value: string;
124
+ language: string;
125
+ }
126
+ ~~~
127
+
111
128
  ## Integracao com Next.js
112
129
 
113
130
  Uso recomendado em Server Components, Route Handlers ou Server Actions.
package/dist/index.d.mts CHANGED
@@ -57,17 +57,17 @@ interface LocalizationClientOptions {
57
57
  readonly logger?: SDKLogger;
58
58
  }
59
59
 
60
- interface ResourceResponse {
60
+ interface LocalizationListResource {
61
61
  readonly key: string;
62
62
  readonly value: string;
63
63
  readonly language: string;
64
- readonly lastUpdated?: string;
65
64
  }
65
+ type ResourceResponse = LocalizationListResource;
66
66
 
67
67
  interface LocalizationClient {
68
- getCurrentLanguage(resourceKey: string): Promise<ResourceResponse>;
69
- getByLanguage(resourceKey: string, languageKey: string): Promise<ResourceResponse>;
70
- listResources(): Promise<readonly ResourceResponse[]>;
68
+ getCurrentLanguage(resourceKey: string): Promise<string>;
69
+ getByLanguage(resourceKey: string, languageKey: string): Promise<string>;
70
+ listResources(): Promise<readonly LocalizationListResource[]>;
71
71
  invalidateCache(key?: string): Promise<void>;
72
72
  }
73
73
 
@@ -138,13 +138,13 @@ declare function provideLocalization(options: LocalizationClientOptions): Enviro
138
138
 
139
139
  declare class LocalizationService {
140
140
  private readonly client;
141
- getCurrentLanguage(resourceKey: string): Observable<ResourceResponse>;
142
- getByLanguage(resourceKey: string, languageKey: string): Observable<ResourceResponse>;
143
- listResources(): Observable<readonly ResourceResponse[]>;
141
+ getCurrentLanguage(resourceKey: string): Observable<string>;
142
+ getByLanguage(resourceKey: string, languageKey: string): Observable<string>;
143
+ listResources(): Observable<readonly LocalizationListResource[]>;
144
144
  invalidateCache(key?: string): Observable<void>;
145
145
  }
146
146
 
147
147
  declare const LOCALIZATION_SDK_OPTIONS: InjectionToken<LocalizationClientOptions>;
148
148
  declare const LOCALIZATION_CLIENT: InjectionToken<LocalizationClient>;
149
149
 
150
- export { type AuthProvider, type CacheProvider, FetchHttpTransport, type HttpRequest, type HttpResponse, type HttpTransport, LOCALIZATION_CLIENT, LOCALIZATION_SDK_OPTIONS, LocalizationAuthError, type LocalizationClient, type LocalizationClientOptions, LocalizationError, LocalizationNetworkError, LocalizationServerError, LocalizationService, LocalizationTimeoutError, MemoryCacheProvider, ResourceNotFoundError, type ResourceResponse, type SDKLogger, type SDKMiddleware, XAuthTokenProvider, createLocalizationClient, provideLocalization };
150
+ export { type AuthProvider, type CacheProvider, FetchHttpTransport, type HttpRequest, type HttpResponse, type HttpTransport, LOCALIZATION_CLIENT, LOCALIZATION_SDK_OPTIONS, LocalizationAuthError, type LocalizationClient, type LocalizationClientOptions, LocalizationError, type LocalizationListResource, LocalizationNetworkError, LocalizationServerError, LocalizationService, LocalizationTimeoutError, MemoryCacheProvider, ResourceNotFoundError, type ResourceResponse, type SDKLogger, type SDKMiddleware, XAuthTokenProvider, createLocalizationClient, provideLocalization };
package/dist/index.d.ts CHANGED
@@ -57,17 +57,17 @@ interface LocalizationClientOptions {
57
57
  readonly logger?: SDKLogger;
58
58
  }
59
59
 
60
- interface ResourceResponse {
60
+ interface LocalizationListResource {
61
61
  readonly key: string;
62
62
  readonly value: string;
63
63
  readonly language: string;
64
- readonly lastUpdated?: string;
65
64
  }
65
+ type ResourceResponse = LocalizationListResource;
66
66
 
67
67
  interface LocalizationClient {
68
- getCurrentLanguage(resourceKey: string): Promise<ResourceResponse>;
69
- getByLanguage(resourceKey: string, languageKey: string): Promise<ResourceResponse>;
70
- listResources(): Promise<readonly ResourceResponse[]>;
68
+ getCurrentLanguage(resourceKey: string): Promise<string>;
69
+ getByLanguage(resourceKey: string, languageKey: string): Promise<string>;
70
+ listResources(): Promise<readonly LocalizationListResource[]>;
71
71
  invalidateCache(key?: string): Promise<void>;
72
72
  }
73
73
 
@@ -138,13 +138,13 @@ declare function provideLocalization(options: LocalizationClientOptions): Enviro
138
138
 
139
139
  declare class LocalizationService {
140
140
  private readonly client;
141
- getCurrentLanguage(resourceKey: string): Observable<ResourceResponse>;
142
- getByLanguage(resourceKey: string, languageKey: string): Observable<ResourceResponse>;
143
- listResources(): Observable<readonly ResourceResponse[]>;
141
+ getCurrentLanguage(resourceKey: string): Observable<string>;
142
+ getByLanguage(resourceKey: string, languageKey: string): Observable<string>;
143
+ listResources(): Observable<readonly LocalizationListResource[]>;
144
144
  invalidateCache(key?: string): Observable<void>;
145
145
  }
146
146
 
147
147
  declare const LOCALIZATION_SDK_OPTIONS: InjectionToken<LocalizationClientOptions>;
148
148
  declare const LOCALIZATION_CLIENT: InjectionToken<LocalizationClient>;
149
149
 
150
- export { type AuthProvider, type CacheProvider, FetchHttpTransport, type HttpRequest, type HttpResponse, type HttpTransport, LOCALIZATION_CLIENT, LOCALIZATION_SDK_OPTIONS, LocalizationAuthError, type LocalizationClient, type LocalizationClientOptions, LocalizationError, LocalizationNetworkError, LocalizationServerError, LocalizationService, LocalizationTimeoutError, MemoryCacheProvider, ResourceNotFoundError, type ResourceResponse, type SDKLogger, type SDKMiddleware, XAuthTokenProvider, createLocalizationClient, provideLocalization };
150
+ export { type AuthProvider, type CacheProvider, FetchHttpTransport, type HttpRequest, type HttpResponse, type HttpTransport, LOCALIZATION_CLIENT, LOCALIZATION_SDK_OPTIONS, LocalizationAuthError, type LocalizationClient, type LocalizationClientOptions, LocalizationError, type LocalizationListResource, LocalizationNetworkError, LocalizationServerError, LocalizationService, LocalizationTimeoutError, MemoryCacheProvider, ResourceNotFoundError, type ResourceResponse, type SDKLogger, type SDKMiddleware, XAuthTokenProvider, createLocalizationClient, provideLocalization };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- 'use strict';var core=require('@angular/core'),rxjs=require('rxjs');var re=Object.create;var q=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var $=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),v=r=>{throw TypeError(r)};var ne=(r,e,t)=>e in r?q(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var j=(r,e)=>q(r,"name",{value:e,configurable:true});var V=r=>[,,,re(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],w=r=>r!==void 0&&typeof r!="function"?v("Function expected"):r,ie=(r,e,t,o,n)=>({kind:X[r],name:e,metadata:o,addInitializer:a=>t._?v("Already initialized"):n.push(w(a||null))}),ae=(r,e)=>ne(e,$("metadata"),r[3]),J=(r,e,t,o)=>{for(var n=0,a=r[e>>1],l=a&&a.length;n<l;n++)a[n].call(t);return o},Y=(r,e,t,o,n,a)=>{var s,p,f,i=e&7,m=false,H=0,te=r[H]||(r[H]=[]),u=i&&((n=n.prototype),i<5&&(i>3||!m)&&oe(n,t));j(n,t);for(var N=o.length-1;N>=0;N--)f=ie(i,t,p={},r[3],te),s=(0, o[N])(n,f),p._=1,w(s)&&(n=s);return ae(r,n),u&&q(n,t,u),m?i^4?a:u:n};var g=class{constructor(e){this.token=e;}async getToken(){return this.token?.trim()?this.token:null}};var L=class{constructor(){this.store=new Map;}async get(e){let t=this.store.get(e);return t?t.expiresAt!==void 0&&Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,o){let n=o&&o>0?Date.now()+o:void 0;this.store.set(e,{value:t,expiresAt:n});}async delete(e){this.store.delete(e);}async clear(){this.store.clear();}};var c=class extends Error{constructor(t,o){super(t);this.metadata=o;this.name="LocalizationError";}},C=class extends c{constructor(e="Authentication failed",t){super(e,t),this.name="LocalizationAuthError";}},T=class extends c{constructor(e="Resource not found",t){super(e,t),this.name="ResourceNotFoundError";}},R=class extends c{constructor(e="Localization server error",t){super(e,t),this.name="LocalizationServerError";}},E=class extends c{constructor(e="Network error while contacting localization API",t){super(e,t),this.name="LocalizationNetworkError";}},x=class extends c{constructor(e="Localization request timeout",t){super(e,t),this.name="LocalizationTimeoutError";}};var P=class extends Error{constructor(t,o,n){super(`Request failed with status ${t}`);this.statusCode=t;this.responseBody=o;this.responseHeaders=n;this.name="HttpStatusError";}},z=class extends Error{constructor(t){super(`Request timed out after ${t}ms`);this.timeoutMs=t;this.name="HttpTimeoutError";}},O=class extends Error{constructor(t){super("Network error while sending request");this.causeError=t;this.name="HttpNetworkError";}},A=class{constructor(e){this.options=e;this.fetchFn=e.fetchFn??fetch;}async request(e){let t=e.timeoutMs??this.options.timeoutMs,o=new AbortController,n=setTimeout(()=>o.abort(),t),a=new Request(this.resolveUrl(e),{method:e.method,headers:{"Content-Type":"application/json",...this.options.defaultHeaders,...e.headers},body:e.body===void 0?void 0:JSON.stringify(e.body),signal:o.signal});try{let l=await this.runRequestMiddleware(a),s;try{s=await this.fetchFn(l);}catch(h){throw this.isAbortError(h)?new z(t):new O(h)}let p=await this.runResponseMiddleware(s);if(!p.ok){let h=await p.text();throw new P(p.status,h,p.headers)}let f=await this.parseResponse(p);return {status:p.status,headers:p.headers,data:f}}catch(l){throw await this.runErrorMiddleware(this.toError(l)),l}finally{clearTimeout(n);}}resolveUrl(e){let t=new URL(e.path,this.options.baseUrl);return e.query&&Object.entries(e.query).forEach(([o,n])=>{n!==void 0&&t.searchParams.set(o,String(n));}),t.toString()}async runRequestMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onRequest&&(t=await o.onRequest(t));return t}async runResponseMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onResponse&&(t=await o.onResponse(t));return t}async runErrorMiddleware(e){for(let t of this.options.middleware??[])t.onError&&await t.onError(e);}async parseResponse(e){return e.status===204?null:(e.headers.get("content-type")??"").includes("application/json")?await e.json():await e.text()}toError(e){return e instanceof Error?e:new Error("Unknown request error")}isAbortError(e){return e instanceof DOMException&&e.name==="AbortError"}};var Q="localization:listResources",I=class{constructor(e){this.dependencies=e;}async getCurrentLanguage(e){this.validateRequired(e,"resourceKey");let t=await this.send({method:"GET",path:"api/localization/client/currentlanguage",query:{resourceKey:e}});return {key:e,value:t??"",language:"current"}}async getByLanguage(e,t){this.validateRequired(e,"resourceKey"),this.validateRequired(t,"languageKey");let o=await this.send({method:"GET",path:"api/localization/client/bylanguage",query:{resourceKey:e,languageKey:t}});return {key:e,value:o??"",language:t}}async listResources(){let e=await this.dependencies.cacheProvider?.get(Q);if(e)return e;let o=(await this.send({method:"GET",path:"api/localization/client/list"})??[]).map(n=>({key:n.resourceKey,value:n.value,language:n.languageKey}));return await this.dependencies.cacheProvider?.set(Q,o,this.dependencies.cacheTtlMs),o}async invalidateCache(e){if(this.dependencies.cacheProvider){if(e){await this.dependencies.cacheProvider.delete(e);return}await this.dependencies.cacheProvider.clear();}}async send(e){try{let t=await this.dependencies.authProvider?.getToken(),o=t?{...e.headers,"X-Auth-Token":t}:e.headers;return (await this.dependencies.httpTransport.request({...e,headers:o})).data}catch(t){throw this.mapError(t)}}mapError(e){return e instanceof c?e:e instanceof z?new x(e.message):e instanceof O?new E(e.message):e instanceof P?e.statusCode===401||e.statusCode===403?new C("Invalid token for localization endpoint",{statusCode:e.statusCode}):e.statusCode===404?new T("Localization resource was not found",{statusCode:e.statusCode}):e.statusCode>=500?new R("Localization API is unavailable",{statusCode:e.statusCode}):new c(e.message,{statusCode:e.statusCode}):new c("Unexpected localization SDK error")}validateRequired(e,t){if(!e?.trim())throw new c(`${t} is required`)}};function K(r){le(r);let t=r.cache?.enabled??false?r.cache?.provider??new L:void 0,o=new A({baseUrl:r.baseUrl,fetchFn:r.fetchFn,timeoutMs:r.timeoutMs??1e4,defaultHeaders:r.headers,middleware:r.middleware});return new I({httpTransport:o,authProvider:r.authProvider??(r.token?new g(r.token):void 0),cacheProvider:t,cacheTtlMs:r.cache?.ttlMs})}function le(r){if(!r?.baseUrl?.trim())throw new c("baseUrl is required to create localization client")}var _=new core.InjectionToken("LOCALIZATION_SDK_OPTIONS"),b=new core.InjectionToken("LOCALIZATION_CLIENT");function ue(r){return core.makeEnvironmentProviders([{provide:_,useValue:r},{provide:b,useFactory:()=>K(r)}])}var ee,F;ee=[core.Injectable({providedIn:"root"})];exports.LocalizationService=class y{constructor(){this.client=core.inject(b);}getCurrentLanguage(e){return rxjs.from(this.client.getCurrentLanguage(e))}getByLanguage(e,t){return rxjs.from(this.client.getByLanguage(e,t))}listResources(){return rxjs.from(this.client.listResources())}invalidateCache(e){return rxjs.from(this.client.invalidateCache(e))}};F=V(),exports.LocalizationService=Y(F,0,"LocalizationService",ee,exports.LocalizationService),J(F,1,exports.LocalizationService);exports.FetchHttpTransport=A;exports.LOCALIZATION_CLIENT=b;exports.LOCALIZATION_SDK_OPTIONS=_;exports.LocalizationAuthError=C;exports.LocalizationError=c;exports.LocalizationNetworkError=E;exports.LocalizationServerError=R;exports.LocalizationTimeoutError=x;exports.MemoryCacheProvider=L;exports.ResourceNotFoundError=T;exports.XAuthTokenProvider=g;exports.createLocalizationClient=K;exports.provideLocalization=ue;
1
+ 'use strict';var core=require('@angular/core'),rxjs=require('rxjs');var re=Object.create;var q=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var $=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),v=r=>{throw TypeError(r)};var ne=(r,e,t)=>e in r?q(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var j=(r,e)=>q(r,"name",{value:e,configurable:true});var V=r=>[,,,re(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],w=r=>r!==void 0&&typeof r!="function"?v("Function expected"):r,ie=(r,e,t,o,n)=>({kind:X[r],name:e,metadata:o,addInitializer:a=>t._?v("Already initialized"):n.push(w(a||null))}),ae=(r,e)=>ne(e,$("metadata"),r[3]),J=(r,e,t,o)=>{for(var n=0,a=r[e>>1],l=a&&a.length;n<l;n++)a[n].call(t);return o},Y=(r,e,t,o,n,a)=>{var s,p,f,i=e&7,m=false,N=0,te=r[N]||(r[N]=[]),u=i&&((n=n.prototype),i<5&&(i>3||!m)&&oe(n,t));j(n,t);for(var k=o.length-1;k>=0;k--)f=ie(i,t,p={},r[3],te),s=(0, o[k])(n,f),p._=1,w(s)&&(n=s);return ae(r,n),u&&q(n,t,u),m?i^4?a:u:n};var g=class{constructor(e){this.token=e;}async getToken(){return this.token?.trim()?this.token:null}};var L=class{constructor(){this.store=new Map;}async get(e){let t=this.store.get(e);return t?t.expiresAt!==void 0&&Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,o){let n=o&&o>0?Date.now()+o:void 0;this.store.set(e,{value:t,expiresAt:n});}async delete(e){this.store.delete(e);}async clear(){this.store.clear();}};var c=class extends Error{constructor(t,o){super(t);this.metadata=o;this.name="LocalizationError";}},C=class extends c{constructor(e="Authentication failed",t){super(e,t),this.name="LocalizationAuthError";}},T=class extends c{constructor(e="Resource not found",t){super(e,t),this.name="ResourceNotFoundError";}},E=class extends c{constructor(e="Localization server error",t){super(e,t),this.name="LocalizationServerError";}},R=class extends c{constructor(e="Network error while contacting localization API",t){super(e,t),this.name="LocalizationNetworkError";}},x=class extends c{constructor(e="Localization request timeout",t){super(e,t),this.name="LocalizationTimeoutError";}};var z=class extends Error{constructor(t,o,n){super(`Request failed with status ${t}`);this.statusCode=t;this.responseBody=o;this.responseHeaders=n;this.name="HttpStatusError";}},P=class extends Error{constructor(t){super(`Request timed out after ${t}ms`);this.timeoutMs=t;this.name="HttpTimeoutError";}},O=class extends Error{constructor(t){super("Network error while sending request");this.causeError=t;this.name="HttpNetworkError";}},A=class{constructor(e){this.options=e;this.fetchFn=e.fetchFn??fetch;}async request(e){let t=e.timeoutMs??this.options.timeoutMs,o=new AbortController,n=setTimeout(()=>o.abort(),t),a=new Request(this.resolveUrl(e),{method:e.method,headers:{"Content-Type":"application/json",...this.options.defaultHeaders,...e.headers},body:e.body===void 0?void 0:JSON.stringify(e.body),signal:o.signal});try{let l=await this.runRequestMiddleware(a),s;try{s=await this.fetchFn(l);}catch(h){throw this.isAbortError(h)?new P(t):new O(h)}let p=await this.runResponseMiddleware(s);if(!p.ok){let h=await p.text();throw new z(p.status,h,p.headers)}let f=await this.parseResponse(p);return {status:p.status,headers:p.headers,data:f}}catch(l){throw await this.runErrorMiddleware(this.toError(l)),l}finally{clearTimeout(n);}}resolveUrl(e){let t=new URL(e.path,this.options.baseUrl);return e.query&&Object.entries(e.query).forEach(([o,n])=>{n!==void 0&&t.searchParams.set(o,String(n));}),t.toString()}async runRequestMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onRequest&&(t=await o.onRequest(t));return t}async runResponseMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onResponse&&(t=await o.onResponse(t));return t}async runErrorMiddleware(e){for(let t of this.options.middleware??[])t.onError&&await t.onError(e);}async parseResponse(e){return e.status===204?null:(e.headers.get("content-type")??"").includes("application/json")?await e.json():await e.text()}toError(e){return e instanceof Error?e:new Error("Unknown request error")}isAbortError(e){return e instanceof DOMException&&e.name==="AbortError"}};var Q="localization:listResources",I=class{constructor(e){this.dependencies=e;}async getCurrentLanguage(e){return this.validateRequired(e,"resourceKey"),await this.send({method:"GET",path:"api/localization/client/currentlanguage",query:{resourceKey:e}})??""}async getByLanguage(e,t){return this.validateRequired(e,"resourceKey"),this.validateRequired(t,"languageKey"),await this.send({method:"GET",path:"api/localization/client/bylanguage",query:{resourceKey:e,languageKey:t}})??""}async listResources(){let e=await this.dependencies.cacheProvider?.get(Q);if(e)return e;let o=(await this.send({method:"GET",path:"api/localization/client/list"})??[]).map(n=>({key:n.resourceKey,value:n.value,language:n.languageKey}));return await this.dependencies.cacheProvider?.set(Q,o,this.dependencies.cacheTtlMs),o}async invalidateCache(e){if(this.dependencies.cacheProvider){if(e){await this.dependencies.cacheProvider.delete(e);return}await this.dependencies.cacheProvider.clear();}}async send(e){try{let t=await this.dependencies.authProvider?.getToken(),o=t?{...e.headers,"X-Auth-Token":t}:e.headers;return (await this.dependencies.httpTransport.request({...e,headers:o})).data}catch(t){throw this.mapError(t)}}mapError(e){return e instanceof c?e:e instanceof P?new x(e.message):e instanceof O?new R(e.message):e instanceof z?e.statusCode===401||e.statusCode===403?new C("Invalid token for localization endpoint",{statusCode:e.statusCode}):e.statusCode===404?new T("Localization resource was not found",{statusCode:e.statusCode}):e.statusCode>=500?new E("Localization API is unavailable",{statusCode:e.statusCode}):new c(e.message,{statusCode:e.statusCode}):new c("Unexpected localization SDK error")}validateRequired(e,t){if(!e?.trim())throw new c(`${t} is required`)}};function K(r){le(r);let t=r.cache?.enabled??false?r.cache?.provider??new L:void 0,o=new A({baseUrl:r.baseUrl,fetchFn:r.fetchFn,timeoutMs:r.timeoutMs??1e4,defaultHeaders:r.headers,middleware:r.middleware});return new I({httpTransport:o,authProvider:r.authProvider??(r.token?new g(r.token):void 0),cacheProvider:t,cacheTtlMs:r.cache?.ttlMs})}function le(r){if(!r?.baseUrl?.trim())throw new c("baseUrl is required to create localization client")}var _=new core.InjectionToken("LOCALIZATION_SDK_OPTIONS"),b=new core.InjectionToken("LOCALIZATION_CLIENT");function ue(r){return core.makeEnvironmentProviders([{provide:_,useValue:r},{provide:b,useFactory:()=>K(r)}])}var ee,F;ee=[core.Injectable({providedIn:"root"})];exports.LocalizationService=class y{constructor(){this.client=core.inject(b);}getCurrentLanguage(e){return rxjs.from(this.client.getCurrentLanguage(e))}getByLanguage(e,t){return rxjs.from(this.client.getByLanguage(e,t))}listResources(){return rxjs.from(this.client.listResources())}invalidateCache(e){return rxjs.from(this.client.invalidateCache(e))}};F=V(),exports.LocalizationService=Y(F,0,"LocalizationService",ee,exports.LocalizationService),J(F,1,exports.LocalizationService);exports.FetchHttpTransport=A;exports.LOCALIZATION_CLIENT=b;exports.LOCALIZATION_SDK_OPTIONS=_;exports.LocalizationAuthError=C;exports.LocalizationError=c;exports.LocalizationNetworkError=R;exports.LocalizationServerError=E;exports.LocalizationTimeoutError=x;exports.MemoryCacheProvider=L;exports.ResourceNotFoundError=T;exports.XAuthTokenProvider=g;exports.createLocalizationClient=K;exports.provideLocalization=ue;
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import {InjectionToken,Injectable,makeEnvironmentProviders,inject}from'@angular/core';import {from}from'rxjs';var re=Object.create;var q=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var $=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),v=r=>{throw TypeError(r)};var ne=(r,e,t)=>e in r?q(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var j=(r,e)=>q(r,"name",{value:e,configurable:true});var V=r=>[,,,re(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],w=r=>r!==void 0&&typeof r!="function"?v("Function expected"):r,ie=(r,e,t,o,n)=>({kind:X[r],name:e,metadata:o,addInitializer:a=>t._?v("Already initialized"):n.push(w(a||null))}),ae=(r,e)=>ne(e,$("metadata"),r[3]),J=(r,e,t,o)=>{for(var n=0,a=r[e>>1],l=a&&a.length;n<l;n++)a[n].call(t);return o},Y=(r,e,t,o,n,a)=>{var s,p,f,i=e&7,m=false,H=0,te=r[H]||(r[H]=[]),u=i&&((n=n.prototype),i<5&&(i>3||!m)&&oe(n,t));j(n,t);for(var N=o.length-1;N>=0;N--)f=ie(i,t,p={},r[3],te),s=(0, o[N])(n,f),p._=1,w(s)&&(n=s);return ae(r,n),u&&q(n,t,u),m?i^4?a:u:n};var g=class{constructor(e){this.token=e;}async getToken(){return this.token?.trim()?this.token:null}};var L=class{constructor(){this.store=new Map;}async get(e){let t=this.store.get(e);return t?t.expiresAt!==void 0&&Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,o){let n=o&&o>0?Date.now()+o:void 0;this.store.set(e,{value:t,expiresAt:n});}async delete(e){this.store.delete(e);}async clear(){this.store.clear();}};var c=class extends Error{constructor(t,o){super(t);this.metadata=o;this.name="LocalizationError";}},C=class extends c{constructor(e="Authentication failed",t){super(e,t),this.name="LocalizationAuthError";}},T=class extends c{constructor(e="Resource not found",t){super(e,t),this.name="ResourceNotFoundError";}},R=class extends c{constructor(e="Localization server error",t){super(e,t),this.name="LocalizationServerError";}},E=class extends c{constructor(e="Network error while contacting localization API",t){super(e,t),this.name="LocalizationNetworkError";}},x=class extends c{constructor(e="Localization request timeout",t){super(e,t),this.name="LocalizationTimeoutError";}};var P=class extends Error{constructor(t,o,n){super(`Request failed with status ${t}`);this.statusCode=t;this.responseBody=o;this.responseHeaders=n;this.name="HttpStatusError";}},z=class extends Error{constructor(t){super(`Request timed out after ${t}ms`);this.timeoutMs=t;this.name="HttpTimeoutError";}},O=class extends Error{constructor(t){super("Network error while sending request");this.causeError=t;this.name="HttpNetworkError";}},A=class{constructor(e){this.options=e;this.fetchFn=e.fetchFn??fetch;}async request(e){let t=e.timeoutMs??this.options.timeoutMs,o=new AbortController,n=setTimeout(()=>o.abort(),t),a=new Request(this.resolveUrl(e),{method:e.method,headers:{"Content-Type":"application/json",...this.options.defaultHeaders,...e.headers},body:e.body===void 0?void 0:JSON.stringify(e.body),signal:o.signal});try{let l=await this.runRequestMiddleware(a),s;try{s=await this.fetchFn(l);}catch(h){throw this.isAbortError(h)?new z(t):new O(h)}let p=await this.runResponseMiddleware(s);if(!p.ok){let h=await p.text();throw new P(p.status,h,p.headers)}let f=await this.parseResponse(p);return {status:p.status,headers:p.headers,data:f}}catch(l){throw await this.runErrorMiddleware(this.toError(l)),l}finally{clearTimeout(n);}}resolveUrl(e){let t=new URL(e.path,this.options.baseUrl);return e.query&&Object.entries(e.query).forEach(([o,n])=>{n!==void 0&&t.searchParams.set(o,String(n));}),t.toString()}async runRequestMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onRequest&&(t=await o.onRequest(t));return t}async runResponseMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onResponse&&(t=await o.onResponse(t));return t}async runErrorMiddleware(e){for(let t of this.options.middleware??[])t.onError&&await t.onError(e);}async parseResponse(e){return e.status===204?null:(e.headers.get("content-type")??"").includes("application/json")?await e.json():await e.text()}toError(e){return e instanceof Error?e:new Error("Unknown request error")}isAbortError(e){return e instanceof DOMException&&e.name==="AbortError"}};var Q="localization:listResources",I=class{constructor(e){this.dependencies=e;}async getCurrentLanguage(e){this.validateRequired(e,"resourceKey");let t=await this.send({method:"GET",path:"api/localization/client/currentlanguage",query:{resourceKey:e}});return {key:e,value:t??"",language:"current"}}async getByLanguage(e,t){this.validateRequired(e,"resourceKey"),this.validateRequired(t,"languageKey");let o=await this.send({method:"GET",path:"api/localization/client/bylanguage",query:{resourceKey:e,languageKey:t}});return {key:e,value:o??"",language:t}}async listResources(){let e=await this.dependencies.cacheProvider?.get(Q);if(e)return e;let o=(await this.send({method:"GET",path:"api/localization/client/list"})??[]).map(n=>({key:n.resourceKey,value:n.value,language:n.languageKey}));return await this.dependencies.cacheProvider?.set(Q,o,this.dependencies.cacheTtlMs),o}async invalidateCache(e){if(this.dependencies.cacheProvider){if(e){await this.dependencies.cacheProvider.delete(e);return}await this.dependencies.cacheProvider.clear();}}async send(e){try{let t=await this.dependencies.authProvider?.getToken(),o=t?{...e.headers,"X-Auth-Token":t}:e.headers;return (await this.dependencies.httpTransport.request({...e,headers:o})).data}catch(t){throw this.mapError(t)}}mapError(e){return e instanceof c?e:e instanceof z?new x(e.message):e instanceof O?new E(e.message):e instanceof P?e.statusCode===401||e.statusCode===403?new C("Invalid token for localization endpoint",{statusCode:e.statusCode}):e.statusCode===404?new T("Localization resource was not found",{statusCode:e.statusCode}):e.statusCode>=500?new R("Localization API is unavailable",{statusCode:e.statusCode}):new c(e.message,{statusCode:e.statusCode}):new c("Unexpected localization SDK error")}validateRequired(e,t){if(!e?.trim())throw new c(`${t} is required`)}};function K(r){le(r);let t=r.cache?.enabled??false?r.cache?.provider??new L:void 0,o=new A({baseUrl:r.baseUrl,fetchFn:r.fetchFn,timeoutMs:r.timeoutMs??1e4,defaultHeaders:r.headers,middleware:r.middleware});return new I({httpTransport:o,authProvider:r.authProvider??(r.token?new g(r.token):void 0),cacheProvider:t,cacheTtlMs:r.cache?.ttlMs})}function le(r){if(!r?.baseUrl?.trim())throw new c("baseUrl is required to create localization client")}var _=new InjectionToken("LOCALIZATION_SDK_OPTIONS"),b=new InjectionToken("LOCALIZATION_CLIENT");function ue(r){return makeEnvironmentProviders([{provide:_,useValue:r},{provide:b,useFactory:()=>K(r)}])}var ee,F;ee=[Injectable({providedIn:"root"})];var y=class{constructor(){this.client=inject(b);}getCurrentLanguage(e){return from(this.client.getCurrentLanguage(e))}getByLanguage(e,t){return from(this.client.getByLanguage(e,t))}listResources(){return from(this.client.listResources())}invalidateCache(e){return from(this.client.invalidateCache(e))}};F=V(),y=Y(F,0,"LocalizationService",ee,y),J(F,1,y);export{A as FetchHttpTransport,b as LOCALIZATION_CLIENT,_ as LOCALIZATION_SDK_OPTIONS,C as LocalizationAuthError,c as LocalizationError,E as LocalizationNetworkError,R as LocalizationServerError,y as LocalizationService,x as LocalizationTimeoutError,L as MemoryCacheProvider,T as ResourceNotFoundError,g as XAuthTokenProvider,K as createLocalizationClient,ue as provideLocalization};
1
+ import {InjectionToken,Injectable,makeEnvironmentProviders,inject}from'@angular/core';import {from}from'rxjs';var re=Object.create;var q=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var $=(r,e)=>(e=Symbol[r])?e:Symbol.for("Symbol."+r),v=r=>{throw TypeError(r)};var ne=(r,e,t)=>e in r?q(r,e,{enumerable:true,configurable:true,writable:true,value:t}):r[e]=t;var j=(r,e)=>q(r,"name",{value:e,configurable:true});var V=r=>[,,,re(null)],X=["class","method","getter","setter","accessor","field","value","get","set"],w=r=>r!==void 0&&typeof r!="function"?v("Function expected"):r,ie=(r,e,t,o,n)=>({kind:X[r],name:e,metadata:o,addInitializer:a=>t._?v("Already initialized"):n.push(w(a||null))}),ae=(r,e)=>ne(e,$("metadata"),r[3]),J=(r,e,t,o)=>{for(var n=0,a=r[e>>1],l=a&&a.length;n<l;n++)a[n].call(t);return o},Y=(r,e,t,o,n,a)=>{var s,p,f,i=e&7,m=false,N=0,te=r[N]||(r[N]=[]),u=i&&((n=n.prototype),i<5&&(i>3||!m)&&oe(n,t));j(n,t);for(var k=o.length-1;k>=0;k--)f=ie(i,t,p={},r[3],te),s=(0, o[k])(n,f),p._=1,w(s)&&(n=s);return ae(r,n),u&&q(n,t,u),m?i^4?a:u:n};var g=class{constructor(e){this.token=e;}async getToken(){return this.token?.trim()?this.token:null}};var L=class{constructor(){this.store=new Map;}async get(e){let t=this.store.get(e);return t?t.expiresAt!==void 0&&Date.now()>t.expiresAt?(this.store.delete(e),null):t.value:null}async set(e,t,o){let n=o&&o>0?Date.now()+o:void 0;this.store.set(e,{value:t,expiresAt:n});}async delete(e){this.store.delete(e);}async clear(){this.store.clear();}};var c=class extends Error{constructor(t,o){super(t);this.metadata=o;this.name="LocalizationError";}},C=class extends c{constructor(e="Authentication failed",t){super(e,t),this.name="LocalizationAuthError";}},T=class extends c{constructor(e="Resource not found",t){super(e,t),this.name="ResourceNotFoundError";}},E=class extends c{constructor(e="Localization server error",t){super(e,t),this.name="LocalizationServerError";}},R=class extends c{constructor(e="Network error while contacting localization API",t){super(e,t),this.name="LocalizationNetworkError";}},x=class extends c{constructor(e="Localization request timeout",t){super(e,t),this.name="LocalizationTimeoutError";}};var z=class extends Error{constructor(t,o,n){super(`Request failed with status ${t}`);this.statusCode=t;this.responseBody=o;this.responseHeaders=n;this.name="HttpStatusError";}},P=class extends Error{constructor(t){super(`Request timed out after ${t}ms`);this.timeoutMs=t;this.name="HttpTimeoutError";}},O=class extends Error{constructor(t){super("Network error while sending request");this.causeError=t;this.name="HttpNetworkError";}},A=class{constructor(e){this.options=e;this.fetchFn=e.fetchFn??fetch;}async request(e){let t=e.timeoutMs??this.options.timeoutMs,o=new AbortController,n=setTimeout(()=>o.abort(),t),a=new Request(this.resolveUrl(e),{method:e.method,headers:{"Content-Type":"application/json",...this.options.defaultHeaders,...e.headers},body:e.body===void 0?void 0:JSON.stringify(e.body),signal:o.signal});try{let l=await this.runRequestMiddleware(a),s;try{s=await this.fetchFn(l);}catch(h){throw this.isAbortError(h)?new P(t):new O(h)}let p=await this.runResponseMiddleware(s);if(!p.ok){let h=await p.text();throw new z(p.status,h,p.headers)}let f=await this.parseResponse(p);return {status:p.status,headers:p.headers,data:f}}catch(l){throw await this.runErrorMiddleware(this.toError(l)),l}finally{clearTimeout(n);}}resolveUrl(e){let t=new URL(e.path,this.options.baseUrl);return e.query&&Object.entries(e.query).forEach(([o,n])=>{n!==void 0&&t.searchParams.set(o,String(n));}),t.toString()}async runRequestMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onRequest&&(t=await o.onRequest(t));return t}async runResponseMiddleware(e){let t=e;for(let o of this.options.middleware??[])o.onResponse&&(t=await o.onResponse(t));return t}async runErrorMiddleware(e){for(let t of this.options.middleware??[])t.onError&&await t.onError(e);}async parseResponse(e){return e.status===204?null:(e.headers.get("content-type")??"").includes("application/json")?await e.json():await e.text()}toError(e){return e instanceof Error?e:new Error("Unknown request error")}isAbortError(e){return e instanceof DOMException&&e.name==="AbortError"}};var Q="localization:listResources",I=class{constructor(e){this.dependencies=e;}async getCurrentLanguage(e){return this.validateRequired(e,"resourceKey"),await this.send({method:"GET",path:"api/localization/client/currentlanguage",query:{resourceKey:e}})??""}async getByLanguage(e,t){return this.validateRequired(e,"resourceKey"),this.validateRequired(t,"languageKey"),await this.send({method:"GET",path:"api/localization/client/bylanguage",query:{resourceKey:e,languageKey:t}})??""}async listResources(){let e=await this.dependencies.cacheProvider?.get(Q);if(e)return e;let o=(await this.send({method:"GET",path:"api/localization/client/list"})??[]).map(n=>({key:n.resourceKey,value:n.value,language:n.languageKey}));return await this.dependencies.cacheProvider?.set(Q,o,this.dependencies.cacheTtlMs),o}async invalidateCache(e){if(this.dependencies.cacheProvider){if(e){await this.dependencies.cacheProvider.delete(e);return}await this.dependencies.cacheProvider.clear();}}async send(e){try{let t=await this.dependencies.authProvider?.getToken(),o=t?{...e.headers,"X-Auth-Token":t}:e.headers;return (await this.dependencies.httpTransport.request({...e,headers:o})).data}catch(t){throw this.mapError(t)}}mapError(e){return e instanceof c?e:e instanceof P?new x(e.message):e instanceof O?new R(e.message):e instanceof z?e.statusCode===401||e.statusCode===403?new C("Invalid token for localization endpoint",{statusCode:e.statusCode}):e.statusCode===404?new T("Localization resource was not found",{statusCode:e.statusCode}):e.statusCode>=500?new E("Localization API is unavailable",{statusCode:e.statusCode}):new c(e.message,{statusCode:e.statusCode}):new c("Unexpected localization SDK error")}validateRequired(e,t){if(!e?.trim())throw new c(`${t} is required`)}};function K(r){le(r);let t=r.cache?.enabled??false?r.cache?.provider??new L:void 0,o=new A({baseUrl:r.baseUrl,fetchFn:r.fetchFn,timeoutMs:r.timeoutMs??1e4,defaultHeaders:r.headers,middleware:r.middleware});return new I({httpTransport:o,authProvider:r.authProvider??(r.token?new g(r.token):void 0),cacheProvider:t,cacheTtlMs:r.cache?.ttlMs})}function le(r){if(!r?.baseUrl?.trim())throw new c("baseUrl is required to create localization client")}var _=new InjectionToken("LOCALIZATION_SDK_OPTIONS"),b=new InjectionToken("LOCALIZATION_CLIENT");function ue(r){return makeEnvironmentProviders([{provide:_,useValue:r},{provide:b,useFactory:()=>K(r)}])}var ee,F;ee=[Injectable({providedIn:"root"})];var y=class{constructor(){this.client=inject(b);}getCurrentLanguage(e){return from(this.client.getCurrentLanguage(e))}getByLanguage(e,t){return from(this.client.getByLanguage(e,t))}listResources(){return from(this.client.listResources())}invalidateCache(e){return from(this.client.invalidateCache(e))}};F=V(),y=Y(F,0,"LocalizationService",ee,y),J(F,1,y);export{A as FetchHttpTransport,b as LOCALIZATION_CLIENT,_ as LOCALIZATION_SDK_OPTIONS,C as LocalizationAuthError,c as LocalizationError,R as LocalizationNetworkError,E as LocalizationServerError,y as LocalizationService,x as LocalizationTimeoutError,L as MemoryCacheProvider,T as ResourceNotFoundError,g as XAuthTokenProvider,K as createLocalizationClient,ue as provideLocalization};
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  "publishConfig": {
20
20
  "access": "public"
21
21
  },
22
- "version": "1.0.3482",
22
+ "version": "1.0.3491",
23
23
  "devDependencies": {
24
24
  "@angular/core": "^20.3.15",
25
25
  "@angular/common": "^20.3.15",