trousse 1.0.1 → 1.1.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.
- package/README.md +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/locales.d.ts +6 -0
- package/dist/locales.js +22 -0
- package/dist/matching.d.ts +5 -5
- package/dist/urls.d.ts +2 -2
- package/dist/urls.js +2 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/trousse)
|
|
5
5
|
[](https://github.com/macieklamberski/trousse/blob/main/LICENSE)
|
|
6
6
|
|
|
7
|
-
Personal toolbox of shared TypeScript utilities used across my projects: type guards, coercions, matching and
|
|
7
|
+
Personal toolbox of shared TypeScript utilities used across my projects: type guards, coercions, matching, array and locale interpolation helpers.
|
|
8
8
|
|
|
9
9
|
## Installation
|
|
10
10
|
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ import { MaybePromise, Nullish, Pattern } from "./types.js";
|
|
|
3
3
|
import { coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString } from "./coercions.js";
|
|
4
4
|
import { isBoolean, isFunction, isNonEmptyString, isNullish, isNumber, isObject, isPlainObject, isPresent, isString, isValidDate } from "./is.js";
|
|
5
5
|
import { isJsonLike, isParseableJson } from "./json.js";
|
|
6
|
+
import { escapeHtml, t, tx } from "./locales.js";
|
|
6
7
|
import { anyWordMatchesAnyOf, endsWithAnyOf, includesAnyOf, isAnyOf, startsWithAnyOf } from "./matching.js";
|
|
7
8
|
import { sleep } from "./timers.js";
|
|
8
9
|
import { getPathSegments, isHostOf, isSubdomainOf, parseUrl } from "./urls.js";
|
|
9
|
-
export { type MaybePromise, type Nullish, type Pattern, anyWordMatchesAnyOf, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, endsWithAnyOf, getPathSegments, includesAnyOf, isAnyOf, isBoolean, isFunction, isHostOf, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, omitEmpty, parseUrl, sleep, startsWithAnyOf };
|
|
10
|
+
export { type MaybePromise, type Nullish, type Pattern, anyWordMatchesAnyOf, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, endsWithAnyOf, escapeHtml, getPathSegments, includesAnyOf, isAnyOf, isBoolean, isFunction, isHostOf, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, omitEmpty, parseUrl, sleep, startsWithAnyOf, t, tx };
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,8 @@ import { isBoolean, isFunction, isNonEmptyString, isNullish, isNumber, isObject,
|
|
|
2
2
|
import { omitEmpty } from "./arrays.js";
|
|
3
3
|
import { coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString } from "./coercions.js";
|
|
4
4
|
import { isJsonLike, isParseableJson } from "./json.js";
|
|
5
|
+
import { escapeHtml, t, tx } from "./locales.js";
|
|
5
6
|
import { anyWordMatchesAnyOf, endsWithAnyOf, includesAnyOf, isAnyOf, startsWithAnyOf } from "./matching.js";
|
|
6
7
|
import { sleep } from "./timers.js";
|
|
7
8
|
import { getPathSegments, isHostOf, isSubdomainOf, parseUrl } from "./urls.js";
|
|
8
|
-
export { anyWordMatchesAnyOf, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, endsWithAnyOf, getPathSegments, includesAnyOf, isAnyOf, isBoolean, isFunction, isHostOf, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, omitEmpty, parseUrl, sleep, startsWithAnyOf };
|
|
9
|
+
export { anyWordMatchesAnyOf, coerceArray, coerceBoolean, coerceDate, coerceNumber, coerceSingular, coerceString, endsWithAnyOf, escapeHtml, getPathSegments, includesAnyOf, isAnyOf, isBoolean, isFunction, isHostOf, isJsonLike, isNonEmptyString, isNullish, isNumber, isObject, isParseableJson, isPlainObject, isPresent, isString, isSubdomainOf, isValidDate, omitEmpty, parseUrl, sleep, startsWithAnyOf, t, tx };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
//#region src/locales.d.ts
|
|
2
|
+
declare const escapeHtml: (value: string) => string;
|
|
3
|
+
declare const t: (template: string, params: Record<string, string | number>) => string;
|
|
4
|
+
declare const tx: (template: string, params: Record<string, string | number>) => string;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { escapeHtml, t, tx };
|
package/dist/locales.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/locales.ts
|
|
2
|
+
const placeholderRegex = /\{\{(\w+)\}\}/g;
|
|
3
|
+
const escapableRegex = /[&<>"']/g;
|
|
4
|
+
const escapeHtml = (value) => {
|
|
5
|
+
return value.replace(escapableRegex, (char) => {
|
|
6
|
+
switch (char) {
|
|
7
|
+
case "&": return "&";
|
|
8
|
+
case "<": return "<";
|
|
9
|
+
case ">": return ">";
|
|
10
|
+
case "\"": return """;
|
|
11
|
+
default: return "'";
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
const t = (template, params) => {
|
|
16
|
+
return template.replace(placeholderRegex, (_, key) => String(params[key]));
|
|
17
|
+
};
|
|
18
|
+
const tx = (template, params) => {
|
|
19
|
+
return template.replace(placeholderRegex, (_, key) => escapeHtml(String(params[key])));
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
22
|
+
export { escapeHtml, t, tx };
|
package/dist/matching.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Pattern } from "./types.js";
|
|
2
2
|
|
|
3
3
|
//#region src/matching.d.ts
|
|
4
|
-
declare const isAnyOf: (value: string, patterns:
|
|
5
|
-
declare const includesAnyOf: (value: string, patterns:
|
|
6
|
-
declare const startsWithAnyOf: (value: string, patterns:
|
|
7
|
-
declare const endsWithAnyOf: (value: string, patterns:
|
|
8
|
-
declare const anyWordMatchesAnyOf: (value: string, patterns:
|
|
4
|
+
declare const isAnyOf: (value: string, patterns: ReadonlyArray<Pattern>, parser?: (value: string) => string) => boolean;
|
|
5
|
+
declare const includesAnyOf: (value: string, patterns: ReadonlyArray<Pattern>, parser?: (value: string) => string) => boolean;
|
|
6
|
+
declare const startsWithAnyOf: (value: string, patterns: ReadonlyArray<Pattern>) => boolean;
|
|
7
|
+
declare const endsWithAnyOf: (value: string, patterns: ReadonlyArray<Pattern>) => boolean;
|
|
8
|
+
declare const anyWordMatchesAnyOf: (value: string, patterns: ReadonlyArray<Pattern>) => boolean;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { anyWordMatchesAnyOf, endsWithAnyOf, includesAnyOf, isAnyOf, startsWithAnyOf };
|
package/dist/urls.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//#region src/urls.d.ts
|
|
2
2
|
declare const parseUrl: (value: string | URL, base?: string | URL) => URL | undefined;
|
|
3
3
|
declare const getPathSegments: (value: string | URL) => Array<string>;
|
|
4
|
-
declare const isHostOf: (url: string | URL, hosts: string |
|
|
5
|
-
declare const isSubdomainOf: (url: string | URL, domains: string |
|
|
4
|
+
declare const isHostOf: (url: string | URL, hosts: string | ReadonlyArray<string>) => boolean;
|
|
5
|
+
declare const isSubdomainOf: (url: string | URL, domains: string | ReadonlyArray<string>) => boolean;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { getPathSegments, isHostOf, isSubdomainOf, parseUrl };
|
package/dist/urls.js
CHANGED
|
@@ -12,12 +12,12 @@ const getPathSegments = (value) => {
|
|
|
12
12
|
const isHostOf = (url, hosts) => {
|
|
13
13
|
const hostname = parseUrl(url)?.hostname;
|
|
14
14
|
if (!hostname) return false;
|
|
15
|
-
return isAnyOf(hostname,
|
|
15
|
+
return isAnyOf(hostname, typeof hosts === "string" ? [hosts] : hosts);
|
|
16
16
|
};
|
|
17
17
|
const isSubdomainOf = (url, domains) => {
|
|
18
18
|
const hostname = parseUrl(url)?.hostname;
|
|
19
19
|
if (!hostname) return false;
|
|
20
|
-
return endsWithAnyOf(hostname, (
|
|
20
|
+
return endsWithAnyOf(hostname, (typeof domains === "string" ? [domains] : domains).map((domain) => `.${domain}`));
|
|
21
21
|
};
|
|
22
22
|
//#endregion
|
|
23
23
|
export { getPathSegments, isHostOf, isSubdomainOf, parseUrl };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trousse",
|
|
3
|
-
"description": "Personal toolbox of shared TypeScript utilities: type guards, coercions, matching and
|
|
3
|
+
"description": "Personal toolbox of shared TypeScript utilities: type guards, coercions, matching, array and locale interpolation helpers.",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/macieklamberski/trousse.git"
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"kvalita": "^1.15.0",
|
|
41
41
|
"tsdown": "^0.22.2"
|
|
42
42
|
},
|
|
43
|
-
"version": "1.
|
|
43
|
+
"version": "1.1.1"
|
|
44
44
|
}
|