New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

@umatch/language

Package Overview
Dependencies
Maintainers
0
Versions
38
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@umatch/language - npm Package Compare versions

Comparing version
4.3.7
to
4.4.0
+7
-3
lib/index.d.ts
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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"}

@@ -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 @@ *

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"}
{
"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",

@@ -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).

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 @@ *

@@ -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);