uni-manager 0.1.9 → 0.1.11
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-error.mjs.map +1 -1
- package/fesm2022/uni-manager-file.mjs.map +1 -1
- package/fesm2022/uni-manager-http.mjs +3 -32
- package/fesm2022/uni-manager-http.mjs.map +1 -1
- package/fesm2022/uni-manager-toast.mjs.map +1 -1
- package/fesm2022/uni-manager.mjs +2 -1168
- package/fesm2022/uni-manager.mjs.map +1 -1
- package/package.json +3 -2
- package/types/uni-manager-error.d.ts +1 -2
- package/types/uni-manager-file.d.ts +1 -5
- package/types/uni-manager-http.d.ts +2 -64
- package/types/uni-manager-toast.d.ts +1 -17
- package/types/uni-manager.d.ts +2 -311
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-error.mjs","sources":["../../../projects/uni-manager/error/manager.ts","../../../projects/uni-manager/error/uni-manager-error.ts"],"sourcesContent":["import { BehaviorSubject, distinctUntilChanged, map, Observable } from 'rxjs';\r\nimport type { IUniFeError
|
|
1
|
+
{"version":3,"file":"uni-manager-error.mjs","sources":["../../../projects/uni-manager/error/manager.ts","../../../projects/uni-manager/error/uni-manager-error.ts"],"sourcesContent":["import { BehaviorSubject, distinctUntilChanged, map, Observable } from 'rxjs';\r\nimport type { IUniFeError, IUniHttpError } from 'uni-model-type/type';\r\n\r\nexport class UniErrorManager {\r\n /* ------------------------------------------------------------------------------- */\r\n /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce se lo store ha chiamate in attesa di risposta o meno */\r\n public static get errors$(): Observable<({ id: string } & (IUniFeError | IUniHttpError))[]> {\r\n return this.store$.pipe(\r\n map((x) => Array.from(x.entries(), ([id, error]) => ({ ...error, id }))),\r\n distinctUntilChanged((prev, curr) => {\r\n if (prev.length !== curr.length) return false;\r\n return prev.every(\r\n (err, index) => err.id === curr[index].id && err.count === curr[index].count,\r\n );\r\n }),\r\n );\r\n }\r\n\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 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, IUniFeError | IUniHttpError> {\r\n return this.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' e aggiorna il timestamp.\r\n */\r\n public static add(id: string, error: IUniHttpError | IUniFeError): void {\r\n // Recupera l'ultimo stato (Map)\r\n const oldMap = this.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 aggiornando contatore e portando il timestamp al momento attuale\r\n const newItemMap: IUniFeError | IUniHttpError = {\r\n ...error,\r\n count: oldItem ? oldItem.count + 1 : 1,\r\n timestamp: new Date(),\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 this.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 = this.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 this.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 this.store.next(newMap);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAGa,eAAe,CAAA;;;;;AAKnB,IAAA,WAAW,OAAO,GAAA;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EACxE,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAI;AAClC,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,KAAK;AAC7C,YAAA,OAAO,IAAI,CAAC,KAAK,CACf,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAC7E;QACH,CAAC,CAAC,CACH;IACH;;;;;aAMe,IAAA,CAAA,KAAK,GAAG,IAAI,eAAe,CAA2C,IAAI,GAAG,EAAE,CAAC,CAAC;;AAGlF,IAAA,SAAA,IAAA,CAAA,MAAM,GAClB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;;AAGrB,IAAA,WAAW,YAAY,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IAC9B;;;;AAKA;;;AAGG;AACI,IAAA,OAAO,GAAG,CAAC,EAAU,EAAE,KAAkC,EAAA;;AAE9D,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;;QAGhC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;;AAG9B,QAAA,MAAM,UAAU,GAAgC;AAC9C,YAAA,GAAG,KAAK;AACR,YAAA,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC;YACtC,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB;;AAGD,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC;;AAG1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;AAEG;IACI,OAAO,MAAM,CAAC,EAAU,EAAA;;AAE7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;;AAGhC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE;;AAGrB,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;AAC9B,QAAA,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;;AAGjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA;;AAEG;AACI,IAAA,OAAO,SAAS,GAAA;;AAErB,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;;AAGxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;;;AC3FF;;AAEG;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-file.mjs","sources":["../../../projects/uni-manager/file/manager.ts","../../../projects/uni-manager/file/uni-manager-file.ts"],"sourcesContent":["import type { FileDatasource } from '
|
|
1
|
+
{"version":3,"file":"uni-manager-file.mjs","sources":["../../../projects/uni-manager/file/manager.ts","../../../projects/uni-manager/file/uni-manager-file.ts"],"sourcesContent":["import type { FileDatasource } from 'uni-model-type/type';\r\n\r\nexport class UniFileManager {\r\n /**\r\n * Apre un file (es. PDF, immagine) in una nuova scheda del browser\r\n * Il contenuto viene caricato all'interno di un iframe per garantire compatibilità di visualizzazione\r\n */\r\n public static openInNewTab(data: FileDatasource | undefined): void {\r\n if (!data || !data.url) return;\r\n\r\n const newWindow = window.open('', '_blank');\r\n if (!newWindow) return;\r\n\r\n newWindow.document.title = data.name;\r\n\r\n // Crea l'iframe e lo aggiunge al body della nuova finestra\r\n const iframe = this.createIframe(newWindow.document, data.url, '100%', '100%');\r\n newWindow.document.body.style.margin = '0';\r\n newWindow.document.body.append(iframe);\r\n\r\n // Rimuove l'oggetto URL dalla memoria dopo un tempo congruo per il caricamento\r\n setTimeout(() => URL.revokeObjectURL(data.url), 3000);\r\n }\r\n\r\n /**\r\n * Stampa un file aprendo il dialogo di stampa nativo del sistema\r\n * Utilizza un iframe invisibile per non interrompere la navigazione\r\n */\r\n public static openInPrintPreview(data: FileDatasource | undefined): void {\r\n if (!data || !data.url) return;\r\n\r\n // Crea l'iframe come elemento fisso e nascosto (dimensioni zero)\r\n const iframe = this.createIframe(document, data.url, '0', '0');\r\n iframe.style.position = 'fixed';\r\n iframe.style.bottom = '0';\r\n document.body.append(iframe);\r\n\r\n // Attende il completamento del caricamento del file nell'iframe\r\n iframe.addEventListener('load', (): void => {\r\n // Attesa supplementare per consentire il rendering del PDF\r\n setTimeout(() => {\r\n iframe.contentWindow?.focus();\r\n iframe.contentWindow?.print();\r\n\r\n // Rimozione dell'iframe dal DOM e pulizia della memoria\r\n setTimeout(() => {\r\n iframe.remove();\r\n URL.revokeObjectURL(data.url);\r\n }, 1000);\r\n }, 1000);\r\n });\r\n }\r\n\r\n /**\r\n * Scarica un file localmente sul dispositivo dell'utente\r\n */\r\n public static download(data: FileDatasource | undefined): void {\r\n if (!data || !data.url) return;\r\n\r\n const link = document.createElement('a');\r\n link.href = data.url;\r\n\r\n // Specifica il nome con cui il file verrà salvato\r\n link.download = data.name;\r\n\r\n // Opzionale: assicura che il link non sia visibile\r\n link.style.display = 'none';\r\n\r\n document.body.append(link);\r\n link.click();\r\n\r\n // Pulizia: rimuove l'elemento e revoca l'URL\r\n setTimeout(() => {\r\n link.remove();\r\n URL.revokeObjectURL(data.url);\r\n }, 100);\r\n }\r\n\r\n /* ----------------------------- Utils ----------------------------- */\r\n private static createIframe(\r\n doc: Document,\r\n url: string,\r\n width: string,\r\n height: string,\r\n ): HTMLIFrameElement {\r\n const iframe = doc.createElement('iframe');\r\n iframe.src = url;\r\n iframe.style.width = width;\r\n iframe.style.height = height;\r\n iframe.style.border = 'none';\r\n return iframe;\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,39 +2,10 @@ import { switchMap, mergeMap, concatMap, exhaustMap, throwError, of, EMPTY, defe
|
|
|
2
2
|
import { UniToastManager } from 'uni-manager/toast';
|
|
3
3
|
import isEqual from 'lodash-es/isEqual';
|
|
4
4
|
import { UniErrorManager } from 'uni-manager/error';
|
|
5
|
+
import { MapOperator, PollingErrorMode, EmitValueMode } from 'uni-model-type/enum';
|
|
5
6
|
import { UniHttpError, isHttpException } from 'uni-error/http';
|
|
6
7
|
import { UniTypeDateManager } from 'uni-manager/type';
|
|
7
8
|
|
|
8
|
-
var MapOperator;
|
|
9
|
-
(function (MapOperator) {
|
|
10
|
-
/** Cancella la precedente richiesta, mantiene solo l’ultima */
|
|
11
|
-
MapOperator[MapOperator["SWITCH_MAP"] = 0] = "SWITCH_MAP";
|
|
12
|
-
/** Ignora nuovi valori finché la corrente non finisce */
|
|
13
|
-
MapOperator[MapOperator["EXHAUST_MAP"] = 1] = "EXHAUST_MAP";
|
|
14
|
-
/** Mette le richieste in coda, le esegue una alla volta */
|
|
15
|
-
MapOperator[MapOperator["CONCAT_MAP"] = 2] = "CONCAT_MAP";
|
|
16
|
-
/** Esegue tutte le richieste in parallelo, ordine non garantito */
|
|
17
|
-
MapOperator[MapOperator["MERGE_MAP"] = 3] = "MERGE_MAP";
|
|
18
|
-
})(MapOperator || (MapOperator = {}));
|
|
19
|
-
var PollingErrorMode;
|
|
20
|
-
(function (PollingErrorMode) {
|
|
21
|
-
/** Salta questa iterazione emettendo un undefined. Il polling continua al tick successivo. */
|
|
22
|
-
PollingErrorMode[PollingErrorMode["IGNORE"] = 0] = "IGNORE";
|
|
23
|
-
/** Salta questa iterazione senza emettere valori. Il polling continua al tick successivo. */
|
|
24
|
-
PollingErrorMode[PollingErrorMode["SKIP"] = 1] = "SKIP";
|
|
25
|
-
/** Interrompe il polling propagando l'errore. */
|
|
26
|
-
PollingErrorMode[PollingErrorMode["STOP"] = 2] = "STOP";
|
|
27
|
-
/** Ignora l'errore, lo salva (es. per UI), e continua il polling. Emette `undefined`. */
|
|
28
|
-
PollingErrorMode[PollingErrorMode["IGNORE_WITH_ERROR"] = 3] = "IGNORE_WITH_ERROR";
|
|
29
|
-
})(PollingErrorMode || (PollingErrorMode = {}));
|
|
30
|
-
var EmitValueMode;
|
|
31
|
-
(function (EmitValueMode) {
|
|
32
|
-
/** Aggiorna lo stato solo se arrivano dati nuovi (distinct) */
|
|
33
|
-
EmitValueMode[EmitValueMode["ON_NEW_DATA"] = 0] = "ON_NEW_DATA";
|
|
34
|
-
/** Aggiorna lo stato ad ogni chiamata, anche se i dati sono uguali */
|
|
35
|
-
EmitValueMode[EmitValueMode["EVERY_TIME"] = 1] = "EVERY_TIME";
|
|
36
|
-
})(EmitValueMode || (EmitValueMode = {}));
|
|
37
|
-
|
|
38
9
|
function operatorHandler(operator) {
|
|
39
10
|
// Gestione della concorrenza in base al parametro
|
|
40
11
|
switch (operator) {
|
|
@@ -298,7 +269,7 @@ async function execute(url, init) {
|
|
|
298
269
|
message: typeof httpErrorPayload === 'string' && httpErrorPayload
|
|
299
270
|
? httpErrorPayload
|
|
300
271
|
: errorTracker.message,
|
|
301
|
-
type: '
|
|
272
|
+
type: 'ServerError',
|
|
302
273
|
stackTrace: errorTracker.stack ?? '',
|
|
303
274
|
isBe: true,
|
|
304
275
|
};
|
|
@@ -665,5 +636,5 @@ class UniHttpManager {
|
|
|
665
636
|
* Generated bundle index. Do not edit.
|
|
666
637
|
*/
|
|
667
638
|
|
|
668
|
-
export {
|
|
639
|
+
export { UniHttpManager };
|
|
669
640
|
//# sourceMappingURL=uni-manager-http.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-http.mjs","sources":["../../../projects/uni-manager/http/enum.ts","../../../projects/uni-manager/http/handler.ts","../../../projects/uni-manager/http/core.ts","../../../projects/uni-manager/http/execute.ts","../../../projects/uni-manager/http/util.ts","../../../projects/uni-manager/http/manager.ts","../../../projects/uni-manager/http/uni-manager-http.ts"],"sourcesContent":["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 {\r\n EMPTY,\r\n Observable,\r\n OperatorFunction,\r\n concatMap,\r\n exhaustMap,\r\n mergeMap,\r\n of,\r\n switchMap,\r\n throwError,\r\n} from 'rxjs';\r\nimport { UniHttpError } from 'uni-error/http';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\n\r\nimport { MapOperator, PollingErrorMode } from './enum';\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 }\r\n case MapOperator.CONCAT_MAP: {\r\n return (project) => concatMap(project);\r\n }\r\n case MapOperator.MERGE_MAP: {\r\n return (project) => mergeMap(project);\r\n }\r\n case MapOperator.SWITCH_MAP: {\r\n return (project) => switchMap(project);\r\n }\r\n }\r\n}\r\n\r\nexport function errorHandler(\r\n ref: string,\r\n err: unknown,\r\n errorMode: PollingErrorMode,\r\n): Observable<never> {\r\n // Controllo: sia effettivamente un errore di tipo 'UniHttpError'\r\n if (err instanceof UniHttpError) {\r\n switch (errorMode) {\r\n case PollingErrorMode.IGNORE: {\r\n return of();\r\n }\r\n case PollingErrorMode.SKIP: {\r\n return EMPTY;\r\n }\r\n case PollingErrorMode.IGNORE_WITH_ERROR: {\r\n UniErrorManager.add(ref, err);\r\n return of();\r\n }\r\n case PollingErrorMode.STOP: {\r\n UniErrorManager.add(ref, err);\r\n return throwError(() => err);\r\n }\r\n }\r\n } else {\r\n return throwError(() => err);\r\n }\r\n}\r\n","import isEqual from 'lodash-es/isEqual';\r\nimport {\r\n Observable,\r\n catchError,\r\n defer,\r\n distinctUntilChanged,\r\n finalize,\r\n from,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\nimport { UniToastManager } from 'uni-manager/toast';\r\n\r\nimport { EmitValueMode, MapOperator, PollingErrorMode } from './enum';\r\nimport { errorHandler, operatorHandler } from './handler';\r\nimport { UniHttpManager } from './manager';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\n\r\n/* ------------------------------------------------------------------------------- */\r\n/* -------------------------------- Funzioni Core RxJS -------------------------- */\r\n/* ------------------------------------------------------------------------------- */\r\n/**\r\n * Gestisce l'esecuzione e il ciclo di vita di una singola richiesta HTTP.\r\n * Si occupa della registrazione della reference, della gestione dei loader, dei toast di successo e dell'intercettazione degli errori.\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, 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(toast, res);\r\n }\r\n },\r\n }),\r\n catchError((err) => {\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n /* Gestione errore */\r\n return errorHandler(ref, err, PollingErrorMode.STOP);\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\n/**\r\n * Avvia e coordina un ciclo di polling a intervalli regolari.\r\n * Gestisce la concorrenza tramite operatori RxJS configurabili, la rimozione dei popup, di errore nelle iterazioni successive e i comportamenti custom al primo avvio.\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.ON_NEW_DATA,\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, 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 /* Meccanismo di ripristino automatico: se il polling torna in salute, cancella l'errore dallo store e nasconde i relativi messaggi a schermo */\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?.toast) {\r\n UniToastManager.showHttp(firstIteration.toast, res);\r\n }\r\n }),\r\n catchError((err) => {\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n /* Gestione errore */\r\n return errorHandler(ref, err, errorMode);\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.ON_NEW_DATA\r\n ? source$.pipe(distinctUntilChanged((prev, cur) => isEqual(prev, cur)))\r\n : source$;\r\n}\r\n\r\n/* ------------------------------------------------------------------------------- */\r\n/* ------------------------------------ Utils ------------------------------------ */\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\nfunction add(id: string, 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: undefined,\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\nfunction 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\nfunction 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\nfunction 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","import { HttpException, isHttpException, UniHttpError } from 'uni-error/http';\r\nimport { FileDatasource } from 'uni-manager/file';\r\n\r\nasync function execute(url: URL, init?: RequestInit): Promise<Response | undefined> {\r\n try {\r\n /* Esecuzione della richiesta HTTP nativa */\r\n const res = await fetch(url, init);\r\n\r\n /* Gestione dello stato 204: assenza di contenuto legittima */\r\n if (res.status === 204) {\r\n return undefined;\r\n }\r\n\r\n /*Gestione ok HTTP: risposta ricevuta dal server con stato valido */\r\n if (res.ok) {\r\n return res;\r\n }\r\n\r\n /* Gestione Errore HTTP: risposta ricevuta dal server ma con stato non valido */\r\n let httpErrorPayload: unknown;\r\n try {\r\n /* Clonazione della risposta per l'ispezione del payload senza consumare lo stream originale */\r\n const resClone = res.clone();\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\r\n /* Estrazione del corpo dell'errore in base al formato rilevato */\r\n httpErrorPayload = isJson ? await resClone.json() : await resClone.text();\r\n } catch {\r\n /* Fallback in caso di fallimento della clonazione o del parsing del testo */\r\n httpErrorPayload = `Failed to parse error response body (Status: ${res.status})`;\r\n }\r\n\r\n // Controllo: se il payload estratto è di tipo HttpException (.NET)\r\n if (isHttpException(httpErrorPayload)) {\r\n // const type = httpErrorPayload.isBe ? 'be' : 'ice';\r\n throw new UniHttpError('be', res.status, url, httpErrorPayload);\r\n }\r\n\r\n // Fallback per errori di infrastruttura (es. pagine HTML di IIS/Nginx, 404, 502)\r\n const errorTracker = new Error(res.statusText || `HTTP Error ${res.status}`);\r\n const fallbackException: HttpException = {\r\n message:\r\n typeof httpErrorPayload === 'string' && httpErrorPayload\r\n ? httpErrorPayload\r\n : errorTracker.message,\r\n type: 'InfrastructureError',\r\n stackTrace: errorTracker.stack ?? '',\r\n isBe: true,\r\n };\r\n throw new UniHttpError('server', res.status, url, fallbackException);\r\n } catch (error: unknown) {\r\n // Fallback per errori di rete locale (es. assenza di linea, DNS fallito)\r\n if (error instanceof TypeError) {\r\n const fallbackNetworkException: HttpException = {\r\n message: error.message,\r\n type: error.name || 'NetworkError',\r\n stackTrace: error.stack ?? '',\r\n isBe: true,\r\n };\r\n throw new UniHttpError('network', -1, url, fallbackNetworkException);\r\n }\r\n\r\n // Rilancio diretto per istanze di UniHttpError o eccezioni già gestite\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 la chiamata HTTP e restituisce il corpo decodificato come JSON */\r\n const res = await execute(url, init);\r\n if (!res) return undefined;\r\n\r\n /* Estrae il contenuto come testo */\r\n const text = await res.text();\r\n\r\n /* Controllo: se il testo è vuoto (''), ritorna undefined */\r\n if (!text || text.trim().length === 0) {\r\n return undefined;\r\n }\r\n\r\n /* Parsa manualmente il testo, dato che lo stream è stato già letto */\r\n return JSON.parse(text) as T;\r\n}\r\n\r\nexport async function executeBlob(\r\n url: URL,\r\n init?: RequestInit,\r\n): Promise<FileDatasource | undefined> {\r\n /* Esegue la chiamata HTTP */\r\n const res = await execute(url, init);\r\n if (!res) return undefined;\r\n\r\n /* Estrae il contenuto come Blob direttamente */\r\n const blob = await res.blob();\r\n\r\n /* Controllo: se il blob è vuoto (0 byte), ritorna undefined */\r\n if (blob.size === 0) {\r\n return undefined;\r\n }\r\n\r\n /* Estrae il nome del file dall'header */\r\n const disposition = res.headers.get('Content-Disposition');\r\n let fileName = 'download.pdf'; // Fallback di default\r\n if (disposition) {\r\n const matches = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/.exec(disposition);\r\n if (!!matches && matches[1]) {\r\n fileName = matches[1].replaceAll(/['\"]/g, '');\r\n }\r\n }\r\n\r\n /* Genera l'URL temporaneo dal blob */\r\n const fileUrl = URL.createObjectURL(blob);\r\n\r\n return { url: fileUrl, name: fileName };\r\n}\r\n","import { UniTypeDateManager } from 'uni-manager/type';\r\nimport type { HttpBody, HttpConfig } from './model';\r\n\r\n/**\r\n * Costruisce un URL completo per l'API partendo dai parametri di configurazione.\r\n */\r\nexport function getUrl<T>(hostname: string, port: number, config: HttpConfig<T>): URL {\r\n const { pathParams, path, hasApiPrefix } = config;\r\n\r\n // Costruzione url\r\n const cleanPath = path.replaceAll(/^\\/+|\\/+$/g, '');\r\n const segments = [hasApiPrefix === false ? '' : 'api', cleanPath].filter(Boolean);\r\n const pathFixed = '/' + segments.join('/');\r\n const url = new URL(pathFixed, `http://${hostname}:${port}`);\r\n\r\n if (pathParams) {\r\n // Regex per intercettare stringhe in formato ISO string\r\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?$/;\r\n\r\n for (const [key, rawValue] of Object.entries(pathParams)) {\r\n if (rawValue === undefined || rawValue === null) {\r\n continue;\r\n }\r\n\r\n // Conversione in array per usare un solo ciclo\r\n const valuesArray = Array.isArray(rawValue) ? rawValue : [rawValue];\r\n\r\n for (const item of valuesArray) {\r\n if (item === undefined || item === null) {\r\n continue;\r\n }\r\n\r\n let formattedValue: string;\r\n\r\n // Caso: Date nativo\r\n if (item instanceof Date) {\r\n formattedValue = UniTypeDateManager.toYYYYMMDD(item);\r\n }\r\n // Caso: Date formato ISO string\r\n else if (typeof item === 'string' && isoDateRegex.test(item)) {\r\n const parsedDate = new Date(item);\r\n formattedValue = Number.isNaN(parsedDate.getTime())\r\n ? item\r\n : UniTypeDateManager.toYYYYMMDD(parsedDate);\r\n }\r\n // Default\r\n else {\r\n formattedValue = String(item);\r\n }\r\n\r\n url.searchParams.append(key, formattedValue);\r\n }\r\n }\r\n }\r\n\r\n return url;\r\n}\r\n\r\n/**\r\n * Normalizza i valori del body cosi da sistemare le incongruenze tra ui e db\r\n */\r\nexport function normalizeHttpBody<T extends HttpBody>(body: T, isRoot = true): T {\r\n // PRIMITIVI GENERICI\r\n // Tipi gestiti: null, undefined, number, boolean, symbol, bigint, string\r\n if (body === null || typeof body !== 'object') {\r\n // Sotto-gestione specifica per il tipo: string\r\n if (typeof body === 'string') {\r\n return body.trim() as T;\r\n }\r\n return body;\r\n }\r\n\r\n // DATE\r\n // Tipi gestiti: Date\r\n // Formattazione esplicita manuale in YYYY-MM-DD\r\n if (body instanceof Date) {\r\n const year = body.getFullYear();\r\n const month = String(body.getMonth() + 1).padStart(2, '0');\r\n const day = String(body.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}` as unknown as T;\r\n }\r\n\r\n // STRUTTURE DATI ITERABILI\r\n // Tipi gestiti: Array (qualsiasi array, es. string[], number[], Object[])\r\n // Se è un array, viene mappato ricorsivamente ogni singolo elemento al suo interno (passando isRoot = false perché gli elementi dell'array non sono l'oggetto root principale)\r\n if (Array.isArray(body)) {\r\n return body.map((item) => normalizeHttpBody(item, false)) as unknown as T;\r\n }\r\n\r\n // OGGETTI\r\n // Tipi gestiti: Record<string, any>, generici oggetti JavaScript ({ })\r\n // Rimuove chiave 'id' al primo livello e prosegue ricorsivamente\r\n const entries = Object.entries(body)\r\n .filter(([key]) => !(isRoot && key.toLowerCase() === 'id'))\r\n .map(([key, value]) => [key, normalizeHttpBody(value, false)]);\r\n\r\n // Ricostruisce l'oggetto normalizzato\r\n return Object.fromEntries(entries) as T;\r\n}\r\n","import { BehaviorSubject, Observable, distinctUntilChanged, map, tap } from 'rxjs';\r\nimport type { FileDatasource } from 'uni-manager/file';\r\nimport { ToastConfig, UniToastManager } from 'uni-manager/toast';\r\n\r\nimport { http$, httpPolling$ } from './core';\r\nimport { executeBlob, executeHttp } from './execute';\r\nimport type { HttpBody, HttpConfig, HttpConfigPolling, HttpRef } from './model';\r\nimport { getUrl, normalizeHttpBody } from './util';\r\n\r\nconst CONFIG_TOAST_DEFAULT: ToastConfig = {\r\n type: 'success',\r\n label: 'OperationCompleted',\r\n};\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 /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce se lo store ha chiamate in attesa di risposta o meno */\r\n public static get hasWaitingRequests$(): Observable<boolean> {\r\n return this.store$.pipe(\r\n map((requestMap) => {\r\n for (const request of requestMap.values()) {\r\n if (request.pendingCount > 0) return true;\r\n }\r\n return false;\r\n }),\r\n distinctUntilChanged(),\r\n );\r\n }\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: CRUD --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\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 read$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom)).pipe(\r\n tap((res) => {\r\n if (Array.isArray(res) && config.toast === undefined) {\r\n UniToastManager.show({\r\n label: 'ItemsFound',\r\n params: { count: res.length },\r\n });\r\n }\r\n }),\r\n );\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 create$<T>(config: HttpConfig<T>, body: HttpBody): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...config.init?.headers,\r\n },\r\n body: JSON.stringify(normalizeHttpBody(body)),\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(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 update$<T>(config: HttpConfig<T>, body?: HttpBody): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = { ...config.init, method: 'PUT' };\r\n if (body !== undefined) {\r\n initCustom.headers = {\r\n 'Content-Type': 'application/json',\r\n ...config.init?.headers,\r\n };\r\n initCustom.body = JSON.stringify(normalizeHttpBody(body));\r\n }\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una richiesta HTTP DELETE per rimuovere una risorsa.\r\n * Utilizza il path configurato per costruire l'URL completo e restituisce un Observable del risultato.\r\n */\r\n public static delete$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'DELETE',\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------- Metodi: CRUD file/image ---------------------------- */\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 readImage$(\r\n config: HttpConfig<FileDatasource>,\r\n ): Observable<FileDatasource | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'image', config, () => executeBlob(url, initCustom));\r\n }\r\n\r\n /**\r\n * Recupera un file (es. PDF) tramite una richiesta GET e restituisce un Object URL temporaneo.\r\n * Delega la logica di conversione alla funzione executeFile.\r\n */\r\n public static readFile$(\r\n config: HttpConfig<FileDatasource>,\r\n ): Observable<FileDatasource | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<FileDatasource> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'file', configCustom, () => executeBlob(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ---------------------------- Metodi: CRUD 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 readPolling$<T>(config: HttpConfigPolling<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\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 createPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body: HttpBody,\r\n ): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\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 updatePolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body?: HttpBody,\r\n ): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'PUT',\r\n };\r\n if (body !== undefined) {\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\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n}\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-http.mjs","sources":["../../../projects/uni-manager/http/handler.ts","../../../projects/uni-manager/http/core.ts","../../../projects/uni-manager/http/execute.ts","../../../projects/uni-manager/http/util.ts","../../../projects/uni-manager/http/manager.ts","../../../projects/uni-manager/http/uni-manager-http.ts"],"sourcesContent":["import {\r\n EMPTY,\r\n Observable,\r\n OperatorFunction,\r\n concatMap,\r\n exhaustMap,\r\n mergeMap,\r\n of,\r\n switchMap,\r\n throwError,\r\n} from 'rxjs';\r\nimport { UniHttpError } from 'uni-error/http';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\nimport { MapOperator, PollingErrorMode } from 'uni-model-type/enum';\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 }\r\n case MapOperator.CONCAT_MAP: {\r\n return (project) => concatMap(project);\r\n }\r\n case MapOperator.MERGE_MAP: {\r\n return (project) => mergeMap(project);\r\n }\r\n case MapOperator.SWITCH_MAP: {\r\n return (project) => switchMap(project);\r\n }\r\n }\r\n}\r\n\r\nexport function errorHandler(\r\n ref: string,\r\n err: unknown,\r\n errorMode: PollingErrorMode,\r\n): Observable<never> {\r\n // Controllo: sia effettivamente un errore di tipo 'UniHttpError'\r\n if (err instanceof UniHttpError) {\r\n switch (errorMode) {\r\n case PollingErrorMode.IGNORE: {\r\n return of();\r\n }\r\n case PollingErrorMode.SKIP: {\r\n return EMPTY;\r\n }\r\n case PollingErrorMode.IGNORE_WITH_ERROR: {\r\n UniErrorManager.add(ref, err);\r\n return of();\r\n }\r\n case PollingErrorMode.STOP: {\r\n UniErrorManager.add(ref, err);\r\n return throwError(() => err);\r\n }\r\n }\r\n } else {\r\n return throwError(() => err);\r\n }\r\n}\r\n","import isEqual from 'lodash-es/isEqual';\r\nimport {\r\n Observable,\r\n catchError,\r\n defer,\r\n distinctUntilChanged,\r\n finalize,\r\n from,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport { UniErrorManager } from 'uni-manager/error';\r\nimport { UniToastManager } from 'uni-manager/toast';\r\nimport { EmitValueMode, MapOperator, PollingErrorMode } from 'uni-model-type/enum';\r\nimport type { HttpConfig, HttpConfigPolling, HttpRef } from 'uni-model-type/type';\r\n\r\nimport { errorHandler, operatorHandler } from './handler';\r\nimport { UniHttpManager } from './manager';\r\n\r\n/* ------------------------------------------------------------------------------- */\r\n/* -------------------------------- Funzioni Core RxJS -------------------------- */\r\n/* ------------------------------------------------------------------------------- */\r\n/**\r\n * Gestisce l'esecuzione e il ciclo di vita di una singola richiesta HTTP.\r\n * Si occupa della registrazione della reference, della gestione dei loader, dei toast di successo e dell'intercettazione degli errori.\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, 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(toast, res);\r\n }\r\n },\r\n }),\r\n catchError((err) => {\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n /* Gestione errore */\r\n return errorHandler(ref, err, PollingErrorMode.STOP);\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\n/**\r\n * Avvia e coordina un ciclo di polling a intervalli regolari.\r\n * Gestisce la concorrenza tramite operatori RxJS configurabili, la rimozione dei popup, di errore nelle iterazioni successive e i comportamenti custom al primo avvio.\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.ON_NEW_DATA,\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, 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 /* Meccanismo di ripristino automatico: se il polling torna in salute, cancella l'errore dallo store e nasconde i relativi messaggi a schermo */\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?.toast) {\r\n UniToastManager.showHttp(firstIteration.toast, res);\r\n }\r\n }),\r\n catchError((err) => {\r\n // Aggiorna la ref nella map\r\n updateHasError(ref, true);\r\n\r\n /* Gestione errore */\r\n return errorHandler(ref, err, errorMode);\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.ON_NEW_DATA\r\n ? source$.pipe(distinctUntilChanged((prev, cur) => isEqual(prev, cur)))\r\n : source$;\r\n}\r\n\r\n/* ------------------------------------------------------------------------------- */\r\n/* ------------------------------------ Utils ------------------------------------ */\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\nfunction add(id: string, 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: undefined,\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\nfunction 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\nfunction 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\nfunction 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","import { isHttpException, UniHttpError } from 'uni-error/http';\r\nimport type { FileDatasource, HttpException } from 'uni-model-type/type';\r\n\r\nasync function execute(url: URL, init?: RequestInit): Promise<Response | undefined> {\r\n try {\r\n /* Esecuzione della richiesta HTTP nativa */\r\n const res = await fetch(url, init);\r\n\r\n /* Gestione dello stato 204: assenza di contenuto legittima */\r\n if (res.status === 204) {\r\n return undefined;\r\n }\r\n\r\n /*Gestione ok HTTP: risposta ricevuta dal server con stato valido */\r\n if (res.ok) {\r\n return res;\r\n }\r\n\r\n /* Gestione Errore HTTP: risposta ricevuta dal server ma con stato non valido */\r\n let httpErrorPayload: unknown;\r\n try {\r\n /* Clonazione della risposta per l'ispezione del payload senza consumare lo stream originale */\r\n const resClone = res.clone();\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\r\n /* Estrazione del corpo dell'errore in base al formato rilevato */\r\n httpErrorPayload = isJson ? await resClone.json() : await resClone.text();\r\n } catch {\r\n /* Fallback in caso di fallimento della clonazione o del parsing del testo */\r\n httpErrorPayload = `Failed to parse error response body (Status: ${res.status})`;\r\n }\r\n\r\n // Controllo: se il payload estratto è di tipo HttpException (.NET)\r\n if (isHttpException(httpErrorPayload)) {\r\n // const type = httpErrorPayload.isBe ? 'be' : 'ice';\r\n throw new UniHttpError('be', res.status, url, httpErrorPayload);\r\n }\r\n\r\n // Fallback per errori di infrastruttura (es. pagine HTML di IIS/Nginx, 404, 502)\r\n const errorTracker = new Error(res.statusText || `HTTP Error ${res.status}`);\r\n const fallbackException: HttpException = {\r\n message:\r\n typeof httpErrorPayload === 'string' && httpErrorPayload\r\n ? httpErrorPayload\r\n : errorTracker.message,\r\n type: 'ServerError',\r\n stackTrace: errorTracker.stack ?? '',\r\n isBe: true,\r\n };\r\n throw new UniHttpError('server', res.status, url, fallbackException);\r\n } catch (error: unknown) {\r\n // Fallback per errori di rete locale (es. assenza di linea, DNS fallito)\r\n if (error instanceof TypeError) {\r\n const fallbackNetworkException: HttpException = {\r\n message: error.message,\r\n type: error.name || 'NetworkError',\r\n stackTrace: error.stack ?? '',\r\n isBe: true,\r\n };\r\n throw new UniHttpError('network', -1, url, fallbackNetworkException);\r\n }\r\n\r\n // Rilancio diretto per istanze di UniHttpError o eccezioni già gestite\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 la chiamata HTTP e restituisce il corpo decodificato come JSON */\r\n const res = await execute(url, init);\r\n if (!res) return undefined;\r\n\r\n /* Estrae il contenuto come testo */\r\n const text = await res.text();\r\n\r\n /* Controllo: se il testo è vuoto (''), ritorna undefined */\r\n if (!text || text.trim().length === 0) {\r\n return undefined;\r\n }\r\n\r\n /* Parsa manualmente il testo, dato che lo stream è stato già letto */\r\n return JSON.parse(text) as T;\r\n}\r\n\r\nexport async function executeBlob(\r\n url: URL,\r\n init?: RequestInit,\r\n): Promise<FileDatasource | undefined> {\r\n /* Esegue la chiamata HTTP */\r\n const res = await execute(url, init);\r\n if (!res) return undefined;\r\n\r\n /* Estrae il contenuto come Blob direttamente */\r\n const blob = await res.blob();\r\n\r\n /* Controllo: se il blob è vuoto (0 byte), ritorna undefined */\r\n if (blob.size === 0) {\r\n return undefined;\r\n }\r\n\r\n /* Estrae il nome del file dall'header */\r\n const disposition = res.headers.get('Content-Disposition');\r\n let fileName = 'download.pdf'; // Fallback di default\r\n if (disposition) {\r\n const matches = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/.exec(disposition);\r\n if (!!matches && matches[1]) {\r\n fileName = matches[1].replaceAll(/['\"]/g, '');\r\n }\r\n }\r\n\r\n /* Genera l'URL temporaneo dal blob */\r\n const fileUrl = URL.createObjectURL(blob);\r\n\r\n return { url: fileUrl, name: fileName };\r\n}\r\n","import { UniTypeDateManager } from 'uni-manager/type';\r\nimport type { HttpBody, HttpConfig } from 'uni-model-type/type';\r\n\r\n/**\r\n * Costruisce un URL completo per l'API partendo dai parametri di configurazione.\r\n */\r\nexport function getUrl<T>(hostname: string, port: number, config: HttpConfig<T>): URL {\r\n const { pathParams, path, hasApiPrefix } = config;\r\n\r\n // Costruzione url\r\n const cleanPath = path.replaceAll(/^\\/+|\\/+$/g, '');\r\n const segments = [hasApiPrefix === false ? '' : 'api', cleanPath].filter(Boolean);\r\n const pathFixed = '/' + segments.join('/');\r\n const url = new URL(pathFixed, `http://${hostname}:${port}`);\r\n\r\n if (pathParams) {\r\n // Regex per intercettare stringhe in formato ISO string\r\n const isoDateRegex = /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})?)?$/;\r\n\r\n for (const [key, rawValue] of Object.entries(pathParams)) {\r\n if (rawValue === undefined || rawValue === null) {\r\n continue;\r\n }\r\n\r\n // Conversione in array per usare un solo ciclo\r\n const valuesArray = Array.isArray(rawValue) ? rawValue : [rawValue];\r\n\r\n for (const item of valuesArray) {\r\n if (item === undefined || item === null) {\r\n continue;\r\n }\r\n\r\n let formattedValue: string;\r\n\r\n // Caso: Date nativo\r\n if (item instanceof Date) {\r\n formattedValue = UniTypeDateManager.toYYYYMMDD(item);\r\n }\r\n // Caso: Date formato ISO string\r\n else if (typeof item === 'string' && isoDateRegex.test(item)) {\r\n const parsedDate = new Date(item);\r\n formattedValue = Number.isNaN(parsedDate.getTime())\r\n ? item\r\n : UniTypeDateManager.toYYYYMMDD(parsedDate);\r\n }\r\n // Default\r\n else {\r\n formattedValue = String(item);\r\n }\r\n\r\n url.searchParams.append(key, formattedValue);\r\n }\r\n }\r\n }\r\n\r\n return url;\r\n}\r\n\r\n/**\r\n * Normalizza i valori del body cosi da sistemare le incongruenze tra ui e db\r\n */\r\nexport function normalizeHttpBody<T extends HttpBody>(body: T, isRoot = true): T {\r\n // PRIMITIVI GENERICI\r\n // Tipi gestiti: null, undefined, number, boolean, symbol, bigint, string\r\n if (body === null || typeof body !== 'object') {\r\n // Sotto-gestione specifica per il tipo: string\r\n if (typeof body === 'string') {\r\n return body.trim() as T;\r\n }\r\n return body;\r\n }\r\n\r\n // DATE\r\n // Tipi gestiti: Date\r\n // Formattazione esplicita manuale in YYYY-MM-DD\r\n if (body instanceof Date) {\r\n const year = body.getFullYear();\r\n const month = String(body.getMonth() + 1).padStart(2, '0');\r\n const day = String(body.getDate()).padStart(2, '0');\r\n return `${year}-${month}-${day}` as unknown as T;\r\n }\r\n\r\n // STRUTTURE DATI ITERABILI\r\n // Tipi gestiti: Array (qualsiasi array, es. string[], number[], Object[])\r\n // Se è un array, viene mappato ricorsivamente ogni singolo elemento al suo interno (passando isRoot = false perché gli elementi dell'array non sono l'oggetto root principale)\r\n if (Array.isArray(body)) {\r\n return body.map((item) => normalizeHttpBody(item, false)) as unknown as T;\r\n }\r\n\r\n // OGGETTI\r\n // Tipi gestiti: Record<string, any>, generici oggetti JavaScript ({ })\r\n // Rimuove chiave 'id' al primo livello e prosegue ricorsivamente\r\n const entries = Object.entries(body)\r\n .filter(([key]) => !(isRoot && key.toLowerCase() === 'id'))\r\n .map(([key, value]) => [key, normalizeHttpBody(value, false)]);\r\n\r\n // Ricostruisce l'oggetto normalizzato\r\n return Object.fromEntries(entries) as T;\r\n}\r\n","import { BehaviorSubject, Observable, distinctUntilChanged, map, tap } from 'rxjs';\r\nimport { UniToastManager } from 'uni-manager/toast';\r\nimport type {\r\n FileDatasource,\r\n HttpBody,\r\n HttpConfig,\r\n HttpConfigPolling,\r\n HttpRef,\r\n ToastConfig,\r\n} from 'uni-model-type/type';\r\n\r\nimport { http$, httpPolling$ } from './core';\r\nimport { executeBlob, executeHttp } from './execute';\r\nimport { getUrl, normalizeHttpBody } from './util';\r\n\r\nconst CONFIG_TOAST_DEFAULT: ToastConfig = {\r\n type: 'success',\r\n label: 'OperationCompleted',\r\n};\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 /* --------------------------------- Metodi: get --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\r\n /** Restituisce se lo store ha chiamate in attesa di risposta o meno */\r\n public static get hasWaitingRequests$(): Observable<boolean> {\r\n return this.store$.pipe(\r\n map((requestMap) => {\r\n for (const request of requestMap.values()) {\r\n if (request.pendingCount > 0) return true;\r\n }\r\n return false;\r\n }),\r\n distinctUntilChanged(),\r\n );\r\n }\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: CRUD --------------------------------- */\r\n /* ------------------------------------------------------------------------------- */\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 read$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', config, () => executeHttp<T>(url, initCustom)).pipe(\r\n tap((res) => {\r\n if (Array.isArray(res) && config.toast === undefined) {\r\n UniToastManager.show({\r\n label: 'ItemsFound',\r\n params: { count: res.length },\r\n });\r\n }\r\n }),\r\n );\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 create$<T>(config: HttpConfig<T>, body: HttpBody): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...config.init?.headers,\r\n },\r\n body: JSON.stringify(normalizeHttpBody(body)),\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(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 update$<T>(config: HttpConfig<T>, body?: HttpBody): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = { ...config.init, method: 'PUT' };\r\n if (body !== undefined) {\r\n initCustom.headers = {\r\n 'Content-Type': 'application/json',\r\n ...config.init?.headers,\r\n };\r\n initCustom.body = JSON.stringify(normalizeHttpBody(body));\r\n }\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /**\r\n * Esegue una richiesta HTTP DELETE per rimuovere una risorsa.\r\n * Utilizza il path configurato per costruire l'URL completo e restituisce un Observable del risultato.\r\n */\r\n public static delete$<T>(config: HttpConfig<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'DELETE',\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<T> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'one', configCustom, () => executeHttp<T>(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* -------------------------- Metodi: CRUD file/image ---------------------------- */\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 readImage$(\r\n config: HttpConfig<FileDatasource>,\r\n ): Observable<FileDatasource | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'image', config, () => executeBlob(url, initCustom));\r\n }\r\n\r\n /**\r\n * Recupera un file (es. PDF) tramite una richiesta GET e restituisce un Object URL temporaneo.\r\n * Delega la logica di conversione alla funzione executeFile.\r\n */\r\n public static readFile$(\r\n config: HttpConfig<FileDatasource>,\r\n ): Observable<FileDatasource | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* Config custom (toast di default) */\r\n const configCustom: HttpConfig<FileDatasource> = {\r\n ...config,\r\n toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return http$(url, 'file', configCustom, () => executeBlob(url, initCustom));\r\n }\r\n\r\n /* ------------------------------------------------------------------------------- */\r\n /* ---------------------------- Metodi: CRUD 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 readPolling$<T>(config: HttpConfigPolling<T>): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'GET',\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\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 createPolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body: HttpBody,\r\n ): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body),\r\n };\r\n\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\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 updatePolling$<T>(\r\n config: HttpConfigPolling<T>,\r\n body?: HttpBody,\r\n ): Observable<T | undefined> {\r\n /* Config */\r\n const initCustom: RequestInit = {\r\n ...config.init,\r\n method: 'PUT',\r\n };\r\n if (body !== undefined) {\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\r\n /* API */\r\n const url = getUrl(this.hostname, this.port, config);\r\n return httpPolling$(url, config, () => executeHttp<T>(url, initCustom));\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-toast.mjs","sources":["../../../projects/uni-manager/toast/manager.ts","../../../projects/uni-manager/toast/uni-manager-toast.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from '
|
|
1
|
+
{"version":3,"file":"uni-manager-toast.mjs","sources":["../../../projects/uni-manager/toast/manager.ts","../../../projects/uni-manager/toast/uni-manager-toast.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { UniLocaleManager } from 'uni-manager/locale';\r\nimport type { IToastManager, ToastConfig, ToastHttpConfig } from 'uni-model-type/type';\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 config: ToastConfig & {\r\n prefix?: string;\r\n suffix?: string;\r\n },\r\n ): void {\r\n /* Messaggio tradotto */\r\n const msg = UniLocaleManager.translate(config.label, 'toast', config.params);\r\n const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;\r\n this.manager[config.type ?? 'info'](msgFixed, 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>(config: ToastConfig & ToastHttpConfig<T>, res: T | undefined): void {\r\n const { params, resParams, formatters } = config;\r\n\r\n /* Parametri statici di base */\r\n const allParams: Record<string, any> = { ...params };\r\n\r\n if (res !== undefined && res !== null) {\r\n /* Se è un array aggiunge il parametro 'count' con la lunghezza dell'array */\r\n if (Array.isArray(res)) {\r\n allParams['count'] = res.length;\r\n } else if (typeof res === 'object' && resParams?.length) {\r\n // Se la proprietà NON esiste nella risposta, allora salta\r\n for (const resParam of resParams ?? []) {\r\n if (!(resParam in res)) continue;\r\n\r\n // Se esiste un formatter per questa chiave lo si usa, altrimenti valore grezzo\r\n const rawValue = res[resParam];\r\n allParams[resParam] = formatters?.[resParam] ? formatters[resParam](rawValue) : rawValue;\r\n }\r\n }\r\n }\r\n\r\n /* Messaggio tradotto */\r\n this.show({ ...config, params: allParams });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;AAAA;MAIa,eAAe,CAAA;;;;AAU1B;;AAEG;IACI,OAAO,KAAK,CAAC,UAAyB,EAAA;AAC3C,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU;IAC3B;;;;AAKA;;AAEG;IACI,OAAO,IAAI,CAChB,MAGC,EAAA;;AAGD,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;AAC5E,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAA,EAAG,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE;AACrE,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;IACvD;AAEA;;AAEG;AACI,IAAA,OAAO,QAAQ,CAAI,MAAwC,EAAE,GAAkB,EAAA;QACpF,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM;;AAGhD,QAAA,MAAM,SAAS,GAAwB,EAAE,GAAG,MAAM,EAAE;QAEpD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;;AAErC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;AACtB,gBAAA,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM;YACjC;iBAAO,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,EAAE,MAAM,EAAE;;AAEvD,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,IAAI,EAAE,EAAE;AACtC,oBAAA,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC;wBAAE;;AAGxB,oBAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAC9B,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,GAAG,QAAQ,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,QAAQ;gBAC1F;YACF;QACF;;AAGA,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC7C;AACD;;ACnED;;AAEG;;;;"}
|