@mmstack/translate 21.0.0 → 21.0.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.
@@ -83,8 +83,7 @@ class TranslationStore {
83
83
  messages = computed(() => this.translations()[this.locale()] ??
84
84
  this.translations()[this.defaultLocale] ??
85
85
  {}, ...(ngDevMode ? [{ debugName: "messages" }] : []));
86
- dynamicLocaleLoader = resource({
87
- params: computed(() => this.loadQueue().at(0) ?? null),
86
+ dynamicLocaleLoader = resource({ ...(ngDevMode ? { debugName: "dynamicLocaleLoader" } : {}), params: computed(() => this.loadQueue().at(0) ?? null),
88
87
  loader: async ({ params: newLocale, abortSignal }) => {
89
88
  if (!newLocale)
90
89
  return;
@@ -120,8 +119,7 @@ class TranslationStore {
120
119
  locales: res,
121
120
  locale: newLocale,
122
121
  }));
123
- },
124
- });
122
+ } });
125
123
  intl = computed(() => createIntl({
126
124
  ...this.nonMessageConfig(),
127
125
  messages: this.messages(),
@@ -173,10 +171,10 @@ class TranslationStore {
173
171
  hasLocaleLoaders(locale) {
174
172
  return Array.from(this.onDemandLoaders.values()).some((loaders) => loaders[locale]);
175
173
  }
176
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TranslationStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
177
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TranslationStore, providedIn: 'root' });
174
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TranslationStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
175
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TranslationStore, providedIn: 'root' });
178
176
  }
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: TranslationStore, decorators: [{
177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TranslationStore, decorators: [{
180
178
  type: Injectable,
181
179
  args: [{
182
180
  providedIn: 'root',
@@ -328,31 +326,18 @@ class Translate {
328
326
  const args = computed(() => {
329
327
  const vars = this.translate();
330
328
  return (Array.isArray(vars) ? vars[1] : undefined);
331
- }, ...(ngDevMode ? [{ debugName: "args", equal: (a, b) => {
332
- if (a === undefined && b === undefined)
333
- return true;
334
- if (a === undefined || b === undefined)
335
- return false;
336
- const aObj = a;
337
- const keys = Object.keys(aObj);
338
- const bObj = b;
339
- if (!keys.length)
340
- return !Object.keys(bObj).length;
341
- return keys.every((key) => aObj[key] === bObj[key]);
342
- } }] : [{
343
- equal: (a, b) => {
344
- if (a === undefined && b === undefined)
345
- return true;
346
- if (a === undefined || b === undefined)
347
- return false;
348
- const aObj = a;
349
- const keys = Object.keys(aObj);
350
- const bObj = b;
351
- if (!keys.length)
352
- return !Object.keys(bObj).length;
353
- return keys.every((key) => aObj[key] === bObj[key]);
354
- },
355
- }]));
329
+ }, { ...(ngDevMode ? { debugName: "args" } : {}), equal: (a, b) => {
330
+ if (a === undefined && b === undefined)
331
+ return true;
332
+ if (a === undefined || b === undefined)
333
+ return false;
334
+ const aObj = a;
335
+ const keys = Object.keys(aObj);
336
+ const bObj = b;
337
+ if (!keys.length)
338
+ return !Object.keys(bObj).length;
339
+ return keys.every((key) => aObj[key] === bObj[key]);
340
+ } });
356
341
  const translation = computed(() => this.t(key(), args()), ...(ngDevMode ? [{ debugName: "translation" }] : []));
357
342
  const renderer = inject(Renderer2);
358
343
  const el = inject(ElementRef);
@@ -362,10 +347,10 @@ class Translate {
362
347
  },
363
348
  });
364
349
  }
365
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: Translate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
366
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.0", type: Translate, isStandalone: true, inputs: { translate: { classPropertyName: "translate", publicName: "translate", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
350
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Translate, deps: [], target: i0.ɵɵFactoryTarget.Directive });
351
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.6", type: Translate, isStandalone: true, inputs: { translate: { classPropertyName: "translate", publicName: "translate", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
367
352
  }
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: Translate, decorators: [{
353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Translate, decorators: [{
369
354
  type: Directive
370
355
  }], ctorParameters: () => [], propDecorators: { translate: [{ type: i0.Input, args: [{ isSignal: true, alias: "translate", required: true }] }] } });
371
356
 
