@umatch/language
Advanced tools
+7
-3
| import { type DeepObject, type NestedPaths, type Payload, type TypeFromPath } from '@umatch/utils'; | ||
| import { type Pluralizer } from '@umatch/utils/string'; | ||
| import { type ToOrdinal, type ToPlural } from '@umatch/utils/string'; | ||
| import deepReplace, { type CountsTranslation, type DeepReplace } from './replace'; | ||
@@ -11,3 +11,3 @@ export { deepReplace, type CountsTranslation }; | ||
| declare class Language<Locales extends string, LocaleTranslationMap extends { | ||
| [L in Locales]: readonly [ITranslation, Pluralizer]; | ||
| [L in Locales]: readonly [ITranslation, ToPlural, ToOrdinal]; | ||
| }, Translations extends LocaleTranslationMap[keyof LocaleTranslationMap][0], NotificationTranslations extends Translations['notifications']> { | ||
@@ -43,3 +43,3 @@ private readonly translationMap; | ||
| */ | ||
| getNotification<Locale extends Locales, Path extends NestedPaths<NotificationTranslations>, Translation extends TypeFromPath<NotificationTranslations, Path>, const Replacements extends Payload | undefined = undefined, const AllowedLeftovers extends 'all' | readonly string[] = readonly [], Pluralize extends Pluralizer | undefined = LocaleTranslationMap[Locale][1]>(locale: Locale, path: Path, replacements?: Replacements, allowedLeftovers?: AllowedLeftovers): Translation extends { | ||
| getNotification<Locale extends Locales, Path extends NestedPaths<NotificationTranslations>, Translation extends TypeFromPath<NotificationTranslations, Path>, const Replacements extends Payload | undefined = undefined, const AllowedLeftovers extends 'all' | readonly string[] = readonly [], Pluralize extends ToPlural | undefined = LocaleTranslationMap[Locale][1]>(locale: Locale, path: Path, replacements?: Replacements, allowedLeftovers?: AllowedLeftovers): Translation extends { | ||
| titles: readonly (infer Title)[]; | ||
@@ -58,2 +58,6 @@ bodies: readonly (infer Body)[]; | ||
| /** | ||
| * Returns the ordinal form of the number. | ||
| */ | ||
| ordinal<Locale extends Locales>(locale: Locale, num: number): string; | ||
| /** | ||
| * Returns the plural form of the word. | ||
@@ -60,0 +64,0 @@ * |
@@ -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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"} |
+7
-0
@@ -70,2 +70,9 @@ "use strict"; | ||
| /** | ||
| * Returns the ordinal form of the number. | ||
| */ | ||
| ordinal(locale, num) { | ||
| const [_, __, ordinal] = this.translationMap[locale]; | ||
| return ordinal(num); | ||
| } | ||
| /** | ||
| * Returns the plural form of the word. | ||
@@ -72,0 +79,0 @@ * |
+5
-5
| 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' | 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}`; | ||
| import type { ToPlural, Trim } from '@umatch/utils/string'; | ||
| type SkipAllowedKeyOrThrow<S extends string, Rep extends Payload | undefined, Allowed extends 'all' | ReadonlyArray<string>, Pluralize extends ToPlural | 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 ToPlural | 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: { | ||
@@ -28,3 +28,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' | ReadonlyArray<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 ToPlural | undefined> = T extends string ? SimpleReplace<T, Replacements, AllowedLeftovers, Pluralize> : T extends Dictionary ? Replacements extends { | ||
| count: infer Count extends number; | ||
@@ -44,4 +44,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 | ReadonlyArray<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>; | ||
| declare function deepReplace<const T extends string | ReadonlyArray<DeepNode<Primitive>> | DeepObject<Primitive>, const Replacements extends Payload | undefined = undefined, const AllowedLeftovers extends 'all' | ReadonlyArray<string> = readonly [], Pluralize extends ToPlural | 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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"} |
| import { type Payload, type Primitive } from '@umatch/utils'; | ||
| import { type Pluralizer, type Trim, type Unquote } from '@umatch/utils/string'; | ||
| type TemplateFunction = (replacements: Payload, pluralize?: Pluralizer, ...args: Primitive[]) => string; | ||
| type ApplyTemplateFunction<Function extends keyof TemplateFunctions, Args extends string, Replacements extends Payload, Pluralize extends Pluralizer | undefined> = Function extends 'plural' ? Pluralize extends undefined ? never : Replacements extends { | ||
| import { type ToPlural, type Trim, type Unquote } from '@umatch/utils/string'; | ||
| type TemplateFunction = (replacements: Payload, pluralize?: ToPlural, ...args: Primitive[]) => string; | ||
| type ApplyTemplateFunction<Function extends keyof TemplateFunctions, Args extends string, Replacements extends Payload, Pluralize extends ToPlural | undefined> = Function extends 'plural' ? Pluralize extends undefined ? never : Replacements extends { | ||
| count: infer Count extends number; | ||
@@ -18,3 +18,3 @@ } ? Args extends '' ? never : Args extends `${infer _1},${infer _2},${infer _3}` ? never : Args extends `${infer First},${infer Second}` ? Trim<First> extends infer Singular extends string ? Unquote<Singular> extends Singular ? never : Trim<Second> extends infer Plural extends string ? Unquote<Plural> extends Plural ? never : Count extends 1 ? Unquote<Singular> : Unquote<Plural> : never : never : Trim<Args> extends infer Singular extends string ? Unquote<Singular> extends Singular ? never : Count extends 1 ? Unquote<Singular> : `${Unquote<Singular>}s` : never : never : never; | ||
| */ | ||
| declare function findAndExecuteTemplateFunction(string: string, replacements: Payload, pluralize?: Pluralizer): string | null; | ||
| declare function findAndExecuteTemplateFunction(string: string, replacements: Payload, pluralize?: ToPlural): string | null; | ||
| /** | ||
@@ -21,0 +21,0 @@ * Functions that are recognized inside templates and executed. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"templateFunctions.d.ts","sourceRoot":"","sources":["../src/templateFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,OAAO,EACb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,gBAAgB,GAAG,CACtB,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,UAAU,EACtB,GAAG,IAAI,EAAE,SAAS,EAAE,KACjB,MAAM,CAAC;AAEZ,KAAK,qBAAqB,CACxB,QAAQ,SAAS,MAAM,iBAAiB,EACxC,IAAI,SAAS,MAAM,EACnB,YAAY,SAAS,OAAO,EAC5B,SAAS,SAAS,UAAU,GAAG,SAAS,IACtC,QAAQ,SAAS,QAAQ,GACzB,SAAS,SAAS,SAAS,GACzB,KAAK,GACL,YAAY,SAAS;IAAE,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,CAAA;CAAE,GAC1D,IAAI,SAAS,EAAE,GAEb,KAAK,GACL,IAAI,SAAS,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,EAAE,GAElD,KAAK,GACL,IAAI,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,MAAM,EAAE,GAE7C,IAAI,CAAC,KAAK,CAAC,SAAS,MAAM,QAAQ,SAAS,MAAM,GAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,QAAQ,GAEhC,KAAK,GACL,IAAI,CAAC,MAAM,CAAC,SAAS,MAAM,MAAM,SAAS,MAAM,GAChD,OAAO,CAAC,MAAM,CAAC,SAAS,MAAM,GAE5B,KAAK,GACL,KAAK,SAAS,CAAC,GACf,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC,MAAM,CAAC,GACjB,KAAK,GACP,KAAK,GAET,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,QAAQ,SAAS,MAAM,GAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,QAAQ,GAEhC,KAAK,GACL,KAAK,SAAS,CAAC,GACf,OAAO,CAAC,QAAQ,CAAC,GACjB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,GACzB,KAAK,GACP,KAAK,GACP,KAAK,CAAC;AA2CV,QAAA,MAAM,kBAAkB;;CAEd,CAAC;AAEX;;;;;;;GAOG;AACH,iBAAS,8BAA8B,CACrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,UAAU,GACrB,MAAM,GAAG,IAAI,CAWf;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,OAAO,kBAAkB,CAAC;AAEnD,OAAO,EACL,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,CAAC"} | ||
| {"version":3,"file":"templateFunctions.d.ts","sourceRoot":"","sources":["../src/templateFunctions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,IAAI,EACT,KAAK,OAAO,EACb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,gBAAgB,GAAG,CACtB,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,QAAQ,EACpB,GAAG,IAAI,EAAE,SAAS,EAAE,KACjB,MAAM,CAAC;AAEZ,KAAK,qBAAqB,CACxB,QAAQ,SAAS,MAAM,iBAAiB,EACxC,IAAI,SAAS,MAAM,EACnB,YAAY,SAAS,OAAO,EAC5B,SAAS,SAAS,QAAQ,GAAG,SAAS,IACpC,QAAQ,SAAS,QAAQ,GACzB,SAAS,SAAS,SAAS,GACzB,KAAK,GACL,YAAY,SAAS;IAAE,KAAK,EAAE,MAAM,KAAK,SAAS,MAAM,CAAA;CAAE,GAC1D,IAAI,SAAS,EAAE,GAEb,KAAK,GACL,IAAI,SAAS,GAAG,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,MAAM,EAAE,EAAE,GAElD,KAAK,GACL,IAAI,SAAS,GAAG,MAAM,KAAK,IAAI,MAAM,MAAM,EAAE,GAE7C,IAAI,CAAC,KAAK,CAAC,SAAS,MAAM,QAAQ,SAAS,MAAM,GAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,QAAQ,GAEhC,KAAK,GACL,IAAI,CAAC,MAAM,CAAC,SAAS,MAAM,MAAM,SAAS,MAAM,GAChD,OAAO,CAAC,MAAM,CAAC,SAAS,MAAM,GAE5B,KAAK,GACL,KAAK,SAAS,CAAC,GACf,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC,MAAM,CAAC,GACjB,KAAK,GACP,KAAK,GAET,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,QAAQ,SAAS,MAAM,GAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,QAAQ,GAEhC,KAAK,GACL,KAAK,SAAS,CAAC,GACf,OAAO,CAAC,QAAQ,CAAC,GACjB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,GACzB,KAAK,GACP,KAAK,GACP,KAAK,CAAC;AA2CV,QAAA,MAAM,kBAAkB;;CAEd,CAAC;AAEX;;;;;;;GAOG;AACH,iBAAS,8BAA8B,CACrC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,OAAO,EACrB,SAAS,CAAC,EAAE,QAAQ,GACnB,MAAM,GAAG,IAAI,CAWf;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GAAG,OAAO,kBAAkB,CAAC;AAEnD,OAAO,EACL,8BAA8B,EAC9B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,GACvB,CAAC"} |
+3
-3
| { | ||
| "name": "@umatch/language", | ||
| "version": "4.3.7", | ||
| "version": "4.4.0", | ||
| "main": "lib/index.js", | ||
@@ -42,6 +42,6 @@ "types": "lib/index.d.ts", | ||
| "dependencies": { | ||
| "@umatch/utils": "^16.0.0" | ||
| "@umatch/utils": "^17.0.0" | ||
| }, | ||
| "scripts": { | ||
| "build": "tsc --build src", | ||
| "build": "tsc -p tsconfig.build.json", | ||
| "test": "jest", | ||
@@ -48,0 +48,0 @@ "lint": "eslint . --ext=.ts", |
+2
-2
@@ -5,5 +5,5 @@ # Language | ||
| Check out `tests/language.test.ts` for some examples. | ||
| Check out `tests/language.test.ts` for an in-depth example of how to use this library. | ||
| ## deepReplace | ||
| ## The 'deepReplace' function | ||
@@ -10,0 +10,0 @@ Replaces all occurrences of `{{ value }}` in all strings inside target object (which may be nested) with the corresponding value in the **replacements** object (dictionary). |
+14
-4
| import { | ||
| isString, | ||
| type DeepNode, | ||
| type DeepObject, | ||
@@ -7,7 +8,6 @@ type NestedPaths, | ||
| type TypeFromPath, | ||
| type DeepNode, | ||
| } from '@umatch/utils'; | ||
| import { pickRandom } from '@umatch/utils/math'; | ||
| import { getDeepProperty } from '@umatch/utils/object'; | ||
| import { join, type Pluralizer } from '@umatch/utils/string'; | ||
| import { join, type ToOrdinal, type ToPlural } from '@umatch/utils/string'; | ||
@@ -25,3 +25,5 @@ import deepReplace, { type CountsTranslation, type DeepReplace } from './replace'; | ||
| Locales extends string, | ||
| LocaleTranslationMap extends { [L in Locales]: readonly [ITranslation, Pluralizer] }, | ||
| LocaleTranslationMap extends { | ||
| [L in Locales]: readonly [ITranslation, ToPlural, ToOrdinal]; | ||
| }, | ||
| Translations extends LocaleTranslationMap[keyof LocaleTranslationMap][0], | ||
@@ -104,3 +106,3 @@ NotificationTranslations extends Translations['notifications'], | ||
| const AllowedLeftovers extends 'all' | readonly string[] = readonly [], | ||
| Pluralize extends Pluralizer | undefined = LocaleTranslationMap[Locale][1], | ||
| Pluralize extends ToPlural | undefined = LocaleTranslationMap[Locale][1], | ||
| >( | ||
@@ -182,2 +184,10 @@ locale: Locale, | ||
| /** | ||
| * Returns the ordinal form of the number. | ||
| */ | ||
| public ordinal<Locale extends Locales>(locale: Locale, num: number): string { | ||
| const [_, __, ordinal] = this.translationMap[locale]; | ||
| return ordinal(num); | ||
| } | ||
| /** | ||
| * Returns the plural form of the word. | ||
@@ -184,0 +194,0 @@ * |
+8
-8
@@ -20,3 +20,3 @@ import { | ||
| import type { Pluralizer, Trim } from '@umatch/utils/string'; | ||
| import type { ToPlural, Trim } from '@umatch/utils/string'; | ||
@@ -27,3 +27,3 @@ type SkipAllowedKeyOrThrow< | ||
| Allowed extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
| Pluralize extends ToPlural | undefined, | ||
| Acc extends string, | ||
@@ -41,3 +41,3 @@ Key extends string, | ||
| Allowed extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
| Pluralize extends ToPlural | undefined, | ||
| Acc extends string = '', | ||
@@ -114,3 +114,3 @@ > = S extends `${infer A}{{${infer B}}}${infer C}` | ||
| AllowedLeftovers extends 'all' | ReadonlyArray<string>, | ||
| Pluralize extends Pluralizer | undefined, | ||
| Pluralize extends ToPlural | undefined, | ||
| > = T extends string | ||
@@ -144,3 +144,3 @@ ? SimpleReplace<T, Replacements, AllowedLeftovers, Pluralize> | ||
| const AllowedLeftovers extends 'all' | ReadonlyArray<string> = readonly [], | ||
| Pluralize extends Pluralizer | undefined = undefined, | ||
| Pluralize extends ToPlural | undefined = undefined, | ||
| >( | ||
@@ -182,3 +182,3 @@ target: T, | ||
| const AllowedLeftovers extends 'all' | ReadonlyArray<string> = [], | ||
| Pluralize extends Pluralizer | undefined = undefined, | ||
| Pluralize extends ToPlural | undefined = undefined, | ||
| >( | ||
@@ -188,3 +188,3 @@ value: S, | ||
| allowedLeftovers: AllowedLeftovers, | ||
| pluralize?: Pluralizer, | ||
| pluralize?: ToPlural, | ||
| ): SimpleReplace<S, Replacements, AllowedLeftovers, Pluralize> { | ||
@@ -232,3 +232,3 @@ return value.replace(/{{([^}]+)}}/g, (match, key) => { | ||
| allowedLeftovers: 'all' | ReadonlyArray<string>, | ||
| pluralize?: Pluralizer, | ||
| pluralize?: ToPlural, | ||
| ): T | string { | ||
@@ -235,0 +235,0 @@ const { count } = replacements; |
| import { isKeyOf, isNumber, isString, type Payload, type Primitive } from '@umatch/utils'; | ||
| import { | ||
| parseFunctionCall, | ||
| type Pluralizer, | ||
| type ToPlural, | ||
| type Trim, | ||
@@ -11,3 +11,3 @@ type Unquote, | ||
| replacements: Payload, | ||
| pluralize?: Pluralizer, | ||
| pluralize?: ToPlural, | ||
| ...args: Primitive[] | ||
@@ -20,3 +20,3 @@ ) => string; | ||
| Replacements extends Payload, | ||
| Pluralize extends Pluralizer | undefined, | ||
| Pluralize extends ToPlural | undefined, | ||
| > = Function extends 'plural' | ||
@@ -115,3 +115,3 @@ ? Pluralize extends undefined | ||
| replacements: Payload, | ||
| pluralize?: Pluralizer, | ||
| pluralize?: ToPlural, | ||
| ): string | null { | ||
@@ -118,0 +118,0 @@ const [name, args] = parseFunctionCall(string); |
52490
1.42%1012
2.02%+ Added
- Removed
Updated