@fluenti/solid 0.5.0 → 0.6.1

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.
Files changed (89) hide show
  1. package/README.md +5 -5
  2. package/dist/components-entry-5CGlUlc5.cjs +2 -0
  3. package/dist/components-entry-5CGlUlc5.cjs.map +1 -0
  4. package/dist/components-entry-C-Df62O-.js +632 -0
  5. package/dist/components-entry-C-Df62O-.js.map +1 -0
  6. package/dist/components-entry.cjs +1 -2
  7. package/dist/components-entry.js +2 -293
  8. package/dist/index.cjs +1 -1
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/index.js +4 -4
  11. package/dist/solid/src/compile-time-t.d.ts.map +1 -0
  12. package/dist/solid/src/compiled.d.ts +43 -0
  13. package/dist/solid/src/compiled.d.ts.map +1 -0
  14. package/dist/solid/src/components/DateTime.d.ts.map +1 -0
  15. package/dist/solid/src/components/NumberFormat.d.ts.map +1 -0
  16. package/dist/{components-entry.d.ts → solid/src/components-entry.d.ts} +1 -1
  17. package/dist/solid/src/components-entry.d.ts.map +1 -0
  18. package/dist/{context.d.ts → solid/src/context.d.ts} +4 -3
  19. package/dist/solid/src/context.d.ts.map +1 -0
  20. package/dist/solid/src/hooks/__useI18n.d.ts.map +1 -0
  21. package/dist/solid/src/index.d.ts +9 -0
  22. package/dist/solid/src/index.d.ts.map +1 -0
  23. package/dist/solid/src/msg.d.ts.map +1 -0
  24. package/dist/solid/src/plain-runtime.d.ts +9 -0
  25. package/dist/solid/src/plain-runtime.d.ts.map +1 -0
  26. package/dist/{plural.d.ts → solid/src/plural.d.ts} +1 -1
  27. package/dist/solid/src/plural.d.ts.map +1 -0
  28. package/dist/solid/src/provider.d.ts.map +1 -0
  29. package/dist/solid/src/rich-dom.d.ts.map +1 -0
  30. package/dist/{select.d.ts → solid/src/select.d.ts} +1 -1
  31. package/dist/solid/src/select.d.ts.map +1 -0
  32. package/dist/solid/src/server.d.ts.map +1 -0
  33. package/dist/solid/src/solid-runtime.d.ts.map +1 -0
  34. package/dist/solid/src/trans.d.ts.map +1 -0
  35. package/dist/solid/src/types.d.ts.map +1 -0
  36. package/dist/solid/src/use-i18n.d.ts.map +1 -0
  37. package/dist/solid/src/vite-plugin.d.ts.map +1 -0
  38. package/dist/vite-plugin.cjs +1 -1
  39. package/dist/vite-plugin.cjs.map +1 -1
  40. package/dist/vite-plugin.js +1 -1
  41. package/dist/vite-plugin.js.map +1 -1
  42. package/package.json +14 -14
  43. package/src/compiled.tsx +158 -0
  44. package/src/components-entry.ts +7 -3
  45. package/src/context.ts +5 -3
  46. package/src/index.ts +11 -10
  47. package/src/plain-runtime.ts +65 -0
  48. package/src/plural.tsx +23 -11
  49. package/src/rich-dom.tsx +1 -2
  50. package/src/select.tsx +16 -5
  51. package/src/solid-runtime.ts +1 -1
  52. package/dist/compile-time-t.d.ts.map +0 -1
  53. package/dist/components/DateTime.d.ts.map +0 -1
  54. package/dist/components/NumberFormat.d.ts.map +0 -1
  55. package/dist/components-entry.cjs.map +0 -1
  56. package/dist/components-entry.d.ts.map +0 -1
  57. package/dist/components-entry.js.map +0 -1
  58. package/dist/context.d.ts.map +0 -1
  59. package/dist/hooks/__useI18n.d.ts.map +0 -1
  60. package/dist/index.d.ts +0 -12
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/msg.d.ts.map +0 -1
  63. package/dist/plural.d.ts.map +0 -1
  64. package/dist/provider.d.ts.map +0 -1
  65. package/dist/rich-dom.d.ts.map +0 -1
  66. package/dist/select.d.ts.map +0 -1
  67. package/dist/server.d.ts.map +0 -1
  68. package/dist/solid-runtime.d.ts.map +0 -1
  69. package/dist/trans.d.ts.map +0 -1
  70. package/dist/types.d.ts.map +0 -1
  71. package/dist/use-i18n-5u9iEPWp.js +0 -204
  72. package/dist/use-i18n-5u9iEPWp.js.map +0 -1
  73. package/dist/use-i18n-B8NgKzjN.cjs +0 -2
  74. package/dist/use-i18n-B8NgKzjN.cjs.map +0 -1
  75. package/dist/use-i18n.d.ts.map +0 -1
  76. package/dist/vite-plugin.d.ts.map +0 -1
  77. /package/dist/{compile-time-t.d.ts → solid/src/compile-time-t.d.ts} +0 -0
  78. /package/dist/{components → solid/src/components}/DateTime.d.ts +0 -0
  79. /package/dist/{components → solid/src/components}/NumberFormat.d.ts +0 -0
  80. /package/dist/{hooks → solid/src/hooks}/__useI18n.d.ts +0 -0
  81. /package/dist/{msg.d.ts → solid/src/msg.d.ts} +0 -0
  82. /package/dist/{provider.d.ts → solid/src/provider.d.ts} +0 -0
  83. /package/dist/{rich-dom.d.ts → solid/src/rich-dom.d.ts} +0 -0
  84. /package/dist/{server.d.ts → solid/src/server.d.ts} +0 -0
  85. /package/dist/{solid-runtime.d.ts → solid/src/solid-runtime.d.ts} +0 -0
  86. /package/dist/{trans.d.ts → solid/src/trans.d.ts} +0 -0
  87. /package/dist/{types.d.ts → solid/src/types.d.ts} +0 -0
  88. /package/dist/{use-i18n.d.ts → solid/src/use-i18n.d.ts} +0 -0
  89. /package/dist/{vite-plugin.d.ts → solid/src/vite-plugin.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-i18n-B8NgKzjN.cjs","names":["createContext","ParentComponent","createFluentiContext","FluentiConfig","FluentiContext","I18nCtx","I18nProvider","props","ctx","_$createComponent","Provider","value","children"],"sources":["../src/context.ts","../src/provider.tsx","../src/use-i18n.ts"],"sourcesContent":["import { createSignal, type Accessor } from 'solid-js'\nimport { createFluentiCore } from '@fluenti/core'\nimport type { FluentiCoreConfig, FluentiCoreConfigFull, Locale, LocalizedString, Messages, CompiledMessage, MessageDescriptor, DateFormatOptions, NumberFormatOptions, DiagnosticsConfig, CustomFormatter } from '@fluenti/core'\n\n/** Chunk loader for lazy locale loading */\nexport type ChunkLoader = (\n locale: string,\n) => Promise<Record<string, CompiledMessage> | { default: Record<string, CompiledMessage> }>\n\ninterface SplitRuntimeModule {\n __switchLocale?: (locale: string) => Promise<void>\n __preloadLocale?: (locale: string) => Promise<void>\n}\n\nconst SPLIT_RUNTIME_KEY = Symbol.for('fluenti.runtime.solid.v1')\n\nfunction getSplitRuntimeModule(): SplitRuntimeModule | null {\n const runtime = (globalThis as Record<PropertyKey, unknown>)[SPLIT_RUNTIME_KEY]\n return typeof runtime === 'object' && runtime !== null\n ? runtime as SplitRuntimeModule\n : null\n}\n\nfunction resolveChunkMessages(\n loaded: Record<string, CompiledMessage> | { default: Record<string, CompiledMessage> },\n): Record<string, CompiledMessage> {\n return typeof loaded === 'object' && loaded !== null && 'default' in loaded\n ? (loaded as { default: Record<string, CompiledMessage> }).default\n : loaded\n}\n\n/** @internal Map locale → default currency code */\nconst LOCALE_CURRENCY_MAP: Record<string, string> = {\n 'en': 'USD', 'en-US': 'USD', 'en-GB': 'GBP', 'en-AU': 'AUD', 'en-CA': 'CAD',\n 'zh-CN': 'CNY', 'zh-TW': 'TWD', 'zh-HK': 'HKD',\n 'ja': 'JPY', 'ja-JP': 'JPY',\n 'ko': 'KRW', 'ko-KR': 'KRW',\n 'de': 'EUR', 'de-DE': 'EUR', 'de-AT': 'EUR',\n 'fr': 'EUR', 'fr-FR': 'EUR', 'fr-CA': 'CAD',\n 'es': 'EUR', 'es-ES': 'EUR', 'es-MX': 'MXN',\n 'pt': 'EUR', 'pt-BR': 'BRL', 'pt-PT': 'EUR',\n 'it': 'EUR', 'ru': 'RUB', 'ar': 'SAR', 'hi': 'INR',\n}\n\n/** @internal Built-in date format styles (merged under user-provided dateFormats) */\nconst DEFAULT_DATE_FORMATS: Record<string, Intl.DateTimeFormatOptions> = {\n short: { year: 'numeric', month: 'numeric', day: 'numeric' },\n long: { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' },\n time: { hour: 'numeric', minute: 'numeric' },\n datetime: { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' },\n}\n\n/** @internal Built-in number format styles (merged under user-provided numberFormats) */\nconst DEFAULT_NUMBER_FORMATS: Record<string, Intl.NumberFormatOptions | ((locale: Locale) => Intl.NumberFormatOptions)> = {\n currency: (locale: string) => ({\n style: 'currency',\n currency: LOCALE_CURRENCY_MAP[locale] ?? LOCALE_CURRENCY_MAP[locale.split('-')[0]!] ?? 'USD',\n }),\n percent: { style: 'percent' },\n decimal: { minimumFractionDigits: 2, maximumFractionDigits: 2 },\n}\n\n/** Extended config with lazy locale loading support */\nexport interface FluentiConfig extends FluentiCoreConfig {\n /** Async chunk loader for lazy locale loading */\n chunkLoader?: ChunkLoader\n /** Enable lazy locale loading through chunkLoader */\n lazyLocaleLoading?: boolean\n /** Locale-specific fallback chains */\n fallbackChain?: Record<string, Locale[]>\n /** Named date format styles */\n dateFormats?: DateFormatOptions\n /** Named number format styles */\n numberFormats?: NumberFormatOptions\n /** Runtime diagnostics configuration */\n diagnostics?: DiagnosticsConfig\n /**\n * Custom message interpolation function.\n *\n * By default, the runtime uses a lightweight `{key}` replacer.\n * Pass the full `interpolate` from `@fluenti/core/internal` for\n * runtime ICU MessageFormat support (plurals, selects, nested arguments).\n */\n interpolate?: (\n message: string,\n values: Record<string, unknown> | undefined,\n locale: string,\n formatters?: Record<string, CustomFormatter>,\n ) => string\n}\n\n/** Reactive i18n context holding locale signal and translation utilities */\nexport interface FluentiContext {\n /** Reactive accessor for the current locale */\n locale(): Locale\n /** Set the active locale (async when lazy locale loading is enabled) */\n setLocale(locale: Locale): Promise<void>\n /** Translate a message by id with optional interpolation values */\n t(id: string | MessageDescriptor, values?: Record<string, unknown>): LocalizedString\n /** Tagged template form: t`Hello ${name}` */\n t(strings: TemplateStringsArray, ...exprs: unknown[]): LocalizedString\n /** Merge additional messages into a locale catalog at runtime */\n loadMessages(locale: Locale, messages: Messages): void\n /** Return all locale codes that have loaded messages */\n getLocales(): Locale[]\n /** Format a date value for the current locale */\n d(value: Date | number, style?: string): LocalizedString\n /** Format a number value for the current locale */\n n(value: number, style?: string): LocalizedString\n /** Format an ICU message string directly (no catalog lookup) */\n format(message: string, values?: Record<string, unknown>): LocalizedString\n /** Whether a locale chunk is currently being loaded */\n isLoading: Accessor<boolean>\n /** Set of locales whose messages have been loaded */\n loadedLocales: Accessor<Set<string>>\n /** Preload a locale in the background without switching to it */\n preloadLocale(locale: string): void\n /** Check if a translation key exists for the given or current locale */\n te(key: string, loc?: string): boolean\n /** Get the raw compiled message for a key without interpolation */\n tm(key: string, loc?: string): CompiledMessage | undefined\n}\n\n/**\n * Create a reactive i18n context backed by Solid signals.\n *\n * The returned `t()` reads the internal `locale()` signal, so any\n * Solid computation that calls `t()` will re-run when the locale changes.\n *\n * @example\n * ```tsx\n * import { createFluentiContext } from '@fluenti/solid'\n * import messages from './locales/compiled/en.js'\n *\n * const ctx = createFluentiContext({\n * locale: 'en',\n * messages: { en: messages },\n * })\n *\n * // Use t`` tagged template (preferred)\n * const greeting = ctx.t`Hello, {name}!`\n * ```\n */\nexport function createFluentiContext(config: FluentiCoreConfig | FluentiConfig): FluentiContext {\n const [locale, setLocaleSignal] = createSignal<Locale>(config.locale)\n const [isLoading, setIsLoading] = createSignal(false)\n const loadedLocalesSet = new Set<string>([config.locale])\n const [loadedLocales, setLoadedLocales] = createSignal(new Set(loadedLocalesSet))\n const messages: Record<string, Messages> = { ...config.messages }\n const i18nConfig = config as FluentiConfig\n const lazyLocaleLoading = i18nConfig.lazyLocaleLoading\n ?? (config as FluentiConfig & { splitting?: boolean }).splitting\n ?? false\n\n // Create a core instance that handles all translation, lookup, fallback, and formatting logic.\n // Merge built-in date/number format styles under user-provided overrides.\n // Build config incrementally to satisfy exactOptionalPropertyTypes —\n // optional properties must not receive `undefined` as a value.\n const coreConfig: FluentiCoreConfigFull = {\n locale: config.locale,\n messages: config.messages ?? {},\n dateFormats: { ...DEFAULT_DATE_FORMATS, ...i18nConfig.dateFormats },\n numberFormats: { ...DEFAULT_NUMBER_FORMATS, ...i18nConfig.numberFormats },\n }\n if (config.fallbackLocale !== undefined) coreConfig.fallbackLocale = config.fallbackLocale\n if (i18nConfig.fallbackChain !== undefined) coreConfig.fallbackChain = i18nConfig.fallbackChain\n if (config.missing !== undefined) coreConfig.missing = config.missing\n if (i18nConfig.diagnostics !== undefined) coreConfig.diagnostics = i18nConfig.diagnostics as FluentiCoreConfigFull['diagnostics']\n if (i18nConfig.interpolate !== undefined) coreConfig.interpolate = i18nConfig.interpolate\n coreConfig.devWarnings = coreConfig.devWarnings ?? (typeof process !== 'undefined' && process.env?.['NODE_ENV'] === 'development')\n const i18n = createFluentiCore(coreConfig)\n\n function t(strings: TemplateStringsArray, ...exprs: unknown[]): LocalizedString\n function t(id: string | MessageDescriptor, values?: Record<string, unknown>): LocalizedString\n function t(idOrStrings: string | MessageDescriptor | TemplateStringsArray, ...rest: unknown[]): LocalizedString {\n const current = locale() // READ SIGNAL → reactive dependency for Solid re-renders\n if (i18n.locale !== current) i18n.locale = current\n // Dispatch to the correct overload based on input type\n if (Array.isArray(idOrStrings) && 'raw' in idOrStrings) {\n return i18n.t(idOrStrings as TemplateStringsArray, ...rest) as LocalizedString\n }\n return i18n.t(idOrStrings as string | MessageDescriptor, rest[0] as Record<string, unknown> | undefined) as LocalizedString\n }\n\n const loadMessages = (loc: Locale, msgs: Messages): void => {\n i18n.loadMessages(loc, msgs)\n // Keep local messages in sync for te/tm which check the local object\n // Intentional mutation: messages record is locally scoped to this context closure\n messages[loc] = { ...messages[loc], ...msgs }\n loadedLocalesSet.add(loc)\n setLoadedLocales(new Set(loadedLocalesSet))\n }\n\n let _localeRequestId = 0\n\n const setLocale = async (newLocale: Locale): Promise<void> => {\n if (!lazyLocaleLoading || !i18nConfig.chunkLoader) {\n setLocaleSignal(newLocale)\n return\n }\n\n const splitRuntime = getSplitRuntimeModule()\n\n if (loadedLocalesSet.has(newLocale)) {\n try {\n if (splitRuntime?.__switchLocale) {\n await splitRuntime.__switchLocale(newLocale)\n }\n } catch (e) {\n console.warn(`[fluenti] split runtime switch failed for locale \"${newLocale}\"`, e)\n }\n setLocaleSignal(newLocale)\n return\n }\n\n // Race-condition protection: track request ID\n const thisRequest = ++_localeRequestId\n setIsLoading(true)\n try {\n const loaded = resolveChunkMessages(await i18nConfig.chunkLoader(newLocale))\n // Always store loaded messages — they may be needed if locale is switched back\n i18n.loadMessages(newLocale, loaded)\n // Intentional mutation: messages record is locally scoped to this context closure\n messages[newLocale] = { ...messages[newLocale], ...loaded }\n loadedLocalesSet.add(newLocale)\n setLoadedLocales(new Set(loadedLocalesSet))\n // Stale request — a newer setLocale call superseded this one; don't switch locale\n if (thisRequest !== _localeRequestId) return\n try {\n if (splitRuntime?.__switchLocale) {\n await splitRuntime.__switchLocale(newLocale)\n }\n } catch (e) {\n console.warn(`[fluenti] split runtime switch failed for locale \"${newLocale}\"`, e)\n }\n // Re-check after async __switchLocale — a newer setLocale() may have superseded this one\n if (thisRequest !== _localeRequestId) return\n setLocaleSignal(newLocale)\n } finally {\n if (thisRequest === _localeRequestId) {\n setIsLoading(false)\n }\n }\n }\n\n const _preloadInFlight = new Set<string>()\n\n const preloadLocale = (loc: string): void => {\n if (!lazyLocaleLoading || loadedLocalesSet.has(loc) || !i18nConfig.chunkLoader || _preloadInFlight.has(loc)) return\n _preloadInFlight.add(loc)\n const splitRuntime = getSplitRuntimeModule()\n i18nConfig.chunkLoader(loc).then(async (loaded) => {\n const resolved = resolveChunkMessages(loaded)\n i18n.loadMessages(loc, resolved)\n // Intentional mutation: messages record is locally scoped to this context closure\n messages[loc] = { ...messages[loc], ...resolved }\n loadedLocalesSet.add(loc)\n setLoadedLocales(new Set(loadedLocalesSet))\n if (splitRuntime?.__preloadLocale) {\n await splitRuntime.__preloadLocale(loc)\n }\n }).catch((e: unknown) => {\n console.warn('[fluenti] preload failed:', loc, e)\n }).finally(() => {\n _preloadInFlight.delete(loc)\n })\n }\n\n const getLocales = (): Locale[] => i18n.getLocales()\n\n const d = (value: Date | number, style?: string): LocalizedString => {\n const current = locale() // READ SIGNAL → reactive dependency\n if (i18n.locale !== current) i18n.locale = current\n return i18n.d(value, style) as LocalizedString\n }\n\n const n = (value: number, style?: string): LocalizedString => {\n const current = locale() // READ SIGNAL → reactive dependency\n if (i18n.locale !== current) i18n.locale = current\n return i18n.n(value, style) as LocalizedString\n }\n\n const format = (message: string, values?: Record<string, unknown>): LocalizedString => {\n const current = locale() // READ SIGNAL → reactive dependency\n if (i18n.locale !== current) i18n.locale = current\n return i18n.format(message, values) as LocalizedString\n }\n\n const te = (key: string, loc?: string): boolean => {\n const msgs = messages[loc ?? locale()]\n return msgs !== undefined && key in msgs\n }\n\n const tm = (key: string, loc?: string): CompiledMessage | undefined => {\n const msgs = messages[loc ?? locale()]\n return msgs ? msgs[key] : undefined\n }\n\n return { locale, setLocale, t, loadMessages, getLocales, d, n, format, isLoading, loadedLocales, preloadLocale, te, tm }\n}\n","import { createContext } from 'solid-js'\nimport type { ParentComponent } from 'solid-js'\nimport { createFluentiContext } from './context'\nimport type { FluentiConfig, FluentiContext } from './context'\n\n/** Solid context object for i18n — used internally by useI18n() */\nexport const I18nCtx = createContext<FluentiContext>()\n\n/**\n * Provides the Fluenti i18n context to the Solid component tree.\n *\n * @example\n * ```tsx\n * import { I18nProvider, useI18n } from '@fluenti/solid'\n * import messages from './locales/compiled/en.js'\n *\n * function App() {\n * return (\n * <I18nProvider locale=\"en\" messages={{ en: messages }}>\n * <Content />\n * </I18nProvider>\n * )\n * }\n *\n * function Content() {\n * const { t } = useI18n()\n * return <h1>{t`Welcome to our app`}</h1>\n * }\n * ```\n */\nexport const I18nProvider: ParentComponent<FluentiConfig> = (props) => {\n const ctx = createFluentiContext(props)\n return <I18nCtx.Provider value={ctx}>{props.children}</I18nCtx.Provider>\n}\n","import { useContext } from 'solid-js'\nimport { I18nCtx } from './provider'\nimport type { FluentiContext } from './context'\n\n/**\n * Access the i18n context from the nearest `<I18nProvider>`.\n *\n * Throws if no provider is found in the component tree.\n */\nexport function useI18n(): FluentiContext {\n const ctx = useContext(I18nCtx)\n if (ctx) {\n return ctx\n }\n\n throw new Error(\n 'useI18n() must be used inside an <I18nProvider>.',\n )\n}\n\n/** Shorthand hook that returns only the current locale accessor. */\nexport function useLocale(): () => string {\n return useI18n().locale\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-i18n.d.ts","sourceRoot":"","sources":["../src/use-i18n.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,OAAO,IAAI,cAAc,CASxC;AAED,oEAAoE;AACpE,wBAAgB,SAAS,IAAI,MAAM,MAAM,CAExC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAIhE,YAAY,EAAE,oBAAoB,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAEvF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAM7E"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes