uni-manager 0.1.9 → 0.1.10
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 +8 -8
- package/fesm2022/uni-manager-error.mjs.map +1 -1
- package/fesm2022/uni-manager-file.mjs +2 -2
- package/fesm2022/uni-manager-file.mjs.map +1 -1
- package/fesm2022/uni-manager-http.mjs +17 -14
- package/fesm2022/uni-manager-http.mjs.map +1 -1
- package/fesm2022/uni-manager-locale.mjs +21 -17
- package/fesm2022/uni-manager-locale.mjs.map +1 -1
- package/fesm2022/uni-manager-toast.mjs +3 -3
- package/fesm2022/uni-manager-toast.mjs.map +1 -1
- package/fesm2022/uni-manager-type.mjs +5 -5
- package/fesm2022/uni-manager-type.mjs.map +1 -1
- package/fesm2022/uni-manager.mjs +56 -49
- package/fesm2022/uni-manager.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-locale.mjs","sources":["../../../projects/uni-manager/locale/manager.ts","../../../projects/uni-manager/locale/uni-manager-locale.ts"],"sourcesContent":["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 = navigator.language ?? 'en-US';\r\n\r\n /** Elenco dei codici lingua supportati dall'applicazione (es. ['it-IT', 'en-US']) */\r\n private static _localesSupported: string[] = [];\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static _prefix: string | undefined = undefined;\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 l'array contenente tutti i codici locale supportati.*/\r\n public static get localesSupported(): string[] {\r\n return this._localesSupported;\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 | null | undefined, prefix?: string): void {\r\n this._locale = locale ?? 'en-US';\r\n this._prefix = prefix;\r\n }\r\n\r\n /** Imposta l'elenco dei codici lingua supportati dall'applicazione */\r\n public static setLocalesSupported(locales: string[] | undefined): void {\r\n this._localesSupported = locales ?? [];\r\n }\r\n\r\n /**\r\n * Aggiorna lo store locale con il dizionario delle traduzioni fornito.\r\n * Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.\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 key: string,\r\n prefix = 'lbl',\r\n params?: Record<string, string | number | Date>,\r\n ): string {\r\n if (!key) return '-';\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const keyParts = key.trim().split(/(?=[A-Z])/);\r\n const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());\r\n const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;\r\n const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';\r\n const finalKey = `${this._prefix ?? ''}${prefix}${capitalizedKey}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n let translation = this.currentValue?.[finalKey.toLowerCase()];\r\n\r\n // Log e fallback se la traduzione manca\r\n if (!translation) {\r\n console.warn(`Translation missing for key: ${finalKey}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\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 translateInlineParams(keyWithParams: string, splitChar: string): string {\r\n if (!keyWithParams) return '-';\r\n\r\n const [label, ...params] = keyWithParams.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 interpolationParameters: Record<string, string> = {};\r\n for (const [index, val] of params.entries()) {\r\n interpolationParameters[`param${index}`] = val;\r\n }\r\n\r\n return this.translate(label, 'lbl', interpolationParameters);\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 (Number.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 }\r\n case 'time': {\r\n return dt.toLocaleTimeString(locale);\r\n }\r\n case 'full': {\r\n return dt.toLocaleString(locale);\r\n }\r\n }\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-locale.mjs","sources":["../../../projects/uni-manager/locale/manager.ts","../../../projects/uni-manager/locale/uni-manager-locale.ts"],"sourcesContent":["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 = navigator.language ?? 'en-US';\r\n\r\n /** Elenco dei codici lingua supportati dall'applicazione (es. ['it-IT', 'en-US']) */\r\n private static _localesSupported: string[] = [];\r\n\r\n /** Prefisso globale applicato a tutte le chiavi di traduzione (es. 'APP_') */\r\n private static _prefix: string | undefined = undefined;\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 UniLocaleManager._locale;\r\n }\r\n\r\n /** Restituisce l'array contenente tutti i codici locale supportati.*/\r\n public static get localesSupported(): string[] {\r\n return UniLocaleManager._localesSupported;\r\n }\r\n\r\n /** Restituisce solo la lingua (es. 'it') */\r\n public static get language(): string {\r\n return UniLocaleManager._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 = UniLocaleManager._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$ = UniLocaleManager.store.asObservable();\r\n\r\n /** Ottiene il dizionario attuale senza sottoscrizione */\r\n public static get currentValue(): Record<string, string> {\r\n return UniLocaleManager.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 | null | undefined, prefix?: string): void {\r\n UniLocaleManager._locale = locale ?? 'en-US';\r\n UniLocaleManager._prefix = prefix;\r\n }\r\n\r\n /** Imposta l'elenco dei codici lingua supportati dall'applicazione */\r\n public static setLocalesSupported(locales: string[] | undefined): void {\r\n UniLocaleManager._localesSupported = locales ?? [];\r\n }\r\n\r\n /**\r\n * Aggiorna lo store locale con il dizionario delle traduzioni fornito.\r\n * Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.\r\n */\r\n public static setTranslations(translations: Record<string, string> | undefined): void {\r\n UniLocaleManager.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 key: string,\r\n prefix = 'lbl',\r\n params?: Record<string, string | number | Date>,\r\n ): string {\r\n if (!key) return '-';\r\n\r\n // Costruzione chiave: prefissoGlobale + prefissoLocale + LabelConInizialeMaiuscola\r\n const keyParts = key.trim().split(/(?=[A-Z])/);\r\n const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());\r\n const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;\r\n const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';\r\n const finalKey = `${UniLocaleManager._prefix ?? ''}${prefix}${capitalizedKey}`;\r\n\r\n // Cerca la chiave in minuscolo (standardizzazione)\r\n let translation = UniLocaleManager.currentValue?.[finalKey.toLowerCase()];\r\n\r\n // Log e fallback se la traduzione manca\r\n if (!translation) {\r\n console.warn(`Translation missing for key: ${finalKey}`);\r\n return `🔑 ${finalKey}`;\r\n }\r\n\r\n // Interpolazione variabili\r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n const displayValue =\r\n value instanceof Date\r\n ? value.toLocaleDateString(UniLocaleManager._locale)\r\n : 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 translateInlineParams(keyWithParams: string, splitChar: string): string {\r\n if (!keyWithParams) return '-';\r\n\r\n const [label, ...params] = keyWithParams.split(splitChar);\r\n\r\n // Se non ci sono parametri, esegui una traduzione semplice\r\n if (params.length === 0) {\r\n return UniLocaleManager.translate(label);\r\n }\r\n\r\n // Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }\r\n const interpolationParameters: Record<string, string> = {};\r\n for (const [index, val] of params.entries()) {\r\n interpolationParameters[`param${index}`] = val;\r\n }\r\n\r\n return UniLocaleManager.translate(label, 'lbl', interpolationParameters);\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(UniLocaleManager._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 (Number.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 =\r\n force && UniLocaleManager._locale.startsWith(force.oldLang)\r\n ? force.newLocale\r\n : UniLocaleManager._locale;\r\n\r\n switch (mode) {\r\n case 'date': {\r\n return dt.toLocaleDateString(locale);\r\n }\r\n case 'time': {\r\n return dt.toLocaleTimeString(locale);\r\n }\r\n case 'full': {\r\n return dt.toLocaleString(locale);\r\n }\r\n }\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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"}
|
|
@@ -9,7 +9,7 @@ class UniToastManager {
|
|
|
9
9
|
* Inizializza il manager con una serie di operazioni
|
|
10
10
|
*/
|
|
11
11
|
static setup(operations) {
|
|
12
|
-
|
|
12
|
+
UniToastManager.manager = operations;
|
|
13
13
|
}
|
|
14
14
|
/* ------------------------------------------------------------------------------- */
|
|
15
15
|
/* -------------------------------- Metodi: show --------------------------------- */
|
|
@@ -21,7 +21,7 @@ class UniToastManager {
|
|
|
21
21
|
/* Messaggio tradotto */
|
|
22
22
|
const msg = UniLocaleManager.translate(config.label, 'toast', config.params);
|
|
23
23
|
const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;
|
|
24
|
-
|
|
24
|
+
UniToastManager.manager[config.type ?? 'info'](msgFixed, config);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.
|
|
@@ -47,7 +47,7 @@ class UniToastManager {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
/* Messaggio tradotto */
|
|
50
|
-
|
|
50
|
+
UniToastManager.show({ ...config, params: allParams });
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -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 './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
|
|
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 './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 UniToastManager.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 UniToastManager.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 UniToastManager.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,eAAe,CAAC,OAAO,GAAG,UAAU;IACtC;;;;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,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;IAClE;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,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACxD;AACD;;ACnED;;AAEG;;;;"}
|
|
@@ -68,7 +68,7 @@ class UniTypeStringManager {
|
|
|
68
68
|
// Pulizia chiave
|
|
69
69
|
const fixedKey = key.trim();
|
|
70
70
|
// Unisce il prefisso
|
|
71
|
-
return prefix +
|
|
71
|
+
return prefix + UniTypeStringManager.toPascalCase(fixedKey);
|
|
72
72
|
}
|
|
73
73
|
/** Converte una stringa in PascalCase (es. "user_id" -> "UserId") */
|
|
74
74
|
static toPascalCase(key) {
|
|
@@ -78,11 +78,11 @@ class UniTypeStringManager {
|
|
|
78
78
|
// Pulizia chiave
|
|
79
79
|
const fixedKey = key.trim();
|
|
80
80
|
// Normalizza e pulisce
|
|
81
|
-
const parts =
|
|
81
|
+
const parts = UniTypeStringManager.splitString(fixedKey);
|
|
82
82
|
if (parts.length === 0)
|
|
83
83
|
return '';
|
|
84
84
|
// Converte in PascalCase
|
|
85
|
-
const pascalCased =
|
|
85
|
+
const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);
|
|
86
86
|
return pascalCased;
|
|
87
87
|
}
|
|
88
88
|
/** Converte una stringa in camelCase (es. "user_id" -> "userId") */
|
|
@@ -93,13 +93,13 @@ class UniTypeStringManager {
|
|
|
93
93
|
// Pulizia chiave
|
|
94
94
|
const fixedKey = key.trim();
|
|
95
95
|
// Normalizza e pulisce
|
|
96
|
-
const parts =
|
|
96
|
+
const parts = UniTypeStringManager.splitString(fixedKey);
|
|
97
97
|
if (parts.length === 0)
|
|
98
98
|
return '';
|
|
99
99
|
// La prima parola resta minuscola, le successive PascalCase
|
|
100
100
|
const first = parts[0].toLowerCase();
|
|
101
101
|
const rest = parts.slice(1);
|
|
102
|
-
return first +
|
|
102
|
+
return first + UniTypeStringManager.toPascalCaseParts(rest);
|
|
103
103
|
}
|
|
104
104
|
/** Capitalizza solo la prima lettera della stringa */
|
|
105
105
|
static toCapitalize(key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uni-manager-type.mjs","sources":["../../../projects/uni-manager/type/date.manager.ts","../../../projects/uni-manager/type/number.manager.ts","../../../projects/uni-manager/type/string.manager.ts","../../../projects/uni-manager/type/uni-manager-type.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 in formati standardizzati.\r\n */\r\nexport class UniTypeDateManager {\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 (Number.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","/**\r\n * Utility per la gestione e formattazione di valori numerici.\r\n */\r\nexport class UniTypeNumberManager {\r\n /** Applica il padding a un numero o una stringa */\r\n static toPad(value: number | string | null | undefined, count: number, character = '0'): string {\r\n // Se il valore è null/undefined, riempiamo l'intero campo con il carattere scelto\r\n if (value === null || value === undefined) {\r\n return ''.padStart(count, character);\r\n }\r\n\r\n // Convertiamo in stringa e applichiamo il padding\r\n return value.toString().padStart(count, character);\r\n }\r\n\r\n /** Formatta un numero in una versione leggibile (es: 1000 -> 1K, 1000000 -> 1M) */\r\n static toTruncateAndAdUdm(value: number, decimalDigits = 0, maxIntegerDigits = 3): string {\r\n // Nessun limite impostato o numero inferiore alla soglia definita\r\n if (Math.abs(value) < Math.pow(10, maxIntegerDigits)) {\r\n return value.toFixed(decimalDigits);\r\n }\r\n\r\n // Definizione delle scale di riduzione per grandi numeri\r\n const scales = [\r\n { threshold: 1e12, suffix: 'T' }, // Trilioni\r\n { threshold: 1e9, suffix: 'B' }, // Miliardi\r\n { threshold: 1e6, suffix: 'M' }, // Milioni\r\n { threshold: 1e3, suffix: 'K' }, // Migliaia\r\n ];\r\n\r\n // Itera dalla scala più grande alla più piccola per trovare la soglia corretta\r\n for (const { threshold, suffix } of scales) {\r\n if (Math.abs(value) >= threshold) {\r\n const reduced = value / threshold;\r\n\r\n // parseFloat(toFixed()) rimuove gli zeri decimali superflui (es: 1.50 -> 1.5)\r\n // aggiungendo poi il relativo suffisso (K, M, B, T)\r\n return Number.parseFloat(reduced.toFixed(decimalDigits)).toString() + suffix;\r\n }\r\n }\r\n\r\n // Fallback: se il numero è grande ma non rientra nelle scale (caso raro con la logica attuale)\r\n return value.toFixed(decimalDigits);\r\n }\r\n}\r\n","/**\r\n * Utility per la manipolazione di stringhe\r\n */\r\nexport class UniTypeStringManager {\r\n /** Converte una stringa in formato lblPascalCase (es. \"user_id\" -> \"lblUserId\") */\r\n static toLabelize(key: string | null | undefined, prefix = 'lbl'): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Unisce il prefisso\r\n return prefix + this.toPascalCase(fixedKey);\r\n }\r\n\r\n /** Converte una stringa in PascalCase (es. \"user_id\" -> \"UserId\") */\r\n static toPascalCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = this.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // Converte in PascalCase\r\n const pascalCased = this.toPascalCaseParts(parts);\r\n\r\n return pascalCased;\r\n }\r\n\r\n /** Converte una stringa in camelCase (es. \"user_id\" -> \"userId\") */\r\n static toCamelCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = this.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // La prima parola resta minuscola, le successive PascalCase\r\n const first = parts[0].toLowerCase();\r\n const rest = parts.slice(1);\r\n return first + this.toPascalCaseParts(rest);\r\n }\r\n\r\n /** Capitalizza solo la prima lettera della stringa */\r\n static toCapitalize(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n return fixedKey.charAt(0).toUpperCase() + fixedKey.slice(1);\r\n }\r\n\r\n /** Sostituisce sotto-stringhe all'interno della stringa */\r\n static toReplace(\r\n key: string | null | undefined,\r\n values: { searchValue: string; replaceValue: string }[],\r\n ): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n let fixedKey = key.trim();\r\n\r\n for (const value of values) {\r\n fixedKey = fixedKey.replaceAll(value.searchValue, value.replaceValue);\r\n }\r\n\r\n return fixedKey;\r\n }\r\n\r\n /* ----------------- Utils ----------------- */\r\n private static splitString(key: string): string[] {\r\n return (\r\n key\r\n // Pulisce eventuali caratteri di separazione rimasti in testa (es. \"_tab_name\" -> \"tab_name\")\r\n .replace(/^[-_\\s]+/, '')\r\n\r\n // Isola il CamelCase inserendo un underscore tra minuscole e maiuscole (es. \"userId\" -> \"user_Id\")\r\n .replaceAll(/([a-z])([A-Z])/g, '$1_$2')\r\n\r\n // Isola gli acronimi attaccati a parole Normali (es. \"VARAna\" -> \"VAR_Ana\" grazie alla minuscola \"na\")\r\n .replaceAll(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\r\n\r\n // Applica il taglio definitivo usando come riferimento i trattini, gli underscore e gli spazi\r\n .split(/[-_\\s]+/)\r\n\r\n // Rimuove dall'array finale eventuali stringhe vuote generate da separatori consecutivi\r\n .filter(Boolean)\r\n );\r\n }\r\n\r\n private static toPascalCaseParts(parts: string[]): string {\r\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join('');\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;AAGG;MACU,kBAAkB,CAAA;IAC7B,OAAO,UAAU,CAAC,IAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AAEpB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAExB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE;AAExC,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEhD,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;IAClC;AACD;;AClBD;;AAEG;MACU,oBAAoB,CAAA;;IAE/B,OAAO,KAAK,CAAC,KAAyC,EAAE,KAAa,EAAE,SAAS,GAAG,GAAG,EAAA;;QAEpF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;YACzC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QACtC;;QAGA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IACpD;;IAGA,OAAO,kBAAkB,CAAC,KAAa,EAAE,aAAa,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAA;;AAE9E,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE;AACpD,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QACrC;;AAGA,QAAA,MAAM,MAAM,GAAG;YACb,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YAChC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SAChC;;QAGD,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE;YAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;AAChC,gBAAA,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS;;;AAIjC,gBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM;YAC9E;QACF;;AAGA,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IACrC;AACD;;AC5CD;;AAEG;MACU,oBAAoB,CAAA;;AAE/B,IAAA,OAAO,UAAU,CAAC,GAA8B,EAAE,MAAM,GAAG,KAAK,EAAA;;AAE9D,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,OAAO,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC7C;;IAGA,OAAO,YAAY,CAAC,GAA8B,EAAA;;AAEhD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;QAGjC,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEjD,QAAA,OAAO,WAAW;IACpB;;IAGA,OAAO,WAAW,CAAC,GAA8B,EAAA;;AAE/C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;QAGjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,OAAO,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC7C;;IAGA,OAAO,YAAY,CAAC,GAA8B,EAAA;;AAEhD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;AAE3B,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D;;AAGA,IAAA,OAAO,SAAS,CACd,GAA8B,EAC9B,MAAuD,EAAA;;AAGvD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;AAEzB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QACvE;AAEA,QAAA,OAAO,QAAQ;IACjB;;IAGQ,OAAO,WAAW,CAAC,GAAW,EAAA;AACpC,QAAA,QACE;;AAEG,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE;;AAGtB,aAAA,UAAU,CAAC,iBAAiB,EAAE,OAAO;;AAGrC,aAAA,UAAU,CAAC,uBAAuB,EAAE,OAAO;;aAG3C,KAAK,CAAC,SAAS;;AAGf,aAAA,MAAM,CAAC,OAAO,CAAC;IAEtB;IAEQ,OAAO,iBAAiB,CAAC,KAAe,EAAA;AAC9C,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACjG;AACD;;ACzGD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"uni-manager-type.mjs","sources":["../../../projects/uni-manager/type/date.manager.ts","../../../projects/uni-manager/type/number.manager.ts","../../../projects/uni-manager/type/string.manager.ts","../../../projects/uni-manager/type/uni-manager-type.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 in formati standardizzati.\r\n */\r\nexport class UniTypeDateManager {\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 (Number.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","/**\r\n * Utility per la gestione e formattazione di valori numerici.\r\n */\r\nexport class UniTypeNumberManager {\r\n /** Applica il padding a un numero o una stringa */\r\n static toPad(value: number | string | null | undefined, count: number, character = '0'): string {\r\n // Se il valore è null/undefined, riempiamo l'intero campo con il carattere scelto\r\n if (value === null || value === undefined) {\r\n return ''.padStart(count, character);\r\n }\r\n\r\n // Convertiamo in stringa e applichiamo il padding\r\n return value.toString().padStart(count, character);\r\n }\r\n\r\n /** Formatta un numero in una versione leggibile (es: 1000 -> 1K, 1000000 -> 1M) */\r\n static toTruncateAndAdUdm(value: number, decimalDigits = 0, maxIntegerDigits = 3): string {\r\n // Nessun limite impostato o numero inferiore alla soglia definita\r\n if (Math.abs(value) < Math.pow(10, maxIntegerDigits)) {\r\n return value.toFixed(decimalDigits);\r\n }\r\n\r\n // Definizione delle scale di riduzione per grandi numeri\r\n const scales = [\r\n { threshold: 1e12, suffix: 'T' }, // Trilioni\r\n { threshold: 1e9, suffix: 'B' }, // Miliardi\r\n { threshold: 1e6, suffix: 'M' }, // Milioni\r\n { threshold: 1e3, suffix: 'K' }, // Migliaia\r\n ];\r\n\r\n // Itera dalla scala più grande alla più piccola per trovare la soglia corretta\r\n for (const { threshold, suffix } of scales) {\r\n if (Math.abs(value) >= threshold) {\r\n const reduced = value / threshold;\r\n\r\n // parseFloat(toFixed()) rimuove gli zeri decimali superflui (es: 1.50 -> 1.5)\r\n // aggiungendo poi il relativo suffisso (K, M, B, T)\r\n return Number.parseFloat(reduced.toFixed(decimalDigits)).toString() + suffix;\r\n }\r\n }\r\n\r\n // Fallback: se il numero è grande ma non rientra nelle scale (caso raro con la logica attuale)\r\n return value.toFixed(decimalDigits);\r\n }\r\n}\r\n","/**\r\n * Utility per la manipolazione di stringhe\r\n */\r\nexport class UniTypeStringManager {\r\n /** Converte una stringa in formato lblPascalCase (es. \"user_id\" -> \"lblUserId\") */\r\n static toLabelize(key: string | null | undefined, prefix = 'lbl'): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Unisce il prefisso\r\n return prefix + UniTypeStringManager.toPascalCase(fixedKey);\r\n }\r\n\r\n /** Converte una stringa in PascalCase (es. \"user_id\" -> \"UserId\") */\r\n static toPascalCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = UniTypeStringManager.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // Converte in PascalCase\r\n const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);\r\n\r\n return pascalCased;\r\n }\r\n\r\n /** Converte una stringa in camelCase (es. \"user_id\" -> \"userId\") */\r\n static toCamelCase(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n // Normalizza e pulisce\r\n const parts = UniTypeStringManager.splitString(fixedKey);\r\n if (parts.length === 0) return '';\r\n\r\n // La prima parola resta minuscola, le successive PascalCase\r\n const first = parts[0].toLowerCase();\r\n const rest = parts.slice(1);\r\n return first + UniTypeStringManager.toPascalCaseParts(rest);\r\n }\r\n\r\n /** Capitalizza solo la prima lettera della stringa */\r\n static toCapitalize(key: string | null | undefined): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n const fixedKey = key.trim();\r\n\r\n return fixedKey.charAt(0).toUpperCase() + fixedKey.slice(1);\r\n }\r\n\r\n /** Sostituisce sotto-stringhe all'interno della stringa */\r\n static toReplace(\r\n key: string | null | undefined,\r\n values: { searchValue: string; replaceValue: string }[],\r\n ): string {\r\n // Se vuoto restituisce vuoto\r\n if (!key) return '';\r\n\r\n // Pulizia chiave\r\n let fixedKey = key.trim();\r\n\r\n for (const value of values) {\r\n fixedKey = fixedKey.replaceAll(value.searchValue, value.replaceValue);\r\n }\r\n\r\n return fixedKey;\r\n }\r\n\r\n /* ----------------- Utils ----------------- */\r\n private static splitString(key: string): string[] {\r\n return (\r\n key\r\n // Pulisce eventuali caratteri di separazione rimasti in testa (es. \"_tab_name\" -> \"tab_name\")\r\n .replace(/^[-_\\s]+/, '')\r\n\r\n // Isola il CamelCase inserendo un underscore tra minuscole e maiuscole (es. \"userId\" -> \"user_Id\")\r\n .replaceAll(/([a-z])([A-Z])/g, '$1_$2')\r\n\r\n // Isola gli acronimi attaccati a parole Normali (es. \"VARAna\" -> \"VAR_Ana\" grazie alla minuscola \"na\")\r\n .replaceAll(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\r\n\r\n // Applica il taglio definitivo usando come riferimento i trattini, gli underscore e gli spazi\r\n .split(/[-_\\s]+/)\r\n\r\n // Rimuove dall'array finale eventuali stringhe vuote generate da separatori consecutivi\r\n .filter(Boolean)\r\n );\r\n }\r\n\r\n private static toPascalCaseParts(parts: string[]): string {\r\n return parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join('');\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;AAGG;MACU,kBAAkB,CAAA;IAC7B,OAAO,UAAU,CAAC,IAAsC,EAAA;AACtD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE;AAEpB,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC;QAExB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAAE,YAAA,OAAO,EAAE;AAExC,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE;AAC5B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEhD,QAAA,OAAO,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,EAAE;IAClC;AACD;;AClBD;;AAEG;MACU,oBAAoB,CAAA;;IAE/B,OAAO,KAAK,CAAC,KAAyC,EAAE,KAAa,EAAE,SAAS,GAAG,GAAG,EAAA;;QAEpF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;YACzC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;QACtC;;QAGA,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IACpD;;IAGA,OAAO,kBAAkB,CAAC,KAAa,EAAE,aAAa,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,EAAA;;AAE9E,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE;AACpD,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QACrC;;AAGA,QAAA,MAAM,MAAM,GAAG;YACb,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;YAChC,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;YAC/B,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;SAChC;;QAGD,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE;YAC1C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE;AAChC,gBAAA,MAAM,OAAO,GAAG,KAAK,GAAG,SAAS;;;AAIjC,gBAAA,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,MAAM;YAC9E;QACF;;AAGA,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;IACrC;AACD;;AC5CD;;AAEG;MACU,oBAAoB,CAAA;;AAE/B,IAAA,OAAO,UAAU,CAAC,GAA8B,EAAE,MAAM,GAAG,KAAK,EAAA;;AAE9D,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,OAAO,MAAM,GAAG,oBAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC7D;;IAGA,OAAO,YAAY,CAAC,GAA8B,EAAA;;AAEhD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;QAGjC,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEjE,QAAA,OAAO,WAAW;IACpB;;IAGA,OAAO,WAAW,CAAC,GAA8B,EAAA;;AAE/C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;;QAG3B,MAAM,KAAK,GAAG,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC;AACxD,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;;QAGjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3B,OAAO,KAAK,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC;IAC7D;;IAGA,OAAO,YAAY,CAAC,GAA8B,EAAA;;AAEhD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;AAE3B,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D;;AAGA,IAAA,OAAO,SAAS,CACd,GAA8B,EAC9B,MAAuD,EAAA;;AAGvD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;;AAGnB,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE;AAEzB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC;QACvE;AAEA,QAAA,OAAO,QAAQ;IACjB;;IAGQ,OAAO,WAAW,CAAC,GAAW,EAAA;AACpC,QAAA,QACE;;AAEG,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE;;AAGtB,aAAA,UAAU,CAAC,iBAAiB,EAAE,OAAO;;AAGrC,aAAA,UAAU,CAAC,uBAAuB,EAAE,OAAO;;aAG3C,KAAK,CAAC,SAAS;;AAGf,aAAA,MAAM,CAAC,OAAO,CAAC;IAEtB;IAEQ,OAAO,iBAAiB,CAAC,KAAe,EAAA;AAC9C,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;IACjG;AACD;;ACzGD;;AAEG;;;;"}
|
package/fesm2022/uni-manager.mjs
CHANGED
|
@@ -12,7 +12,7 @@ class UniErrorManager {
|
|
|
12
12
|
/* ------------------------------------------------------------------------------- */
|
|
13
13
|
/** Restituisce se lo store ha chiamate in attesa di risposta o meno */
|
|
14
14
|
static get errors$() {
|
|
15
|
-
return
|
|
15
|
+
return UniErrorManager.store$.pipe(map((x) => Array.from(x.entries(), ([id, error]) => ({ ...error, id }))), distinctUntilChanged((prev, curr) => {
|
|
16
16
|
if (prev.length !== curr.length)
|
|
17
17
|
return false;
|
|
18
18
|
return prev.every((err, index) => err.id === curr[index].id && err.count === curr[index].count);
|
|
@@ -24,10 +24,10 @@ class UniErrorManager {
|
|
|
24
24
|
/** Store privato (Subject) */
|
|
25
25
|
static { this.store = new BehaviorSubject(new Map()); }
|
|
26
26
|
/** Store pubblico (Observable) */
|
|
27
|
-
static { this.store$ =
|
|
27
|
+
static { this.store$ = UniErrorManager.store.asObservable(); }
|
|
28
28
|
/** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */
|
|
29
29
|
static get currentValue() {
|
|
30
|
-
return
|
|
30
|
+
return UniErrorManager.store.getValue();
|
|
31
31
|
}
|
|
32
32
|
/* ------------------------------------------------------------------------------- */
|
|
33
33
|
/* -------------------------------- Metodi: store -------------------------------- */
|
|
@@ -38,7 +38,7 @@ class UniErrorManager {
|
|
|
38
38
|
*/
|
|
39
39
|
static add(id, error) {
|
|
40
40
|
// Recupera l'ultimo stato (Map)
|
|
41
|
-
const oldMap =
|
|
41
|
+
const oldMap = UniErrorManager.currentValue;
|
|
42
42
|
// Tenta di recuperare l'oggetto corrente
|
|
43
43
|
const oldItem = oldMap.get(id);
|
|
44
44
|
// Crea il nuovo oggetto aggiornando contatore e portando il timestamp al momento attuale
|
|
@@ -51,14 +51,14 @@ class UniErrorManager {
|
|
|
51
51
|
const newMap = new Map(oldMap);
|
|
52
52
|
newMap.set(id, newItemMap);
|
|
53
53
|
// Aggiorna il nuovo stato notificando l'observer
|
|
54
|
-
|
|
54
|
+
UniErrorManager.store.next(newMap);
|
|
55
55
|
}
|
|
56
56
|
/**
|
|
57
57
|
* Rimuove un errore tramite ID
|
|
58
58
|
*/
|
|
59
59
|
static remove(id) {
|
|
60
60
|
// Recupera l'ultimo stato (Map)
|
|
61
|
-
const oldMap =
|
|
61
|
+
const oldMap = UniErrorManager.currentValue;
|
|
62
62
|
// Controllo: se non è presente l'item allora termina
|
|
63
63
|
if (!oldMap.has(id))
|
|
64
64
|
return;
|
|
@@ -66,7 +66,7 @@ class UniErrorManager {
|
|
|
66
66
|
const newMap = new Map(oldMap);
|
|
67
67
|
newMap.delete(id);
|
|
68
68
|
// Aggiorna il nuovo stato notificando l'observer
|
|
69
|
-
|
|
69
|
+
UniErrorManager.store.next(newMap);
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* Svuota completamente la lista degli errori
|
|
@@ -75,7 +75,7 @@ class UniErrorManager {
|
|
|
75
75
|
// Crea una nuova istanza della Map
|
|
76
76
|
const newMap = new Map();
|
|
77
77
|
// Aggiorna il nuovo stato notificando l'observer
|
|
78
|
-
|
|
78
|
+
UniErrorManager.store.next(newMap);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
@@ -92,7 +92,7 @@ class UniFileManager {
|
|
|
92
92
|
return;
|
|
93
93
|
newWindow.document.title = data.name;
|
|
94
94
|
// Crea l'iframe e lo aggiunge al body della nuova finestra
|
|
95
|
-
const iframe =
|
|
95
|
+
const iframe = UniFileManager.createIframe(newWindow.document, data.url, '100%', '100%');
|
|
96
96
|
newWindow.document.body.style.margin = '0';
|
|
97
97
|
newWindow.document.body.append(iframe);
|
|
98
98
|
// Rimuove l'oggetto URL dalla memoria dopo un tempo congruo per il caricamento
|
|
@@ -106,7 +106,7 @@ class UniFileManager {
|
|
|
106
106
|
if (!data || !data.url)
|
|
107
107
|
return;
|
|
108
108
|
// Crea l'iframe come elemento fisso e nascosto (dimensioni zero)
|
|
109
|
-
const iframe =
|
|
109
|
+
const iframe = UniFileManager.createIframe(document, data.url, '0', '0');
|
|
110
110
|
iframe.style.position = 'fixed';
|
|
111
111
|
iframe.style.bottom = '0';
|
|
112
112
|
document.body.append(iframe);
|
|
@@ -601,7 +601,7 @@ class UniHttpManager {
|
|
|
601
601
|
/* ------------------------------------------------------------------------------- */
|
|
602
602
|
/** Restituisce se lo store ha chiamate in attesa di risposta o meno */
|
|
603
603
|
static get hasWaitingRequests$() {
|
|
604
|
-
return
|
|
604
|
+
return UniHttpManager.store$.pipe(map((requestMap) => {
|
|
605
605
|
for (const request of requestMap.values()) {
|
|
606
606
|
if (request.pendingCount > 0)
|
|
607
607
|
return true;
|
|
@@ -615,10 +615,10 @@ class UniHttpManager {
|
|
|
615
615
|
/** Store privato (Subject) */
|
|
616
616
|
static { this.store = new BehaviorSubject(new Map()); }
|
|
617
617
|
/** Store pubblico (Observable) */
|
|
618
|
-
static { this.store$ =
|
|
618
|
+
static { this.store$ = UniHttpManager.store.asObservable(); }
|
|
619
619
|
/** Ottiene lo stato attuale della Map senza dover sottoscrivere l'observable */
|
|
620
620
|
static get currentValue() {
|
|
621
|
-
return
|
|
621
|
+
return UniHttpManager.store.getValue();
|
|
622
622
|
}
|
|
623
623
|
/* ------------------------------------------------------------------------------- */
|
|
624
624
|
/* -------------------------------- Metodi: setup -------------------------------- */
|
|
@@ -628,8 +628,9 @@ class UniHttpManager {
|
|
|
628
628
|
* Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
|
|
629
629
|
*/
|
|
630
630
|
static setup(hostname, port) {
|
|
631
|
-
|
|
632
|
-
|
|
631
|
+
UniHttpManager.hostname = hostname;
|
|
632
|
+
UniHttpManager.port = port;
|
|
633
|
+
console.log(UniHttpManager.hostname, UniHttpManager.port);
|
|
633
634
|
}
|
|
634
635
|
/* ------------------------------------------------------------------------------- */
|
|
635
636
|
/* -------------------------------- Metodi: CRUD --------------------------------- */
|
|
@@ -645,7 +646,8 @@ class UniHttpManager {
|
|
|
645
646
|
method: 'GET',
|
|
646
647
|
};
|
|
647
648
|
/* API */
|
|
648
|
-
|
|
649
|
+
console.log('read$', UniHttpManager.hostname, UniHttpManager.port);
|
|
650
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
649
651
|
return http$(url, 'one', config, () => executeHttp(url, initCustom)).pipe(tap((res) => {
|
|
650
652
|
if (Array.isArray(res) && config.toast === undefined) {
|
|
651
653
|
UniToastManager$1.show({
|
|
@@ -676,7 +678,8 @@ class UniHttpManager {
|
|
|
676
678
|
toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
|
|
677
679
|
};
|
|
678
680
|
/* API */
|
|
679
|
-
|
|
681
|
+
console.log('create$', UniHttpManager.hostname, UniHttpManager.port);
|
|
682
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
680
683
|
return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
|
|
681
684
|
}
|
|
682
685
|
/**
|
|
@@ -698,7 +701,7 @@ class UniHttpManager {
|
|
|
698
701
|
toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
|
|
699
702
|
};
|
|
700
703
|
/* API */
|
|
701
|
-
const url = getUrl(
|
|
704
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
702
705
|
return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
|
|
703
706
|
}
|
|
704
707
|
/**
|
|
@@ -717,7 +720,7 @@ class UniHttpManager {
|
|
|
717
720
|
toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
|
|
718
721
|
};
|
|
719
722
|
/* API */
|
|
720
|
-
const url = getUrl(
|
|
723
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
721
724
|
return http$(url, 'one', configCustom, () => executeHttp(url, initCustom));
|
|
722
725
|
}
|
|
723
726
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -734,7 +737,7 @@ class UniHttpManager {
|
|
|
734
737
|
method: 'GET',
|
|
735
738
|
};
|
|
736
739
|
/* API */
|
|
737
|
-
const url = getUrl(
|
|
740
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
738
741
|
return http$(url, 'image', config, () => executeBlob(url, initCustom));
|
|
739
742
|
}
|
|
740
743
|
/**
|
|
@@ -753,7 +756,7 @@ class UniHttpManager {
|
|
|
753
756
|
toast: config.hasToast === false ? undefined : (config.toast ?? CONFIG_TOAST_DEFAULT),
|
|
754
757
|
};
|
|
755
758
|
/* API */
|
|
756
|
-
const url = getUrl(
|
|
759
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
757
760
|
return http$(url, 'file', configCustom, () => executeBlob(url, initCustom));
|
|
758
761
|
}
|
|
759
762
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -770,7 +773,7 @@ class UniHttpManager {
|
|
|
770
773
|
method: 'GET',
|
|
771
774
|
};
|
|
772
775
|
/* API */
|
|
773
|
-
const url = getUrl(
|
|
776
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
774
777
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
775
778
|
}
|
|
776
779
|
/**
|
|
@@ -786,7 +789,7 @@ class UniHttpManager {
|
|
|
786
789
|
body: JSON.stringify(body),
|
|
787
790
|
};
|
|
788
791
|
/* API */
|
|
789
|
-
const url = getUrl(
|
|
792
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
790
793
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
791
794
|
}
|
|
792
795
|
/**
|
|
@@ -806,7 +809,7 @@ class UniHttpManager {
|
|
|
806
809
|
initCustom.body = JSON.stringify(body);
|
|
807
810
|
}
|
|
808
811
|
/* API */
|
|
809
|
-
const url = getUrl(
|
|
812
|
+
const url = getUrl(UniHttpManager.hostname, UniHttpManager.port, config);
|
|
810
813
|
return httpPolling$(url, config, () => executeHttp(url, initCustom));
|
|
811
814
|
}
|
|
812
815
|
}
|
|
@@ -826,19 +829,19 @@ class UniLocaleManager {
|
|
|
826
829
|
/* ------------------------------------------------------------------------------- */
|
|
827
830
|
/** Restituisce il codice lingua corrente */
|
|
828
831
|
static get locale() {
|
|
829
|
-
return
|
|
832
|
+
return UniLocaleManager._locale;
|
|
830
833
|
}
|
|
831
834
|
/** Restituisce l'array contenente tutti i codici locale supportati.*/
|
|
832
835
|
static get localesSupported() {
|
|
833
|
-
return
|
|
836
|
+
return UniLocaleManager._localesSupported;
|
|
834
837
|
}
|
|
835
838
|
/** Restituisce solo la lingua (es. 'it') */
|
|
836
839
|
static get language() {
|
|
837
|
-
return
|
|
840
|
+
return UniLocaleManager._locale.split('-')[0];
|
|
838
841
|
}
|
|
839
842
|
/** Restituisce solo il paese (es. 'IT') */
|
|
840
843
|
static get region() {
|
|
841
|
-
const parts =
|
|
844
|
+
const parts = UniLocaleManager._locale.split('-');
|
|
842
845
|
return parts.length > 1 ? parts[1] : '';
|
|
843
846
|
}
|
|
844
847
|
/* ------------------------------------------------------------------------------- */
|
|
@@ -847,10 +850,10 @@ class UniLocaleManager {
|
|
|
847
850
|
/** Store privato (Subject) */
|
|
848
851
|
static { this.store = new BehaviorSubject({}); }
|
|
849
852
|
/** Store pubblico (Observable) */
|
|
850
|
-
static { this.store$ =
|
|
853
|
+
static { this.store$ = UniLocaleManager.store.asObservable(); }
|
|
851
854
|
/** Ottiene il dizionario attuale senza sottoscrizione */
|
|
852
855
|
static get currentValue() {
|
|
853
|
-
return
|
|
856
|
+
return UniLocaleManager.store.getValue();
|
|
854
857
|
}
|
|
855
858
|
/* ------------------------------------------------------------------------------- */
|
|
856
859
|
/* -------------------------------- Metodi: setup -------------------------------- */
|
|
@@ -860,19 +863,19 @@ class UniLocaleManager {
|
|
|
860
863
|
* Deve essere chiamato prima di effettuare qualsiasi richiesta HTTP.
|
|
861
864
|
*/
|
|
862
865
|
static setup(locale, prefix) {
|
|
863
|
-
|
|
864
|
-
|
|
866
|
+
UniLocaleManager._locale = locale ?? 'en-US';
|
|
867
|
+
UniLocaleManager._prefix = prefix;
|
|
865
868
|
}
|
|
866
869
|
/** Imposta l'elenco dei codici lingua supportati dall'applicazione */
|
|
867
870
|
static setLocalesSupported(locales) {
|
|
868
|
-
|
|
871
|
+
UniLocaleManager._localesSupported = locales ?? [];
|
|
869
872
|
}
|
|
870
873
|
/**
|
|
871
874
|
* Aggiorna lo store locale con il dizionario delle traduzioni fornito.
|
|
872
875
|
* Se viene passato undefined, lo store viene inizializzato come oggetto vuoto.
|
|
873
876
|
*/
|
|
874
877
|
static setTranslations(translations) {
|
|
875
|
-
|
|
878
|
+
UniLocaleManager.store.next(translations ?? {});
|
|
876
879
|
}
|
|
877
880
|
/* ------------------------------------------------------------------------------- */
|
|
878
881
|
/* ----------------------------- Metodi: traduzioni ------------------------------ */
|
|
@@ -889,9 +892,9 @@ class UniLocaleManager {
|
|
|
889
892
|
const rootKeyParts = keyParts.filter((p) => p.toLowerCase() !== prefix.toLowerCase());
|
|
890
893
|
const cleanKey = rootKeyParts.length > 0 ? rootKeyParts.join('') : undefined;
|
|
891
894
|
const capitalizedKey = cleanKey ? cleanKey.charAt(0).toUpperCase() + cleanKey.slice(1) : '';
|
|
892
|
-
const finalKey = `${
|
|
895
|
+
const finalKey = `${UniLocaleManager._prefix ?? ''}${prefix}${capitalizedKey}`;
|
|
893
896
|
// Cerca la chiave in minuscolo (standardizzazione)
|
|
894
|
-
let translation =
|
|
897
|
+
let translation = UniLocaleManager.currentValue?.[finalKey.toLowerCase()];
|
|
895
898
|
// Log e fallback se la traduzione manca
|
|
896
899
|
if (!translation) {
|
|
897
900
|
console.warn(`Translation missing for key: ${finalKey}`);
|
|
@@ -900,7 +903,9 @@ class UniLocaleManager {
|
|
|
900
903
|
// Interpolazione variabili
|
|
901
904
|
if (params) {
|
|
902
905
|
for (const [key, value] of Object.entries(params)) {
|
|
903
|
-
const displayValue = value instanceof Date
|
|
906
|
+
const displayValue = value instanceof Date
|
|
907
|
+
? value.toLocaleDateString(UniLocaleManager._locale)
|
|
908
|
+
: String(value);
|
|
904
909
|
translation = translation.replaceAll(`{{${key}}}`, displayValue);
|
|
905
910
|
}
|
|
906
911
|
}
|
|
@@ -917,14 +922,14 @@ class UniLocaleManager {
|
|
|
917
922
|
const [label, ...params] = keyWithParams.split(splitChar);
|
|
918
923
|
// Se non ci sono parametri, esegui una traduzione semplice
|
|
919
924
|
if (params.length === 0) {
|
|
920
|
-
return
|
|
925
|
+
return UniLocaleManager.translate(label);
|
|
921
926
|
}
|
|
922
927
|
// Mappa i parametri in un oggetto di interpolazione: { inlineParam0: val, inlineParam1: val, ... }
|
|
923
928
|
const interpolationParameters = {};
|
|
924
929
|
for (const [index, val] of params.entries()) {
|
|
925
930
|
interpolationParameters[`param${index}`] = val;
|
|
926
931
|
}
|
|
927
|
-
return
|
|
932
|
+
return UniLocaleManager.translate(label, 'lbl', interpolationParameters);
|
|
928
933
|
}
|
|
929
934
|
/* ------------------------------------------------------------------------------- */
|
|
930
935
|
/* ------------------------------- Metodi: numeri -------------------------------- */
|
|
@@ -934,7 +939,7 @@ class UniLocaleManager {
|
|
|
934
939
|
* Disabilita i separatori delle migliaia e forza un numero fisso di decimali.
|
|
935
940
|
*/
|
|
936
941
|
static toStringNumber(value, decimal) {
|
|
937
|
-
return new Intl.NumberFormat(
|
|
942
|
+
return new Intl.NumberFormat(UniLocaleManager._locale, {
|
|
938
943
|
useGrouping: true,
|
|
939
944
|
minimumFractionDigits: decimal,
|
|
940
945
|
maximumFractionDigits: decimal,
|
|
@@ -956,7 +961,9 @@ class UniLocaleManager {
|
|
|
956
961
|
return '';
|
|
957
962
|
}
|
|
958
963
|
// Controllo: locale da forzare
|
|
959
|
-
const locale = force &&
|
|
964
|
+
const locale = force && UniLocaleManager._locale.startsWith(force.oldLang)
|
|
965
|
+
? force.newLocale
|
|
966
|
+
: UniLocaleManager._locale;
|
|
960
967
|
switch (mode) {
|
|
961
968
|
case 'date': {
|
|
962
969
|
return dt.toLocaleDateString(locale);
|
|
@@ -980,7 +987,7 @@ class UniToastManager {
|
|
|
980
987
|
* Inizializza il manager con una serie di operazioni
|
|
981
988
|
*/
|
|
982
989
|
static setup(operations) {
|
|
983
|
-
|
|
990
|
+
UniToastManager.manager = operations;
|
|
984
991
|
}
|
|
985
992
|
/* ------------------------------------------------------------------------------- */
|
|
986
993
|
/* -------------------------------- Metodi: show --------------------------------- */
|
|
@@ -992,7 +999,7 @@ class UniToastManager {
|
|
|
992
999
|
/* Messaggio tradotto */
|
|
993
1000
|
const msg = UniLocaleManager$1.translate(config.label, 'toast', config.params);
|
|
994
1001
|
const msgFixed = `${config.prefix ?? ''}${msg}${config.suffix ?? ''}`;
|
|
995
|
-
|
|
1002
|
+
UniToastManager.manager[config.type ?? 'info'](msgFixed, config);
|
|
996
1003
|
}
|
|
997
1004
|
/**
|
|
998
1005
|
* Mostra un toast di successo basato su una risposta HTTP e una label di traduzione.
|
|
@@ -1018,7 +1025,7 @@ class UniToastManager {
|
|
|
1018
1025
|
}
|
|
1019
1026
|
}
|
|
1020
1027
|
/* Messaggio tradotto */
|
|
1021
|
-
|
|
1028
|
+
UniToastManager.show({ ...config, params: allParams });
|
|
1022
1029
|
}
|
|
1023
1030
|
}
|
|
1024
1031
|
|
|
@@ -1092,7 +1099,7 @@ class UniTypeStringManager {
|
|
|
1092
1099
|
// Pulizia chiave
|
|
1093
1100
|
const fixedKey = key.trim();
|
|
1094
1101
|
// Unisce il prefisso
|
|
1095
|
-
return prefix +
|
|
1102
|
+
return prefix + UniTypeStringManager.toPascalCase(fixedKey);
|
|
1096
1103
|
}
|
|
1097
1104
|
/** Converte una stringa in PascalCase (es. "user_id" -> "UserId") */
|
|
1098
1105
|
static toPascalCase(key) {
|
|
@@ -1102,11 +1109,11 @@ class UniTypeStringManager {
|
|
|
1102
1109
|
// Pulizia chiave
|
|
1103
1110
|
const fixedKey = key.trim();
|
|
1104
1111
|
// Normalizza e pulisce
|
|
1105
|
-
const parts =
|
|
1112
|
+
const parts = UniTypeStringManager.splitString(fixedKey);
|
|
1106
1113
|
if (parts.length === 0)
|
|
1107
1114
|
return '';
|
|
1108
1115
|
// Converte in PascalCase
|
|
1109
|
-
const pascalCased =
|
|
1116
|
+
const pascalCased = UniTypeStringManager.toPascalCaseParts(parts);
|
|
1110
1117
|
return pascalCased;
|
|
1111
1118
|
}
|
|
1112
1119
|
/** Converte una stringa in camelCase (es. "user_id" -> "userId") */
|
|
@@ -1117,13 +1124,13 @@ class UniTypeStringManager {
|
|
|
1117
1124
|
// Pulizia chiave
|
|
1118
1125
|
const fixedKey = key.trim();
|
|
1119
1126
|
// Normalizza e pulisce
|
|
1120
|
-
const parts =
|
|
1127
|
+
const parts = UniTypeStringManager.splitString(fixedKey);
|
|
1121
1128
|
if (parts.length === 0)
|
|
1122
1129
|
return '';
|
|
1123
1130
|
// La prima parola resta minuscola, le successive PascalCase
|
|
1124
1131
|
const first = parts[0].toLowerCase();
|
|
1125
1132
|
const rest = parts.slice(1);
|
|
1126
|
-
return first +
|
|
1133
|
+
return first + UniTypeStringManager.toPascalCaseParts(rest);
|
|
1127
1134
|
}
|
|
1128
1135
|
/** Capitalizza solo la prima lettera della stringa */
|
|
1129
1136
|
static toCapitalize(key) {
|