@lukso/core 0.1.0-dev.1d32611 → 0.1.0-dev.59b5f0c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-FR74YPGJ.cjs → chunk-CAAADNRV.cjs} +7 -7
- package/dist/{chunk-FR74YPGJ.cjs.map → chunk-CAAADNRV.cjs.map} +1 -1
- package/dist/{chunk-RM42NG7E.cjs → chunk-FPGRD5VJ.cjs} +20 -2
- package/dist/chunk-FPGRD5VJ.cjs.map +1 -0
- package/dist/{chunk-SV4TVR2K.js → chunk-OV3EP7EX.js} +2 -2
- package/dist/{chunk-4TNWG4ME.js → chunk-QS57YHLU.js} +20 -2
- package/dist/chunk-QS57YHLU.js.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.js +2 -2
- package/dist/mixins/index.cjs +3 -3
- package/dist/mixins/index.js +2 -2
- package/dist/mixins/intl.cjs +3 -3
- package/dist/mixins/intl.js +2 -2
- package/dist/services/index.cjs +2 -2
- package/dist/services/index.js +1 -1
- package/dist/services/intl.cjs +2 -2
- package/dist/services/intl.d.cts +3 -2
- package/dist/services/intl.d.ts +3 -2
- package/dist/services/intl.js +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -2
- package/src/services/__tests__/intl.spec.ts +2 -18
- package/src/services/intl.ts +18 -4
- package/dist/chunk-4TNWG4ME.js.map +0 -1
- package/dist/chunk-RM42NG7E.cjs.map +0 -1
- /package/dist/{chunk-SV4TVR2K.js.map → chunk-OV3EP7EX.js.map} +0 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkFPGRD5VJcjs = require('./chunk-FPGRD5VJ.cjs');
|
|
7
7
|
|
|
8
8
|
// src/mixins/intl.ts
|
|
9
9
|
var _signalscore = require('@preact/signals-core');
|
|
@@ -35,7 +35,7 @@ function withIntlService(Base) {
|
|
|
35
35
|
}
|
|
36
36
|
connectedCallback() {
|
|
37
37
|
super.connectedCallback();
|
|
38
|
-
let intl =
|
|
38
|
+
let intl = _chunkFPGRD5VJcjs.getIntlService.call(void 0, );
|
|
39
39
|
if (!intl) {
|
|
40
40
|
intl = _nullishCoalesce(this.setupLocalIntl(), () => ( null));
|
|
41
41
|
}
|
|
@@ -58,12 +58,12 @@ function withIntlService(Base) {
|
|
|
58
58
|
* Subclasses can override this to customize initialization
|
|
59
59
|
*/
|
|
60
60
|
setupLocalIntl() {
|
|
61
|
-
const intlService =
|
|
62
|
-
Object.assign(
|
|
61
|
+
const intlService = _chunkFPGRD5VJcjs.createIntlService.call(void 0,
|
|
62
|
+
Object.assign(_chunkFPGRD5VJcjs.defaultConfig, {
|
|
63
63
|
messages: en_US_default
|
|
64
64
|
})
|
|
65
65
|
);
|
|
66
|
-
|
|
66
|
+
_chunkFPGRD5VJcjs.setIntlService.call(void 0, intlService);
|
|
67
67
|
return intlService;
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
@@ -74,7 +74,7 @@ function withIntlService(Base) {
|
|
|
74
74
|
console.warn("No translation key provided to formatMessage");
|
|
75
75
|
return "";
|
|
76
76
|
}
|
|
77
|
-
const intl =
|
|
77
|
+
const intl = _chunkFPGRD5VJcjs.getIntlService.call(void 0, );
|
|
78
78
|
return _nullishCoalesce(_optionalChain([intl, 'optionalAccess', _5 => _5.formatMessage, 'call', _6 => _6(key, options)]), () => ( key));
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -84,4 +84,4 @@ function withIntlService(Base) {
|
|
|
84
84
|
|
|
85
85
|
|
|
86
86
|
exports.withIntlService = withIntlService;
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
87
|
+
//# sourceMappingURL=chunk-CAAADNRV.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-CAAADNRV.cjs","../src/mixins/intl.ts","../../translations/en_US.json"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACDA,mDAAuB;ADGvB;AACA;AEVA,IAAA,cAAA,EAAA;AAAA,EACE,uBAAA,EAA2B,WAAA;AAAA,EAC3B,mBAAA,EAAuB,uBAAA;AAAA,EACvB,2BAAA,EAA+B,gBAAA;AAAA,EAC/B,iCAAA,EAAqC,wEAAA;AAAA,EACrC,8BAAA,EAAkC,gBAAA;AAAA,EAClC,qBAAA,EAAyB,gCAAA;AAAA,EACzB,gBAAA,EAAoB,IAAA;AAAA,EACpB,uBAAA,EAA2B,WAAA;AAAA,EAC3B,4BAAA,EAAgC,mBAAA;AAAA,EAChC,uBAAA,EAA2B,qBAAA;AAAA,EAC3B,yBAAA,EAA6B,oCAAA;AAAA,EAC7B,kCAAA,EAAsC,oBAAA;AAAA,EACtC,6CAAA,EAAiD,mBAAA;AAAA,EACjD,uCAAA,EAA2C;AAC7C,CAAA;AFYA;AACA;ACgBO,SAAS,eAAA,CAA6C,IAAA,EAAc;AAAA,EAEzE,MAAM,MAAA,QAAe,KAAa;AAAA,IAAlC,WAAA,CAAA,EAAA;AAAA,MAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACE,MAAA,IAAA,CAAU,gBAAA,EAA4C,KAAA,CAAA;AAAA,IAAA;AAAA,IAEtD,iBAAA,CAAA,EAA0B;AACxB,MAAA,KAAA,CAAM,iBAAA,CAAkB,CAAA;AAGxB,MAAA,IAAI,KAAA,EAA2B,8CAAA,CAAe;AAG9C,MAAA,GAAA,CAAI,CAAC,IAAA,EAAM;AACT,QAAA,KAAA,mBAAO,IAAA,CAAK,cAAA,CAAe,CAAA,UAAK,MAAA;AAAA,MAClC;AAEA,MAAA,GAAA,CAAI,IAAA,EAAM;AACR,QAAA,IAAA,CAAK,gBAAA,EAAkB,iCAAA,CAAO,EAAA,GAAM;AAElC,0BAAA,IAAA,2BAAM,aAAA,qBAAc,OAAA;AACpB,UAAA,IAAA,CAAK,aAAA,CAAc,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH;AAGA,sBAAA,IAAA,6BAAM,uBAAA,mBAAwB,aAA0B,GAAA;AAAA,IAC1D;AAAA,IAEA,oBAAA,CAAA,EAA6B;AAC3B,MAAA,KAAA,CAAM,oBAAA,CAAqB,CAAA;AAG3B,MAAA,GAAA,CAAI,OAAO,IAAA,CAAK,gBAAA,IAAoB,UAAA,EAAY;AAC9C,QAAA,IAAA,CAAK,eAAA,CAAgB,CAAA;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAMU,cAAA,CAAA,EAA0C;AAClD,MAAA,MAAM,YAAA,EAAc,iDAAA;AAAA,QAClB,MAAA,CAAO,MAAA,CAAO,+BAAA,EAAe;AAAA,UAC3B,QAAA,EAAU;AAAA,QACZ,CAAC;AAAA,MACH,CAAA;AACA,MAAA,8CAAA,WAA0B,CAAA;AAC1B,MAAA,OAAO,WAAA;AAAA,IACT;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA,CAAc,GAAA,EAAc,OAAA,EAA0C;AACpE,MAAA,GAAA,CAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAA,CAAQ,IAAA,CAAK,8CAA8C,CAAA;AAC3D,QAAA,OAAO,EAAA;AAAA,MACT;AAEA,MAAA,MAAM,KAAA,EAAO,8CAAA,CAAe;AAC5B,MAAA,wCAAO,IAAA,6BAAM,aAAA,mBAAc,GAAA,EAAK,OAAO,GAAA,UAAK,KAAA;AAAA,IAC9C;AAAA,EACF;AAGA,EAAA,OAAO,KAAA;AACT;AD7BA;AACA;AACE;AACF,0CAAC","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-CAAADNRV.cjs","sourcesContent":[null,"/**\n * Internationalization Mixin\n *\n * Mixin to add internationalization service to a Lit component\n */\n\nimport { effect } from '@preact/signals-core'\nimport type { LitElement } from 'lit'\nimport englishTranslations from '../../../translations/en_US.json'\nimport {\n createIntlService,\n defaultConfig,\n getIntlService,\n type IntlService,\n setIntlService,\n} from '../services/intl.js'\n\n/**\n * Mixin to add internationalization service to a Lit component\n *\n * Provides access to the global intl service with reactive locale changes.\n * Automatically subscribes to locale changes and triggers re-renders.\n *\n * The component will use the global intl service if available, or create a local one.\n * This follows the singleton pattern for the global service while allowing flexibility.\n *\n * @typeParam T - The Lit component class being extended\n * @returns Extended class with intl service capabilities\n *\n * @example\n * ```typescript\n * import { LitElement, html } from 'lit';\n * import { customElement } from 'lit/decorators.js';\n * import { withIntlService } from '@lukso/core/mixins';\n *\n * @customElement('my-component')\n * export class MyComponent extends withIntlService(LitElement) {\n * render() {\n * return html\\`<p>\\${this.formatMessage('app.welcome')}</p>\\`;\n * }\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function withIntlService<T extends typeof LitElement>(Base: T): any {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n class Mixin extends (Base as any) {\n protected unsubscribeIntl: (() => void) | undefined = undefined\n\n connectedCallback(): void {\n super.connectedCallback()\n\n // Subscribe to intl changes via signal\n let intl: IntlService | null = getIntlService()\n\n // When no intl is provided by host app we initialize our own\n if (!intl) {\n intl = this.setupLocalIntl() ?? null\n }\n\n if (intl) {\n this.unsubscribeIntl = effect(() => {\n // Access the signal to track changes\n intl?.localeChanged.value\n this.requestUpdate()\n })\n }\n\n // Set fallback for missing translations\n intl?.setFallbackTranslations(englishTranslations as any)\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback()\n\n // Unsubscribe from intl changes\n if (typeof this.unsubscribeIntl === 'function') {\n this.unsubscribeIntl()\n }\n }\n\n /**\n * Setup a local intl service with default configuration\n * Subclasses can override this to customize initialization\n */\n protected setupLocalIntl(): IntlService | undefined {\n const intlService = createIntlService(\n Object.assign(defaultConfig, {\n messages: englishTranslations,\n })\n )\n setIntlService(intlService)\n return intlService\n }\n\n /**\n * Format message using the intl service\n */\n formatMessage(key?: string, options?: Record<string, string>): string {\n if (!key) {\n console.warn('No translation key provided to formatMessage')\n return ''\n }\n\n const intl = getIntlService()\n return intl?.formatMessage(key, options) ?? key\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Mixin as any\n}\n","{\n \"connect_modal_try_again\": \"Try again\",\n \"connect_modal_title\": \"Let’s log you in\",\n \"connect_modal_qr_code_title\": \"Scan to log in\",\n \"connect_modal_qr_code_description\": \"Scan the below QR code with the Universal Profile mobile app to log in\",\n \"connect_modal_other_connectors\": \"Connect Wallet\",\n \"connect_modal_or_info\": \"Log in with a different wallet\",\n \"connect_modal_or\": \"Or\",\n \"connect_modal_installed\": \"INSTALLED\",\n \"connect_modal_failed_to_load\": \"Failed to load...\",\n \"connect_modal_eoa_title\": \"Connect your Wallet\",\n \"connect_modal_description\": \"Log in with your Universal Profile\",\n \"connect_modal_connectors_up_mobile\": \"Mobile Application\",\n \"connect_modal_connectors_up_browser_extension\": \"Browser Extension\",\n \"connect_modal_connectors_passkey_wallet\": \"Passkey Wallet\"\n}"]}
|
|
@@ -9,7 +9,25 @@ var formatNumberDefaultOptions = {
|
|
|
9
9
|
var defaultConfig = {
|
|
10
10
|
locale: "en-US",
|
|
11
11
|
messages: {},
|
|
12
|
-
formats: {
|
|
12
|
+
formats: {
|
|
13
|
+
date: {
|
|
14
|
+
shortDateTime: {
|
|
15
|
+
weekday: "short",
|
|
16
|
+
// Wed
|
|
17
|
+
month: "short",
|
|
18
|
+
// Dec
|
|
19
|
+
day: "numeric",
|
|
20
|
+
// 3
|
|
21
|
+
year: "numeric",
|
|
22
|
+
// 2025
|
|
23
|
+
hour: "2-digit",
|
|
24
|
+
// 16
|
|
25
|
+
minute: "2-digit",
|
|
26
|
+
// 07
|
|
27
|
+
hour12: false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
13
31
|
};
|
|
14
32
|
var intlService = null;
|
|
15
33
|
function createIntlService(config = defaultConfig) {
|
|
@@ -103,4 +121,4 @@ function clearIntlService() {
|
|
|
103
121
|
|
|
104
122
|
|
|
105
123
|
exports.defaultConfig = defaultConfig; exports.createIntlService = createIntlService; exports.setIntlService = setIntlService; exports.getIntlService = getIntlService; exports.clearIntlService = clearIntlService;
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
124
|
+
//# sourceMappingURL=chunk-FPGRD5VJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-FPGRD5VJ.cjs","../src/services/intl.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-FPGRD5VJ.cjs","sourcesContent":[null,"/**\n * Internationalization Service\n *\n * Provides locale-aware formatting for messages, numbers, dates, and times.\n */\n\nimport {\n createIntl,\n type FormatNumberOptions,\n type IntlConfig,\n} from '@formatjs/intl'\nimport { signal } from '@preact/signals-core'\n\nexport type TimestampFormat = 'shortDateTime'\n\n/**\n * Translation messages object type\n * Maps translation keys to their corresponding string values\n */\nexport type IntlMessages = Record<string, string>\n\n/**\n * Default format number options\n * @see https://github.com/formatjs/formatjs/blob/main/packages/ecma402-abstract/types/number.ts\n */\nconst formatNumberDefaultOptions = {\n maximumFractionDigits: 18,\n}\n\n/**\n * Intl service interface\n */\nexport interface IntlService {\n /**\n * Translate a string based on the key\n *\n * @param key - translation key\n * @param options - optional options for formatMessage (for variable interpolation)\n * @returns - translated string\n */\n formatMessage: (key: string, options?: Record<string, string>) => string\n\n /**\n * Number formatting based on the locale\n *\n * @param value - number to format\n * @param options - options for formatNumber\n * @returns - formatted number\n */\n formatNumber: (\n value: number | string | bigint,\n options?: FormatNumberOptions\n ) => string\n\n /**\n * Date formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted date\n */\n formatDate: (date?: string | number | Date) => string | undefined\n\n /**\n * Time formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted time\n */\n formatTime: (date?: string | number | Date) => string | undefined\n\n /**\n * Timestamp formatting based on the locale\n *\n * @param timestamp - UNIX timestamp in seconds or milliseconds\n * @param options - formatting options (predefined format name or custom Intl.DateTimeFormat options)\n * @returns - formatted date & time string\n *\n * @example\n * ```typescript\n * const intl = getIntlService();\n *\n * // Use predefined shortDateTime format\n * intl.formatTimestamp(1733251200, 'shortDateTime'); // \"Wed, Dec 3, 2025, 16:07\"\n *\n * // Use custom format options\n * intl.formatTimestamp(1733251200, { year: '2-digit', month: '2-digit', day: '2-digit' });\n * // \"12/03/25\"\n *\n * // No options (basic format)\n * intl.formatTimestamp(1733251200);\n * ```\n */\n formatTimestamp: (\n timestamp?: number | string,\n options?: TimestampFormat | Intl.DateTimeFormatOptions\n ) => string\n\n /**\n * Change the locale and optionally update messages\n *\n * @param locale - new locale code (e.g., 'en-US', 'de-DE')\n * @param messages - optional new messages object for the locale\n */\n setLocale: (locale: string, messages?: IntlMessages) => void\n\n /**\n * Get the current locale\n *\n * @returns - current locale code (e.g., 'en-US', 'de-DE')\n */\n getLocale: () => string\n\n /**\n * Set fallback translations to use when a translation key is missing\n * Useful when the host app's intl service doesn't have all translations\n *\n * @param fallbackMessages - translations to use as fallback\n *\n * @example\n * ```typescript\n * // After intl service is initialized by host app\n * intl.setFallbackTranslations(defaultMessages);\n * ```\n */\n setFallbackTranslations: (fallbackMessages: IntlMessages) => void\n\n /**\n * Signal that tracks locale changes\n * Use this signal to reactively update UI when locale changes\n */\n localeChanged: { value: number }\n}\n\n/**\n * Default configuration for intl\n */\nexport const defaultConfig: IntlConfig = {\n locale: 'en-US',\n messages: {},\n formats: {\n date: {\n shortDateTime: {\n weekday: 'short', // Wed\n month: 'short', // Dec\n day: 'numeric', // 3\n year: 'numeric', // 2025\n hour: '2-digit', // 16\n minute: '2-digit', // 07\n hour12: false,\n },\n },\n },\n}\n\n/**\n * Global intl service instance\n */\nlet intlService: IntlService | null = null\n\n/**\n * Create a new intl service instance\n *\n * @param config - intl configuration with locale and messages\n * @returns IntlService instance with formatting methods\n *\n * @example\n * ```typescript\n * import { createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService({\n * locale: 'en-US',\n * messages: customMessages,\n * });\n *\n * const translated = intl.formatMessage('app.title');\n * const formatted = intl.formatNumber(1234.56);\n * const currentLocale = intl.getLocale(); // 'en-US'\n *\n * // Change locale\n * intl.setLocale('de-DE', germanMessages);\n * console.log(intl.getLocale()); // 'de-DE'\n * ```\n */\nexport function createIntlService(\n config: IntlConfig = defaultConfig\n): IntlService {\n let currentConfig = { ...defaultConfig, ...config }\n let intl = createIntl({ ...currentConfig, defaultLocale: 'en-US' })\n const localeChanged = signal(0)\n let fallbackMessages: IntlMessages = {}\n\n return {\n formatMessage: (key: string, options?: Record<string, string>): string => {\n try {\n const result = intl.formatMessage({ id: key }, options)\n\n if (result && result !== key) {\n return result\n }\n\n // If no translation found, check fallback\n if (fallbackMessages[key]) {\n return fallbackMessages[key]\n }\n\n return key\n } catch {\n // On error, try fallback\n return fallbackMessages[key] || key\n }\n },\n\n formatNumber: (\n value: number | string | bigint,\n options: FormatNumberOptions = {}\n ): string => {\n if (value === null || value === undefined) {\n return '0'\n }\n\n const _value =\n typeof value === 'string' ? Number.parseFloat(value) : value\n\n const mergedOptions = {\n ...formatNumberDefaultOptions,\n ...options,\n }\n\n return intl.formatNumber(_value as number, mergedOptions) || ''\n },\n\n formatDate: (date?: string | number | Date): string => {\n return intl.formatDate(date)\n },\n\n formatTime: (date?: string | number | Date): string => {\n return intl.formatTime(date)\n },\n\n formatTimestamp: (\n timestamp?: number | string,\n options?: TimestampFormat | Intl.DateTimeFormatOptions\n ): string => {\n if (!timestamp) return ''\n\n const time = typeof timestamp === 'string' ? Number(timestamp) : timestamp\n const date =\n time < 10_000_000_000\n ? new Date(time * 1000) // seconds\n : new Date(time) // milliseconds\n\n // Handle predefined format\n if (typeof options === 'string') {\n const dateTimeOptions = currentConfig.formats?.date?.[\n options as TimestampFormat\n ] as Intl.DateTimeFormatOptions\n\n if (dateTimeOptions) {\n return new Intl.DateTimeFormat(\n currentConfig.locale,\n dateTimeOptions\n ).format(date)\n }\n\n // Fallback to default format if predefined format not found\n return intl.formatDate(date) || ''\n }\n\n // For normal @formatjs/intl options\n return intl.formatDate(date, options) || ''\n },\n\n setLocale: (locale: string, messages?: IntlMessages): void => {\n currentConfig = {\n ...currentConfig,\n locale,\n messages: messages || currentConfig.messages,\n }\n intl = createIntl({\n ...currentConfig,\n defaultLocale: 'en-US',\n })\n localeChanged.value += 1\n },\n\n getLocale: (): string => {\n return currentConfig.locale\n },\n\n setFallbackTranslations: (fallbackMessagesInput: IntlMessages): void => {\n fallbackMessages = fallbackMessagesInput\n },\n\n localeChanged,\n }\n}\n\n/**\n * Set the global intl service\n * Call this once from your app initialization\n *\n * @param service - IntlService instance\n *\n * @example\n * ```typescript\n * import { setIntlService, createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService(config);\n * setIntlService(intl);\n * ```\n */\nexport function setIntlService(service: IntlService): void {\n intlService = service\n}\n\n/**\n * Get the current global intl service\n * Returns null if no service has been set\n *\n * @example\n * ```typescript\n * import { getIntlService } from '@lukso/core/services/intl';\n *\n * const intl = getIntlService();\n * if (intl) {\n * console.log(intl.getLocale());\n * }\n * ```\n */\nexport function getIntlService(): IntlService | null {\n return intlService\n}\n\n/**\n * Clear the global intl service\n * Useful for testing or cleanup\n */\nexport function clearIntlService(): void {\n intlService = null\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
defaultConfig,
|
|
4
4
|
getIntlService,
|
|
5
5
|
setIntlService
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QS57YHLU.js";
|
|
7
7
|
|
|
8
8
|
// src/mixins/intl.ts
|
|
9
9
|
import { effect } from "@preact/signals-core";
|
|
@@ -84,4 +84,4 @@ function withIntlService(Base) {
|
|
|
84
84
|
export {
|
|
85
85
|
withIntlService
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
87
|
+
//# sourceMappingURL=chunk-OV3EP7EX.js.map
|
|
@@ -9,7 +9,25 @@ var formatNumberDefaultOptions = {
|
|
|
9
9
|
var defaultConfig = {
|
|
10
10
|
locale: "en-US",
|
|
11
11
|
messages: {},
|
|
12
|
-
formats: {
|
|
12
|
+
formats: {
|
|
13
|
+
date: {
|
|
14
|
+
shortDateTime: {
|
|
15
|
+
weekday: "short",
|
|
16
|
+
// Wed
|
|
17
|
+
month: "short",
|
|
18
|
+
// Dec
|
|
19
|
+
day: "numeric",
|
|
20
|
+
// 3
|
|
21
|
+
year: "numeric",
|
|
22
|
+
// 2025
|
|
23
|
+
hour: "2-digit",
|
|
24
|
+
// 16
|
|
25
|
+
minute: "2-digit",
|
|
26
|
+
// 07
|
|
27
|
+
hour12: false
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
13
31
|
};
|
|
14
32
|
var intlService = null;
|
|
15
33
|
function createIntlService(config = defaultConfig) {
|
|
@@ -103,4 +121,4 @@ export {
|
|
|
103
121
|
getIntlService,
|
|
104
122
|
clearIntlService
|
|
105
123
|
};
|
|
106
|
-
//# sourceMappingURL=chunk-
|
|
124
|
+
//# sourceMappingURL=chunk-QS57YHLU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/services/intl.ts"],"sourcesContent":["/**\n * Internationalization Service\n *\n * Provides locale-aware formatting for messages, numbers, dates, and times.\n */\n\nimport {\n createIntl,\n type FormatNumberOptions,\n type IntlConfig,\n} from '@formatjs/intl'\nimport { signal } from '@preact/signals-core'\n\nexport type TimestampFormat = 'shortDateTime'\n\n/**\n * Translation messages object type\n * Maps translation keys to their corresponding string values\n */\nexport type IntlMessages = Record<string, string>\n\n/**\n * Default format number options\n * @see https://github.com/formatjs/formatjs/blob/main/packages/ecma402-abstract/types/number.ts\n */\nconst formatNumberDefaultOptions = {\n maximumFractionDigits: 18,\n}\n\n/**\n * Intl service interface\n */\nexport interface IntlService {\n /**\n * Translate a string based on the key\n *\n * @param key - translation key\n * @param options - optional options for formatMessage (for variable interpolation)\n * @returns - translated string\n */\n formatMessage: (key: string, options?: Record<string, string>) => string\n\n /**\n * Number formatting based on the locale\n *\n * @param value - number to format\n * @param options - options for formatNumber\n * @returns - formatted number\n */\n formatNumber: (\n value: number | string | bigint,\n options?: FormatNumberOptions\n ) => string\n\n /**\n * Date formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted date\n */\n formatDate: (date?: string | number | Date) => string | undefined\n\n /**\n * Time formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted time\n */\n formatTime: (date?: string | number | Date) => string | undefined\n\n /**\n * Timestamp formatting based on the locale\n *\n * @param timestamp - UNIX timestamp in seconds or milliseconds\n * @param options - formatting options (predefined format name or custom Intl.DateTimeFormat options)\n * @returns - formatted date & time string\n *\n * @example\n * ```typescript\n * const intl = getIntlService();\n *\n * // Use predefined shortDateTime format\n * intl.formatTimestamp(1733251200, 'shortDateTime'); // \"Wed, Dec 3, 2025, 16:07\"\n *\n * // Use custom format options\n * intl.formatTimestamp(1733251200, { year: '2-digit', month: '2-digit', day: '2-digit' });\n * // \"12/03/25\"\n *\n * // No options (basic format)\n * intl.formatTimestamp(1733251200);\n * ```\n */\n formatTimestamp: (\n timestamp?: number | string,\n options?: TimestampFormat | Intl.DateTimeFormatOptions\n ) => string\n\n /**\n * Change the locale and optionally update messages\n *\n * @param locale - new locale code (e.g., 'en-US', 'de-DE')\n * @param messages - optional new messages object for the locale\n */\n setLocale: (locale: string, messages?: IntlMessages) => void\n\n /**\n * Get the current locale\n *\n * @returns - current locale code (e.g., 'en-US', 'de-DE')\n */\n getLocale: () => string\n\n /**\n * Set fallback translations to use when a translation key is missing\n * Useful when the host app's intl service doesn't have all translations\n *\n * @param fallbackMessages - translations to use as fallback\n *\n * @example\n * ```typescript\n * // After intl service is initialized by host app\n * intl.setFallbackTranslations(defaultMessages);\n * ```\n */\n setFallbackTranslations: (fallbackMessages: IntlMessages) => void\n\n /**\n * Signal that tracks locale changes\n * Use this signal to reactively update UI when locale changes\n */\n localeChanged: { value: number }\n}\n\n/**\n * Default configuration for intl\n */\nexport const defaultConfig: IntlConfig = {\n locale: 'en-US',\n messages: {},\n formats: {\n date: {\n shortDateTime: {\n weekday: 'short', // Wed\n month: 'short', // Dec\n day: 'numeric', // 3\n year: 'numeric', // 2025\n hour: '2-digit', // 16\n minute: '2-digit', // 07\n hour12: false,\n },\n },\n },\n}\n\n/**\n * Global intl service instance\n */\nlet intlService: IntlService | null = null\n\n/**\n * Create a new intl service instance\n *\n * @param config - intl configuration with locale and messages\n * @returns IntlService instance with formatting methods\n *\n * @example\n * ```typescript\n * import { createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService({\n * locale: 'en-US',\n * messages: customMessages,\n * });\n *\n * const translated = intl.formatMessage('app.title');\n * const formatted = intl.formatNumber(1234.56);\n * const currentLocale = intl.getLocale(); // 'en-US'\n *\n * // Change locale\n * intl.setLocale('de-DE', germanMessages);\n * console.log(intl.getLocale()); // 'de-DE'\n * ```\n */\nexport function createIntlService(\n config: IntlConfig = defaultConfig\n): IntlService {\n let currentConfig = { ...defaultConfig, ...config }\n let intl = createIntl({ ...currentConfig, defaultLocale: 'en-US' })\n const localeChanged = signal(0)\n let fallbackMessages: IntlMessages = {}\n\n return {\n formatMessage: (key: string, options?: Record<string, string>): string => {\n try {\n const result = intl.formatMessage({ id: key }, options)\n\n if (result && result !== key) {\n return result\n }\n\n // If no translation found, check fallback\n if (fallbackMessages[key]) {\n return fallbackMessages[key]\n }\n\n return key\n } catch {\n // On error, try fallback\n return fallbackMessages[key] || key\n }\n },\n\n formatNumber: (\n value: number | string | bigint,\n options: FormatNumberOptions = {}\n ): string => {\n if (value === null || value === undefined) {\n return '0'\n }\n\n const _value =\n typeof value === 'string' ? Number.parseFloat(value) : value\n\n const mergedOptions = {\n ...formatNumberDefaultOptions,\n ...options,\n }\n\n return intl.formatNumber(_value as number, mergedOptions) || ''\n },\n\n formatDate: (date?: string | number | Date): string => {\n return intl.formatDate(date)\n },\n\n formatTime: (date?: string | number | Date): string => {\n return intl.formatTime(date)\n },\n\n formatTimestamp: (\n timestamp?: number | string,\n options?: TimestampFormat | Intl.DateTimeFormatOptions\n ): string => {\n if (!timestamp) return ''\n\n const time = typeof timestamp === 'string' ? Number(timestamp) : timestamp\n const date =\n time < 10_000_000_000\n ? new Date(time * 1000) // seconds\n : new Date(time) // milliseconds\n\n // Handle predefined format\n if (typeof options === 'string') {\n const dateTimeOptions = currentConfig.formats?.date?.[\n options as TimestampFormat\n ] as Intl.DateTimeFormatOptions\n\n if (dateTimeOptions) {\n return new Intl.DateTimeFormat(\n currentConfig.locale,\n dateTimeOptions\n ).format(date)\n }\n\n // Fallback to default format if predefined format not found\n return intl.formatDate(date) || ''\n }\n\n // For normal @formatjs/intl options\n return intl.formatDate(date, options) || ''\n },\n\n setLocale: (locale: string, messages?: IntlMessages): void => {\n currentConfig = {\n ...currentConfig,\n locale,\n messages: messages || currentConfig.messages,\n }\n intl = createIntl({\n ...currentConfig,\n defaultLocale: 'en-US',\n })\n localeChanged.value += 1\n },\n\n getLocale: (): string => {\n return currentConfig.locale\n },\n\n setFallbackTranslations: (fallbackMessagesInput: IntlMessages): void => {\n fallbackMessages = fallbackMessagesInput\n },\n\n localeChanged,\n }\n}\n\n/**\n * Set the global intl service\n * Call this once from your app initialization\n *\n * @param service - IntlService instance\n *\n * @example\n * ```typescript\n * import { setIntlService, createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService(config);\n * setIntlService(intl);\n * ```\n */\nexport function setIntlService(service: IntlService): void {\n intlService = service\n}\n\n/**\n * Get the current global intl service\n * Returns null if no service has been set\n *\n * @example\n * ```typescript\n * import { getIntlService } from '@lukso/core/services/intl';\n *\n * const intl = getIntlService();\n * if (intl) {\n * console.log(intl.getLocale());\n * }\n * ```\n */\nexport function getIntlService(): IntlService | null {\n return intlService\n}\n\n/**\n * Clear the global intl service\n * Useful for testing or cleanup\n */\nexport function clearIntlService(): void {\n intlService = null\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var _chunkCC3LFUYYcjs = require('./chunk-CC3LFUYY.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkCAAADNRVcjs = require('./chunk-CAAADNRV.cjs');
|
|
8
8
|
require('./chunk-DFMMMF62.cjs');
|
|
9
9
|
|
|
10
10
|
|
|
@@ -15,7 +15,7 @@ var _chunkNJQVWIZLcjs = require('./chunk-NJQVWIZL.cjs');
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _chunkFPGRD5VJcjs = require('./chunk-FPGRD5VJ.cjs');
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
|
|
@@ -33,5 +33,5 @@ var _chunkMBIRTPNMcjs = require('./chunk-MBIRTPNM.cjs');
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
exports.EXTENSION_STORE_LINKS = _chunkMBIRTPNMcjs.EXTENSION_STORE_LINKS; exports.browserInfo = _chunkMBIRTPNMcjs.browserInfo; exports.clearIntlService =
|
|
36
|
+
exports.EXTENSION_STORE_LINKS = _chunkMBIRTPNMcjs.EXTENSION_STORE_LINKS; exports.browserInfo = _chunkMBIRTPNMcjs.browserInfo; exports.clearIntlService = _chunkFPGRD5VJcjs.clearIntlService; exports.createIntlService = _chunkFPGRD5VJcjs.createIntlService; exports.defaultConfig = _chunkFPGRD5VJcjs.defaultConfig; exports.deviceService = _chunkNJQVWIZLcjs.deviceService; exports.getIntlService = _chunkFPGRD5VJcjs.getIntlService; exports.setIntlService = _chunkFPGRD5VJcjs.setIntlService; exports.slug = _chunkMBIRTPNMcjs.slug; exports.withDeviceService = _chunkCC3LFUYYcjs.withDeviceService; exports.withIntlService = _chunkCAAADNRVcjs.withIntlService;
|
|
37
37
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-3WGYJTN4.js";
|
|
5
5
|
import {
|
|
6
6
|
withIntlService
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OV3EP7EX.js";
|
|
8
8
|
import "./chunk-LEL6VWU4.js";
|
|
9
9
|
import {
|
|
10
10
|
deviceService
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
defaultConfig,
|
|
16
16
|
getIntlService,
|
|
17
17
|
setIntlService
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-QS57YHLU.js";
|
|
19
19
|
import {
|
|
20
20
|
EXTENSION_STORE_LINKS,
|
|
21
21
|
browserInfo,
|
package/dist/mixins/index.cjs
CHANGED
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
var _chunkCC3LFUYYcjs = require('../chunk-CC3LFUYY.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkCAAADNRVcjs = require('../chunk-CAAADNRV.cjs');
|
|
8
8
|
require('../chunk-NJQVWIZL.cjs');
|
|
9
|
-
require('../chunk-
|
|
9
|
+
require('../chunk-FPGRD5VJ.cjs');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
exports.withDeviceService = _chunkCC3LFUYYcjs.withDeviceService; exports.withIntlService =
|
|
13
|
+
exports.withDeviceService = _chunkCC3LFUYYcjs.withDeviceService; exports.withIntlService = _chunkCAAADNRVcjs.withIntlService;
|
|
14
14
|
//# sourceMappingURL=index.cjs.map
|
package/dist/mixins/index.js
CHANGED
|
@@ -4,9 +4,9 @@ import {
|
|
|
4
4
|
} from "../chunk-3WGYJTN4.js";
|
|
5
5
|
import {
|
|
6
6
|
withIntlService
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-OV3EP7EX.js";
|
|
8
8
|
import "../chunk-X2QNFZU7.js";
|
|
9
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-QS57YHLU.js";
|
|
10
10
|
export {
|
|
11
11
|
withDeviceService,
|
|
12
12
|
withIntlService
|
package/dist/mixins/intl.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var _chunkCAAADNRVcjs = require('../chunk-CAAADNRV.cjs');
|
|
4
|
+
require('../chunk-FPGRD5VJ.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
exports.withIntlService =
|
|
7
|
+
exports.withIntlService = _chunkCAAADNRVcjs.withIntlService;
|
|
8
8
|
//# sourceMappingURL=intl.cjs.map
|
package/dist/mixins/intl.js
CHANGED
package/dist/services/index.cjs
CHANGED
|
@@ -8,7 +8,7 @@ var _chunkNJQVWIZLcjs = require('../chunk-NJQVWIZL.cjs');
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var _chunkFPGRD5VJcjs = require('../chunk-FPGRD5VJ.cjs');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
@@ -16,5 +16,5 @@ var _chunkRM42NG7Ecjs = require('../chunk-RM42NG7E.cjs');
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
exports.clearIntlService =
|
|
19
|
+
exports.clearIntlService = _chunkFPGRD5VJcjs.clearIntlService; exports.createIntlService = _chunkFPGRD5VJcjs.createIntlService; exports.defaultConfig = _chunkFPGRD5VJcjs.defaultConfig; exports.deviceService = _chunkNJQVWIZLcjs.deviceService; exports.getIntlService = _chunkFPGRD5VJcjs.getIntlService; exports.setIntlService = _chunkFPGRD5VJcjs.setIntlService;
|
|
20
20
|
//# sourceMappingURL=index.cjs.map
|
package/dist/services/index.js
CHANGED
package/dist/services/intl.cjs
CHANGED
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkFPGRD5VJcjs = require('../chunk-FPGRD5VJ.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.clearIntlService =
|
|
14
|
+
exports.clearIntlService = _chunkFPGRD5VJcjs.clearIntlService; exports.createIntlService = _chunkFPGRD5VJcjs.createIntlService; exports.defaultConfig = _chunkFPGRD5VJcjs.defaultConfig; exports.getIntlService = _chunkFPGRD5VJcjs.getIntlService; exports.setIntlService = _chunkFPGRD5VJcjs.setIntlService;
|
|
15
15
|
//# sourceMappingURL=intl.cjs.map
|
package/dist/services/intl.d.cts
CHANGED
|
@@ -6,6 +6,7 @@ import { FormatNumberOptions, IntlConfig } from '@formatjs/intl';
|
|
|
6
6
|
* Provides locale-aware formatting for messages, numbers, dates, and times.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
type TimestampFormat = 'shortDateTime';
|
|
9
10
|
/**
|
|
10
11
|
* Translation messages object type
|
|
11
12
|
* Maps translation keys to their corresponding string values
|
|
@@ -67,7 +68,7 @@ interface IntlService {
|
|
|
67
68
|
* intl.formatTimestamp(1733251200);
|
|
68
69
|
* ```
|
|
69
70
|
*/
|
|
70
|
-
formatTimestamp: (timestamp?: number | string, options?: Intl.DateTimeFormatOptions
|
|
71
|
+
formatTimestamp: (timestamp?: number | string, options?: TimestampFormat | Intl.DateTimeFormatOptions) => string;
|
|
71
72
|
/**
|
|
72
73
|
* Change the locale and optionally update messages
|
|
73
74
|
*
|
|
@@ -167,4 +168,4 @@ declare function getIntlService(): IntlService | null;
|
|
|
167
168
|
*/
|
|
168
169
|
declare function clearIntlService(): void;
|
|
169
170
|
|
|
170
|
-
export { type IntlMessages, type IntlService, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService };
|
|
171
|
+
export { type IntlMessages, type IntlService, type TimestampFormat, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService };
|
package/dist/services/intl.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { FormatNumberOptions, IntlConfig } from '@formatjs/intl';
|
|
|
6
6
|
* Provides locale-aware formatting for messages, numbers, dates, and times.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
type TimestampFormat = 'shortDateTime';
|
|
9
10
|
/**
|
|
10
11
|
* Translation messages object type
|
|
11
12
|
* Maps translation keys to their corresponding string values
|
|
@@ -67,7 +68,7 @@ interface IntlService {
|
|
|
67
68
|
* intl.formatTimestamp(1733251200);
|
|
68
69
|
* ```
|
|
69
70
|
*/
|
|
70
|
-
formatTimestamp: (timestamp?: number | string, options?: Intl.DateTimeFormatOptions
|
|
71
|
+
formatTimestamp: (timestamp?: number | string, options?: TimestampFormat | Intl.DateTimeFormatOptions) => string;
|
|
71
72
|
/**
|
|
72
73
|
* Change the locale and optionally update messages
|
|
73
74
|
*
|
|
@@ -167,4 +168,4 @@ declare function getIntlService(): IntlService | null;
|
|
|
167
168
|
*/
|
|
168
169
|
declare function clearIntlService(): void;
|
|
169
170
|
|
|
170
|
-
export { type IntlMessages, type IntlService, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService };
|
|
171
|
+
export { type IntlMessages, type IntlService, type TimestampFormat, clearIntlService, createIntlService, defaultConfig, getIntlService, setIntlService };
|
package/dist/services/intl.js
CHANGED
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -237,24 +237,8 @@ describe('Intl service', () => {
|
|
|
237
237
|
expect(result).toBe('December 2, 2024')
|
|
238
238
|
})
|
|
239
239
|
|
|
240
|
-
it('
|
|
241
|
-
const intl = createIntlService({
|
|
242
|
-
locale: 'en-US',
|
|
243
|
-
messages: {},
|
|
244
|
-
formats: {
|
|
245
|
-
date: {
|
|
246
|
-
shortDateTime: {
|
|
247
|
-
weekday: 'short', // Wed
|
|
248
|
-
month: 'short', // Dec
|
|
249
|
-
day: 'numeric', // 3
|
|
250
|
-
year: 'numeric', // 2025
|
|
251
|
-
hour: '2-digit', // 16
|
|
252
|
-
minute: '2-digit', // 07
|
|
253
|
-
hour12: false,
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
},
|
|
257
|
-
})
|
|
240
|
+
it('should use predefined shortDateTime format when specified', () => {
|
|
241
|
+
const intl = createIntlService({ locale: 'en-US', messages: {} })
|
|
258
242
|
const timestamp = 1733144400 // 2024-12-02T14:00:00Z
|
|
259
243
|
const result = intl.formatTimestamp(timestamp, 'shortDateTime')
|
|
260
244
|
expect(result).toBe('Mon, Dec 2, 2024, 13:00')
|
package/src/services/intl.ts
CHANGED
|
@@ -11,6 +11,8 @@ import {
|
|
|
11
11
|
} from '@formatjs/intl'
|
|
12
12
|
import { signal } from '@preact/signals-core'
|
|
13
13
|
|
|
14
|
+
export type TimestampFormat = 'shortDateTime'
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* Translation messages object type
|
|
16
18
|
* Maps translation keys to their corresponding string values
|
|
@@ -90,7 +92,7 @@ export interface IntlService {
|
|
|
90
92
|
*/
|
|
91
93
|
formatTimestamp: (
|
|
92
94
|
timestamp?: number | string,
|
|
93
|
-
options?: Intl.DateTimeFormatOptions
|
|
95
|
+
options?: TimestampFormat | Intl.DateTimeFormatOptions
|
|
94
96
|
) => string
|
|
95
97
|
|
|
96
98
|
/**
|
|
@@ -135,7 +137,19 @@ export interface IntlService {
|
|
|
135
137
|
export const defaultConfig: IntlConfig = {
|
|
136
138
|
locale: 'en-US',
|
|
137
139
|
messages: {},
|
|
138
|
-
formats: {
|
|
140
|
+
formats: {
|
|
141
|
+
date: {
|
|
142
|
+
shortDateTime: {
|
|
143
|
+
weekday: 'short', // Wed
|
|
144
|
+
month: 'short', // Dec
|
|
145
|
+
day: 'numeric', // 3
|
|
146
|
+
year: 'numeric', // 2025
|
|
147
|
+
hour: '2-digit', // 16
|
|
148
|
+
minute: '2-digit', // 07
|
|
149
|
+
hour12: false,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
},
|
|
139
153
|
}
|
|
140
154
|
|
|
141
155
|
/**
|
|
@@ -225,7 +239,7 @@ export function createIntlService(
|
|
|
225
239
|
|
|
226
240
|
formatTimestamp: (
|
|
227
241
|
timestamp?: number | string,
|
|
228
|
-
options?: Intl.DateTimeFormatOptions
|
|
242
|
+
options?: TimestampFormat | Intl.DateTimeFormatOptions
|
|
229
243
|
): string => {
|
|
230
244
|
if (!timestamp) return ''
|
|
231
245
|
|
|
@@ -238,7 +252,7 @@ export function createIntlService(
|
|
|
238
252
|
// Handle predefined format
|
|
239
253
|
if (typeof options === 'string') {
|
|
240
254
|
const dateTimeOptions = currentConfig.formats?.date?.[
|
|
241
|
-
options
|
|
255
|
+
options as TimestampFormat
|
|
242
256
|
] as Intl.DateTimeFormatOptions
|
|
243
257
|
|
|
244
258
|
if (dateTimeOptions) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/intl.ts"],"sourcesContent":["/**\n * Internationalization Service\n *\n * Provides locale-aware formatting for messages, numbers, dates, and times.\n */\n\nimport {\n createIntl,\n type FormatNumberOptions,\n type IntlConfig,\n} from '@formatjs/intl'\nimport { signal } from '@preact/signals-core'\n\n/**\n * Translation messages object type\n * Maps translation keys to their corresponding string values\n */\nexport type IntlMessages = Record<string, string>\n\n/**\n * Default format number options\n * @see https://github.com/formatjs/formatjs/blob/main/packages/ecma402-abstract/types/number.ts\n */\nconst formatNumberDefaultOptions = {\n maximumFractionDigits: 18,\n}\n\n/**\n * Intl service interface\n */\nexport interface IntlService {\n /**\n * Translate a string based on the key\n *\n * @param key - translation key\n * @param options - optional options for formatMessage (for variable interpolation)\n * @returns - translated string\n */\n formatMessage: (key: string, options?: Record<string, string>) => string\n\n /**\n * Number formatting based on the locale\n *\n * @param value - number to format\n * @param options - options for formatNumber\n * @returns - formatted number\n */\n formatNumber: (\n value: number | string | bigint,\n options?: FormatNumberOptions\n ) => string\n\n /**\n * Date formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted date\n */\n formatDate: (date?: string | number | Date) => string | undefined\n\n /**\n * Time formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted time\n */\n formatTime: (date?: string | number | Date) => string | undefined\n\n /**\n * Timestamp formatting based on the locale\n *\n * @param timestamp - UNIX timestamp in seconds or milliseconds\n * @param options - formatting options (predefined format name or custom Intl.DateTimeFormat options)\n * @returns - formatted date & time string\n *\n * @example\n * ```typescript\n * const intl = getIntlService();\n *\n * // Use predefined shortDateTime format\n * intl.formatTimestamp(1733251200, 'shortDateTime'); // \"Wed, Dec 3, 2025, 16:07\"\n *\n * // Use custom format options\n * intl.formatTimestamp(1733251200, { year: '2-digit', month: '2-digit', day: '2-digit' });\n * // \"12/03/25\"\n *\n * // No options (basic format)\n * intl.formatTimestamp(1733251200);\n * ```\n */\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ) => string\n\n /**\n * Change the locale and optionally update messages\n *\n * @param locale - new locale code (e.g., 'en-US', 'de-DE')\n * @param messages - optional new messages object for the locale\n */\n setLocale: (locale: string, messages?: IntlMessages) => void\n\n /**\n * Get the current locale\n *\n * @returns - current locale code (e.g., 'en-US', 'de-DE')\n */\n getLocale: () => string\n\n /**\n * Set fallback translations to use when a translation key is missing\n * Useful when the host app's intl service doesn't have all translations\n *\n * @param fallbackMessages - translations to use as fallback\n *\n * @example\n * ```typescript\n * // After intl service is initialized by host app\n * intl.setFallbackTranslations(defaultMessages);\n * ```\n */\n setFallbackTranslations: (fallbackMessages: IntlMessages) => void\n\n /**\n * Signal that tracks locale changes\n * Use this signal to reactively update UI when locale changes\n */\n localeChanged: { value: number }\n}\n\n/**\n * Default configuration for intl\n */\nexport const defaultConfig: IntlConfig = {\n locale: 'en-US',\n messages: {},\n formats: {},\n}\n\n/**\n * Global intl service instance\n */\nlet intlService: IntlService | null = null\n\n/**\n * Create a new intl service instance\n *\n * @param config - intl configuration with locale and messages\n * @returns IntlService instance with formatting methods\n *\n * @example\n * ```typescript\n * import { createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService({\n * locale: 'en-US',\n * messages: customMessages,\n * });\n *\n * const translated = intl.formatMessage('app.title');\n * const formatted = intl.formatNumber(1234.56);\n * const currentLocale = intl.getLocale(); // 'en-US'\n *\n * // Change locale\n * intl.setLocale('de-DE', germanMessages);\n * console.log(intl.getLocale()); // 'de-DE'\n * ```\n */\nexport function createIntlService(\n config: IntlConfig = defaultConfig\n): IntlService {\n let currentConfig = { ...defaultConfig, ...config }\n let intl = createIntl({ ...currentConfig, defaultLocale: 'en-US' })\n const localeChanged = signal(0)\n let fallbackMessages: IntlMessages = {}\n\n return {\n formatMessage: (key: string, options?: Record<string, string>): string => {\n try {\n const result = intl.formatMessage({ id: key }, options)\n\n if (result && result !== key) {\n return result\n }\n\n // If no translation found, check fallback\n if (fallbackMessages[key]) {\n return fallbackMessages[key]\n }\n\n return key\n } catch {\n // On error, try fallback\n return fallbackMessages[key] || key\n }\n },\n\n formatNumber: (\n value: number | string | bigint,\n options: FormatNumberOptions = {}\n ): string => {\n if (value === null || value === undefined) {\n return '0'\n }\n\n const _value =\n typeof value === 'string' ? Number.parseFloat(value) : value\n\n const mergedOptions = {\n ...formatNumberDefaultOptions,\n ...options,\n }\n\n return intl.formatNumber(_value as number, mergedOptions) || ''\n },\n\n formatDate: (date?: string | number | Date): string => {\n return intl.formatDate(date)\n },\n\n formatTime: (date?: string | number | Date): string => {\n return intl.formatTime(date)\n },\n\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ): string => {\n if (!timestamp) return ''\n\n const time = typeof timestamp === 'string' ? Number(timestamp) : timestamp\n const date =\n time < 10_000_000_000\n ? new Date(time * 1000) // seconds\n : new Date(time) // milliseconds\n\n // Handle predefined format\n if (typeof options === 'string') {\n const dateTimeOptions = currentConfig.formats?.date?.[\n options\n ] as Intl.DateTimeFormatOptions\n\n if (dateTimeOptions) {\n return new Intl.DateTimeFormat(\n currentConfig.locale,\n dateTimeOptions\n ).format(date)\n }\n\n // Fallback to default format if predefined format not found\n return intl.formatDate(date) || ''\n }\n\n // For normal @formatjs/intl options\n return intl.formatDate(date, options) || ''\n },\n\n setLocale: (locale: string, messages?: IntlMessages): void => {\n currentConfig = {\n ...currentConfig,\n locale,\n messages: messages || currentConfig.messages,\n }\n intl = createIntl({\n ...currentConfig,\n defaultLocale: 'en-US',\n })\n localeChanged.value += 1\n },\n\n getLocale: (): string => {\n return currentConfig.locale\n },\n\n setFallbackTranslations: (fallbackMessagesInput: IntlMessages): void => {\n fallbackMessages = fallbackMessagesInput\n },\n\n localeChanged,\n }\n}\n\n/**\n * Set the global intl service\n * Call this once from your app initialization\n *\n * @param service - IntlService instance\n *\n * @example\n * ```typescript\n * import { setIntlService, createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService(config);\n * setIntlService(intl);\n * ```\n */\nexport function setIntlService(service: IntlService): void {\n intlService = service\n}\n\n/**\n * Get the current global intl service\n * Returns null if no service has been set\n *\n * @example\n * ```typescript\n * import { getIntlService } from '@lukso/core/services/intl';\n *\n * const intl = getIntlService();\n * if (intl) {\n * console.log(intl.getLocale());\n * }\n * ```\n */\nexport function getIntlService(): IntlService | null {\n return intlService\n}\n\n/**\n * Clear the global intl service\n * Useful for testing or cleanup\n */\nexport function clearIntlService(): void {\n intlService = null\n}\n"],"mappings":";AAMA;AAAA,EACE;AAAA,OAGK;AACP,SAAS,cAAc;AAYvB,IAAM,6BAA6B;AAAA,EACjC,uBAAuB;AACzB;AA6GO,IAAM,gBAA4B;AAAA,EACvC,QAAQ;AAAA,EACR,UAAU,CAAC;AAAA,EACX,SAAS,CAAC;AACZ;AAKA,IAAI,cAAkC;AA0B/B,SAAS,kBACd,SAAqB,eACR;AACb,MAAI,gBAAgB,EAAE,GAAG,eAAe,GAAG,OAAO;AAClD,MAAI,OAAO,WAAW,EAAE,GAAG,eAAe,eAAe,QAAQ,CAAC;AAClE,QAAM,gBAAgB,OAAO,CAAC;AAC9B,MAAI,mBAAiC,CAAC;AAEtC,SAAO;AAAA,IACL,eAAe,CAAC,KAAa,YAA6C;AACxE,UAAI;AACF,cAAM,SAAS,KAAK,cAAc,EAAE,IAAI,IAAI,GAAG,OAAO;AAEtD,YAAI,UAAU,WAAW,KAAK;AAC5B,iBAAO;AAAA,QACT;AAGA,YAAI,iBAAiB,GAAG,GAAG;AACzB,iBAAO,iBAAiB,GAAG;AAAA,QAC7B;AAEA,eAAO;AAAA,MACT,QAAQ;AAEN,eAAO,iBAAiB,GAAG,KAAK;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,cAAc,CACZ,OACA,UAA+B,CAAC,MACrB;AACX,UAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,eAAO;AAAA,MACT;AAEA,YAAM,SACJ,OAAO,UAAU,WAAW,OAAO,WAAW,KAAK,IAAI;AAEzD,YAAM,gBAAgB;AAAA,QACpB,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAEA,aAAO,KAAK,aAAa,QAAkB,aAAa,KAAK;AAAA,IAC/D;AAAA,IAEA,YAAY,CAAC,SAA0C;AACrD,aAAO,KAAK,WAAW,IAAI;AAAA,IAC7B;AAAA,IAEA,YAAY,CAAC,SAA0C;AACrD,aAAO,KAAK,WAAW,IAAI;AAAA,IAC7B;AAAA,IAEA,iBAAiB,CACf,WACA,YACW;AACX,UAAI,CAAC,UAAW,QAAO;AAEvB,YAAM,OAAO,OAAO,cAAc,WAAW,OAAO,SAAS,IAAI;AACjE,YAAM,OACJ,OAAO,OACH,IAAI,KAAK,OAAO,GAAI,IACpB,IAAI,KAAK,IAAI;AAGnB,UAAI,OAAO,YAAY,UAAU;AAC/B,cAAM,kBAAkB,cAAc,SAAS,OAC7C,OACF;AAEA,YAAI,iBAAiB;AACnB,iBAAO,IAAI,KAAK;AAAA,YACd,cAAc;AAAA,YACd;AAAA,UACF,EAAE,OAAO,IAAI;AAAA,QACf;AAGA,eAAO,KAAK,WAAW,IAAI,KAAK;AAAA,MAClC;AAGA,aAAO,KAAK,WAAW,MAAM,OAAO,KAAK;AAAA,IAC3C;AAAA,IAEA,WAAW,CAAC,QAAgB,aAAkC;AAC5D,sBAAgB;AAAA,QACd,GAAG;AAAA,QACH;AAAA,QACA,UAAU,YAAY,cAAc;AAAA,MACtC;AACA,aAAO,WAAW;AAAA,QAChB,GAAG;AAAA,QACH,eAAe;AAAA,MACjB,CAAC;AACD,oBAAc,SAAS;AAAA,IACzB;AAAA,IAEA,WAAW,MAAc;AACvB,aAAO,cAAc;AAAA,IACvB;AAAA,IAEA,yBAAyB,CAAC,0BAA8C;AACtE,yBAAmB;AAAA,IACrB;AAAA,IAEA;AAAA,EACF;AACF;AAgBO,SAAS,eAAe,SAA4B;AACzD,gBAAc;AAChB;AAgBO,SAAS,iBAAqC;AACnD,SAAO;AACT;AAMO,SAAS,mBAAyB;AACvC,gBAAc;AAChB;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-RM42NG7E.cjs","../src/services/intl.ts"],"names":[],"mappings":"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","file":"/home/runner/work/service-auth-simple/service-auth-simple/packages/core/dist/chunk-RM42NG7E.cjs","sourcesContent":[null,"/**\n * Internationalization Service\n *\n * Provides locale-aware formatting for messages, numbers, dates, and times.\n */\n\nimport {\n createIntl,\n type FormatNumberOptions,\n type IntlConfig,\n} from '@formatjs/intl'\nimport { signal } from '@preact/signals-core'\n\n/**\n * Translation messages object type\n * Maps translation keys to their corresponding string values\n */\nexport type IntlMessages = Record<string, string>\n\n/**\n * Default format number options\n * @see https://github.com/formatjs/formatjs/blob/main/packages/ecma402-abstract/types/number.ts\n */\nconst formatNumberDefaultOptions = {\n maximumFractionDigits: 18,\n}\n\n/**\n * Intl service interface\n */\nexport interface IntlService {\n /**\n * Translate a string based on the key\n *\n * @param key - translation key\n * @param options - optional options for formatMessage (for variable interpolation)\n * @returns - translated string\n */\n formatMessage: (key: string, options?: Record<string, string>) => string\n\n /**\n * Number formatting based on the locale\n *\n * @param value - number to format\n * @param options - options for formatNumber\n * @returns - formatted number\n */\n formatNumber: (\n value: number | string | bigint,\n options?: FormatNumberOptions\n ) => string\n\n /**\n * Date formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted date\n */\n formatDate: (date?: string | number | Date) => string | undefined\n\n /**\n * Time formatting based on the locale\n *\n * @param date - date to format\n * @returns - formatted time\n */\n formatTime: (date?: string | number | Date) => string | undefined\n\n /**\n * Timestamp formatting based on the locale\n *\n * @param timestamp - UNIX timestamp in seconds or milliseconds\n * @param options - formatting options (predefined format name or custom Intl.DateTimeFormat options)\n * @returns - formatted date & time string\n *\n * @example\n * ```typescript\n * const intl = getIntlService();\n *\n * // Use predefined shortDateTime format\n * intl.formatTimestamp(1733251200, 'shortDateTime'); // \"Wed, Dec 3, 2025, 16:07\"\n *\n * // Use custom format options\n * intl.formatTimestamp(1733251200, { year: '2-digit', month: '2-digit', day: '2-digit' });\n * // \"12/03/25\"\n *\n * // No options (basic format)\n * intl.formatTimestamp(1733251200);\n * ```\n */\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ) => string\n\n /**\n * Change the locale and optionally update messages\n *\n * @param locale - new locale code (e.g., 'en-US', 'de-DE')\n * @param messages - optional new messages object for the locale\n */\n setLocale: (locale: string, messages?: IntlMessages) => void\n\n /**\n * Get the current locale\n *\n * @returns - current locale code (e.g., 'en-US', 'de-DE')\n */\n getLocale: () => string\n\n /**\n * Set fallback translations to use when a translation key is missing\n * Useful when the host app's intl service doesn't have all translations\n *\n * @param fallbackMessages - translations to use as fallback\n *\n * @example\n * ```typescript\n * // After intl service is initialized by host app\n * intl.setFallbackTranslations(defaultMessages);\n * ```\n */\n setFallbackTranslations: (fallbackMessages: IntlMessages) => void\n\n /**\n * Signal that tracks locale changes\n * Use this signal to reactively update UI when locale changes\n */\n localeChanged: { value: number }\n}\n\n/**\n * Default configuration for intl\n */\nexport const defaultConfig: IntlConfig = {\n locale: 'en-US',\n messages: {},\n formats: {},\n}\n\n/**\n * Global intl service instance\n */\nlet intlService: IntlService | null = null\n\n/**\n * Create a new intl service instance\n *\n * @param config - intl configuration with locale and messages\n * @returns IntlService instance with formatting methods\n *\n * @example\n * ```typescript\n * import { createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService({\n * locale: 'en-US',\n * messages: customMessages,\n * });\n *\n * const translated = intl.formatMessage('app.title');\n * const formatted = intl.formatNumber(1234.56);\n * const currentLocale = intl.getLocale(); // 'en-US'\n *\n * // Change locale\n * intl.setLocale('de-DE', germanMessages);\n * console.log(intl.getLocale()); // 'de-DE'\n * ```\n */\nexport function createIntlService(\n config: IntlConfig = defaultConfig\n): IntlService {\n let currentConfig = { ...defaultConfig, ...config }\n let intl = createIntl({ ...currentConfig, defaultLocale: 'en-US' })\n const localeChanged = signal(0)\n let fallbackMessages: IntlMessages = {}\n\n return {\n formatMessage: (key: string, options?: Record<string, string>): string => {\n try {\n const result = intl.formatMessage({ id: key }, options)\n\n if (result && result !== key) {\n return result\n }\n\n // If no translation found, check fallback\n if (fallbackMessages[key]) {\n return fallbackMessages[key]\n }\n\n return key\n } catch {\n // On error, try fallback\n return fallbackMessages[key] || key\n }\n },\n\n formatNumber: (\n value: number | string | bigint,\n options: FormatNumberOptions = {}\n ): string => {\n if (value === null || value === undefined) {\n return '0'\n }\n\n const _value =\n typeof value === 'string' ? Number.parseFloat(value) : value\n\n const mergedOptions = {\n ...formatNumberDefaultOptions,\n ...options,\n }\n\n return intl.formatNumber(_value as number, mergedOptions) || ''\n },\n\n formatDate: (date?: string | number | Date): string => {\n return intl.formatDate(date)\n },\n\n formatTime: (date?: string | number | Date): string => {\n return intl.formatTime(date)\n },\n\n formatTimestamp: (\n timestamp?: number | string,\n options?: Intl.DateTimeFormatOptions | string\n ): string => {\n if (!timestamp) return ''\n\n const time = typeof timestamp === 'string' ? Number(timestamp) : timestamp\n const date =\n time < 10_000_000_000\n ? new Date(time * 1000) // seconds\n : new Date(time) // milliseconds\n\n // Handle predefined format\n if (typeof options === 'string') {\n const dateTimeOptions = currentConfig.formats?.date?.[\n options\n ] as Intl.DateTimeFormatOptions\n\n if (dateTimeOptions) {\n return new Intl.DateTimeFormat(\n currentConfig.locale,\n dateTimeOptions\n ).format(date)\n }\n\n // Fallback to default format if predefined format not found\n return intl.formatDate(date) || ''\n }\n\n // For normal @formatjs/intl options\n return intl.formatDate(date, options) || ''\n },\n\n setLocale: (locale: string, messages?: IntlMessages): void => {\n currentConfig = {\n ...currentConfig,\n locale,\n messages: messages || currentConfig.messages,\n }\n intl = createIntl({\n ...currentConfig,\n defaultLocale: 'en-US',\n })\n localeChanged.value += 1\n },\n\n getLocale: (): string => {\n return currentConfig.locale\n },\n\n setFallbackTranslations: (fallbackMessagesInput: IntlMessages): void => {\n fallbackMessages = fallbackMessagesInput\n },\n\n localeChanged,\n }\n}\n\n/**\n * Set the global intl service\n * Call this once from your app initialization\n *\n * @param service - IntlService instance\n *\n * @example\n * ```typescript\n * import { setIntlService, createIntlService } from '@lukso/core/services/intl';\n *\n * const intl = createIntlService(config);\n * setIntlService(intl);\n * ```\n */\nexport function setIntlService(service: IntlService): void {\n intlService = service\n}\n\n/**\n * Get the current global intl service\n * Returns null if no service has been set\n *\n * @example\n * ```typescript\n * import { getIntlService } from '@lukso/core/services/intl';\n *\n * const intl = getIntlService();\n * if (intl) {\n * console.log(intl.getLocale());\n * }\n * ```\n */\nexport function getIntlService(): IntlService | null {\n return intlService\n}\n\n/**\n * Clear the global intl service\n * Useful for testing or cleanup\n */\nexport function clearIntlService(): void {\n intlService = null\n}\n"]}
|
|
File without changes
|