@@ -1 +1 @@
1
- {"version":3,"file":"mmstack-translate.mjs","sources":["../../../../packages/translate/src/lib/delim.ts","../../../../packages/translate/src/lib/compile.ts","../../../../packages/translate/src/lib/create-namespace.ts","../../../../packages/translate/src/lib/translation-store.ts","../../../../packages/translate/src/lib/register-namespace.ts","../../../../packages/translate/src/lib/translate.ts","../../../../packages/translate/src/lib/translator.ts","../../../../packages/translate/src/mmstack-translate.ts"],"sourcesContent":["const KEY_DELIM = '::MMT_DELIM::';\r\n\r\nexport function prependDelim(prefix: string, key: string): string {\r\n return `${prefix}${KEY_DELIM}${key}`;\r\n}\r\n\r\nexport function replaceWithDelim(str: string, repl = '.'): string {\r\n return str.replaceAll(repl, KEY_DELIM);\r\n}\r\n","import { prependDelim } from './delim';\r\nimport type {\r\n inferTranslationParamMap,\r\n inferTranslationShape,\r\n} from './parameterize.type';\r\nimport type { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\nconst INTERNAL_SYMBOL = Symbol.for('mmstack-translate-internal');\r\n\r\ntype InternalSymbol = typeof INTERNAL_SYMBOL;\r\n\r\nexport type CompiledTranslation<\r\n T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n TLocale extends string = string,\r\n> = {\r\n flat: Record<string, string>;\r\n locale?: TLocale;\r\n namespace: TNS;\r\n [INTERNAL_SYMBOL]: {\r\n shape: inferTranslationShape<T>;\r\n map: inferTranslationParamMap<TNS, T>;\r\n };\r\n};\r\n\r\nexport type mergeTranslationMaps<\r\n TMain extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TOther extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = Omit<TMain, InternalSymbol> & {\r\n [INTERNAL_SYMBOL]: {\r\n shape: inferCompiledTranslationShape<TMain>;\r\n map: inferCompiledTranslationMap<TOther> &\r\n inferCompiledTranslationMap<TMain>;\r\n };\r\n};\r\n\r\nexport type inferCompiledTranslationNamespace<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T['namespace'];\r\n\r\nexport type inferCompiledTranslationShape<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T[InternalSymbol]['shape'];\r\n\r\nexport type inferCompiledTranslationMap<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T[InternalSymbol]['map'];\r\n\r\nfunction isTranslationObject(t: unknown): t is UnknownStringKeyObject {\r\n return typeof t === 'object' && t !== null;\r\n}\r\n\r\nfunction flattenTranslation<T extends UnknownStringKeyObject>(obj: T) {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n if (typeof value === 'string') {\r\n acc[key] = value;\r\n } else if (isTranslationObject(value)) {\r\n Object.entries(flattenTranslation(value)).forEach(\r\n ([nestedKey, nestedValue]) => {\r\n acc[prependDelim(key, nestedKey)] = nestedValue;\r\n },\r\n );\r\n }\r\n\r\n return acc;\r\n },\r\n {} as Record<string, string>,\r\n );\r\n}\r\n\r\nexport function compileTranslation<\r\n T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n TLocale extends string = string,\r\n>(\r\n translation: T,\r\n ns: TNS,\r\n locale?: TLocale,\r\n): CompiledTranslation<T, TNS, TLocale> {\r\n type $Shape = inferTranslationShape<T>;\r\n type $Map = inferTranslationParamMap<TNS, T>;\r\n\r\n return {\r\n locale,\r\n flat: flattenTranslation(translation),\r\n namespace: ns,\r\n [INTERNAL_SYMBOL]: {\r\n shape: {} as $Shape,\r\n map: {} as $Map,\r\n },\r\n };\r\n}\r\n","import {\r\n CompiledTranslation,\r\n compileTranslation,\r\n inferCompiledTranslationShape,\r\n mergeTranslationMaps,\r\n} from './compile';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\ntype TranslationNamespace<\r\n TNS extends string,\r\n T extends CompiledTranslation<UnknownStringKeyObject, TNS>,\r\n TShape extends UnknownStringKeyObject,\r\n> = {\r\n translation: T;\r\n createTranslation: <TLocale extends string>(\r\n locale: TLocale,\r\n translation: TShape,\r\n ) => CompiledTranslation<TShape, TNS, TLocale>;\r\n createMergedNamespace: <\r\n TOtherNS extends string,\r\n const TOther extends UnknownStringKeyObject,\r\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS>,\r\n >(\r\n ns: TOtherNS,\r\n translation: TOther,\r\n ) => TranslationNamespace<\r\n TOtherNS,\r\n mergeTranslationMaps<TOtherCompiled, T>,\r\n inferCompiledTranslationShape<TOtherCompiled>\r\n >;\r\n};\r\n\r\nexport function createNamespace<\r\n const T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n>(ns: TNS, translation: T) {\r\n const compiled = compileTranslation<T, TNS>(translation, ns);\r\n\r\n type TCompiled = typeof compiled;\r\n type TShape = inferCompiledTranslationShape<typeof compiled>;\r\n\r\n const namespace: TranslationNamespace<TNS, TCompiled, TShape> = {\r\n translation: compileTranslation(translation, ns),\r\n createTranslation: <TLocale extends string>(\r\n locale: TLocale,\r\n translation: TShape,\r\n ) => {\r\n return compileTranslation(translation, ns, locale);\r\n },\r\n createMergedNamespace: <\r\n TOther extends UnknownStringKeyObject,\r\n TOtherNS extends string,\r\n TOtherCompiled extends CompiledTranslation<\r\n TOther,\r\n TOtherNS\r\n > = CompiledTranslation<TOther, TOtherNS>,\r\n >(\r\n otherNs: TOtherNS,\r\n otherTranslation: TOther,\r\n ) => {\r\n return createNamespace(otherNs, otherTranslation) as TranslationNamespace<\r\n TOtherNS,\r\n mergeTranslationMaps<TOtherCompiled, TCompiled>,\r\n inferCompiledTranslationShape<TOtherCompiled>\r\n > as unknown as any;\r\n },\r\n };\r\n\r\n return namespace;\r\n}\r\n","import {\r\n computed,\r\n effect,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n isDevMode,\r\n LOCALE_ID,\r\n Provider,\r\n resource,\r\n Signal,\r\n signal,\r\n untracked,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { createIntl, createIntlCache, IntlConfig } from '@formatjs/intl';\r\nimport { CompiledTranslation } from './compile';\r\nimport { prependDelim } from './delim';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\nconst CONFIG_TOKEN = new InjectionToken<\r\n Omit<IntlConfig, 'locale' | 'messages'>\r\n>('mmstack-intl-config');\r\n\r\nexport function provideIntlConfig(\r\n config: Omit<IntlConfig, 'locale' | 'messages'>,\r\n): Provider {\r\n return {\r\n useValue: config,\r\n provide: CONFIG_TOKEN,\r\n };\r\n}\r\n\r\nexport function injectIntlConfig() {\r\n return inject(CONFIG_TOKEN, { optional: true }) ?? undefined;\r\n}\r\n\r\nexport function injectDefaultLocale() {\r\n return injectIntlConfig()?.defaultLocale ?? 'en-US';\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TranslationStore {\r\n private readonly cache = createIntlCache();\r\n private readonly config = injectIntlConfig();\r\n readonly loadQueue = signal<string[]>([]);\r\n readonly locale = signal(inject(LOCALE_ID));\r\n private readonly defaultLocale = injectDefaultLocale();\r\n private readonly translations = signal<\r\n Record<string, Record<string, string>>\r\n >({\r\n [this.defaultLocale]: {},\r\n });\r\n\r\n private readonly onDemandLoaders = new Map<\r\n string,\r\n Record<\r\n string,\r\n () => Promise<CompiledTranslation<UnknownStringKeyObject, string>>\r\n >\r\n >();\r\n\r\n private readonly nonMessageConfig = computed(() => ({\r\n ...this.config,\r\n locale: this.locale(),\r\n }));\r\n\r\n private readonly messages = computed(\r\n () =>\r\n this.translations()[this.locale()] ??\r\n this.translations()[this.defaultLocale] ??\r\n {},\r\n );\r\n\r\n readonly dynamicLocaleLoader = resource({\r\n params: computed(() => this.loadQueue().at(0) ?? null),\r\n loader: async ({ params: newLocale, abortSignal }) => {\r\n if (!newLocale) return;\r\n\r\n const currentTranslations = untracked(this.translations);\r\n\r\n const loadPromises: Promise<{\r\n namespace: string;\r\n flat: Record<string, string>;\r\n } | null>[] = [];\r\n\r\n for (const [namespace, loaders] of this.onDemandLoaders.entries()) {\r\n const loader = loaders[newLocale];\r\n if (loader) {\r\n const hasNamespaceForLocale =\r\n currentTranslations[newLocale] &&\r\n Object.keys(currentTranslations[newLocale]).some((key) =>\r\n key.startsWith(`${prependDelim(namespace, '').slice(0, -1)}`),\r\n );\r\n\r\n if (!hasNamespaceForLocale) {\r\n loadPromises.push(\r\n loader()\r\n .then((translation) => {\r\n if (abortSignal.aborted) return null;\r\n return {\r\n namespace: translation.namespace,\r\n flat: translation.flat,\r\n };\r\n })\r\n .catch((err) => {\r\n if (isDevMode()) {\r\n console.error(\r\n '[Translate] Failed to load',\r\n namespace,\r\n newLocale,\r\n err,\r\n );\r\n }\r\n\r\n return null;\r\n }),\r\n );\r\n }\r\n }\r\n }\r\n\r\n return Promise.all(loadPromises)\r\n .then((res) => res.filter((r) => r !== null))\r\n .then((res) => ({\r\n locales: res,\r\n locale: newLocale,\r\n }));\r\n },\r\n });\r\n\r\n readonly intl = computed(() =>\r\n createIntl(\r\n {\r\n ...this.nonMessageConfig(),\r\n messages: this.messages(),\r\n },\r\n this.cache,\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n if (\r\n // should never be in error state, but best to check in case something throws\r\n this.dynamicLocaleLoader.error() ||\r\n this.dynamicLocaleLoader.isLoading()\r\n )\r\n return;\r\n const dynamicLocales = this.dynamicLocaleLoader.value();\r\n\r\n if (!dynamicLocales) return;\r\n for (const locale of dynamicLocales.locales) {\r\n this.register(locale.namespace, {\r\n [dynamicLocales.locale]: locale.flat,\r\n });\r\n }\r\n this.loadQueue.update((q) =>\r\n q.filter((l) => l !== dynamicLocales.locale),\r\n );\r\n this.locale.set(dynamicLocales.locale);\r\n });\r\n }\r\n\r\n formatMessage(key: string, values?: Record<string, string | number>) {\r\n const message = this.translations()[this.locale()]?.[key] ?? '';\r\n\r\n if (!message) return '';\r\n\r\n return this.intl().formatMessage(\r\n { id: key, defaultMessage: message },\r\n values,\r\n );\r\n }\r\n\r\n register(\r\n namespace: string,\r\n flat: Partial<Record<string, Record<string, string>>>,\r\n ) {\r\n this.translations.update((cur) => {\r\n return Object.entries(flat).reduce(\r\n (acc, [locale, translation]) => {\r\n const localeTranslation = acc[locale] ?? {};\r\n\r\n const withNS = Object.entries(translation ?? {}).reduce(\r\n (acc, [key, value]) => {\r\n acc[prependDelim(namespace, key)] = value;\r\n return acc;\r\n },\r\n {} as Record<string, string>,\r\n );\r\n\r\n acc[locale] = {\r\n ...localeTranslation,\r\n ...withNS,\r\n };\r\n\r\n return acc;\r\n },\r\n { ...cur },\r\n );\r\n });\r\n }\r\n\r\n registerOnDemandLoaders(\r\n namespace: string,\r\n loaders: Record<string, () => Promise<any>>,\r\n ) {\r\n this.onDemandLoaders.set(namespace, loaders);\r\n }\r\n\r\n hasLocaleLoaders(locale: string): boolean {\r\n return Array.from(this.onDemandLoaders.values()).some(\r\n (loaders) => loaders[locale],\r\n );\r\n }\r\n}\r\n\r\nexport function injectIntl() {\r\n return inject(TranslationStore).intl;\r\n}\r\n\r\n/**\r\n * Inject a dynamic locale signal that supports runtime language switching.\r\n *\r\n * @returns A writable signal with the current locale and loading state.\r\n * Only allows switching to locales that have registered loaders.\r\n *\r\n * @example\r\n * ```typescript\r\n * const locale = injectDynamicLocale();\r\n *\r\n * // Switch language (triggers automatic translation loading)\r\n * locale.set('sl-SI');\r\n *\r\n * // Check loading state\r\n * if (locale.isLoading()) {\r\n * // Show spinner\r\n * }\r\n * ```\r\n */\r\nexport function injectDynamicLocale(): WritableSignal<string> & {\r\n isLoading: Signal<boolean>;\r\n} {\r\n const store = inject(TranslationStore);\r\n\r\n const source = computed(() => store.locale()) as WritableSignal<string> & {\r\n isLoading: Signal<boolean>;\r\n };\r\n\r\n const set = (value: string) => {\r\n if (\r\n value === untracked(source) ||\r\n !store.hasLocaleLoaders(value) ||\r\n untracked(store.loadQueue).includes(value)\r\n )\r\n return;\r\n store.loadQueue.update((q) => [...q, value]);\r\n };\r\n source.set = set;\r\n source.update = (updater: (value: string) => string) => {\r\n const next = updater(untracked(source));\r\n source.set(next);\r\n };\r\n source.asReadonly = () => source;\r\n\r\n source.isLoading = store.dynamicLocaleLoader.isLoading;\r\n\r\n return source;\r\n}\r\n","import {\r\n computed,\r\n inject,\r\n isDevMode,\r\n isSignal,\r\n Signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport {\r\n CompiledTranslation,\r\n inferCompiledTranslationMap,\r\n inferCompiledTranslationNamespace,\r\n} from './compile';\r\nimport { replaceWithDelim } from './delim';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { injectDefaultLocale, TranslationStore } from './translation-store';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype AnyStringRecord = Record<string, any>;\r\n\r\nfunction createEqualsRecord<T extends AnyStringRecord>(keys: (keyof T)[] = []) {\r\n let keyMatcher: (a: T, b: T) => boolean;\r\n\r\n if (keys.length === 0) {\r\n keyMatcher = () => true;\r\n } else if (keys.length === 1) {\r\n const key = keys[0];\r\n keyMatcher = (a, b) => a[key] === b[key];\r\n } else {\r\n keyMatcher = (a, b) => {\r\n return keys.every((k) => a[k] === b[k]);\r\n };\r\n }\r\n\r\n return (a?: T, b?: T): boolean => {\r\n if (!a && !b) return true;\r\n if (!a || !b) return false;\r\n return keyMatcher(a, b);\r\n };\r\n}\r\n\r\ntype TFunction<TMap extends AnyStringRecord> = <\r\n TKey extends keyof TMap & string,\r\n>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\r\n) => string;\r\n\r\ntype SignalTFunction<TMap extends AnyStringRecord> = <\r\n TKey extends keyof TMap & string,\r\n>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\r\n) => Signal<string>;\r\n\r\ntype TFunctionWithSignalConstructor<\r\n TMap extends AnyStringRecord,\r\n TFN extends TFunction<TMap>,\r\n> = TFN & {\r\n asSignal: SignalTFunction<TMap>;\r\n};\r\n\r\nfunction addSignalFn<TMap extends AnyStringRecord, TFn extends TFunction<TMap>>(\r\n fn: TFn,\r\n store: TranslationStore,\r\n): TFunctionWithSignalConstructor<TMap, TFn> {\r\n const withSig = fn as TFunctionWithSignalConstructor<TMap, TFn>;\r\n\r\n const asSignal = <TKey extends keyof TMap & string>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\r\n ): Signal<string> => {\r\n const variables = args[0] as () => AnyStringRecord | undefined;\r\n const stringKey = key as string;\r\n\r\n const flatPath = replaceWithDelim(stringKey);\r\n\r\n const varsFn = variables ?? (() => undefined);\r\n const varsSignal = isSignal(varsFn)\r\n ? varsFn\r\n : computed(varsFn, {\r\n equal: createEqualsRecord(Object.keys(varsFn() ?? {})),\r\n });\r\n\r\n return computed(() => store.formatMessage(flatPath, varsSignal()));\r\n };\r\n\r\n withSig.asSignal = asSignal;\r\n\r\n return withSig;\r\n}\r\n\r\nexport function createT<TMap extends AnyStringRecord>(\r\n store: TranslationStore,\r\n): TFunction<TMap> {\r\n return <TKey extends keyof TMap & string>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\r\n ): string => {\r\n const variables = args[0] as AnyStringRecord | undefined;\r\n const stringKey = key as string;\r\n\r\n return store.formatMessage(replaceWithDelim(stringKey), variables);\r\n };\r\n}\r\n\r\nexport function registerNamespace<\r\n TDefault extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n>(\r\n defaultTranslation: () => Promise<TDefault>,\r\n other: Record<\r\n string,\r\n () => Promise<\r\n CompiledTranslation<\r\n UnknownStringKeyObject,\r\n inferCompiledTranslationNamespace<TDefault>,\r\n string\r\n >\r\n >\r\n >,\r\n) {\r\n type $Map = inferCompiledTranslationMap<TDefault>;\r\n type $BaseTFN = TFunction<$Map>;\r\n type $TFN = TFunctionWithSignalConstructor<$Map, $BaseTFN>;\r\n\r\n const injectT = (): $TFN => {\r\n const store = inject(TranslationStore);\r\n\r\n return addSignalFn(createT(store), store);\r\n };\r\n\r\n let defaultTranslationLoaded = false;\r\n const resolver = async () => {\r\n const store = inject(TranslationStore);\r\n const locale = untracked(store.locale);\r\n const defaultLocale = injectDefaultLocale();\r\n const tPromise = other[locale] as (typeof other)[string] | undefined;\r\n\r\n const promise = tPromise ?? defaultTranslation;\r\n if (!promise && isDevMode()) {\r\n return console.warn(`No translation found for locale: ${locale}`);\r\n }\r\n\r\n if (promise === defaultTranslation && defaultTranslationLoaded) return;\r\n\r\n try {\r\n const translation = await promise();\r\n\r\n if (\r\n promise !== defaultTranslation &&\r\n translation.locale !== locale &&\r\n isDevMode()\r\n ) {\r\n return console.warn(\r\n `Expected locale to be ${locale} but got ${translation.locale}`,\r\n );\r\n }\r\n\r\n store.registerOnDemandLoaders(translation.namespace, {\r\n ...other,\r\n [defaultLocale]: defaultTranslation,\r\n });\r\n\r\n store.register(translation.namespace, {\r\n [locale]: translation.flat,\r\n });\r\n if (promise === defaultTranslation) {\r\n defaultTranslationLoaded = true;\r\n }\r\n } catch {\r\n if (isDevMode()) {\r\n console.warn(`Failed to load translation for locale: ${locale}`);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n injectNamespaceT: injectT,\r\n resolveNamespaceTranslation: resolver,\r\n };\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { CompiledTranslation, inferCompiledTranslationMap } from './compile';\r\nimport { createT } from './register-namespace';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { TranslationStore } from './translation-store';\r\n\r\n@Directive()\r\nexport abstract class Translate<\r\n TInput extends string,\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\r\n TKey extends TInput & keyof TMap & string = TInput & keyof TMap & string,\r\n> {\r\n private readonly t = createT(inject(TranslationStore));\r\n\r\n readonly translate =\r\n input.required<\r\n TMap[TKey] extends void\r\n ? TKey | [key: TKey]\r\n : [key: TKey, vars: TMap[TKey]]\r\n >();\r\n\r\n constructor() {\r\n const key = computed(() => {\r\n const vars = this.translate();\r\n return (Array.isArray(vars) ? vars[0] : vars) as TKey;\r\n });\r\n\r\n const args = computed(\r\n () => {\r\n const vars = this.translate();\r\n return (Array.isArray(vars) ? vars[1] : undefined) as TMap[TKey];\r\n },\r\n {\r\n equal: (a, b) => {\r\n if (a === undefined && b === undefined) return true;\r\n if (a === undefined || b === undefined) return false;\r\n\r\n const aObj = a as Record<string, string>;\r\n const keys = Object.keys(aObj);\r\n const bObj = b as Record<string, string>;\r\n\r\n if (!keys.length) return !Object.keys(bObj).length;\r\n\r\n return keys.every((key) => aObj[key] === bObj[key]);\r\n },\r\n },\r\n );\r\n\r\n const translation = computed(() => this.t(key(), args()));\r\n\r\n const renderer = inject(Renderer2);\r\n const el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n afterRenderEffect({\r\n write: () => {\r\n renderer.setProperty(el.nativeElement, 'textContent', translation());\r\n },\r\n });\r\n }\r\n}\r\n","import { ChangeDetectorRef, effect, inject } from '@angular/core';\r\nimport { CompiledTranslation, inferCompiledTranslationMap } from './compile';\r\nimport { createT } from './register-namespace';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { TranslationStore } from './translation-store';\r\n\r\nexport abstract class Translator<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\r\n> {\r\n private readonly store = inject(TranslationStore);\r\n private readonly t = createT<TMap>(this.store);\r\n\r\n constructor() {\r\n const cdr = inject(ChangeDetectorRef);\r\n\r\n effect(() => {\r\n this.store.locale();\r\n cdr.markForCheck();\r\n });\r\n }\r\n\r\n transform<K extends keyof TMap & string>(\r\n key: K,\r\n ...args: TMap[K] extends void\r\n ? [locale?: string]\r\n : [TMap[K], locale?: string]\r\n ): string {\r\n const actualArgs = args.filter(\r\n (a) => typeof a === 'object',\r\n ) as TMap[K] extends void ? [] : [TMap[K]];\r\n\r\n return this.t(key, ...actualArgs);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mmstack-translate.mjs","sources":["../../../../packages/translate/src/lib/delim.ts","../../../../packages/translate/src/lib/compile.ts","../../../../packages/translate/src/lib/create-namespace.ts","../../../../packages/translate/src/lib/translation-store.ts","../../../../packages/translate/src/lib/register-namespace.ts","../../../../packages/translate/src/lib/translate.ts","../../../../packages/translate/src/lib/translator.ts","../../../../packages/translate/src/mmstack-translate.ts"],"sourcesContent":["const KEY_DELIM = '::MMT_DELIM::';\r\n\r\nexport function prependDelim(prefix: string, key: string): string {\r\n return `${prefix}${KEY_DELIM}${key}`;\r\n}\r\n\r\nexport function replaceWithDelim(str: string, repl = '.'): string {\r\n return str.replaceAll(repl, KEY_DELIM);\r\n}\r\n","import { prependDelim } from './delim';\r\nimport type {\r\n inferTranslationParamMap,\r\n inferTranslationShape,\r\n} from './parameterize.type';\r\nimport type { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\nconst INTERNAL_SYMBOL = Symbol.for('mmstack-translate-internal');\r\n\r\ntype InternalSymbol = typeof INTERNAL_SYMBOL;\r\n\r\nexport type CompiledTranslation<\r\n T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n TLocale extends string = string,\r\n> = {\r\n flat: Record<string, string>;\r\n locale?: TLocale;\r\n namespace: TNS;\r\n [INTERNAL_SYMBOL]: {\r\n shape: inferTranslationShape<T>;\r\n map: inferTranslationParamMap<TNS, T>;\r\n };\r\n};\r\n\r\nexport type mergeTranslationMaps<\r\n TMain extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TOther extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = Omit<TMain, InternalSymbol> & {\r\n [INTERNAL_SYMBOL]: {\r\n shape: inferCompiledTranslationShape<TMain>;\r\n map: inferCompiledTranslationMap<TOther> &\r\n inferCompiledTranslationMap<TMain>;\r\n };\r\n};\r\n\r\nexport type inferCompiledTranslationNamespace<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T['namespace'];\r\n\r\nexport type inferCompiledTranslationShape<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T[InternalSymbol]['shape'];\r\n\r\nexport type inferCompiledTranslationMap<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n> = T[InternalSymbol]['map'];\r\n\r\nfunction isTranslationObject(t: unknown): t is UnknownStringKeyObject {\r\n return typeof t === 'object' && t !== null;\r\n}\r\n\r\nfunction flattenTranslation<T extends UnknownStringKeyObject>(obj: T) {\r\n return Object.entries(obj).reduce(\r\n (acc, [key, value]) => {\r\n if (typeof value === 'string') {\r\n acc[key] = value;\r\n } else if (isTranslationObject(value)) {\r\n Object.entries(flattenTranslation(value)).forEach(\r\n ([nestedKey, nestedValue]) => {\r\n acc[prependDelim(key, nestedKey)] = nestedValue;\r\n },\r\n );\r\n }\r\n\r\n return acc;\r\n },\r\n {} as Record<string, string>,\r\n );\r\n}\r\n\r\nexport function compileTranslation<\r\n T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n TLocale extends string = string,\r\n>(\r\n translation: T,\r\n ns: TNS,\r\n locale?: TLocale,\r\n): CompiledTranslation<T, TNS, TLocale> {\r\n type $Shape = inferTranslationShape<T>;\r\n type $Map = inferTranslationParamMap<TNS, T>;\r\n\r\n return {\r\n locale,\r\n flat: flattenTranslation(translation),\r\n namespace: ns,\r\n [INTERNAL_SYMBOL]: {\r\n shape: {} as $Shape,\r\n map: {} as $Map,\r\n },\r\n };\r\n}\r\n","import {\r\n CompiledTranslation,\r\n compileTranslation,\r\n inferCompiledTranslationShape,\r\n mergeTranslationMaps,\r\n} from './compile';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\ntype TranslationNamespace<\r\n TNS extends string,\r\n T extends CompiledTranslation<UnknownStringKeyObject, TNS>,\r\n TShape extends UnknownStringKeyObject,\r\n> = {\r\n translation: T;\r\n createTranslation: <TLocale extends string>(\r\n locale: TLocale,\r\n translation: TShape,\r\n ) => CompiledTranslation<TShape, TNS, TLocale>;\r\n createMergedNamespace: <\r\n TOtherNS extends string,\r\n const TOther extends UnknownStringKeyObject,\r\n TOtherCompiled extends CompiledTranslation<TOther, TOtherNS>,\r\n >(\r\n ns: TOtherNS,\r\n translation: TOther,\r\n ) => TranslationNamespace<\r\n TOtherNS,\r\n mergeTranslationMaps<TOtherCompiled, T>,\r\n inferCompiledTranslationShape<TOtherCompiled>\r\n >;\r\n};\r\n\r\nexport function createNamespace<\r\n const T extends UnknownStringKeyObject,\r\n TNS extends string,\r\n>(ns: TNS, translation: T) {\r\n const compiled = compileTranslation<T, TNS>(translation, ns);\r\n\r\n type TCompiled = typeof compiled;\r\n type TShape = inferCompiledTranslationShape<typeof compiled>;\r\n\r\n const namespace: TranslationNamespace<TNS, TCompiled, TShape> = {\r\n translation: compileTranslation(translation, ns),\r\n createTranslation: <TLocale extends string>(\r\n locale: TLocale,\r\n translation: TShape,\r\n ) => {\r\n return compileTranslation(translation, ns, locale);\r\n },\r\n createMergedNamespace: <\r\n TOther extends UnknownStringKeyObject,\r\n TOtherNS extends string,\r\n TOtherCompiled extends CompiledTranslation<\r\n TOther,\r\n TOtherNS\r\n > = CompiledTranslation<TOther, TOtherNS>,\r\n >(\r\n otherNs: TOtherNS,\r\n otherTranslation: TOther,\r\n ) => {\r\n return createNamespace(otherNs, otherTranslation) as TranslationNamespace<\r\n TOtherNS,\r\n mergeTranslationMaps<TOtherCompiled, TCompiled>,\r\n inferCompiledTranslationShape<TOtherCompiled>\r\n > as unknown as any;\r\n },\r\n };\r\n\r\n return namespace;\r\n}\r\n","import {\r\n computed,\r\n effect,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n isDevMode,\r\n LOCALE_ID,\r\n Provider,\r\n resource,\r\n Signal,\r\n signal,\r\n untracked,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { createIntl, createIntlCache, type IntlConfig } from '@formatjs/intl';\r\nimport { CompiledTranslation } from './compile';\r\nimport { prependDelim } from './delim';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\n\r\nconst CONFIG_TOKEN = new InjectionToken<\r\n Omit<IntlConfig, 'locale' | 'messages'>\r\n>('mmstack-intl-config');\r\n\r\nexport function provideIntlConfig(\r\n config: Omit<IntlConfig, 'locale' | 'messages'>,\r\n): Provider {\r\n return {\r\n useValue: config,\r\n provide: CONFIG_TOKEN,\r\n };\r\n}\r\n\r\nexport function injectIntlConfig() {\r\n return inject(CONFIG_TOKEN, { optional: true }) ?? undefined;\r\n}\r\n\r\nexport function injectDefaultLocale() {\r\n return injectIntlConfig()?.defaultLocale ?? 'en-US';\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class TranslationStore {\r\n private readonly cache = createIntlCache();\r\n private readonly config = injectIntlConfig();\r\n readonly loadQueue = signal<string[]>([]);\r\n readonly locale = signal(inject(LOCALE_ID));\r\n private readonly defaultLocale = injectDefaultLocale();\r\n private readonly translations = signal<\r\n Record<string, Record<string, string>>\r\n >({\r\n [this.defaultLocale]: {},\r\n });\r\n\r\n private readonly onDemandLoaders = new Map<\r\n string,\r\n Record<\r\n string,\r\n () => Promise<CompiledTranslation<UnknownStringKeyObject, string>>\r\n >\r\n >();\r\n\r\n private readonly nonMessageConfig = computed(() => ({\r\n ...this.config,\r\n locale: this.locale(),\r\n }));\r\n\r\n private readonly messages = computed(\r\n () =>\r\n this.translations()[this.locale()] ??\r\n this.translations()[this.defaultLocale] ??\r\n {},\r\n );\r\n\r\n readonly dynamicLocaleLoader = resource({\r\n params: computed(() => this.loadQueue().at(0) ?? null),\r\n loader: async ({ params: newLocale, abortSignal }) => {\r\n if (!newLocale) return;\r\n\r\n const currentTranslations = untracked(this.translations);\r\n\r\n const loadPromises: Promise<{\r\n namespace: string;\r\n flat: Record<string, string>;\r\n } | null>[] = [];\r\n\r\n for (const [namespace, loaders] of this.onDemandLoaders.entries()) {\r\n const loader = loaders[newLocale];\r\n if (loader) {\r\n const hasNamespaceForLocale =\r\n currentTranslations[newLocale] &&\r\n Object.keys(currentTranslations[newLocale]).some((key) =>\r\n key.startsWith(`${prependDelim(namespace, '').slice(0, -1)}`),\r\n );\r\n\r\n if (!hasNamespaceForLocale) {\r\n loadPromises.push(\r\n loader()\r\n .then((translation) => {\r\n if (abortSignal.aborted) return null;\r\n return {\r\n namespace: translation.namespace,\r\n flat: translation.flat,\r\n };\r\n })\r\n .catch((err) => {\r\n if (isDevMode()) {\r\n console.error(\r\n '[Translate] Failed to load',\r\n namespace,\r\n newLocale,\r\n err,\r\n );\r\n }\r\n\r\n return null;\r\n }),\r\n );\r\n }\r\n }\r\n }\r\n\r\n return Promise.all(loadPromises)\r\n .then((res) => res.filter((r) => r !== null))\r\n .then((res) => ({\r\n locales: res,\r\n locale: newLocale,\r\n }));\r\n },\r\n });\r\n\r\n readonly intl = computed(() =>\r\n createIntl(\r\n {\r\n ...this.nonMessageConfig(),\r\n messages: this.messages(),\r\n },\r\n this.cache,\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n if (\r\n // should never be in error state, but best to check in case something throws\r\n this.dynamicLocaleLoader.error() ||\r\n this.dynamicLocaleLoader.isLoading()\r\n )\r\n return;\r\n const dynamicLocales = this.dynamicLocaleLoader.value();\r\n\r\n if (!dynamicLocales) return;\r\n for (const locale of dynamicLocales.locales) {\r\n this.register(locale.namespace, {\r\n [dynamicLocales.locale]: locale.flat,\r\n });\r\n }\r\n this.loadQueue.update((q) =>\r\n q.filter((l) => l !== dynamicLocales.locale),\r\n );\r\n this.locale.set(dynamicLocales.locale);\r\n });\r\n }\r\n\r\n formatMessage(key: string, values?: Record<string, string | number>) {\r\n const message = this.translations()[this.locale()]?.[key] ?? '';\r\n\r\n if (!message) return '';\r\n\r\n return this.intl().formatMessage(\r\n { id: key, defaultMessage: message },\r\n values,\r\n );\r\n }\r\n\r\n register(\r\n namespace: string,\r\n flat: Partial<Record<string, Record<string, string>>>,\r\n ) {\r\n this.translations.update((cur) => {\r\n return Object.entries(flat).reduce(\r\n (acc, [locale, translation]) => {\r\n const localeTranslation = acc[locale] ?? {};\r\n\r\n const withNS = Object.entries(translation ?? {}).reduce(\r\n (acc, [key, value]) => {\r\n acc[prependDelim(namespace, key)] = value;\r\n return acc;\r\n },\r\n {} as Record<string, string>,\r\n );\r\n\r\n acc[locale] = {\r\n ...localeTranslation,\r\n ...withNS,\r\n };\r\n\r\n return acc;\r\n },\r\n { ...cur },\r\n );\r\n });\r\n }\r\n\r\n registerOnDemandLoaders(\r\n namespace: string,\r\n loaders: Record<string, () => Promise<any>>,\r\n ) {\r\n this.onDemandLoaders.set(namespace, loaders);\r\n }\r\n\r\n hasLocaleLoaders(locale: string): boolean {\r\n return Array.from(this.onDemandLoaders.values()).some(\r\n (loaders) => loaders[locale],\r\n );\r\n }\r\n}\r\n\r\nexport function injectIntl() {\r\n return inject(TranslationStore).intl;\r\n}\r\n\r\n/**\r\n * Inject a dynamic locale signal that supports runtime language switching.\r\n *\r\n * @returns A writable signal with the current locale and loading state.\r\n * Only allows switching to locales that have registered loaders.\r\n *\r\n * @example\r\n * ```typescript\r\n * const locale = injectDynamicLocale();\r\n *\r\n * // Switch language (triggers automatic translation loading)\r\n * locale.set('sl-SI');\r\n *\r\n * // Check loading state\r\n * if (locale.isLoading()) {\r\n * // Show spinner\r\n * }\r\n * ```\r\n */\r\nexport function injectDynamicLocale(): WritableSignal<string> & {\r\n isLoading: Signal<boolean>;\r\n} {\r\n const store = inject(TranslationStore);\r\n\r\n const source = computed(() => store.locale()) as WritableSignal<string> & {\r\n isLoading: Signal<boolean>;\r\n };\r\n\r\n const set = (value: string) => {\r\n if (\r\n value === untracked(source) ||\r\n !store.hasLocaleLoaders(value) ||\r\n untracked(store.loadQueue).includes(value)\r\n )\r\n return;\r\n store.loadQueue.update((q) => [...q, value]);\r\n };\r\n source.set = set;\r\n source.update = (updater: (value: string) => string) => {\r\n const next = updater(untracked(source));\r\n source.set(next);\r\n };\r\n source.asReadonly = () => source;\r\n\r\n source.isLoading = store.dynamicLocaleLoader.isLoading;\r\n\r\n return source;\r\n}\r\n","import {\r\n computed,\r\n inject,\r\n isDevMode,\r\n isSignal,\r\n Signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport {\r\n CompiledTranslation,\r\n inferCompiledTranslationMap,\r\n inferCompiledTranslationNamespace,\r\n} from './compile';\r\nimport { replaceWithDelim } from './delim';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { injectDefaultLocale, TranslationStore } from './translation-store';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntype AnyStringRecord = Record<string, any>;\r\n\r\nfunction createEqualsRecord<T extends AnyStringRecord>(keys: (keyof T)[] = []) {\r\n let keyMatcher: (a: T, b: T) => boolean;\r\n\r\n if (keys.length === 0) {\r\n keyMatcher = () => true;\r\n } else if (keys.length === 1) {\r\n const key = keys[0];\r\n keyMatcher = (a, b) => a[key] === b[key];\r\n } else {\r\n keyMatcher = (a, b) => {\r\n return keys.every((k) => a[k] === b[k]);\r\n };\r\n }\r\n\r\n return (a?: T, b?: T): boolean => {\r\n if (!a && !b) return true;\r\n if (!a || !b) return false;\r\n return keyMatcher(a, b);\r\n };\r\n}\r\n\r\ntype TFunction<TMap extends AnyStringRecord> = <\r\n TKey extends keyof TMap & string,\r\n>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\r\n) => string;\r\n\r\ntype SignalTFunction<TMap extends AnyStringRecord> = <\r\n TKey extends keyof TMap & string,\r\n>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\r\n) => Signal<string>;\r\n\r\ntype TFunctionWithSignalConstructor<\r\n TMap extends AnyStringRecord,\r\n TFN extends TFunction<TMap>,\r\n> = TFN & {\r\n asSignal: SignalTFunction<TMap>;\r\n};\r\n\r\nfunction addSignalFn<TMap extends AnyStringRecord, TFn extends TFunction<TMap>>(\r\n fn: TFn,\r\n store: TranslationStore,\r\n): TFunctionWithSignalConstructor<TMap, TFn> {\r\n const withSig = fn as TFunctionWithSignalConstructor<TMap, TFn>;\r\n\r\n const asSignal = <TKey extends keyof TMap & string>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [() => TMap[TKey]]\r\n ): Signal<string> => {\r\n const variables = args[0] as () => AnyStringRecord | undefined;\r\n const stringKey = key as string;\r\n\r\n const flatPath = replaceWithDelim(stringKey);\r\n\r\n const varsFn = variables ?? (() => undefined);\r\n const varsSignal = isSignal(varsFn)\r\n ? varsFn\r\n : computed(varsFn, {\r\n equal: createEqualsRecord(Object.keys(varsFn() ?? {})),\r\n });\r\n\r\n return computed(() => store.formatMessage(flatPath, varsSignal()));\r\n };\r\n\r\n withSig.asSignal = asSignal;\r\n\r\n return withSig;\r\n}\r\n\r\nexport function createT<TMap extends AnyStringRecord>(\r\n store: TranslationStore,\r\n): TFunction<TMap> {\r\n return <TKey extends keyof TMap & string>(\r\n key: TKey,\r\n ...args: TMap[TKey] extends void ? [] : [TMap[TKey]]\r\n ): string => {\r\n const variables = args[0] as AnyStringRecord | undefined;\r\n const stringKey = key as string;\r\n\r\n return store.formatMessage(replaceWithDelim(stringKey), variables);\r\n };\r\n}\r\n\r\nexport function registerNamespace<\r\n TDefault extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n>(\r\n defaultTranslation: () => Promise<TDefault>,\r\n other: Record<\r\n string,\r\n () => Promise<\r\n CompiledTranslation<\r\n UnknownStringKeyObject,\r\n inferCompiledTranslationNamespace<TDefault>,\r\n string\r\n >\r\n >\r\n >,\r\n) {\r\n type $Map = inferCompiledTranslationMap<TDefault>;\r\n type $BaseTFN = TFunction<$Map>;\r\n type $TFN = TFunctionWithSignalConstructor<$Map, $BaseTFN>;\r\n\r\n const injectT = (): $TFN => {\r\n const store = inject(TranslationStore);\r\n\r\n return addSignalFn(createT(store), store);\r\n };\r\n\r\n let defaultTranslationLoaded = false;\r\n const resolver = async () => {\r\n const store = inject(TranslationStore);\r\n const locale = untracked(store.locale);\r\n const defaultLocale = injectDefaultLocale();\r\n const tPromise = other[locale] as (typeof other)[string] | undefined;\r\n\r\n const promise = tPromise ?? defaultTranslation;\r\n if (!promise && isDevMode()) {\r\n return console.warn(`No translation found for locale: ${locale}`);\r\n }\r\n\r\n if (promise === defaultTranslation && defaultTranslationLoaded) return;\r\n\r\n try {\r\n const translation = await promise();\r\n\r\n if (\r\n promise !== defaultTranslation &&\r\n translation.locale !== locale &&\r\n isDevMode()\r\n ) {\r\n return console.warn(\r\n `Expected locale to be ${locale} but got ${translation.locale}`,\r\n );\r\n }\r\n\r\n store.registerOnDemandLoaders(translation.namespace, {\r\n ...other,\r\n [defaultLocale]: defaultTranslation,\r\n });\r\n\r\n store.register(translation.namespace, {\r\n [locale]: translation.flat,\r\n });\r\n if (promise === defaultTranslation) {\r\n defaultTranslationLoaded = true;\r\n }\r\n } catch {\r\n if (isDevMode()) {\r\n console.warn(`Failed to load translation for locale: ${locale}`);\r\n }\r\n }\r\n };\r\n\r\n return {\r\n injectNamespaceT: injectT,\r\n resolveNamespaceTranslation: resolver,\r\n };\r\n}\r\n","import {\r\n afterRenderEffect,\r\n computed,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { CompiledTranslation, inferCompiledTranslationMap } from './compile';\r\nimport { createT } from './register-namespace';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { TranslationStore } from './translation-store';\r\n\r\n@Directive()\r\nexport abstract class Translate<\r\n TInput extends string,\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\r\n TKey extends TInput & keyof TMap & string = TInput & keyof TMap & string,\r\n> {\r\n private readonly t = createT(inject(TranslationStore));\r\n\r\n readonly translate =\r\n input.required<\r\n TMap[TKey] extends void\r\n ? TKey | [key: TKey]\r\n : [key: TKey, vars: TMap[TKey]]\r\n >();\r\n\r\n constructor() {\r\n const key = computed(() => {\r\n const vars = this.translate();\r\n return (Array.isArray(vars) ? vars[0] : vars) as TKey;\r\n });\r\n\r\n const args = computed(\r\n () => {\r\n const vars = this.translate();\r\n return (Array.isArray(vars) ? vars[1] : undefined) as TMap[TKey];\r\n },\r\n {\r\n equal: (a, b) => {\r\n if (a === undefined && b === undefined) return true;\r\n if (a === undefined || b === undefined) return false;\r\n\r\n const aObj = a as Record<string, string>;\r\n const keys = Object.keys(aObj);\r\n const bObj = b as Record<string, string>;\r\n\r\n if (!keys.length) return !Object.keys(bObj).length;\r\n\r\n return keys.every((key) => aObj[key] === bObj[key]);\r\n },\r\n },\r\n );\r\n\r\n const translation = computed(() => this.t(key(), args()));\r\n\r\n const renderer = inject(Renderer2);\r\n const el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n afterRenderEffect({\r\n write: () => {\r\n renderer.setProperty(el.nativeElement, 'textContent', translation());\r\n },\r\n });\r\n }\r\n}\r\n","import { ChangeDetectorRef, effect, inject } from '@angular/core';\r\nimport { CompiledTranslation, inferCompiledTranslationMap } from './compile';\r\nimport { createT } from './register-namespace';\r\nimport { UnknownStringKeyObject } from './string-key-object.type';\r\nimport { TranslationStore } from './translation-store';\r\n\r\nexport abstract class Translator<\r\n T extends CompiledTranslation<UnknownStringKeyObject, string>,\r\n TMap extends inferCompiledTranslationMap<T> = inferCompiledTranslationMap<T>,\r\n> {\r\n private readonly store = inject(TranslationStore);\r\n private readonly t = createT<TMap>(this.store);\r\n\r\n constructor() {\r\n const cdr = inject(ChangeDetectorRef);\r\n\r\n effect(() => {\r\n this.store.locale();\r\n cdr.markForCheck();\r\n });\r\n }\r\n\r\n transform<K extends keyof TMap & string>(\r\n key: K,\r\n ...args: TMap[K] extends void\r\n ? [locale?: string]\r\n : [TMap[K], locale?: string]\r\n ): string {\r\n const actualArgs = args.filter(\r\n (a) => typeof a === 'object',\r\n ) as TMap[K] extends void ? [] : [TMap[K]];\r\n\r\n return this.t(key, ...actualArgs);\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmstack/translate",
3
- "version": "21.0.0",
3
+ "version": "21.0.1",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "localize",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@angular/core": ">=21 <22",
18
- "@formatjs/intl": "~3.1.8"
18
+ "@formatjs/intl": "~3.1.8 || ~4.0.4"
19
19
  },
20
20
  "homepage": "https://github.com/mihajm/mmstack/blob/master/packages/translate",
21
21
  "sideEffects": false,