@archtx/utils 2.0.3 → 2.0.5
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/dist/exports.d.ts +6 -5
- package/dist/exports.js +7 -5
- package/dist/exports.js.map +1 -1
- package/dist/make-uuid.test.js +1 -1
- package/dist/make-uuid.test.js.map +1 -1
- package/dist/strings/is-email.d.ts +1 -0
- package/dist/strings/is-email.js +5 -0
- package/dist/strings/is-email.js.map +1 -0
- package/dist/strings/is-url.d.ts +1 -0
- package/dist/strings/is-url.js +10 -0
- package/dist/strings/is-url.js.map +1 -0
- package/dist/strings/make-uuid.d.ts +16 -0
- package/dist/strings/make-uuid.js +25 -0
- package/dist/strings/make-uuid.js.map +1 -0
- package/dist/strings/obfuscate-string.d.ts +21 -0
- package/dist/strings/obfuscate-string.js +46 -0
- package/dist/strings/obfuscate-string.js.map +1 -0
- package/dist/strings/pluralize.d.ts +5 -0
- package/dist/strings/pluralize.js +17 -0
- package/dist/strings/pluralize.js.map +1 -0
- package/dist/strings/reproducible-hash.d.ts +5 -0
- package/dist/strings/reproducible-hash.js +23 -0
- package/dist/strings/reproducible-hash.js.map +1 -0
- package/package.json +1 -1
package/dist/exports.d.ts
CHANGED
|
@@ -8,21 +8,22 @@ export * from './deep-freeze.js';
|
|
|
8
8
|
export * from './deep-merge.js';
|
|
9
9
|
export * from './ensure-array.js';
|
|
10
10
|
export * from './format-decimal.js';
|
|
11
|
-
export * from './is-email.js';
|
|
12
11
|
export * from './is-hex-color.js';
|
|
13
12
|
export * from './is-prod.js';
|
|
14
|
-
export * from './is-url.js';
|
|
15
|
-
export * from './make-uuid.js';
|
|
16
|
-
export * from './obfuscate-string.js';
|
|
17
13
|
export * from './object.js';
|
|
18
14
|
export * from './object-diff-paths.js';
|
|
19
15
|
export * from './object-values-to-dot-notation.js';
|
|
20
|
-
export * from './pluralize.js';
|
|
21
16
|
export * from './random-color.js';
|
|
22
17
|
export * from './sanitize-obj-props.js';
|
|
23
18
|
export * from './sleep.js';
|
|
24
19
|
export * from './timeout.js';
|
|
25
20
|
export * from './undefined-default.js';
|
|
21
|
+
export * from './strings/is-email.js';
|
|
22
|
+
export * from './strings/is-url.js';
|
|
23
|
+
export * from './strings/make-uuid.js';
|
|
24
|
+
export * from './strings/obfuscate-string.js';
|
|
25
|
+
export * from './strings/pluralize.js';
|
|
26
|
+
export * from './strings/reproducible-hash.js';
|
|
26
27
|
export * from './constants/millisecond-time.js';
|
|
27
28
|
export * from './constants/second-time.js';
|
|
28
29
|
export * from './datetime/iso-string.js';
|
package/dist/exports.js
CHANGED
|
@@ -8,21 +8,23 @@ export * from './deep-freeze.js';
|
|
|
8
8
|
export * from './deep-merge.js';
|
|
9
9
|
export * from './ensure-array.js';
|
|
10
10
|
export * from './format-decimal.js';
|
|
11
|
-
export * from './is-email.js';
|
|
12
11
|
export * from './is-hex-color.js';
|
|
13
12
|
export * from './is-prod.js';
|
|
14
|
-
export * from './is-url.js';
|
|
15
|
-
export * from './make-uuid.js';
|
|
16
|
-
export * from './obfuscate-string.js';
|
|
17
13
|
export * from './object.js';
|
|
18
14
|
export * from './object-diff-paths.js';
|
|
19
15
|
export * from './object-values-to-dot-notation.js';
|
|
20
|
-
export * from './pluralize.js';
|
|
21
16
|
export * from './random-color.js';
|
|
22
17
|
export * from './sanitize-obj-props.js';
|
|
23
18
|
export * from './sleep.js';
|
|
24
19
|
export * from './timeout.js';
|
|
25
20
|
export * from './undefined-default.js';
|
|
21
|
+
// strings
|
|
22
|
+
export * from './strings/is-email.js';
|
|
23
|
+
export * from './strings/is-url.js';
|
|
24
|
+
export * from './strings/make-uuid.js';
|
|
25
|
+
export * from './strings/obfuscate-string.js';
|
|
26
|
+
export * from './strings/pluralize.js';
|
|
27
|
+
export * from './strings/reproducible-hash.js';
|
|
26
28
|
// utils
|
|
27
29
|
export * from './constants/millisecond-time.js';
|
|
28
30
|
export * from './constants/second-time.js';
|
package/dist/exports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../src/exports.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,oCAAoC,CAAA;AAClD,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AAEtC,UAAU;AACV,cAAc,uBAAuB,CAAA;AACrC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,wBAAwB,CAAA;AACtC,cAAc,gCAAgC,CAAA;AAE9C,QAAQ;AACR,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA"}
|
package/dist/make-uuid.test.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make-uuid.test.js","sourceRoot":"","sources":["../src/make-uuid.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"make-uuid.test.js","sourceRoot":"","sources":["../src/make-uuid.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,UAAU,EAAE,GAAG,EAAE;QACpB,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAA;QAEvB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAA;QAE/C,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC5C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,iEAAiE,EAAE,GAAG,EAAE;QAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEtD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isEmail(email: string): boolean;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export function isEmail(email) {
|
|
2
|
+
const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
3
|
+
return re.test(String(email).trim().toLowerCase());
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=is-email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-email.js","sourceRoot":"","sources":["../../src/strings/is-email.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,EAAE,GACN,uJAAuJ,CAAA;IACzJ,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isUrl(str: string): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function isUrl(str) {
|
|
2
|
+
const pattern = new RegExp('^(https?:\\/\\/)?' + // protocol
|
|
3
|
+
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + // modules name
|
|
4
|
+
'((\\d{1,3}\\.){3}\\d{1,3}))' + // OR ip (v4) address
|
|
5
|
+
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + // port and path
|
|
6
|
+
'(\\?[;&a-z\\d%_.~+=-]*)?' + // query string
|
|
7
|
+
'(\\#[-a-z\\d_]*)?$', 'i');
|
|
8
|
+
return !!pattern.test(str);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=is-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-url.js","sourceRoot":"","sources":["../../src/strings/is-url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,mBAAmB,GAAG,WAAW;QAC/B,kDAAkD,GAAG,eAAe;QACpE,6BAA6B,GAAG,qBAAqB;QACrD,iCAAiC,GAAG,gBAAgB;QACpD,0BAA0B,GAAG,eAAe;QAC5C,oBAAoB,EACtB,GAAG,CACJ,CAAA;IAED,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This func is used by Entities to create `id` fields, some Entities embed the OrganizationEntity's `id` in their
|
|
3
|
+
* own `id`, in these cases, the `organizationId` is passed as an arg. The position of the embedded organizationId
|
|
4
|
+
* should always be last.
|
|
5
|
+
*
|
|
6
|
+
* The default size we implement here is 14 char,
|
|
7
|
+
*
|
|
8
|
+
* Note: for size, check the collision probability calculator: https://zelark.github.io/nano-id-cc/
|
|
9
|
+
*
|
|
10
|
+
* @param prefix
|
|
11
|
+
* @param opts
|
|
12
|
+
*/
|
|
13
|
+
export declare const makeUuid: (prefix?: string | number, opts?: {
|
|
14
|
+
postfix?: string;
|
|
15
|
+
size?: number;
|
|
16
|
+
}) => string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { customAlphabet } from 'nanoid';
|
|
2
|
+
const CUSTOM_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-';
|
|
3
|
+
const generator = customAlphabet(CUSTOM_ALPHABET, 20);
|
|
4
|
+
/**
|
|
5
|
+
* This func is used by Entities to create `id` fields, some Entities embed the OrganizationEntity's `id` in their
|
|
6
|
+
* own `id`, in these cases, the `organizationId` is passed as an arg. The position of the embedded organizationId
|
|
7
|
+
* should always be last.
|
|
8
|
+
*
|
|
9
|
+
* The default size we implement here is 14 char,
|
|
10
|
+
*
|
|
11
|
+
* Note: for size, check the collision probability calculator: https://zelark.github.io/nano-id-cc/
|
|
12
|
+
*
|
|
13
|
+
* @param prefix
|
|
14
|
+
* @param opts
|
|
15
|
+
*/
|
|
16
|
+
export const makeUuid = (prefix, opts) => {
|
|
17
|
+
const prfx = prefix || '';
|
|
18
|
+
const psfx = opts?.postfix ? `${opts?.postfix}` : '';
|
|
19
|
+
// no spaces or line-breaks allowed
|
|
20
|
+
// The only special chars allowed are "-" and "_"
|
|
21
|
+
return `${prfx}${generator(opts?.size)}${psfx}`
|
|
22
|
+
.trim()
|
|
23
|
+
.replace(/[^a-zA-Z0-9\-_]/g, '');
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=make-uuid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-uuid.js","sourceRoot":"","sources":["../../src/strings/make-uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAEvC,MAAM,eAAe,GACnB,kEAAkE,CAAA;AACpE,MAAM,SAAS,GAAG,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;AAErD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAwB,EACxB,IAA0C,EAC1C,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE,CAAA;IACzB,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAEpD,mCAAmC;IACnC,iDAAiD;IACjD,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;SAC5C,IAAI,EAAE;SACN,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAA;AACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type ObfuscatedString = string;
|
|
2
|
+
export declare function isObfuscatedString(str: string): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* This function is used to obfuscate a string so that it can be used in a URL
|
|
5
|
+
* and is not easily guessable.
|
|
6
|
+
*
|
|
7
|
+
* @note this function earmarks an obfuscated string with a prefix to identify
|
|
8
|
+
* it as an obfuscated string. This is useful for when you need to determine
|
|
9
|
+
* whether a string is obfuscated or not.
|
|
10
|
+
*/
|
|
11
|
+
export declare function obfuscateString(str: string): ObfuscatedString;
|
|
12
|
+
/**
|
|
13
|
+
* This function is used to de-obfuscate a string that was obfuscated using
|
|
14
|
+
* the obfuscateString function.
|
|
15
|
+
*
|
|
16
|
+
* @note this function will throw an error if the string is not obfuscated
|
|
17
|
+
*/
|
|
18
|
+
export declare function deObfuscateString(obufscatedString: ObfuscatedString, opts?: {
|
|
19
|
+
throw?: boolean;
|
|
20
|
+
}): string;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ParamError } from '@archtx/core';
|
|
2
|
+
const OBFUSCATED_STRING_PREFIX = 'oBfSs';
|
|
3
|
+
export function isObfuscatedString(str) {
|
|
4
|
+
return str.startsWith(OBFUSCATED_STRING_PREFIX);
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* This function is used to obfuscate a string so that it can be used in a URL
|
|
8
|
+
* and is not easily guessable.
|
|
9
|
+
*
|
|
10
|
+
* @note this function earmarks an obfuscated string with a prefix to identify
|
|
11
|
+
* it as an obfuscated string. This is useful for when you need to determine
|
|
12
|
+
* whether a string is obfuscated or not.
|
|
13
|
+
*/
|
|
14
|
+
export function obfuscateString(str) {
|
|
15
|
+
if (!str)
|
|
16
|
+
throw new ParamError('obfuscateString str is required');
|
|
17
|
+
if (isObfuscatedString(str))
|
|
18
|
+
throw new ParamError('obfuscateString str is already obfuscated');
|
|
19
|
+
const encoded = Buffer.from(str).toString('base64');
|
|
20
|
+
return (OBFUSCATED_STRING_PREFIX +
|
|
21
|
+
encoded.replace('+', '-').replace('/', '_').replace(/=+$/g, ''));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* This function is used to de-obfuscate a string that was obfuscated using
|
|
25
|
+
* the obfuscateString function.
|
|
26
|
+
*
|
|
27
|
+
* @note this function will throw an error if the string is not obfuscated
|
|
28
|
+
*/
|
|
29
|
+
export function deObfuscateString(obufscatedString, opts = { throw: true }) {
|
|
30
|
+
if (!obufscatedString)
|
|
31
|
+
throw new ParamError('deObfuscateString string is required');
|
|
32
|
+
if (!isObfuscatedString(obufscatedString)) {
|
|
33
|
+
if (opts?.throw) {
|
|
34
|
+
throw new ParamError('obfuscateString str is already obfuscated');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return obufscatedString;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// remove the earmark prefix
|
|
41
|
+
obufscatedString = obufscatedString.replace(OBFUSCATED_STRING_PREFIX, '');
|
|
42
|
+
obufscatedString += Array(5 - (obufscatedString.length % 4)).join('=');
|
|
43
|
+
obufscatedString = obufscatedString.replace('-', '+').replace('_', '/');
|
|
44
|
+
return Buffer.from(obufscatedString, 'base64').toString();
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=obfuscate-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obfuscate-string.js","sourceRoot":"","sources":["../../src/strings/obfuscate-string.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAIzC,MAAM,wBAAwB,GAAG,OAAO,CAAA;AAExC,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAA;IAEjE,IAAI,kBAAkB,CAAC,GAAG,CAAC;QACzB,MAAM,IAAI,UAAU,CAClB,2CAA2C,CAC5C,CAAA;IAEH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAEnD,OAAO,CACL,wBAAwB;QACxB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAChE,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,gBAAkC,EAClC,OAA4B,EAAE,KAAK,EAAE,IAAI,EAAE;IAE3C,IAAI,CAAC,gBAAgB;QACnB,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAA;IAE9D,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC1C,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,UAAU,CAClB,2CAA2C,CAC5C,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,gBAAgB,CAAA;QACzB,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAA;IAEzE,gBAAgB,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEtE,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAEvE,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC3D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @example pluralize('Location', 3) // "Locations"
|
|
3
|
+
* @example pluralize(['Entry', 'Entries'], 2) // "Entries"
|
|
4
|
+
*/
|
|
5
|
+
export function pluralize(txt, count = 0) {
|
|
6
|
+
if (count > 1) {
|
|
7
|
+
if (Array.isArray(txt)) {
|
|
8
|
+
return txt[1];
|
|
9
|
+
}
|
|
10
|
+
return txt + 's';
|
|
11
|
+
}
|
|
12
|
+
if (Array.isArray(txt)) {
|
|
13
|
+
return txt[0];
|
|
14
|
+
}
|
|
15
|
+
return txt;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=pluralize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluralize.js","sourceRoot":"","sources":["../../src/strings/pluralize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAsB,EAAE,KAAK,GAAE,CAAC;IACxD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QACD,OAAO,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;IACf,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This function creates a reproducible hash from a given string input.
|
|
3
|
+
* @param input
|
|
4
|
+
*/
|
|
5
|
+
export function createReproducibleHash(input) {
|
|
6
|
+
// Simple implementation using a common string hashing algorithm
|
|
7
|
+
let hash = 0;
|
|
8
|
+
const prime = 31;
|
|
9
|
+
// Handle empty string
|
|
10
|
+
if (input.length === 0) {
|
|
11
|
+
return '0';
|
|
12
|
+
}
|
|
13
|
+
// Apply hashing algorithm
|
|
14
|
+
for (let i = 0; i < input.length; i++) {
|
|
15
|
+
// Get char code
|
|
16
|
+
const char = input.charCodeAt(i);
|
|
17
|
+
// Apply prime multiplication and add char code
|
|
18
|
+
hash = (hash * prime + char) & 0xffffffff;
|
|
19
|
+
}
|
|
20
|
+
// Convert to hex string
|
|
21
|
+
return hash.toString(16);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=reproducible-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reproducible-hash.js","sourceRoot":"","sources":["../../src/strings/reproducible-hash.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,gEAAgE;IAChE,IAAI,IAAI,GAAG,CAAC,CAAA;IACZ,MAAM,KAAK,GAAG,EAAE,CAAA;IAEhB,sBAAsB;IACtB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,0BAA0B;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,gBAAgB;QAChB,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QAChC,+CAA+C;QAC/C,IAAI,GAAG,CAAC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,UAAU,CAAA;IAC3C,CAAC;IAED,wBAAwB;IACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AAC1B,CAAC"}
|