uni-manager 0.0.24 → 0.0.26
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/fesm2022/uni-manager.mjs +72 -21
- package/fesm2022/uni-manager.mjs.map +1 -1
- package/lib/date/manager.d.ts +1 -1
- package/lib/http/model.d.ts +5 -3
- package/lib/http/util.d.ts +4 -1
- package/lib/locale/manager.d.ts +16 -4
- package/package.json +1 -1
package/fesm2022/uni-manager.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import { isEqual } from 'lodash-es';
|
|
|
7
7
|
* Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null
|
|
8
8
|
* in formati standardizzati.
|
|
9
9
|
*/
|
|
10
|
-
class
|
|
10
|
+
class UniDateManager {
|
|
11
11
|
static toYYYYMMDD(date) {
|
|
12
12
|
if (!date)
|
|
13
13
|
return '';
|
|
@@ -199,9 +199,25 @@ class UniLocaleManager {
|
|
|
199
199
|
/* ----------------------------------- Config ------------------------------------ */
|
|
200
200
|
/* ------------------------------------------------------------------------------- */
|
|
201
201
|
/** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */
|
|
202
|
-
static { this.
|
|
202
|
+
static { this._locale = 'en-US'; }
|
|
203
203
|
/** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */
|
|
204
|
-
static { this.
|
|
204
|
+
static { this._prefix = ''; }
|
|
205
|
+
/* ------------------------------------------------------------------------------- */
|
|
206
|
+
/* --------------------------------- Metodi: get --------------------------------- */
|
|
207
|
+
/* ------------------------------------------------------------------------------- */
|
|
208
|
+
/** Restituisce il codice lingua corrente */
|
|
209
|
+
static get locale() {
|
|
210
|
+
return this._locale;
|
|
211
|
+
}
|
|
212
|
+
/** Restituisce solo la lingua (es. 'it') */
|
|
213
|
+
static get language() {
|
|
214
|
+
return this._locale.split('-')[0];
|
|
215
|
+
}
|
|
216
|
+
/** Restituisce solo il paese (es. 'IT') */
|
|
217
|
+
static get region() {
|
|
218
|
+
const parts = this._locale.split('-');
|
|
219
|
+
return parts.length > 1 ? parts[1] : '';
|
|
220
|
+
}
|
|
205
221
|
/* ------------------------------------------------------------------------------- */
|
|
206
222
|
/* ------------------------------------ Store ------------------------------------ */
|
|
207
223
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -221,10 +237,10 @@ class UniLocaleManager {
|
|
|
221
237
|
* Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
|
|
222
238
|
*/
|
|
223
239
|
static setup(locale, prefix) {
|
|
224
|
-
this.
|
|
225
|
-
this.
|
|
240
|
+
this._locale = locale ?? 'en-US';
|
|
241
|
+
this._prefix = prefix;
|
|
226
242
|
}
|
|
227
|
-
static
|
|
243
|
+
static setTranslations(translations) {
|
|
228
244
|
this.store.next(translations ?? {});
|
|
229
245
|
}
|
|
230
246
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -238,7 +254,7 @@ class UniLocaleManager {
|
|
|
238
254
|
const translationsObj = translations ?? this.currentValue;
|
|
239
255
|
// Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola
|
|
240
256
|
const capitalizedLabel = label.charAt(0).toUpperCase() + label.slice(1);
|
|
241
|
-
const finalKey = `${this.
|
|
257
|
+
const finalKey = `${this._prefix}${prefix}${capitalizedLabel}`;
|
|
242
258
|
// Cerca la chiave in minuscolo (standardizzazione)
|
|
243
259
|
const finalKeyLower = finalKey.toLowerCase();
|
|
244
260
|
let translation = translationsObj?.[finalKeyLower];
|
|
@@ -250,12 +266,32 @@ class UniLocaleManager {
|
|
|
250
266
|
// Interpolazione variabili (es: "Ciao {{name}}")
|
|
251
267
|
if (interpolateParams) {
|
|
252
268
|
for (const [key, value] of Object.entries(interpolateParams)) {
|
|
253
|
-
const displayValue = value instanceof Date ? value.toLocaleDateString(this.
|
|
269
|
+
const displayValue = value instanceof Date ? value.toLocaleDateString(this._locale) : String(value);
|
|
254
270
|
translation = translation.replaceAll(`{{${key}}}`, displayValue);
|
|
255
271
|
}
|
|
256
272
|
}
|
|
257
273
|
return translation;
|
|
258
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Traduce una stringa che contiene parametri separati da un carattere specifico.
|
|
277
|
+
* Supporta ora un numero arbitrario di parametri in formato "label/param1/param2"
|
|
278
|
+
* o semplicemente "label".
|
|
279
|
+
*/
|
|
280
|
+
static translateInlineParam(labelWithParam, splitChar) {
|
|
281
|
+
if (!labelWithParam)
|
|
282
|
+
return '[No translation]';
|
|
283
|
+
const [label, ...params] = labelWithParam.split(splitChar);
|
|
284
|
+
// Se non ci sono parametri, esegui una traduzione semplice
|
|
285
|
+
if (params.length === 0) {
|
|
286
|
+
return this.translate(label);
|
|
287
|
+
}
|
|
288
|
+
// Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }
|
|
289
|
+
const interpolateParams = {};
|
|
290
|
+
params.forEach((val, index) => {
|
|
291
|
+
interpolateParams[`param${index}`] = val;
|
|
292
|
+
});
|
|
293
|
+
return this.translate(label, 'lbl', interpolateParams);
|
|
294
|
+
}
|
|
259
295
|
/* ------------------------------------------------------------------------------- */
|
|
260
296
|
/* ------------------------------- Metodi: numeri -------------------------------- */
|
|
261
297
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -263,8 +299,8 @@ class UniLocaleManager {
|
|
|
263
299
|
* Converte un valore numerico in una stringa formattata secondo il locale impostato.
|
|
264
300
|
* Disabilita i separatori delle migliaia e forza un numero fisso di decimali.
|
|
265
301
|
*/
|
|
266
|
-
static
|
|
267
|
-
return new Intl.NumberFormat(this.
|
|
302
|
+
static toStringNumber(value, decimal) {
|
|
303
|
+
return new Intl.NumberFormat(this._locale, {
|
|
268
304
|
useGrouping: true,
|
|
269
305
|
minimumFractionDigits: decimal,
|
|
270
306
|
maximumFractionDigits: decimal,
|
|
@@ -286,7 +322,7 @@ class UniLocaleManager {
|
|
|
286
322
|
return '';
|
|
287
323
|
}
|
|
288
324
|
// Controllo: locale da forzare
|
|
289
|
-
const locale = force && this.
|
|
325
|
+
const locale = force && this._locale.startsWith(force.oldLang) ? force.newLocale : this._locale;
|
|
290
326
|
switch (mode) {
|
|
291
327
|
case 'date':
|
|
292
328
|
return dt.toLocaleDateString(locale);
|
|
@@ -563,9 +599,22 @@ function httpPolling$(url, config, promiseFactory) {
|
|
|
563
599
|
: source$.pipe(distinctUntilChanged((prev, cur) => isEqual(prev, cur)));
|
|
564
600
|
}
|
|
565
601
|
|
|
566
|
-
|
|
602
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
603
|
+
/**
|
|
604
|
+
* Costruisce un URL completo per l'API partendo dai parametri di configurazione.
|
|
605
|
+
*/
|
|
606
|
+
function getUrl(hostname, port, path, params) {
|
|
567
607
|
const base = `http://${hostname}:${port}`;
|
|
568
|
-
|
|
608
|
+
const url = new URL(`/api${path}`, base);
|
|
609
|
+
// Aggiungi i parametri
|
|
610
|
+
if (params) {
|
|
611
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
612
|
+
if (value !== undefined && value !== null) {
|
|
613
|
+
url.searchParams.append(key, String(value));
|
|
614
|
+
}
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
return url;
|
|
569
618
|
}
|
|
570
619
|
|
|
571
620
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
@@ -602,7 +651,7 @@ class UniHttpManager {
|
|
|
602
651
|
/* Recupero configurazione */
|
|
603
652
|
const { path, init } = config;
|
|
604
653
|
const initCustom = { ...init, method: 'GET' };
|
|
605
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
654
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
606
655
|
return http$(url, 'one', config, () => executeHttp(url, initCustom));
|
|
607
656
|
}
|
|
608
657
|
/**
|
|
@@ -613,7 +662,7 @@ class UniHttpManager {
|
|
|
613
662
|
/* Recupero configurazione */
|
|
614
663
|
const { path, init } = config;
|
|
615
664
|
const initCustom = { ...init, method: 'GET' };
|
|
616
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
665
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
617
666
|
return http$(url, 'one', config, () => executeImage(url, initCustom));
|
|
618
667
|
}
|
|
619
668
|
/**
|
|
@@ -630,7 +679,7 @@ class UniHttpManager {
|
|
|
630
679
|
};
|
|
631
680
|
initCustom.body = JSON.stringify(body);
|
|
632
681
|
}
|
|
633
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
682
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
634
683
|
return http$(url, 'one', config, () => executeHttp(url, initCustom));
|
|
635
684
|
}
|
|
636
685
|
/**
|
|
@@ -649,7 +698,7 @@ class UniHttpManager {
|
|
|
649
698
|
},
|
|
650
699
|
body: JSON.stringify(body),
|
|
651
700
|
};
|
|
652
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
701
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
653
702
|
return http$(url, 'one', config, () => executeHttp(url, initCustom));
|
|
654
703
|
}
|
|
655
704
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -663,7 +712,7 @@ class UniHttpManager {
|
|
|
663
712
|
/* Recupero configurazione */
|
|
664
713
|
const { path, init } = config;
|
|
665
714
|
const initCustom = { ...init, method: 'GET' };
|
|
666
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
715
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
667
716
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
668
717
|
}
|
|
669
718
|
/**
|
|
@@ -679,7 +728,7 @@ class UniHttpManager {
|
|
|
679
728
|
headers: { 'Content-Type': 'application/json' },
|
|
680
729
|
body: JSON.stringify(body),
|
|
681
730
|
};
|
|
682
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
731
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
683
732
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
684
733
|
}
|
|
685
734
|
/**
|
|
@@ -696,7 +745,7 @@ class UniHttpManager {
|
|
|
696
745
|
};
|
|
697
746
|
initCustom.body = JSON.stringify(body);
|
|
698
747
|
}
|
|
699
|
-
const url = getUrl(this.hostname, this.port, path);
|
|
748
|
+
const url = getUrl(this.hostname, this.port, path, config.params);
|
|
700
749
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
701
750
|
}
|
|
702
751
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -710,6 +759,8 @@ class UniHttpManager {
|
|
|
710
759
|
}
|
|
711
760
|
}
|
|
712
761
|
|
|
762
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
763
|
+
|
|
713
764
|
/*
|
|
714
765
|
* Public API Surface of uni-manager
|
|
715
766
|
*/
|
|
@@ -718,5 +769,5 @@ class UniHttpManager {
|
|
|
718
769
|
* Generated bundle index. Do not edit.
|
|
719
770
|
*/
|
|
720
771
|
|
|
721
|
-
export {
|
|
772
|
+
export { EmitValueMode, MapOperator, PollingErrorMode, UniDateManager, UniErrorManager, UniHttpManager, UniLocaleManager, UniToastManager };
|
|
722
773
|
//# sourceMappingURL=uni-manager.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager.mjs","sources":["../../../projects/uni-manager/src/lib/date/manager.ts","../../../projects/uni-manager/src/lib/error/manager.ts","../../../projects/uni-manager/src/lib/http/enum.ts","../../../projects/uni-manager/src/lib/http/execute.ts","../../../projects/uni-manager/src/lib/locale/manager.ts","../../../projects/uni-manager/src/lib/toast/manager.ts","../../../projects/uni-manager/src/lib/http/ref.ts","../../../projects/uni-manager/src/lib/http/handler.ts","../../../projects/uni-manager/src/lib/http/http.ts","../../../projects/uni-manager/src/lib/http/util.ts","../../../projects/uni-manager/src/lib/http/manager.ts","../../../projects/uni-manager/src/public-api.ts","../../../projects/uni-manager/src/uni-manager.ts"],"sourcesContent":["/**\r\n * Classe di utilità per la gestione e formattazione delle date.\r\n * Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null\r\n * in formati standardizzati.\r\n */\r\nexport class DateManager {\r\n static toYYYYMMDD(date: Date | string | null | undefined): string {\r\n if (!date) return '';\r\n\r\n const d = new Date(date);\r\n\r\n if (isNaN(d.getTime())) return '';\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","import { BehaviorSubject, type Observable } from 'rxjs';\r\nimport type { IUniFeError, IUniHttpError } from 'uni-error';\r\n\r\nexport class UniErrorManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n private static store = new BehaviorSubject<Map<string, IUniFeError | IUniHttpError>>(new Map());\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$: Observable<Map<string, IUniFeError | IUniHttpError>> =\r\n UniErrorManager.store.asObservable();\r\n\r\n /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */\r\n public static get currentValue(): Map<string, IUniFeError | IUniHttpError> {\r\n return UniErrorManager.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: store -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Aggiunge o aggiorna un errore nello store.\r\n * Se l'errore esiste già (stesso ID), incrementa il contatore 'count'.\r\n */\r\n public static add(id: string, error: IUniHttpError | IUniFeError): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniErrorManager.currentValue;\r\n\r\n // Tenta di recuperare l'oggetto corrente\r\n const oldItem = oldMap.get(id);\r\n\r\n // Crea il nuovo oggetto\r\n const newItemMap: IUniFeError | IUniHttpError = {\r\n ...error,\r\n count: oldItem ? oldItem.count + 1 : 1,\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n\r\n /**\r\n * Rimuove un errore tramite ID\r\n */\r\n public static remove(id: string): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniErrorManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n if (!oldMap.has(id)) return;\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.delete(id);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n\r\n /**\r\n * Svuota completamente la lista degli errori\r\n */\r\n public static removeAll(): void {\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map();\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n}\r\n","export enum MapOperator {\r\n\t/** Cancella la precedente richiesta, mantiene solo l’ultima */\r\n\tSWITCH_MAP,\r\n\r\n\t/** Ignora nuovi valori finché la corrente non finisce */\r\n\tEXHAUST_MAP,\r\n\r\n\t/** Mette le richieste in coda, le esegue una alla volta */\r\n\tCONCAT_MAP,\r\n\r\n\t/** Esegue tutte le richieste in parallelo, ordine non garantito */\r\n\tMERGE_MAP\r\n}\r\n\r\nexport enum PollingErrorMode {\r\n\t/** Salta questa iterazione emettendo un undefined. Il polling continua al tick successivo. */\r\n\tIGNORE,\r\n\r\n\t/** Salta questa iterazione senza emettere valori. Il polling continua al tick successivo. */\r\n\tSKIP,\r\n\r\n\t/** Interrompe il polling propagando l'errore. */\r\n\tSTOP,\r\n\r\n\t/** Ignora l'errore, lo salva (es. per UI), e continua il polling. Emette `undefined`. */\r\n\tIGNORE_WITH_ERROR\r\n}\r\n\r\nexport enum EmitValueMode {\r\n\t/** Aggiorna lo stato solo se arrivano dati nuovi (distinct) */\r\n\tON_NEW_DATA,\r\n\r\n\t/** Aggiorna lo stato ad ogni chiamata, anche se i dati sono uguali */\r\n\tEVERY_TIME\r\n}\r\n","import { isHttpErrorBody, UniHttpError } from 'uni-error';\r\n\r\nasync function execute(\r\n url: URL,\r\n init?: RequestInit,\r\n): Promise<{ res: Response; type: 'json' | 'image' | null } | undefined> {\r\n try {\r\n /* Esegue chiamata http */\r\n const res = await fetch(url, init);\r\n\r\n /* Nessun contenuto */\r\n if (res.status === 204) {\r\n return undefined;\r\n }\r\n\r\n /* Recupero se è un json */\r\n const contentType = res.headers.get('content-type') ?? '';\r\n const isJson = contentType.startsWith('application/json');\r\n const isImage = contentType.startsWith('image/');\r\n\r\n /* Errore HTTP (quindi risposta ricevuta ma non ok) */\r\n if (!res.ok) {\r\n let errorBody: unknown;\r\n\r\n try {\r\n const resClone = res.clone();\r\n errorBody = isJson ? await resClone.json() : await resClone.text();\r\n } catch {\r\n errorBody = await res.text();\r\n }\r\n\r\n if (isHttpErrorBody(errorBody)) {\r\n const type = errorBody.exceptionType.includes('HttpRequestException') ? 'be' : 'ice';\r\n throw new UniHttpError(type, res.status, url, errorBody);\r\n } else {\r\n const error = new Error(`HTTP ${res.statusText}`);\r\n throw new UniHttpError('base', res.status, url, {\r\n exceptionMessage: error.message,\r\n exceptionType: 'ErrorBase',\r\n message: error.message,\r\n stackTrace: error.stack ?? '',\r\n });\r\n }\r\n }\r\n\r\n return { res, type: isJson ? 'json' : isImage ? 'image' : null };\r\n } catch (error: unknown) {\r\n if (error instanceof TypeError) {\r\n throw new UniHttpError('network', -1, url, {\r\n exceptionMessage: `${error.name}: ${error.message}\\n${error.stack}`,\r\n exceptionType: error.name,\r\n message: error.message,\r\n stackTrace: error.stack ?? '',\r\n });\r\n }\r\n\r\n // Fallback\r\n throw error;\r\n }\r\n}\r\n\r\nexport async function executeHttp<T>(url: URL, init?: RequestInit): Promise<T | undefined> {\r\n /* Esegue chiamata http e vari controlli */\r\n const executeRes = await execute(url, init);\r\n if (!executeRes) return undefined;\r\n\r\n /* Recupero risposta */\r\n const { res, type } = executeRes;\r\n\r\n /* Successo JSON */\r\n if (type === 'json') {\r\n return (await res.json()) as T;\r\n }\r\n\r\n /* Successo testo */\r\n const text = await res.text();\r\n return text ? (text as unknown as T) : undefined;\r\n}\r\n\r\nexport async function executeImage(url: URL, init?: RequestInit): Promise<string | undefined> {\r\n /* Esegue chiamata http e vari controlli */\r\n const executeRes = await execute(url, init);\r\n if (!executeRes) return undefined;\r\n\r\n /* Recupero risposta */\r\n const { res, type } = executeRes;\r\n\r\n /* Successo immagine */\r\n if (type !== 'image') {\r\n throw new Error(`Not image found`);\r\n }\r\n\r\n /* Successo immagine */\r\n const blob = await res.blob();\r\n return URL.createObjectURL(blob);\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\n\r\nexport class UniLocaleManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */\r\n private static locale = 'en-US';\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static prefix = '';\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Record<string, string>>({});\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$ = this.store.asObservable();\r\n\r\n /** Ottiene il dizionario attuale senza sottoscrizione */\r\n public static get currentValue(): Record<string, string> {\r\n return this.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(locale: string | undefined, prefix: string): void {\r\n this.locale = locale ?? 'en-US';\r\n this.prefix = prefix;\r\n }\r\n\r\n public static addTranslations(translations: Record<string, string> | undefined): void {\r\n this.store.next(translations ?? {});\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------- Metodi: traduzioni ------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Traduce una label in base al dizionario caricato.\r\n * Gestisce la composizione della chiave, i parametri dinamici (interpolazione) e il fallback.\r\n */\r\n public static translate(\r\n label: string,\r\n prefix = 'lbl',\r\n interpolateParams?: Record<string, string | number | Date>,\r\n translations?: Record<string, string>,\r\n ): string {\r\n const translationsObj = translations ?? this.currentValue;\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const capitalizedLabel = label.charAt(0).toUpperCase() + label.slice(1);\r\n const finalKey = `${this.prefix}${prefix}${capitalizedLabel}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n const finalKeyLower = finalKey.toLowerCase();\r\n let translation = translationsObj?.[finalKeyLower];\r\n\r\n // Log e Fallback se la traduzione manca\r\n if (translation === undefined) {\r\n console.warn(`Translation missing for key: ${finalKeyLower}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili (es: \"Ciao {{name}}\")\r\n if (interpolateParams) {\r\n for (const [key, value] of Object.entries(interpolateParams)) {\r\n const displayValue =\r\n value instanceof Date ? value.toLocaleDateString(this.locale) : String(value);\r\n\r\n translation = translation.replaceAll(`{{${key}}}`, displayValue);\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------- Metodi: numeri -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Converte un valore numerico in una stringa formattata secondo il locale impostato.\r\n * Disabilita i separatori delle migliaia e forza un numero fisso di decimali.\r\n */\r\n public static toNumberString(value: number, decimal: number): string {\r\n return new Intl.NumberFormat(this.locale, {\r\n useGrouping: true,\r\n minimumFractionDigits: decimal,\r\n maximumFractionDigits: decimal,\r\n numberingSystem: 'latn',\r\n }).format(value);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: date --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Formatta una data o una stringa in base al locale corrente.\r\n * Gestisce tre modalità predefinite (date, time, full) e accetta opzioni personalizzate Intl.\r\n */\r\n public static toDate(\r\n date: string | Date,\r\n mode: 'date' | 'time' | 'full' = 'full',\r\n force?: { oldLang: string; newLocale: string },\r\n ): string {\r\n const dt = new Date(date);\r\n\r\n // Controllo: validità data\r\n if (isNaN(dt.getTime())) {\r\n console.error(`[UniLocaleManager] Data non valida fornita a formatDateTime:`, date);\r\n return '';\r\n }\r\n\r\n // Controllo: locale da forzare\r\n const locale = force && this.locale.startsWith(force.oldLang) ? force.newLocale : this.locale;\r\n\r\n switch (mode) {\r\n case 'date':\r\n return dt.toLocaleDateString(locale);\r\n case 'time':\r\n return dt.toLocaleTimeString(locale);\r\n case 'full':\r\n default:\r\n return dt.toLocaleString(locale);\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { UniLocaleManager } from '../locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from './model';\r\n\r\nexport class UniToastManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Riferimento interno all'istanza */\r\n private static manager: IToastManager;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza il manager con una serie di operazioni\r\n */\r\n public static setup(operations: IToastManager): void {\r\n this.manager = operations;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: show --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static show(\r\n label: string,\r\n interpolateParams: Record<string, any> = {},\r\n operation: keyof IToastManager = 'success',\r\n config: ToastConfig = {},\r\n ): void {\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(label, 'toast', interpolateParams);\r\n this.manager[operation](msg, config);\r\n }\r\n\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static showHttp<T>(\r\n res: T | undefined,\r\n label: string,\r\n interpolateParams: Record<string, any> = {},\r\n config: ToastConfig & Omit<ToastHttpConfig<T>, 'label' | 'interpolateParams'> = {},\r\n ): void {\r\n const { resParams, resLengthParams, formatters } = config;\r\n\r\n /* Parametri statici di base */\r\n const allParams: Record<string, any> = { ...interpolateParams };\r\n\r\n /* Estrazione parametri dalla risposta (se esiste ed è un oggetto) */\r\n if (res && typeof res === 'object') {\r\n resParams?.forEach((key) => {\r\n if (!(key in res)) return;\r\n\r\n const rawValue = res[key];\r\n // Se esiste un formatter per questa chiave lo si usa, altrimenti valore grezzo\r\n allParams[key] = formatters?.[key] ? formatters[key]!(rawValue) : rawValue;\r\n });\r\n }\r\n\r\n /* Conteggio array */\r\n if (resLengthParams && Array.isArray(res)) {\r\n allParams[resLengthParams] = res.length;\r\n }\r\n\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(label, 'toast', allParams);\r\n this.manager.success(msg, config);\r\n }\r\n}\r\n","import { UniHttpManager } from './manager';\r\nimport type { HttpRef } from './model';\r\n\r\n/**\r\n * Aggiunge una nuova ref nello store solo se non è già presente.\r\n * Se l'ID esiste già, l'operazione viene interrotta per preservare il dato originale.\r\n */\r\nexport function add(id: string, lineId: null, url: URL, type: HttpRef['type']): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se è presente l'item allora termina\r\n if (oldMap.get(id)) return;\r\n\r\n // Crea il nuovo oggetto\r\n const newItemMap: HttpRef = {\r\n type,\r\n lineId,\r\n url,\r\n hasError: false,\r\n pendingCount: 0,\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Rimuove un http ref tramite ID\r\n */\r\nexport function remove(id: string): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n if (!oldMap.has(id)) return;\r\n\r\n // Aggiorna store\r\n const newMap = new Map(oldMap);\r\n newMap.delete(id);\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Aggiorna il contatore delle chiamate pendenti per una specifica ref.\r\n * Incrementa o decrementa 'pendingCount' garantendo che non scenda mai sotto lo zero.\r\n * Se la ref non esiste, l'operazione viene ignorata.\r\n */\r\nexport function updateIsLoading(id: string, delta: -1 | 1): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n const oldItem = oldMap.get(id);\r\n if (!oldItem) return;\r\n\r\n // Aggiorna l'oggetto\r\n const newItemMap: HttpRef = {\r\n ...oldItem,\r\n pendingCount: Math.max(0, oldItem.pendingCount + delta),\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Aggiorna lo stato di errore per una specifica ref.\r\n * Se il valore di 'hasError' è identico a quello attuale o se la ref non esiste,\r\n * l'operazione viene interrotta per evitare aggiornamenti inutili.\r\n */\r\nexport function updateHasError(id: string, hasError: boolean): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n const oldItem = oldMap.get(id);\r\n if (!oldItem) return;\r\n\r\n // Controllo: se con lo stesso valore, salta\r\n if (oldItem.hasError === hasError) return;\r\n\r\n // Aggiorna l'oggetto\r\n const newItemMap: HttpRef = { ...oldItem, hasError };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Svuota completamente la lista delle refs\r\n */\r\nexport function removeAll(): void {\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map();\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n","import {\r\n concatMap,\r\n EMPTY,\r\n exhaustMap,\r\n mergeMap,\r\n Observable,\r\n of,\r\n type OperatorFunction,\r\n switchMap,\r\n throwError,\r\n} from 'rxjs';\r\nimport { UniHttpError } from 'uni-error';\r\n\r\nimport { UniErrorManager } from '../error';\r\nimport { MapOperator, PollingErrorMode } from './enum';\r\nimport { updateHasError } from './ref';\r\n\r\nexport function operatorHandler<T>(\r\n operator: MapOperator,\r\n): (\r\n project: (value: number) => Observable<T | undefined>,\r\n) => OperatorFunction<number, T | undefined> {\r\n // Gestione della concorrenza in base al parametro\r\n switch (operator) {\r\n case MapOperator.EXHAUST_MAP:\r\n return (project) => exhaustMap(project);\r\n case MapOperator.CONCAT_MAP:\r\n return (project) => concatMap(project);\r\n case MapOperator.MERGE_MAP:\r\n return (project) => mergeMap(project);\r\n case MapOperator.SWITCH_MAP:\r\n default:\r\n return (project) => switchMap(project);\r\n }\r\n}\r\n\r\nexport function errorHandler(\r\n err: unknown,\r\n errorMode: PollingErrorMode,\r\n ref: string,\r\n): Observable<undefined> {\r\n // Controllo: sia effettivamente un errore di tipo 'UniHttpError'\r\n if (!(err instanceof UniHttpError)) {\r\n return throwError(() => err);\r\n }\r\n\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n // Gestione dell'errore in base al parametro\r\n switch (errorMode) {\r\n case PollingErrorMode.IGNORE:\r\n return of(undefined);\r\n case PollingErrorMode.SKIP:\r\n return EMPTY;\r\n case PollingErrorMode.IGNORE_WITH_ERROR: {\r\n UniErrorManager.add(ref, err);\r\n return of(undefined);\r\n }\r\n case PollingErrorMode.STOP:\r\n default: {\r\n UniErrorManager.add(ref, err);\r\n return throwError(() => err);\r\n }\r\n }\r\n}\r\n","import { isEqual } from 'lodash-es';\r\nimport {\r\n catchError,\r\n defer,\r\n distinctUntilChanged,\r\n finalize,\r\n from,\r\n Observable,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\n\r\nimport { UniErrorManager } from '../error';\r\nimport { UniToastManager } from '../toast';\r\nimport { EmitValueMode, MapOperator, PollingErrorMode } from './enum';\r\nimport { errorHandler, operatorHandler } from './handler';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\nimport { add, remove, updateHasError, updateIsLoading } from './ref';\r\n\r\nexport function http$<T>(\r\n url: URL,\r\n refType: HttpRef['type'],\r\n config: HttpConfig<T>,\r\n promiseFactory: () => Promise<T | undefined>,\r\n): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { ref, toast, hasLoader } = config;\r\n\r\n return defer(() => {\r\n const http$ = from(promiseFactory());\r\n return http$.pipe(\r\n tap({\r\n subscribe: () => {\r\n /* Creazione reference */\r\n add(ref, null, url, refType);\r\n\r\n /* Incrementa per il loader */\r\n if (hasLoader !== false) {\r\n updateIsLoading(ref, 1);\r\n }\r\n },\r\n unsubscribe: () => {\r\n /* Rimozione reference */\r\n remove(ref);\r\n },\r\n next: (res) => {\r\n /* Mostra toast (se presente) */\r\n if (toast) {\r\n UniToastManager.showHttp(res, toast.label, toast.interpolateParams, toast);\r\n }\r\n },\r\n }),\r\n catchError((err) => {\r\n /* Gestione errore */\r\n return errorHandler(err, PollingErrorMode.STOP, ref);\r\n }),\r\n finalize(() => {\r\n /* Decrementa per il loader */\r\n if (hasLoader !== false) {\r\n updateIsLoading(ref, -1);\r\n }\r\n }),\r\n );\r\n });\r\n}\r\n\r\nexport function httpPolling$<T>(\r\n url: URL,\r\n config: HttpConfigPolling<T>,\r\n promiseFactory: () => Promise<T | undefined>,\r\n): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const {\r\n interval,\r\n ref,\r\n operator = MapOperator.SWITCH_MAP,\r\n errorMode = PollingErrorMode.STOP,\r\n emitValueMode = EmitValueMode.EVERY_TIME,\r\n firstIteration,\r\n } = config;\r\n\r\n const timer$ = timer(0, interval);\r\n const source$ = timer$.pipe(\r\n tap({\r\n subscribe: () => {\r\n /* Creazione reference */\r\n add(ref, null, url, 'polling');\r\n },\r\n unsubscribe: () => {\r\n /* Rimozione reference */\r\n remove(ref);\r\n },\r\n }),\r\n operatorHandler<T>(operator)((index) => {\r\n /* Incrementa per il loader */\r\n if (index === 0 && firstIteration?.hasLoader !== false) {\r\n updateIsLoading(ref, 1);\r\n }\r\n\r\n return defer(() => {\r\n const http$ = from(promiseFactory());\r\n return http$.pipe(\r\n tap((res) => {\r\n /* Rimozione popup di errore nel caso di errorMode = 'IGNORE_WITH_ERROR' */\r\n if (errorMode === PollingErrorMode.IGNORE_WITH_ERROR) {\r\n updateHasError(ref, false);\r\n UniErrorManager.remove(ref);\r\n }\r\n\r\n /* Prima risposta */\r\n if (index === 0 && firstIteration) {\r\n const { toast } = firstIteration;\r\n UniToastManager.showHttp(res, toast.label, toast.interpolateParams, toast);\r\n }\r\n }),\r\n catchError((err) => {\r\n /* Gestione errore */\r\n return errorHandler(err, errorMode, ref);\r\n }),\r\n finalize(() => {\r\n /* Decrementa per il loader */\r\n if (index === 0 && firstIteration?.hasLoader !== false) {\r\n updateIsLoading(ref, -1);\r\n }\r\n }),\r\n );\r\n });\r\n }),\r\n );\r\n\r\n return emitValueMode === EmitValueMode.EVERY_TIME\r\n ? source$\r\n : source$.pipe(distinctUntilChanged((prev, cur) => isEqual(prev, cur)));\r\n}\r\n","export function getUrl(hostname: string, port: number, path: string): URL {\r\n const base = `http://${hostname}:${port}`;\r\n return new URL(`/api${path}`, base);\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { executeHttp, executeImage } from './execute';\r\nimport { http$, httpPolling$ } from './http';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\nimport { updateHasError } from './ref';\r\nimport { getUrl } from './util';\r\n\r\nexport class UniHttpManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Hostname del server (es. 'api.example.com' o 'localhost') */\r\n private static hostname: string;\r\n\r\n /** Porta del server su cui effettuare le chiamate (es. 80, 443 o 3000) */\r\n private static port: number;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Map<string, HttpRef>>(new Map());\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$: Observable<Map<string, HttpRef>> = this.store.asObservable();\r\n\r\n /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */\r\n public static get currentValue(): Map<string, HttpRef> {\r\n return this.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(hostname: string, port: number): void {\r\n this.hostname = hostname;\r\n this.port = port;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------ Metodi: http one ------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Esegue una singola richiesta HTTP GET.\r\n * Utilizza il path configurato per costruire l'URL completo e restituisce un Observable del risultato.\r\n */\r\n public static get$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Recupera un'immagine tramite una richiesta GET e la trasforma in un formato gestibile (es. Blob o Base64).\r\n * Delega la logica di conversione alla funzione executeImage.\r\n */\r\n public static getImage$(config: HttpConfig<string>): Observable<string | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path);\r\n return http$(url, 'one', config, () => executeImage(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una singola richiesta HTTP PUT per aggiornare una risorsa esistente.\r\n */\r\n public static put$<T>(\r\n config: HttpConfig<T>,\r\n body?: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'PUT' };\r\n if (body) {\r\n initCustom.headers = {\r\n ...initCustom.headers,\r\n 'Content-Type': 'application/json',\r\n };\r\n initCustom.body = JSON.stringify(body);\r\n }\r\n const url = getUrl(this.hostname, this.port, path);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una richiesta HTTP POST inviando un payload JSON nel corpo della richiesta.\r\n * Imposta automaticamente l'header 'Content-Type' come 'application/json'.\r\n */\r\n public static post$<T>(\r\n config: HttpConfig<T>,\r\n body: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = {\r\n ...init,\r\n method: 'POST',\r\n headers: {\r\n ...init?.headers,\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(body),\r\n };\r\n const url = getUrl(this.hostname, this.port, path);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ---------------------------- Metodi: http polling ----------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Avvia un ciclo di polling basato su richieste GET.\r\n * Continua a emettere valori in base alla configurazione di intervallo definita in HttpConfigPolling.\r\n */\r\n public static getPolling$<T>(config: HttpConfigPolling<T>): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Avvia un ciclo di polling basato su richieste POST.\r\n * Invia il body specificato a ogni iterazione del ciclo.\r\n */\r\n public static postPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = {\r\n ...init,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n };\r\n const url = getUrl(this.hostname, this.port, path);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Avvia un ciclo di polling basato su richieste PUT.\r\n */\r\n public static putPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body?: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'PUT' };\r\n if (body) {\r\n initCustom.headers = {\r\n ...initCustom.headers,\r\n 'Content-Type': 'application/json',\r\n };\r\n initCustom.body = JSON.stringify(body);\r\n }\r\n const url = getUrl(this.hostname, this.port, path);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: store -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Imposta o resetta lo stato di errore per una specifica reference.\r\n */\r\n public static updateHasError(id: string, hasError: boolean): void {\r\n updateHasError(id, hasError);\r\n }\r\n}\r\n","/*\r\n * Public API Surface of uni-manager\r\n */\r\n\r\nexport * from './lib/date';\r\nexport * from './lib/error';\r\nexport * from './lib/http';\r\nexport * from './lib/locale';\r\nexport * from './lib/toast';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uni-manager.mjs","sources":["../../../projects/uni-manager/src/lib/date/manager.ts","../../../projects/uni-manager/src/lib/error/manager.ts","../../../projects/uni-manager/src/lib/http/enum.ts","../../../projects/uni-manager/src/lib/http/execute.ts","../../../projects/uni-manager/src/lib/locale/manager.ts","../../../projects/uni-manager/src/lib/toast/manager.ts","../../../projects/uni-manager/src/lib/http/ref.ts","../../../projects/uni-manager/src/lib/http/handler.ts","../../../projects/uni-manager/src/lib/http/http.ts","../../../projects/uni-manager/src/lib/http/util.ts","../../../projects/uni-manager/src/lib/http/manager.ts","../../../projects/uni-manager/src/lib/http/model.ts","../../../projects/uni-manager/src/public-api.ts","../../../projects/uni-manager/src/uni-manager.ts"],"sourcesContent":["/**\r\n * Classe di utilità per la gestione e formattazione delle date.\r\n * Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null\r\n * in formati standardizzati.\r\n */\r\nexport class UniDateManager {\r\n static toYYYYMMDD(date: Date | string | null | undefined): string {\r\n if (!date) return '';\r\n\r\n const d = new Date(date);\r\n\r\n if (isNaN(d.getTime())) return '';\r\n\r\n const year = d.getFullYear();\r\n const month = String(d.getMonth() + 1).padStart(2, '0');\r\n const day = String(d.getDate()).padStart(2, '0');\r\n\r\n return `${year}-${month}-${day}`;\r\n }\r\n}\r\n","import { BehaviorSubject, type Observable } from 'rxjs';\r\nimport type { IUniFeError, IUniHttpError } from 'uni-error';\r\n\r\nexport class UniErrorManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n private static store = new BehaviorSubject<Map<string, IUniFeError | IUniHttpError>>(new Map());\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$: Observable<Map<string, IUniFeError | IUniHttpError>> =\r\n UniErrorManager.store.asObservable();\r\n\r\n /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */\r\n public static get currentValue(): Map<string, IUniFeError | IUniHttpError> {\r\n return UniErrorManager.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: store -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Aggiunge o aggiorna un errore nello store.\r\n * Se l'errore esiste già (stesso ID), incrementa il contatore 'count'.\r\n */\r\n public static add(id: string, error: IUniHttpError | IUniFeError): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniErrorManager.currentValue;\r\n\r\n // Tenta di recuperare l'oggetto corrente\r\n const oldItem = oldMap.get(id);\r\n\r\n // Crea il nuovo oggetto\r\n const newItemMap: IUniFeError | IUniHttpError = {\r\n ...error,\r\n count: oldItem ? oldItem.count + 1 : 1,\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n\r\n /**\r\n * Rimuove un errore tramite ID\r\n */\r\n public static remove(id: string): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniErrorManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n if (!oldMap.has(id)) return;\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.delete(id);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n\r\n /**\r\n * Svuota completamente la lista degli errori\r\n */\r\n public static removeAll(): void {\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map();\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniErrorManager.store.next(newMap);\r\n }\r\n}\r\n","export enum MapOperator {\r\n\t/** Cancella la precedente richiesta, mantiene solo l’ultima */\r\n\tSWITCH_MAP,\r\n\r\n\t/** Ignora nuovi valori finché la corrente non finisce */\r\n\tEXHAUST_MAP,\r\n\r\n\t/** Mette le richieste in coda, le esegue una alla volta */\r\n\tCONCAT_MAP,\r\n\r\n\t/** Esegue tutte le richieste in parallelo, ordine non garantito */\r\n\tMERGE_MAP\r\n}\r\n\r\nexport enum PollingErrorMode {\r\n\t/** Salta questa iterazione emettendo un undefined. Il polling continua al tick successivo. */\r\n\tIGNORE,\r\n\r\n\t/** Salta questa iterazione senza emettere valori. Il polling continua al tick successivo. */\r\n\tSKIP,\r\n\r\n\t/** Interrompe il polling propagando l'errore. */\r\n\tSTOP,\r\n\r\n\t/** Ignora l'errore, lo salva (es. per UI), e continua il polling. Emette `undefined`. */\r\n\tIGNORE_WITH_ERROR\r\n}\r\n\r\nexport enum EmitValueMode {\r\n\t/** Aggiorna lo stato solo se arrivano dati nuovi (distinct) */\r\n\tON_NEW_DATA,\r\n\r\n\t/** Aggiorna lo stato ad ogni chiamata, anche se i dati sono uguali */\r\n\tEVERY_TIME\r\n}\r\n","import { isHttpErrorBody, UniHttpError } from 'uni-error';\r\n\r\nasync function execute(\r\n url: URL,\r\n init?: RequestInit,\r\n): Promise<{ res: Response; type: 'json' | 'image' | null } | undefined> {\r\n try {\r\n /* Esegue chiamata http */\r\n const res = await fetch(url, init);\r\n\r\n /* Nessun contenuto */\r\n if (res.status === 204) {\r\n return undefined;\r\n }\r\n\r\n /* Recupero se è un json */\r\n const contentType = res.headers.get('content-type') ?? '';\r\n const isJson = contentType.startsWith('application/json');\r\n const isImage = contentType.startsWith('image/');\r\n\r\n /* Errore HTTP (quindi risposta ricevuta ma non ok) */\r\n if (!res.ok) {\r\n let errorBody: unknown;\r\n\r\n try {\r\n const resClone = res.clone();\r\n errorBody = isJson ? await resClone.json() : await resClone.text();\r\n } catch {\r\n errorBody = await res.text();\r\n }\r\n\r\n if (isHttpErrorBody(errorBody)) {\r\n const type = errorBody.exceptionType.includes('HttpRequestException') ? 'be' : 'ice';\r\n throw new UniHttpError(type, res.status, url, errorBody);\r\n } else {\r\n const error = new Error(`HTTP ${res.statusText}`);\r\n throw new UniHttpError('base', res.status, url, {\r\n exceptionMessage: error.message,\r\n exceptionType: 'ErrorBase',\r\n message: error.message,\r\n stackTrace: error.stack ?? '',\r\n });\r\n }\r\n }\r\n\r\n return { res, type: isJson ? 'json' : isImage ? 'image' : null };\r\n } catch (error: unknown) {\r\n if (error instanceof TypeError) {\r\n throw new UniHttpError('network', -1, url, {\r\n exceptionMessage: `${error.name}: ${error.message}\\n${error.stack}`,\r\n exceptionType: error.name,\r\n message: error.message,\r\n stackTrace: error.stack ?? '',\r\n });\r\n }\r\n\r\n // Fallback\r\n throw error;\r\n }\r\n}\r\n\r\nexport async function executeHttp<T>(url: URL, init?: RequestInit): Promise<T | undefined> {\r\n /* Esegue chiamata http e vari controlli */\r\n const executeRes = await execute(url, init);\r\n if (!executeRes) return undefined;\r\n\r\n /* Recupero risposta */\r\n const { res, type } = executeRes;\r\n\r\n /* Successo JSON */\r\n if (type === 'json') {\r\n return (await res.json()) as T;\r\n }\r\n\r\n /* Successo testo */\r\n const text = await res.text();\r\n return text ? (text as unknown as T) : undefined;\r\n}\r\n\r\nexport async function executeImage(url: URL, init?: RequestInit): Promise<string | undefined> {\r\n /* Esegue chiamata http e vari controlli */\r\n const executeRes = await execute(url, init);\r\n if (!executeRes) return undefined;\r\n\r\n /* Recupero risposta */\r\n const { res, type } = executeRes;\r\n\r\n /* Successo immagine */\r\n if (type !== 'image') {\r\n throw new Error(`Not image found`);\r\n }\r\n\r\n /* Successo immagine */\r\n const blob = await res.blob();\r\n return URL.createObjectURL(blob);\r\n}\r\n","import { BehaviorSubject } from 'rxjs';\r\n\r\nexport class UniLocaleManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */\r\n private static _locale = 'en-US';\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static _prefix = '';\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce il codice lingua corrente */\r\n public static get locale(): string {\r\n return this._locale;\r\n }\r\n\r\n /** Restituisce solo la lingua (es. 'it') */\r\n public static get language(): string {\r\n return this._locale.split('-')[0];\r\n }\r\n\r\n /** Restituisce solo il paese (es. 'IT') */\r\n public static get region(): string {\r\n const parts = this._locale.split('-');\r\n return parts.length > 1 ? parts[1] : '';\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Record<string, string>>({});\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$ = this.store.asObservable();\r\n\r\n /** Ottiene il dizionario attuale senza sottoscrizione */\r\n public static get currentValue(): Record<string, string> {\r\n return this.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(locale: string | undefined, prefix: string): void {\r\n this._locale = locale ?? 'en-US';\r\n this._prefix = prefix;\r\n }\r\n\r\n public static setTranslations(translations: Record<string, string> | undefined): void {\r\n this.store.next(translations ?? {});\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------- Metodi: traduzioni ------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Traduce una label in base al dizionario caricato.\r\n * Gestisce la composizione della chiave, i parametri dinamici (interpolazione) e il fallback.\r\n */\r\n public static translate(\r\n label: string,\r\n prefix = 'lbl',\r\n interpolateParams?: Record<string, string | number | Date>,\r\n translations?: Record<string, string>,\r\n ): string {\r\n const translationsObj = translations ?? this.currentValue;\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const capitalizedLabel = label.charAt(0).toUpperCase() + label.slice(1);\r\n const finalKey = `${this._prefix}${prefix}${capitalizedLabel}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n const finalKeyLower = finalKey.toLowerCase();\r\n let translation = translationsObj?.[finalKeyLower];\r\n\r\n // Log e Fallback se la traduzione manca\r\n if (translation === undefined) {\r\n console.warn(`Translation missing for key: ${finalKeyLower}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili (es: \"Ciao {{name}}\")\r\n if (interpolateParams) {\r\n for (const [key, value] of Object.entries(interpolateParams)) {\r\n const displayValue =\r\n value instanceof Date ? value.toLocaleDateString(this._locale) : String(value);\r\n\r\n translation = translation.replaceAll(`{{${key}}}`, displayValue);\r\n }\r\n }\r\n\r\n return translation;\r\n }\r\n\r\n /**\r\n * Traduce una stringa che contiene parametri separati da un carattere specifico.\r\n * Supporta ora un numero arbitrario di parametri in formato \"label/param1/param2\"\r\n * o semplicemente \"label\".\r\n */\r\n public static translateInlineParam(labelWithParam: string, splitChar: string): string {\r\n if (!labelWithParam) return '[No translation]';\r\n\r\n const [label, ...params] = labelWithParam.split(splitChar);\r\n\r\n // Se non ci sono parametri, esegui una traduzione semplice\r\n if (params.length === 0) {\r\n return this.translate(label);\r\n }\r\n\r\n // Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }\r\n const interpolateParams: Record<string, string> = {};\r\n params.forEach((val, index) => {\r\n interpolateParams[`param${index}`] = val;\r\n });\r\n\r\n return this.translate(label, 'lbl', interpolateParams);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------- Metodi: numeri -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Converte un valore numerico in una stringa formattata secondo il locale impostato.\r\n * Disabilita i separatori delle migliaia e forza un numero fisso di decimali.\r\n */\r\n public static toStringNumber(value: number, decimal: number): string {\r\n return new Intl.NumberFormat(this._locale, {\r\n useGrouping: true,\r\n minimumFractionDigits: decimal,\r\n maximumFractionDigits: decimal,\r\n numberingSystem: 'latn',\r\n }).format(value);\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: date --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Formatta una data o una stringa in base al locale corrente.\r\n * Gestisce tre modalità predefinite (date, time, full) e accetta opzioni personalizzate Intl.\r\n */\r\n public static toDate(\r\n date: string | Date,\r\n mode: 'date' | 'time' | 'full' = 'full',\r\n force?: { oldLang: string; newLocale: string },\r\n ): string {\r\n const dt = new Date(date);\r\n\r\n // Controllo: validità data\r\n if (isNaN(dt.getTime())) {\r\n console.error(`[UniLocaleManager] Data non valida fornita a formatDateTime:`, date);\r\n return '';\r\n }\r\n\r\n // Controllo: locale da forzare\r\n const locale = force && this._locale.startsWith(force.oldLang) ? force.newLocale : this._locale;\r\n\r\n switch (mode) {\r\n case 'date':\r\n return dt.toLocaleDateString(locale);\r\n case 'time':\r\n return dt.toLocaleTimeString(locale);\r\n case 'full':\r\n default:\r\n return dt.toLocaleString(locale);\r\n }\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { UniLocaleManager } from '../locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from './model';\r\n\r\nexport class UniToastManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Riferimento interno all'istanza */\r\n private static manager: IToastManager;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza il manager con una serie di operazioni\r\n */\r\n public static setup(operations: IToastManager): void {\r\n this.manager = operations;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: show --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static show(\r\n label: string,\r\n interpolateParams: Record<string, any> = {},\r\n operation: keyof IToastManager = 'success',\r\n config: ToastConfig = {},\r\n ): void {\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(label, 'toast', interpolateParams);\r\n this.manager[operation](msg, config);\r\n }\r\n\r\n /**\r\n * Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.\r\n */\r\n public static showHttp<T>(\r\n res: T | undefined,\r\n label: string,\r\n interpolateParams: Record<string, any> = {},\r\n config: ToastConfig & Omit<ToastHttpConfig<T>, 'label' | 'interpolateParams'> = {},\r\n ): void {\r\n const { resParams, resLengthParams, formatters } = config;\r\n\r\n /* Parametri statici di base */\r\n const allParams: Record<string, any> = { ...interpolateParams };\r\n\r\n /* Estrazione parametri dalla risposta (se esiste ed è un oggetto) */\r\n if (res && typeof res === 'object') {\r\n resParams?.forEach((key) => {\r\n if (!(key in res)) return;\r\n\r\n const rawValue = res[key];\r\n // Se esiste un formatter per questa chiave lo si usa, altrimenti valore grezzo\r\n allParams[key] = formatters?.[key] ? formatters[key]!(rawValue) : rawValue;\r\n });\r\n }\r\n\r\n /* Conteggio array */\r\n if (resLengthParams && Array.isArray(res)) {\r\n allParams[resLengthParams] = res.length;\r\n }\r\n\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(label, 'toast', allParams);\r\n this.manager.success(msg, config);\r\n }\r\n}\r\n","import { UniHttpManager } from './manager';\r\nimport type { HttpRef } from './model';\r\n\r\n/**\r\n * Aggiunge una nuova ref nello store solo se non è già presente.\r\n * Se l'ID esiste già, l'operazione viene interrotta per preservare il dato originale.\r\n */\r\nexport function add(id: string, lineId: null, url: URL, type: HttpRef['type']): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se è presente l'item allora termina\r\n if (oldMap.get(id)) return;\r\n\r\n // Crea il nuovo oggetto\r\n const newItemMap: HttpRef = {\r\n type,\r\n lineId,\r\n url,\r\n hasError: false,\r\n pendingCount: 0,\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Rimuove un http ref tramite ID\r\n */\r\nexport function remove(id: string): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n if (!oldMap.has(id)) return;\r\n\r\n // Aggiorna store\r\n const newMap = new Map(oldMap);\r\n newMap.delete(id);\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Aggiorna il contatore delle chiamate pendenti per una specifica ref.\r\n * Incrementa o decrementa 'pendingCount' garantendo che non scenda mai sotto lo zero.\r\n * Se la ref non esiste, l'operazione viene ignorata.\r\n */\r\nexport function updateIsLoading(id: string, delta: -1 | 1): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n const oldItem = oldMap.get(id);\r\n if (!oldItem) return;\r\n\r\n // Aggiorna l'oggetto\r\n const newItemMap: HttpRef = {\r\n ...oldItem,\r\n pendingCount: Math.max(0, oldItem.pendingCount + delta),\r\n };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Aggiorna lo stato di errore per una specifica ref.\r\n * Se il valore di 'hasError' è identico a quello attuale o se la ref non esiste,\r\n * l'operazione viene interrotta per evitare aggiornamenti inutili.\r\n */\r\nexport function updateHasError(id: string, hasError: boolean): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = UniHttpManager.currentValue;\r\n\r\n // Controllo: se non è presente l'item allora termina\r\n const oldItem = oldMap.get(id);\r\n if (!oldItem) return;\r\n\r\n // Controllo: se con lo stesso valore, salta\r\n if (oldItem.hasError === hasError) return;\r\n\r\n // Aggiorna l'oggetto\r\n const newItemMap: HttpRef = { ...oldItem, hasError };\r\n\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map(oldMap);\r\n newMap.set(id, newItemMap);\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n\r\n/**\r\n * Svuota completamente la lista delle refs\r\n */\r\nexport function removeAll(): void {\r\n // Crea una nuova istanza della Map\r\n const newMap = new Map();\r\n\r\n // Aggiorna il nuovo stato notificando l'observer\r\n UniHttpManager.store.next(newMap);\r\n}\r\n","import {\r\n concatMap,\r\n EMPTY,\r\n exhaustMap,\r\n mergeMap,\r\n Observable,\r\n of,\r\n type OperatorFunction,\r\n switchMap,\r\n throwError,\r\n} from 'rxjs';\r\nimport { UniHttpError } from 'uni-error';\r\n\r\nimport { UniErrorManager } from '../error';\r\nimport { MapOperator, PollingErrorMode } from './enum';\r\nimport { updateHasError } from './ref';\r\n\r\nexport function operatorHandler<T>(\r\n operator: MapOperator,\r\n): (\r\n project: (value: number) => Observable<T | undefined>,\r\n) => OperatorFunction<number, T | undefined> {\r\n // Gestione della concorrenza in base al parametro\r\n switch (operator) {\r\n case MapOperator.EXHAUST_MAP:\r\n return (project) => exhaustMap(project);\r\n case MapOperator.CONCAT_MAP:\r\n return (project) => concatMap(project);\r\n case MapOperator.MERGE_MAP:\r\n return (project) => mergeMap(project);\r\n case MapOperator.SWITCH_MAP:\r\n default:\r\n return (project) => switchMap(project);\r\n }\r\n}\r\n\r\nexport function errorHandler(\r\n err: unknown,\r\n errorMode: PollingErrorMode,\r\n ref: string,\r\n): Observable<undefined> {\r\n // Controllo: sia effettivamente un errore di tipo 'UniHttpError'\r\n if (!(err instanceof UniHttpError)) {\r\n return throwError(() => err);\r\n }\r\n\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n // Gestione dell'errore in base al parametro\r\n switch (errorMode) {\r\n case PollingErrorMode.IGNORE:\r\n return of(undefined);\r\n case PollingErrorMode.SKIP:\r\n return EMPTY;\r\n case PollingErrorMode.IGNORE_WITH_ERROR: {\r\n UniErrorManager.add(ref, err);\r\n return of(undefined);\r\n }\r\n case PollingErrorMode.STOP:\r\n default: {\r\n UniErrorManager.add(ref, err);\r\n return throwError(() => err);\r\n }\r\n }\r\n}\r\n","import { isEqual } from 'lodash-es';\r\nimport {\r\n catchError,\r\n defer,\r\n distinctUntilChanged,\r\n finalize,\r\n from,\r\n Observable,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\n\r\nimport { UniErrorManager } from '../error';\r\nimport { UniToastManager } from '../toast';\r\nimport { EmitValueMode, MapOperator, PollingErrorMode } from './enum';\r\nimport { errorHandler, operatorHandler } from './handler';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\nimport { add, remove, updateHasError, updateIsLoading } from './ref';\r\n\r\nexport function http$<T>(\r\n url: URL,\r\n refType: HttpRef['type'],\r\n config: HttpConfig<T>,\r\n promiseFactory: () => Promise<T | undefined>,\r\n): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { ref, toast, hasLoader } = config;\r\n\r\n return defer(() => {\r\n const http$ = from(promiseFactory());\r\n return http$.pipe(\r\n tap({\r\n subscribe: () => {\r\n /* Creazione reference */\r\n add(ref, null, url, refType);\r\n\r\n /* Incrementa per il loader */\r\n if (hasLoader !== false) {\r\n updateIsLoading(ref, 1);\r\n }\r\n },\r\n unsubscribe: () => {\r\n /* Rimozione reference */\r\n remove(ref);\r\n },\r\n next: (res) => {\r\n /* Mostra toast (se presente) */\r\n if (toast) {\r\n UniToastManager.showHttp(res, toast.label, toast.interpolateParams, toast);\r\n }\r\n },\r\n }),\r\n catchError((err) => {\r\n /* Gestione errore */\r\n return errorHandler(err, PollingErrorMode.STOP, ref);\r\n }),\r\n finalize(() => {\r\n /* Decrementa per il loader */\r\n if (hasLoader !== false) {\r\n updateIsLoading(ref, -1);\r\n }\r\n }),\r\n );\r\n });\r\n}\r\n\r\nexport function httpPolling$<T>(\r\n url: URL,\r\n config: HttpConfigPolling<T>,\r\n promiseFactory: () => Promise<T | undefined>,\r\n): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const {\r\n interval,\r\n ref,\r\n operator = MapOperator.SWITCH_MAP,\r\n errorMode = PollingErrorMode.STOP,\r\n emitValueMode = EmitValueMode.EVERY_TIME,\r\n firstIteration,\r\n } = config;\r\n\r\n const timer$ = timer(0, interval);\r\n const source$ = timer$.pipe(\r\n tap({\r\n subscribe: () => {\r\n /* Creazione reference */\r\n add(ref, null, url, 'polling');\r\n },\r\n unsubscribe: () => {\r\n /* Rimozione reference */\r\n remove(ref);\r\n },\r\n }),\r\n operatorHandler<T>(operator)((index) => {\r\n /* Incrementa per il loader */\r\n if (index === 0 && firstIteration?.hasLoader !== false) {\r\n updateIsLoading(ref, 1);\r\n }\r\n\r\n return defer(() => {\r\n const http$ = from(promiseFactory());\r\n return http$.pipe(\r\n tap((res) => {\r\n /* Rimozione popup di errore nel caso di errorMode = 'IGNORE_WITH_ERROR' */\r\n if (errorMode === PollingErrorMode.IGNORE_WITH_ERROR) {\r\n updateHasError(ref, false);\r\n UniErrorManager.remove(ref);\r\n }\r\n\r\n /* Prima risposta */\r\n if (index === 0 && firstIteration) {\r\n const { toast } = firstIteration;\r\n UniToastManager.showHttp(res, toast.label, toast.interpolateParams, toast);\r\n }\r\n }),\r\n catchError((err) => {\r\n /* Gestione errore */\r\n return errorHandler(err, errorMode, ref);\r\n }),\r\n finalize(() => {\r\n /* Decrementa per il loader */\r\n if (index === 0 && firstIteration?.hasLoader !== false) {\r\n updateIsLoading(ref, -1);\r\n }\r\n }),\r\n );\r\n });\r\n }),\r\n );\r\n\r\n return emitValueMode === EmitValueMode.EVERY_TIME\r\n ? source$\r\n : source$.pipe(distinctUntilChanged((prev, cur) => isEqual(prev, cur)));\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n/**\r\n * Costruisce un URL completo per l'API partendo dai parametri di configurazione.\r\n */\r\nexport function getUrl(\r\n hostname: string,\r\n port: number,\r\n path: string,\r\n params: Record<string, any> | undefined,\r\n): URL {\r\n const base = `http://${hostname}:${port}`;\r\n const url = new URL(`/api${path}`, base);\r\n\r\n // Aggiungi i parametri\r\n if (params) {\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n url.searchParams.append(key, String(value));\r\n }\r\n });\r\n }\r\n\r\n return url;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { executeHttp, executeImage } from './execute';\r\nimport { http$, httpPolling$ } from './http';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\nimport { updateHasError } from './ref';\r\nimport { getUrl } from './util';\r\n\r\nexport class UniHttpManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* ----------------------------------- Config ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Hostname del server (es. 'api.example.com' o 'localhost') */\r\n private static hostname: string;\r\n\r\n /** Porta del server su cui effettuare le chiamate (es. 80, 443 o 3000) */\r\n private static port: number;\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------------ Store ------------------------------------ */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Store privato (Subject) */\r\n public static store = new BehaviorSubject<Map<string, HttpRef>>(new Map());\r\n\r\n /** Store pubblico (Observable) */\r\n public static store$: Observable<Map<string, HttpRef>> = this.store.asObservable();\r\n\r\n /** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */\r\n public static get currentValue(): Map<string, HttpRef> {\r\n return this.store.getValue();\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: setup -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Inizializza la configurazione di rete del manager.\r\n * Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.\r\n */\r\n public static setup(hostname: string, port: number): void {\r\n this.hostname = hostname;\r\n this.port = port;\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ------------------------------ Metodi: http one ------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Esegue una singola richiesta HTTP GET.\r\n * Utilizza il path configurato per costruire l'URL completo e restituisce un Observable del risultato.\r\n */\r\n public static get$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Recupera un'immagine tramite una richiesta GET e la trasforma in un formato gestibile (es. Blob o Base64).\r\n * Delega la logica di conversione alla funzione executeImage.\r\n */\r\n public static getImage$(config: HttpConfig<string>): Observable<string | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return http$(url, 'one', config, () => executeImage(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una singola richiesta HTTP PUT per aggiornare una risorsa esistente.\r\n */\r\n public static put$<T>(\r\n config: HttpConfig<T>,\r\n body?: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'PUT' };\r\n if (body) {\r\n initCustom.headers = {\r\n ...initCustom.headers,\r\n 'Content-Type': 'application/json',\r\n };\r\n initCustom.body = JSON.stringify(body);\r\n }\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una richiesta HTTP POST inviando un payload JSON nel corpo della richiesta.\r\n * Imposta automaticamente l'header 'Content-Type' come 'application/json'.\r\n */\r\n public static post$<T>(\r\n config: HttpConfig<T>,\r\n body: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = {\r\n ...init,\r\n method: 'POST',\r\n headers: {\r\n ...init?.headers,\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(body),\r\n };\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ---------------------------- Metodi: http polling ----------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Avvia un ciclo di polling basato su richieste GET.\r\n * Continua a emettere valori in base alla configurazione di intervallo definita in HttpConfigPolling.\r\n */\r\n public static getPolling$<T>(config: HttpConfigPolling<T>): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'GET' };\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Avvia un ciclo di polling basato su richieste POST.\r\n * Invia il body specificato a ogni iterazione del ciclo.\r\n */\r\n public static postPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = {\r\n ...init,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n };\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Avvia un ciclo di polling basato su richieste PUT.\r\n */\r\n public static putPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body?: Record<string, any>,\r\n ): Observable<T | undefined> {\r\n /* Recupero configurazione */\r\n const { path, init } = config;\r\n\r\n const initCustom: RequestInit = { ...init, method: 'PUT' };\r\n if (body) {\r\n initCustom.headers = {\r\n ...initCustom.headers,\r\n 'Content-Type': 'application/json',\r\n };\r\n initCustom.body = JSON.stringify(body);\r\n }\r\n const url = getUrl(this.hostname, this.port, path, config.params);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------------- Metodi: store -------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /**\r\n * Imposta o resetta lo stato di errore per una specifica reference.\r\n */\r\n public static updateHasError(id: string, hasError: boolean): void {\r\n updateHasError(id, hasError);\r\n }\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\nimport { ToastConfig, ToastHttpConfig } from '../toast/model';\r\nimport { EmitValueMode, MapOperator, PollingErrorMode } from './enum';\r\n\r\n/* ------------------ Reference ------------------ */\r\nexport interface HttpRef {\r\n type: 'one' | 'polling' | 'image';\r\n lineId: number | null;\r\n url: URL;\r\n hasError: boolean;\r\n pendingCount: number;\r\n}\r\n\r\n/* ------------------ Http config ------------------ */\r\nexport interface HttpConfig<T> {\r\n ref: string;\r\n path: string;\r\n params?: Record<string, any>;\r\n init?: RequestInit;\r\n toast?: ToastConfig & ToastHttpConfig<T>;\r\n hasLoader?: boolean;\r\n}\r\n\r\nexport interface HttpConfigPolling<T> {\r\n ref: string;\r\n interval: number;\r\n path: string;\r\n params?: Record<string, any>;\r\n init?: RequestInit;\r\n operator?: MapOperator;\r\n errorMode?: PollingErrorMode;\r\n emitValueMode?: EmitValueMode;\r\n firstIteration?: {\r\n toast: ToastHttpConfig<T>;\r\n hasLoader?: boolean;\r\n };\r\n}\r\n","/*\r\n * Public API Surface of uni-manager\r\n */\r\n\r\nexport * from './lib/date';\r\nexport * from './lib/error';\r\nexport * from './lib/http';\r\nexport * from './lib/locale';\r\nexport * from './lib/toast';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/date/manager.d.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
* Fornisce metodi per convertire in modo sicuro valori di tipo Date, stringa o null
|
|
4
4
|
* in formati standardizzati.
|
|
5
5
|
*/
|
|
6
|
-
export declare class
|
|
6
|
+
export declare class UniDateManager {
|
|
7
7
|
static toYYYYMMDD(date: Date | string | null | undefined): string;
|
|
8
8
|
}
|
package/lib/http/model.d.ts
CHANGED
|
@@ -8,16 +8,18 @@ export interface HttpRef {
|
|
|
8
8
|
pendingCount: number;
|
|
9
9
|
}
|
|
10
10
|
export interface HttpConfig<T> {
|
|
11
|
-
path: string;
|
|
12
11
|
ref: string;
|
|
12
|
+
path: string;
|
|
13
|
+
params?: Record<string, any>;
|
|
13
14
|
init?: RequestInit;
|
|
14
15
|
toast?: ToastConfig & ToastHttpConfig<T>;
|
|
15
16
|
hasLoader?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export interface HttpConfigPolling<T> {
|
|
18
|
-
path: string;
|
|
19
|
-
interval: number;
|
|
20
19
|
ref: string;
|
|
20
|
+
interval: number;
|
|
21
|
+
path: string;
|
|
22
|
+
params?: Record<string, any>;
|
|
21
23
|
init?: RequestInit;
|
|
22
24
|
operator?: MapOperator;
|
|
23
25
|
errorMode?: PollingErrorMode;
|
package/lib/http/util.d.ts
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Costruisce un URL completo per l'API partendo dai parametri di configurazione.
|
|
3
|
+
*/
|
|
4
|
+
export declare function getUrl(hostname: string, port: number, path: string, params: Record<string, any> | undefined): URL;
|
package/lib/locale/manager.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { BehaviorSubject } from 'rxjs';
|
|
2
2
|
export declare class UniLocaleManager {
|
|
3
3
|
/** Codice lingua corrente (es. 'it-IT', 'en-US') usato per formattare date e numeri */
|
|
4
|
-
private static
|
|
4
|
+
private static _locale;
|
|
5
5
|
/** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */
|
|
6
|
-
private static
|
|
6
|
+
private static _prefix;
|
|
7
|
+
/** Restituisce il codice lingua corrente */
|
|
8
|
+
static get locale(): string;
|
|
9
|
+
/** Restituisce solo la lingua (es. 'it') */
|
|
10
|
+
static get language(): string;
|
|
11
|
+
/** Restituisce solo il paese (es. 'IT') */
|
|
12
|
+
static get region(): string;
|
|
7
13
|
/** Store privato (Subject) */
|
|
8
14
|
static store: BehaviorSubject<Record<string, string>>;
|
|
9
15
|
/** Store pubblico (Observable) */
|
|
@@ -15,17 +21,23 @@ export declare class UniLocaleManager {
|
|
|
15
21
|
* Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
|
|
16
22
|
*/
|
|
17
23
|
static setup(locale: string | undefined, prefix: string): void;
|
|
18
|
-
static
|
|
24
|
+
static setTranslations(translations: Record<string, string> | undefined): void;
|
|
19
25
|
/**
|
|
20
26
|
* Traduce una label in base al dizionario caricato.
|
|
21
27
|
* Gestisce la composizione della chiave, i parametri dinamici (interpolazione) e il fallback.
|
|
22
28
|
*/
|
|
23
29
|
static translate(label: string, prefix?: string, interpolateParams?: Record<string, string | number | Date>, translations?: Record<string, string>): string;
|
|
30
|
+
/**
|
|
31
|
+
* Traduce una stringa che contiene parametri separati da un carattere specifico.
|
|
32
|
+
* Supporta ora un numero arbitrario di parametri in formato "label/param1/param2"
|
|
33
|
+
* o semplicemente "label".
|
|
34
|
+
*/
|
|
35
|
+
static translateInlineParam(labelWithParam: string, splitChar: string): string;
|
|
24
36
|
/**
|
|
25
37
|
* Converte un valore numerico in una stringa formattata secondo il locale impostato.
|
|
26
38
|
* Disabilita i separatori delle migliaia e forza un numero fisso di decimali.
|
|
27
39
|
*/
|
|
28
|
-
static
|
|
40
|
+
static toStringNumber(value: number, decimal: number): string;
|
|
29
41
|
/**
|
|
30
42
|
* Formatta una data o una stringa in base al locale corrente.
|
|
31
43
|
* Gestisce tre modalità predefinite (date, time, full) e accetta opzioni personalizzate Intl.
|