katanakit-js 2.2.1 → 2.12.9
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 +72 -437
- package/dist/adapters/astro/astro.service.d.ts +103 -15
- package/dist/adapters/astro/astro.service.d.ts.map +1 -1
- package/dist/adapters/astro/astro.service.js +145 -75
- package/dist/adapters/astro/astro.service.js.map +1 -1
- package/dist/adapters/astro/index.d.ts +1 -1
- package/dist/adapters/astro/index.d.ts.map +1 -1
- package/dist/adapters/astro/index.js +1 -1
- package/dist/adapters/astro/index.js.map +1 -1
- package/dist/adapters/astro/rss.service.d.ts +85 -105
- package/dist/adapters/astro/rss.service.d.ts.map +1 -1
- package/dist/adapters/astro/rss.service.js +172 -168
- package/dist/adapters/astro/rss.service.js.map +1 -1
- package/dist/adapters/astro/seo.service.d.ts +10 -0
- package/dist/adapters/astro/seo.service.d.ts.map +1 -0
- package/dist/adapters/astro/seo.service.js +3 -0
- package/dist/adapters/astro/seo.service.js.map +1 -0
- package/dist/adapters/express/app.d.ts +30 -1
- package/dist/adapters/express/app.d.ts.map +1 -1
- package/dist/adapters/express/app.js +31 -3
- package/dist/adapters/express/app.js.map +1 -1
- package/dist/adapters/express/index.d.ts +2 -2
- package/dist/adapters/express/index.d.ts.map +1 -1
- package/dist/adapters/express/index.js +2 -2
- package/dist/adapters/express/index.js.map +1 -1
- package/dist/adapters/express/main.js +2 -2
- package/dist/adapters/express/main.js.map +1 -1
- package/dist/adapters/express/products.controller.d.ts +67 -8
- package/dist/adapters/express/products.controller.d.ts.map +1 -1
- package/dist/adapters/express/products.controller.js +105 -49
- package/dist/adapters/express/products.controller.js.map +1 -1
- package/dist/adapters/express/server.d.ts +37 -13
- package/dist/adapters/express/server.d.ts.map +1 -1
- package/dist/adapters/express/server.js +118 -53
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.d.ts +8 -6
- package/dist/adapters/nuxt/nuxt.service.d.ts.map +1 -1
- package/dist/adapters/nuxt/nuxt.service.js +34 -10
- package/dist/adapters/nuxt/nuxt.service.js.map +1 -1
- package/dist/adapters/vue/vue.service.d.ts +5 -2
- package/dist/adapters/vue/vue.service.d.ts.map +1 -1
- package/dist/adapters/vue/vue.service.js +41 -7
- package/dist/adapters/vue/vue.service.js.map +1 -1
- package/dist/config/index.d.ts +2 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/seo-meta.types.d.ts +177 -0
- package/dist/config/seo-meta.types.d.ts.map +1 -0
- package/dist/config/seo-meta.types.js +11 -0
- package/dist/config/seo-meta.types.js.map +1 -0
- package/dist/config/seo.service.d.ts +41 -58
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +468 -136
- package/dist/config/seo.service.js.map +1 -1
- package/dist/config/site.config.d.ts +10 -50
- package/dist/config/site.config.d.ts.map +1 -1
- package/dist/config/site.config.js +8 -36
- package/dist/config/site.config.js.map +1 -1
- package/dist/core/index.d.ts +1 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/services/dates.service.d.ts +149 -22
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +201 -54
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/error.service.d.ts +32 -20
- package/dist/core/services/error.service.d.ts.map +1 -1
- package/dist/core/services/error.service.js +44 -32
- package/dist/core/services/error.service.js.map +1 -1
- package/dist/core/services/formatter.service.d.ts +245 -35
- package/dist/core/services/formatter.service.d.ts.map +1 -1
- package/dist/core/services/formatter.service.js +281 -57
- package/dist/core/services/formatter.service.js.map +1 -1
- package/dist/core/services/generator.service.d.ts +115 -26
- package/dist/core/services/generator.service.d.ts.map +1 -1
- package/dist/core/services/generator.service.js +191 -56
- package/dist/core/services/generator.service.js.map +1 -1
- package/dist/core/services/geometry.service.d.ts +369 -39
- package/dist/core/services/geometry.service.d.ts.map +1 -1
- package/dist/core/services/geometry.service.js +424 -66
- package/dist/core/services/geometry.service.js.map +1 -1
- package/dist/core/services/http.service.d.ts +244 -21
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +419 -98
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +95 -29
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +167 -41
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/reactive.service.d.ts +146 -19
- package/dist/core/services/reactive.service.d.ts.map +1 -1
- package/dist/core/services/reactive.service.js +278 -137
- package/dist/core/services/reactive.service.js.map +1 -1
- package/dist/core/services/timing.service.d.ts +142 -20
- package/dist/core/services/timing.service.d.ts.map +1 -1
- package/dist/core/services/timing.service.js +324 -185
- package/dist/core/services/timing.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts +228 -43
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +305 -125
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/infrastructure/dom/dom.service.d.ts +307 -44
- package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
- package/dist/infrastructure/dom/dom.service.js +408 -129
- package/dist/infrastructure/dom/dom.service.js.map +1 -1
- package/dist/infrastructure/index.d.ts +0 -3
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +0 -3
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/observer/observer.service.d.ts +124 -31
- package/dist/infrastructure/observer/observer.service.d.ts.map +1 -1
- package/dist/infrastructure/observer/observer.service.js +227 -131
- package/dist/infrastructure/observer/observer.service.js.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.d.ts +154 -22
- package/dist/infrastructure/sensors/sensors.service.d.ts.map +1 -1
- package/dist/infrastructure/sensors/sensors.service.js +264 -112
- package/dist/infrastructure/sensors/sensors.service.js.map +1 -1
- package/dist/infrastructure/storage/storage.service.d.ts +123 -45
- package/dist/infrastructure/storage/storage.service.d.ts.map +1 -1
- package/dist/infrastructure/storage/storage.service.js +236 -66
- package/dist/infrastructure/storage/storage.service.js.map +1 -1
- package/dist/infrastructure/theme/theme.service.d.ts +93 -29
- package/dist/infrastructure/theme/theme.service.d.ts.map +1 -1
- package/dist/infrastructure/theme/theme.service.js +198 -96
- package/dist/infrastructure/theme/theme.service.js.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.d.ts +233 -35
- package/dist/infrastructure/viewport/viewport.service.d.ts.map +1 -1
- package/dist/infrastructure/viewport/viewport.service.js +358 -139
- package/dist/infrastructure/viewport/viewport.service.js.map +1 -1
- package/dist/infrastructure/worker/worker.service.d.ts +84 -38
- package/dist/infrastructure/worker/worker.service.d.ts.map +1 -1
- package/dist/infrastructure/worker/worker.service.js +234 -133
- package/dist/infrastructure/worker/worker.service.js.map +1 -1
- package/dist/prisma/index.d.ts +2 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +2 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/schema.json +11 -33
- package/dist/prisma/use-prisma.d.ts +68 -0
- package/dist/prisma/use-prisma.d.ts.map +1 -0
- package/dist/prisma/use-prisma.js +82 -0
- package/dist/prisma/use-prisma.js.map +1 -0
- package/dist/types/index.d.ts +20 -12
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +124 -125
- package/CHANGELOG.md +0 -101
|
@@ -1,34 +1,123 @@
|
|
|
1
1
|
import type { ICryptoStrategy, IUuidStrategy } from "../../types/index.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Lazy Node.js `crypto` strategy for PBKDF2 hashing.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* Implemented as a plain object satisfying {@link ICryptoStrategy}.
|
|
6
|
+
* Uses dynamic `import("node:crypto")` so it works in both CJS and pure ESM
|
|
7
|
+
* environments without a top-level `require`.
|
|
8
|
+
*
|
|
9
|
+
* **NOTE:** this is a one-way hash, not encryption. Do not rely on the fixed
|
|
10
|
+
* default salt for real password hashing; prefer scrypt/argon2id instead.
|
|
7
11
|
*/
|
|
8
|
-
export declare
|
|
9
|
-
useEncrypt(plainText: string, salt?: string): Promise<string>;
|
|
10
|
-
}
|
|
12
|
+
export declare const LazyNodeCryptoStrategy: ICryptoStrategy;
|
|
11
13
|
/**
|
|
12
14
|
* Native UUID strategy using `globalThis.crypto.randomUUID`, with a fallback.
|
|
15
|
+
*
|
|
16
|
+
* Implemented as a plain object satisfying {@link IUuidStrategy}.
|
|
17
|
+
*/
|
|
18
|
+
export declare const NativeUuidStrategy: IUuidStrategy;
|
|
19
|
+
/**
|
|
20
|
+
* Returns the next auto-incrementing numeric id.
|
|
21
|
+
*
|
|
22
|
+
* @returns A monotonically increasing integer starting from `1`.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { useNumericId } from "katanakit-js";
|
|
27
|
+
*
|
|
28
|
+
* useNumericId(); // 1
|
|
29
|
+
* useNumericId(); // 2
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function useNumericId(): number;
|
|
33
|
+
/**
|
|
34
|
+
* Generates a RFC 4122 v4 UUID string.
|
|
35
|
+
*
|
|
36
|
+
* @returns A UUID string.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { useUuid } from "katanakit-js";
|
|
41
|
+
*
|
|
42
|
+
* const id = useUuid();
|
|
43
|
+
* // => "3b241101-e2bb-4d7a-8615-..."
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function useUuid(): string;
|
|
47
|
+
/**
|
|
48
|
+
* Converts a text string into a URL-friendly slug.
|
|
49
|
+
*
|
|
50
|
+
* @param text - The text to slugify. Must not be empty.
|
|
51
|
+
* @returns A lower-case, hyphen-separated slug with diacritics removed.
|
|
52
|
+
* @throws {Error} If `text` is empty or falsy.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* import { useSlugify } from "katanakit-js";
|
|
57
|
+
*
|
|
58
|
+
* useSlugify("Hello World!"); // "hello-world"
|
|
59
|
+
* useSlugify(" Café au Lait "); // "cafe-au-lait"
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare function useSlugify(text: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* Returns a cryptographically strong 6-digit numeric token (100000–999999).
|
|
65
|
+
*
|
|
66
|
+
* @returns A random 6-digit integer.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* import { useToken } from "katanakit-js";
|
|
71
|
+
*
|
|
72
|
+
* const code = useToken(); // e.g. 482916
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function useToken(): number;
|
|
76
|
+
/**
|
|
77
|
+
* Derives a PBKDF2-SHA512 hash of `plainText`.
|
|
78
|
+
* Returns `"salt:hashHex"`. Prefer a unique salt per secret.
|
|
79
|
+
*
|
|
80
|
+
* @param plainText - The text to hash.
|
|
81
|
+
* @param salt - Optional hex salt. When omitted a random 16-byte salt is generated.
|
|
82
|
+
* @returns `"salt:hashHex"` — the salt and the 128-char hex digest joined by a colon.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* import { useHash } from "katanakit-js";
|
|
87
|
+
*
|
|
88
|
+
* const digest = await useHash("secret", "optional-salt");
|
|
89
|
+
* // => "optional-salt:<128 hex chars>"
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function useHash(plainText: string, salt?: string): Promise<string>;
|
|
93
|
+
/**
|
|
94
|
+
* @deprecated Use {@link useHash} — this is PBKDF2 hashing, not encryption.
|
|
95
|
+
*
|
|
96
|
+
* @param plainText - The text to hash.
|
|
97
|
+
* @param salt - Optional hex salt.
|
|
98
|
+
* @returns `"salt:hashHex"`.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* import { useHash } from "katanakit-js";
|
|
103
|
+
* const digest = await useHash("secret");
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
export declare function useEncrypt(plainText: string, salt?: string): Promise<string>;
|
|
107
|
+
/**
|
|
108
|
+
* Alias for {@link useHash}.
|
|
109
|
+
*
|
|
110
|
+
* @param plainText - The text to hash.
|
|
111
|
+
* @param salt - Optional hex salt. When omitted a random 16-byte salt is generated.
|
|
112
|
+
* @returns `"salt:hashHex"`.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```ts
|
|
116
|
+
* import { usePbkdf2Hash } from "katanakit-js";
|
|
117
|
+
*
|
|
118
|
+
* const digest = await usePbkdf2Hash("secret");
|
|
119
|
+
* // => "<32-char salt>:<128-char hex>"
|
|
120
|
+
* ```
|
|
13
121
|
*/
|
|
14
|
-
export declare
|
|
15
|
-
useGenerate(): string;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Generator facade (Singleton + Strategy) for ids, slugs, tokens and hashing.
|
|
19
|
-
*/
|
|
20
|
-
export default class GeneratorService {
|
|
21
|
-
private static instance;
|
|
22
|
-
private counter;
|
|
23
|
-
private cryptoStrategy;
|
|
24
|
-
private uuidStrategy;
|
|
25
|
-
private constructor();
|
|
26
|
-
static getInstance(): GeneratorService;
|
|
27
|
-
useNumericId: () => number;
|
|
28
|
-
useUuid: () => string;
|
|
29
|
-
useSlugify: (text: string) => string;
|
|
30
|
-
useToken: () => number;
|
|
31
|
-
useEncrypt: (plainText: string, salt?: string) => Promise<string>;
|
|
32
|
-
}
|
|
33
|
-
export declare const useSlugify: (text: string) => string, useUuid: () => string, useNumericId: () => number, useToken: () => number, useEncrypt: (plainText: string, salt?: string) => Promise<string>;
|
|
122
|
+
export declare function usePbkdf2Hash(plainText: string, salt?: string): Promise<string>;
|
|
34
123
|
//# sourceMappingURL=generator.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/generator.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE3E
|
|
1
|
+
{"version":3,"file":"generator.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/generator.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE3E;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,eA0CpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,aA2BhC,CAAC;AAKF;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAOjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAElF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErF"}
|
|
@@ -1,26 +1,71 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Lazy Node.js `crypto` strategy for PBKDF2 hashing.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Implemented as a plain object satisfying {@link ICryptoStrategy}.
|
|
5
|
+
* Uses dynamic `import("node:crypto")` so it works in both CJS and pure ESM
|
|
6
|
+
* environments without a top-level `require`.
|
|
7
|
+
*
|
|
8
|
+
* **NOTE:** this is a one-way hash, not encryption. Do not rely on the fixed
|
|
9
|
+
* default salt for real password hashing; prefer scrypt/argon2id instead.
|
|
6
10
|
*/
|
|
7
|
-
export
|
|
8
|
-
|
|
11
|
+
export const LazyNodeCryptoStrategy = {
|
|
12
|
+
/**
|
|
13
|
+
* Derives a PBKDF2-SHA512 hash asynchronously (non-blocking).
|
|
14
|
+
*
|
|
15
|
+
* @param plainText - The text to hash.
|
|
16
|
+
* @param salt - Optional hex salt. When omitted a random 16-byte salt is generated.
|
|
17
|
+
* @returns `"salt:hashHex"` — the salt and the 128-char hex digest joined by a colon.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { LazyNodeCryptoStrategy } from "katanakit-js";
|
|
22
|
+
*
|
|
23
|
+
* const digest = await LazyNodeCryptoStrategy.useHash("secret");
|
|
24
|
+
* // => "<32-char salt>:<128-char hex>"
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
async useHash(plainText, salt) {
|
|
9
28
|
const cryptoModule = await import("node:crypto");
|
|
10
29
|
// Supports both CJS and pure ESM environments.
|
|
11
30
|
const cryptoInstance = cryptoModule.default ?? cryptoModule;
|
|
12
|
-
// Generate a random salt if none is provided (128 bits).
|
|
13
31
|
const actualSalt = salt ?? cryptoInstance.randomBytes(16).toString("hex");
|
|
14
|
-
const hash =
|
|
15
|
-
.
|
|
16
|
-
|
|
32
|
+
const hash = await new Promise((resolve, reject) => {
|
|
33
|
+
cryptoInstance.pbkdf2(plainText, actualSalt, 100000, 64, "sha512", (err, derived) => {
|
|
34
|
+
if (err) {
|
|
35
|
+
reject(err);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
resolve(derived.toString("hex"));
|
|
39
|
+
});
|
|
40
|
+
});
|
|
17
41
|
return `${actualSalt}:${hash}`;
|
|
18
|
-
}
|
|
19
|
-
|
|
42
|
+
},
|
|
43
|
+
/**
|
|
44
|
+
* @deprecated Use {@link LazyNodeCryptoStrategy.useHash} — this is PBKDF2 hashing, not encryption.
|
|
45
|
+
*/
|
|
46
|
+
async useEncrypt(plainText, salt) {
|
|
47
|
+
return LazyNodeCryptoStrategy.useHash(plainText, salt);
|
|
48
|
+
},
|
|
49
|
+
};
|
|
20
50
|
/**
|
|
21
51
|
* Native UUID strategy using `globalThis.crypto.randomUUID`, with a fallback.
|
|
52
|
+
*
|
|
53
|
+
* Implemented as a plain object satisfying {@link IUuidStrategy}.
|
|
22
54
|
*/
|
|
23
|
-
export
|
|
55
|
+
export const NativeUuidStrategy = {
|
|
56
|
+
/**
|
|
57
|
+
* Generates a v4 UUID string.
|
|
58
|
+
*
|
|
59
|
+
* @returns A RFC 4122 v4 UUID string.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* import { NativeUuidStrategy } from "katanakit-js";
|
|
64
|
+
*
|
|
65
|
+
* const id = NativeUuidStrategy.useGenerate();
|
|
66
|
+
* // => "3b241101-e2bb-4d7a-8615-..."
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
24
69
|
useGenerate() {
|
|
25
70
|
if (typeof globalThis.crypto !== "undefined" &&
|
|
26
71
|
typeof globalThis.crypto.randomUUID === "function") {
|
|
@@ -31,53 +76,143 @@ export class NativeUuidStrategy {
|
|
|
31
76
|
const v = c === "x" ? r : (r & 0x3) | 0x8;
|
|
32
77
|
return v.toString(16);
|
|
33
78
|
});
|
|
34
|
-
}
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
/** Module-level auto-incrementing numeric id counter. */
|
|
82
|
+
let counter = 0;
|
|
83
|
+
/**
|
|
84
|
+
* Returns the next auto-incrementing numeric id.
|
|
85
|
+
*
|
|
86
|
+
* @returns A monotonically increasing integer starting from `1`.
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```ts
|
|
90
|
+
* import { useNumericId } from "katanakit-js";
|
|
91
|
+
*
|
|
92
|
+
* useNumericId(); // 1
|
|
93
|
+
* useNumericId(); // 2
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export function useNumericId() {
|
|
97
|
+
return ++counter;
|
|
35
98
|
}
|
|
36
99
|
/**
|
|
37
|
-
*
|
|
100
|
+
* Generates a RFC 4122 v4 UUID string.
|
|
101
|
+
*
|
|
102
|
+
* @returns A UUID string.
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```ts
|
|
106
|
+
* import { useUuid } from "katanakit-js";
|
|
107
|
+
*
|
|
108
|
+
* const id = useUuid();
|
|
109
|
+
* // => "3b241101-e2bb-4d7a-8615-..."
|
|
110
|
+
* ```
|
|
38
111
|
*/
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
112
|
+
export function useUuid() {
|
|
113
|
+
return NativeUuidStrategy.useGenerate();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Converts a text string into a URL-friendly slug.
|
|
117
|
+
*
|
|
118
|
+
* @param text - The text to slugify. Must not be empty.
|
|
119
|
+
* @returns A lower-case, hyphen-separated slug with diacritics removed.
|
|
120
|
+
* @throws {Error} If `text` is empty or falsy.
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```ts
|
|
124
|
+
* import { useSlugify } from "katanakit-js";
|
|
125
|
+
*
|
|
126
|
+
* useSlugify("Hello World!"); // "hello-world"
|
|
127
|
+
* useSlugify(" Café au Lait "); // "cafe-au-lait"
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
export function useSlugify(text) {
|
|
131
|
+
if (!text)
|
|
132
|
+
throw new Error("Text is required for slugify");
|
|
133
|
+
return text
|
|
134
|
+
.toString()
|
|
135
|
+
.trim()
|
|
136
|
+
.toLowerCase()
|
|
137
|
+
.normalize("NFD")
|
|
138
|
+
.replace(/\p{M}/gu, "")
|
|
139
|
+
.replace(/\s+/g, "-")
|
|
140
|
+
.replace(/[^\w-]+/g, "")
|
|
141
|
+
.replace(/--+/g, "-")
|
|
142
|
+
.replace(/^-+/, "")
|
|
143
|
+
.replace(/-+$/, "");
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Returns a cryptographically strong 6-digit numeric token (100000–999999).
|
|
147
|
+
*
|
|
148
|
+
* @returns A random 6-digit integer.
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* import { useToken } from "katanakit-js";
|
|
153
|
+
*
|
|
154
|
+
* const code = useToken(); // e.g. 482916
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export function useToken() {
|
|
158
|
+
if (typeof globalThis.crypto?.getRandomValues === "function") {
|
|
159
|
+
const buffer = new Uint32Array(1);
|
|
160
|
+
globalThis.crypto.getRandomValues(buffer);
|
|
161
|
+
return 100000 + (buffer[0] % 900000);
|
|
53
162
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
163
|
+
return Math.floor(100000 + Math.random() * 900000);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Derives a PBKDF2-SHA512 hash of `plainText`.
|
|
167
|
+
* Returns `"salt:hashHex"`. Prefer a unique salt per secret.
|
|
168
|
+
*
|
|
169
|
+
* @param plainText - The text to hash.
|
|
170
|
+
* @param salt - Optional hex salt. When omitted a random 16-byte salt is generated.
|
|
171
|
+
* @returns `"salt:hashHex"` — the salt and the 128-char hex digest joined by a colon.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```ts
|
|
175
|
+
* import { useHash } from "katanakit-js";
|
|
176
|
+
*
|
|
177
|
+
* const digest = await useHash("secret", "optional-salt");
|
|
178
|
+
* // => "optional-salt:<128 hex chars>"
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
export async function useHash(plainText, salt) {
|
|
182
|
+
return LazyNodeCryptoStrategy.useHash(plainText, salt);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* @deprecated Use {@link useHash} — this is PBKDF2 hashing, not encryption.
|
|
186
|
+
*
|
|
187
|
+
* @param plainText - The text to hash.
|
|
188
|
+
* @param salt - Optional hex salt.
|
|
189
|
+
* @returns `"salt:hashHex"`.
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```ts
|
|
193
|
+
* import { useHash } from "katanakit-js";
|
|
194
|
+
* const digest = await useHash("secret");
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
export async function useEncrypt(plainText, salt) {
|
|
198
|
+
return LazyNodeCryptoStrategy.useHash(plainText, salt);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Alias for {@link useHash}.
|
|
202
|
+
*
|
|
203
|
+
* @param plainText - The text to hash.
|
|
204
|
+
* @param salt - Optional hex salt. When omitted a random 16-byte salt is generated.
|
|
205
|
+
* @returns `"salt:hashHex"`.
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* import { usePbkdf2Hash } from "katanakit-js";
|
|
210
|
+
*
|
|
211
|
+
* const digest = await usePbkdf2Hash("secret");
|
|
212
|
+
* // => "<32-char salt>:<128-char hex>"
|
|
213
|
+
* ```
|
|
214
|
+
*/
|
|
215
|
+
export async function usePbkdf2Hash(plainText, salt) {
|
|
216
|
+
return LazyNodeCryptoStrategy.useHash(plainText, salt);
|
|
80
217
|
}
|
|
81
|
-
// Singleton instance and destructured exports.
|
|
82
|
-
export const { useSlugify, useUuid, useNumericId, useToken, useEncrypt } = GeneratorService.getInstance();
|
|
83
218
|
//# sourceMappingURL=generator.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.service.js","sourceRoot":"","sources":["../../../src/core/services/generator.service.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"generator.service.js","sourceRoot":"","sources":["../../../src/core/services/generator.service.ts"],"names":[],"mappings":"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"}
|