@archtx/utils 2.0.3 → 2.0.4

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 CHANGED
@@ -8,21 +8,21 @@ 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
26
  export * from './constants/millisecond-time.js';
27
27
  export * from './constants/second-time.js';
28
28
  export * from './datetime/iso-string.js';
package/dist/exports.js 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
+ // 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';
26
27
  // utils
27
28
  export * from './constants/millisecond-time.js';
28
29
  export * from './constants/second-time.js';
@@ -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,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA;AACtC,cAAc,oCAAoC,CAAA;AAClD,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AAEtC,QAAQ;AACR,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA"}
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;AAEtC,QAAQ;AACR,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { describe, test, expect } from 'vitest';
2
- import { makeUuid } from './make-uuid.js';
2
+ import { makeUuid } from './strings/make-uuid.js';
3
3
  describe('makeUuid()', () => {
4
4
  test('it works', () => {
5
5
  const uuid = makeUuid();
@@ -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,gBAAgB,CAAA;AAEzC,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"}
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,5 @@
1
+ /**
2
+ * @example pluralize('Location', 3) // "Locations"
3
+ * @example pluralize(['Entry', 'Entries'], 2) // "Entries"
4
+ */
5
+ export declare function pluralize(txt: string | string[], count?: number): string;
@@ -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,5 @@
1
+ /**
2
+ * This function creates a reproducible hash from a given string input.
3
+ * @param input
4
+ */
5
+ export declare function createReproducibleHash(input: string): string;
@@ -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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archtx/utils",
3
- "version": "2.0.3",
3
+ "version": "2.0.4",
4
4
  "description": "Utility functions and helpers for JS software",
5
5
  "main": "dist/exports.js",
6
6
  "type": "module",