@umatch/language
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+14
-1
@@ -37,3 +37,16 @@ "use strict"; | ||
| } | ||
| getNotification(locale, path, replacements = {}, allowedLeftovers = []) { | ||
| /** | ||
| * Gets notification content from the translations file. | ||
| * | ||
| * Accesses properties in the order they are given in the path | ||
| * parameter, prefixing them with 'notifications'. Then, chooses one | ||
| * title and one body at random from each array, replaces variables in | ||
| * the resulting strings and returns them. | ||
| * | ||
| * @param locale | ||
| * @param path Properties to access joined by periods. | ||
| * @param [replacements] Values to replace. | ||
| * @param [allowedLeftovers] Values which can be left unreplaced. | ||
| */ | ||
| getNotification(locale, path, replacements, allowedLeftovers) { | ||
| const { titles, bodies } = this.get(locale, | ||
@@ -40,0 +53,0 @@ // @ts-expect-error |
+5
-5
@@ -1,6 +0,6 @@ | ||
| import { type DeepArray, type DeepObject, type Dictionary, type Payload, type Primitive, type ValueOf } from '@umatch/utils'; | ||
| import { type DeepNode, type DeepObject, type Dictionary, type Payload, type Primitive, type ValueOf } from '@umatch/utils'; | ||
| import { type ApplyTemplateFunction, type TemplateFunctions } from './templateFunctions'; | ||
| import type { Pluralizer, Trim } from '@umatch/utils/string'; | ||
| type SkipAllowedKeyOrThrow<S extends string, Rep extends Payload | undefined, Allowed extends 'all' | readonly string[], Pluralize extends Pluralizer | undefined, Acc extends string, Key extends string> = Allowed extends 'all' ? SimpleReplace<S, Rep, Allowed, Pluralize, Acc> : Key extends Allowed[number] ? SimpleReplace<S, Rep, Allowed, Pluralize, Acc> : never; | ||
| type SimpleReplace<S extends string, Rep extends Payload | undefined, Allowed extends 'all' | readonly string[], Pluralize extends Pluralizer | undefined, Acc extends string = ''> = S extends `${infer A}{{${infer B}}}${infer C}` ? Trim<B> extends infer Key extends string ? Rep extends Payload ? Key extends keyof Rep ? Rep[Key] extends undefined ? SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : SimpleReplace<C, Rep, Allowed, Pluralize, `${Acc}${A}${Rep[Key]}`> : Key extends `${infer TemplateFunction extends keyof TemplateFunctions}(${infer Args})` ? SimpleReplace<C, Rep, Allowed, Pluralize, `${Acc}${A}${ApplyTemplateFunction<TemplateFunction, Args, Rep, Pluralize>}`> : SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : never : `${Acc}${S}`; | ||
| type SkipAllowedKeyOrThrow<S extends string, Rep extends Payload | undefined, Allowed extends 'all' | ReadonlyArray<string>, Pluralize extends Pluralizer | undefined, Acc extends string, Key extends string> = Allowed extends 'all' ? SimpleReplace<S, Rep, Allowed, Pluralize, Acc> : Key extends Allowed[number] ? SimpleReplace<S, Rep, Allowed, Pluralize, Acc> : never; | ||
| type SimpleReplace<S extends string, Rep extends Payload | undefined, Allowed extends 'all' | ReadonlyArray<string>, Pluralize extends Pluralizer | undefined, Acc extends string = ''> = S extends `${infer A}{{${infer B}}}${infer C}` ? Trim<B> extends infer Key extends string ? Rep extends Payload ? Key extends keyof Rep ? Rep[Key] extends undefined ? SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : SimpleReplace<C, Rep, Allowed, Pluralize, `${Acc}${A}${Rep[Key]}`> : Key extends `${infer TemplateFunction extends keyof TemplateFunctions}(${infer Args})` ? SimpleReplace<C, Rep, Allowed, Pluralize, `${Acc}${A}${ApplyTemplateFunction<TemplateFunction, Args, Rep, Pluralize>}`> : SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : SkipAllowedKeyOrThrow<C, Rep, Allowed, Pluralize, `${Acc}${A}{{${B}}}`, Key> : never : `${Acc}${S}`; | ||
| declare const COUNTS_TRANSLATION_KEYS_PATHS: { | ||
@@ -29,3 +29,3 @@ readonly 0: "zero"; | ||
| type NumberToCountsTranslationKey<Count extends number> = Count extends keyof CountsTranslationKeysPaths ? CountsTranslationKeysPaths[Count] : `${Count}` extends `-${infer _}` ? never : 'many'; | ||
| export type DeepReplace<T, Replacements extends Payload | undefined, AllowedLeftovers extends 'all' | readonly string[], Pluralize extends Pluralizer | undefined> = T extends string ? SimpleReplace<T, Replacements, AllowedLeftovers, Pluralize> : T extends Dictionary ? Replacements extends { | ||
| export type DeepReplace<T, Replacements extends Payload | undefined, AllowedLeftovers extends 'all' | ReadonlyArray<string>, Pluralize extends Pluralizer | undefined> = T extends string ? SimpleReplace<T, Replacements, AllowedLeftovers, Pluralize> : T extends Dictionary ? Replacements extends { | ||
| count: infer Count extends number; | ||
@@ -45,4 +45,4 @@ } ? IsCountsTranslation<T> extends true ? NumberToCountsTranslationKey<Count> extends infer Key ? Key extends keyof T ? SimpleReplace<T[Key] & string, Replacements, AllowedLeftovers, Pluralize> : 'many' extends keyof T ? SimpleReplace<T['many'] & string, Replacements, AllowedLeftovers, Pluralize> : never : never : { | ||
| */ | ||
| declare function deepReplace<const T extends string | DeepArray<Primitive> | DeepObject<Primitive>, const Replacements extends Payload | undefined = undefined, const AllowedLeftovers extends 'all' | readonly string[] = readonly [], Pluralize extends Pluralizer | undefined = undefined>(target: T, replacements?: Replacements, allowedLeftovers?: AllowedLeftovers, pluralize?: Pluralize): DeepReplace<T, Replacements, AllowedLeftovers, Pluralize>; | ||
| declare function deepReplace<const T extends string | Array<DeepNode<Primitive>> | DeepObject<Primitive>, const Replacements extends Payload | undefined = undefined, const AllowedLeftovers extends 'all' | ReadonlyArray<string> = readonly [], Pluralize extends Pluralizer | undefined = undefined>(target: T, replacements?: Replacements, allowedLeftovers?: AllowedLeftovers, pluralize?: Pluralize): DeepReplace<T, Replacements, AllowedLeftovers, Pluralize>; | ||
| export default deepReplace; | ||
| //# sourceMappingURL=replace.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../src/replace.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"replace.d.ts","sourceRoot":"","sources":["../src/replace.ts"],"names":[],"mappings":"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"} |
+8
-3
@@ -28,9 +28,14 @@ "use strict"; | ||
| */ | ||
| function deepReplace(target, replacements = {}, allowedLeftovers = [], pluralize) { | ||
| function deepReplace(target, replacements, allowedLeftovers, pluralize) { | ||
| const reps = replacements ?? {}; | ||
| const lefs = allowedLeftovers ?? []; | ||
| if ((0, utils_1.isString)(target)) { | ||
| return _simpleReplace(target, replacements, allowedLeftovers, pluralize); | ||
| return _simpleReplace(target, reps, lefs, pluralize); | ||
| } | ||
| const clone = structuredClone(target); | ||
| return _deepReplace(clone, replacements, allowedLeftovers, pluralize); | ||
| return _deepReplace(clone, reps, lefs, pluralize); | ||
| } | ||
| /** | ||
| * Replaces in a string. | ||
| */ | ||
| function _simpleReplace(value, replacements, allowedLeftovers, pluralize) { | ||
@@ -37,0 +42,0 @@ return value.replace(/{{([^}]+)}}/g, (match, key) => { |
+1
-1
| { | ||
| "name": "@umatch/language", | ||
| "version": "4.3.4", | ||
| "version": "4.3.5", | ||
| "main": "lib/index.js", | ||
@@ -5,0 +5,0 @@ "types": "lib/index.d.ts", |
+25
-8
@@ -118,9 +118,3 @@ import { | ||
| : never | ||
| : never; | ||
| public getNotification( | ||
| locale: Locales, | ||
| path: string, | ||
| replacements: Payload = {}, | ||
| allowedLeftovers: 'all' | string[] = [], | ||
| ): { title: string; body: string } { | ||
| : never { | ||
| const { titles, bodies } = this.get( | ||
@@ -134,3 +128,26 @@ locale, | ||
| const [title, body] = [titles, bodies].map(pickRandom); | ||
| return { title, body }; | ||
| return { title, body } as Translation extends { | ||
| titles: readonly (infer Title)[]; | ||
| bodies: readonly (infer Body)[]; | ||
| } | ||
| ? DeepReplace< | ||
| Title, | ||
| Replacements, | ||
| AllowedLeftovers, | ||
| Pluralize | ||
| > extends infer FinalTitle extends string | ||
| ? DeepReplace< | ||
| Body, | ||
| Replacements, | ||
| AllowedLeftovers, | ||
| Pluralize | ||
| > extends infer FinalBody extends string | ||
| ? FinalTitle extends never | ||
| ? never | ||
| : FinalBody extends never | ||
| ? never | ||
| : { title: FinalTitle; body: FinalBody } | ||
| : never | ||
| : never | ||
| : never; | ||
| } | ||
@@ -137,0 +154,0 @@ |
+29
-35
@@ -6,3 +6,2 @@ import { | ||
| isString, | ||
| type DeepArray, | ||
| type DeepNode, | ||
@@ -27,3 +26,3 @@ type DeepObject, | ||
| Rep extends Payload | undefined, | ||
| Allowed extends 'all' | readonly string[], | ||
| Allowed extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
@@ -41,3 +40,3 @@ Acc extends string, | ||
| Rep extends Payload | undefined, | ||
| Allowed extends 'all' | readonly string[], | ||
| Allowed extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
@@ -113,3 +112,3 @@ Acc extends string = '', | ||
| Replacements extends Payload | undefined, | ||
| AllowedLeftovers extends 'all' | readonly string[], | ||
| AllowedLeftovers extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
@@ -141,5 +140,5 @@ > = T extends string | ||
| function deepReplace< | ||
| const T extends string | DeepArray<Primitive> | DeepObject<Primitive>, | ||
| const T extends string | Array<DeepNode<Primitive>> | DeepObject<Primitive>, | ||
| const Replacements extends Payload | undefined = undefined, | ||
| const AllowedLeftovers extends 'all' | readonly string[] = readonly [], | ||
| const AllowedLeftovers extends 'all' | ReadonlyArray<string> = readonly [], | ||
| Pluralize extends Pluralizer | undefined = undefined, | ||
@@ -151,23 +150,24 @@ >( | ||
| pluralize?: Pluralize, | ||
| ): DeepReplace<T, Replacements, AllowedLeftovers, Pluralize>; | ||
| /** | ||
| * Replaces all occurrences of {{ value }} in all strings inside target with the | ||
| * corresponding value in the replacements object. Also evaluates [template functions]{@link import('./templateFunctions').TemplateFunctions}. | ||
| * | ||
| * @throws if, for any of the values that need replacing: | ||
| * - it isn't whitelisted via the allowedLeftovers param. | ||
| * - it is not present in the replacements object or has the value of undefined. | ||
| */ | ||
| function deepReplace( | ||
| target: string | Array<DeepNode<Primitive>> | DeepObject<Primitive>, | ||
| replacements: Payload = {}, | ||
| allowedLeftovers: 'all' | string[] = [], | ||
| pluralize?: Pluralizer, | ||
| ): string | Array<DeepNode<Primitive>> | DeepObject<Primitive> { | ||
| ): DeepReplace<T, Replacements, AllowedLeftovers, Pluralize> { | ||
| const reps = replacements ?? {}; | ||
| const lefs = allowedLeftovers ?? []; | ||
| if (isString(target)) { | ||
| return _simpleReplace(target, replacements, allowedLeftovers, pluralize); | ||
| return _simpleReplace(target, reps, lefs, pluralize) as string as DeepReplace< | ||
| T, | ||
| Replacements, | ||
| AllowedLeftovers, | ||
| Pluralize | ||
| >; | ||
| } | ||
| const clone = structuredClone(target); | ||
| return _deepReplace(clone, replacements, allowedLeftovers, pluralize); | ||
| const clone = structuredClone(target) as | ||
| | Array<DeepNode<Primitive>> | ||
| | DeepObject<Primitive>; | ||
| return _deepReplace(clone, reps, lefs, pluralize) as DeepReplace< | ||
| T, | ||
| Replacements, | ||
| AllowedLeftovers, | ||
| Pluralize | ||
| >; | ||
| } | ||
@@ -180,4 +180,4 @@ | ||
| S extends string, | ||
| const Replacements extends Payload | undefined = undefined, | ||
| const AllowedLeftovers extends 'all' | string[] = [], | ||
| const Replacements extends Payload, | ||
| const AllowedLeftovers extends 'all' | ReadonlyArray<string> = [], | ||
| Pluralize extends Pluralizer | undefined = undefined, | ||
@@ -189,9 +189,3 @@ >( | ||
| pluralize?: Pluralizer, | ||
| ): SimpleReplace<S, Replacements, AllowedLeftovers, Pluralize>; | ||
| function _simpleReplace( | ||
| value: string, | ||
| replacements: Payload, | ||
| allowedLeftovers: 'all' | string[], | ||
| pluralize?: Pluralizer, | ||
| ): string { | ||
| ): SimpleReplace<S, Replacements, AllowedLeftovers, Pluralize> { | ||
| return value.replace(/{{([^}]+)}}/g, (match, key) => { | ||
@@ -214,3 +208,3 @@ key = key.trim(); | ||
| return String(val); | ||
| }); | ||
| }) as SimpleReplace<S, Replacements, AllowedLeftovers, Pluralize>; | ||
| } | ||
@@ -236,3 +230,3 @@ | ||
| replacements: Payload, | ||
| allowedLeftovers: 'all' | string[], | ||
| allowedLeftovers: 'all' | ReadonlyArray<string>, | ||
| pluralize?: Pluralizer, | ||
@@ -239,0 +233,0 @@ ): T | string { |
51455
1.3%977
3.06%