@alsania-io/utils 0.1.0

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 ADDED
@@ -0,0 +1,157 @@
1
+ # @alsania-io/utils
2
+
3
+ > Shared utilities for Alsania ecosystem
4
+
5
+ ## Features
6
+
7
+ - 📝 **Response Parsing** — Extract text from various AI response formats (OpenAI, Anthropic, etc.)
8
+ - 🔐 **Hash Utilities** — BLAKE3, SHA3-256, SHA256, HMAC-SHA256
9
+ - 🆔 **UUID Generation** — Random UUIDs and short IDs
10
+ - ⏱️ **Async Utilities** — Sleep, retry with exponential backoff, timeout
11
+ - 📦 **Object Utilities** — Deep merge, deep clone, pick, omit
12
+ - 📝 **String Utilities** — Truncate, capitalize, camelCase, snake_case
13
+ - 🔍 **Type Guards** — isNotNull, isString, isObject, isArray
14
+ - 🌐 **Environment Utilities** — Type-safe env variable access
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @alsania-io/utils
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ### Response Parsing
25
+
26
+ ```typescript
27
+ import { extractText } from '@alsania-io/utils';
28
+
29
+ // OpenAI format
30
+ const openaiResponse = {
31
+ choices: [{ message: { content: 'Hello!' } }]
32
+ };
33
+ console.log(extractText(openaiResponse)); // 'Hello!'
34
+
35
+ // Anthropic format
36
+ const anthropicResponse = {
37
+ content: [{ text: 'Hello!' }]
38
+ };
39
+ console.log(extractText(anthropicResponse)); // 'Hello!'
40
+
41
+ // Direct text
42
+ console.log(extractText('Hello!')); // 'Hello!'
43
+ ```
44
+
45
+ ### Hashing
46
+
47
+ ```typescript
48
+ import { blake3Hash, sha3Hash, sha256Hash } from '@alsania-io/utils';
49
+
50
+ const data = 'hello world';
51
+ console.log(sha3Hash(data)); // 0x...
52
+ console.log(sha256Hash(data)); // ...
53
+ ```
54
+
55
+ ### Async Utilities
56
+
57
+ ```typescript
58
+ import { sleep, retry, timeout } from '@alsania-io/utils';
59
+
60
+ // Sleep
61
+ await sleep(1000); // Wait 1 second
62
+
63
+ // Retry with exponential backoff
64
+ const result = await retry(
65
+ async () => {
66
+ // Your async operation
67
+ return await fetchData();
68
+ },
69
+ { maxAttempts: 5, initialDelay: 100 }
70
+ );
71
+
72
+ // Timeout
73
+ const result = await timeout(fetchData(), 5000);
74
+ ```
75
+
76
+ ### Object Utilities
77
+
78
+ ```typescript
79
+ import { deepMerge, pick, omit } from '@alsania-io/utils';
80
+
81
+ const obj1 = { a: 1, b: { c: 2 } };
82
+ const obj2 = { b: { d: 3 }, e: 4 };
83
+ console.log(deepMerge(obj1, obj2)); // { a: 1, b: { c: 2, d: 3 }, e: 4 }
84
+
85
+ const picked = pick(obj1, ['a']); // { a: 1 }
86
+ const omitted = omit(obj1, ['a']); // { b: { c: 2 } }
87
+ ```
88
+
89
+ ### String Utilities
90
+
91
+ ```typescript
92
+ import { capitalize, toCamelCase, toSnakeCase, truncate } from '@alsania-io/utils';
93
+
94
+ console.log(capitalize('hello')); // 'Hello'
95
+ console.log(toCamelCase('hello-world')); // 'helloWorld'
96
+ console.log(toSnakeCase('helloWorld')); // 'hello_world'
97
+ console.log(truncate('hello world', 5)); // 'hello...'
98
+ ```
99
+
100
+ ### Environment Utilities
101
+
102
+ ```typescript
103
+ import { getEnv, getEnvNumber, getEnvBoolean } from '@alsania-io/utils';
104
+
105
+ const apiKey = getEnv('API_KEY', 'default-key');
106
+ const port = getEnvNumber('PORT', 3000);
107
+ const debug = getEnvBoolean('DEBUG', false);
108
+ ```
109
+
110
+ ## API Reference
111
+
112
+ ### Response Parsing
113
+ - `extractText(data: any): string` — Extract text from various AI response formats
114
+ - `safeJsonParse<T>(json: string, fallback: T): T` — Safe JSON parsing
115
+ - `safeStringify(obj: any, indent?: number): string` — Safe JSON stringify with circular ref handling
116
+
117
+ ### Hash Utilities
118
+ - `blake3Hash(data: string | Buffer): string` — BLAKE3 hash (SHA3-256 fallback)
119
+ - `sha3Hash(data: string | Buffer): string` — SHA3-256 hash
120
+ - `sha256Hash(data: string | Buffer): string` — SHA256 hash
121
+ - `hmacSha256(key: string | Buffer, data: string | Buffer): string` — HMAC-SHA256
122
+
123
+ ### UUID
124
+ - `uuid(): string` — Generate UUID v4
125
+ - `shortId(length?: number): string` — Generate short ID
126
+
127
+ ### Async
128
+ - `sleep(ms: number): Promise<void>` — Sleep
129
+ - `retry<T>(fn: () => Promise<T>, options?): Promise<T>` — Retry with exponential backoff
130
+ - `timeout<T>(promise: Promise<T>, ms: number): Promise<T>` — Timeout a promise
131
+
132
+ ### Object
133
+ - `deepMerge<T>(target: T, source: Partial<T>): T` — Deep merge objects
134
+ - `deepClone<T>(obj: T): T` — Deep clone
135
+ - `pick<T, K>(obj: T, keys: K[]): Pick<T, K>` — Pick specific keys
136
+ - `omit<T, K>(obj: T, keys: K[]): Omit<T, K>` — Omit specific keys
137
+
138
+ ### String
139
+ - `truncate(str: string, maxLength: number, suffix?: string): string` — Truncate string
140
+ - `capitalize(str: string): string` — Capitalize first letter
141
+ - `toCamelCase(str: string): string` — Convert to camelCase
142
+ - `toSnakeCase(str: string): string` — Convert to snake_case
143
+
144
+ ### Type Guards
145
+ - `isNotNull<T>(value: T | null | undefined): value is T`
146
+ - `isString(value: unknown): value is string`
147
+ - `isObject(value: unknown): value is Record<string, any>`
148
+ - `isArray(value: unknown): value is any[]`
149
+
150
+ ### Environment
151
+ - `getEnv(key: string, defaultValue?: string): string`
152
+ - `getEnvNumber(key: string, defaultValue?: number): number`
153
+ - `getEnvBoolean(key: string, defaultValue?: boolean): boolean`
154
+
155
+ ## License
156
+
157
+ MIT
@@ -0,0 +1,158 @@
1
+ /**
2
+ * @alsania-io/utils
3
+ * Shared utilities for Alsania ecosystem
4
+ *
5
+ * Features:
6
+ * - Response parsing (text/choices/output formats)
7
+ * - Hash utilities (BLAKE3, SHA3-256)
8
+ * - Configuration helpers
9
+ * - Type definitions
10
+ * - Async utilities
11
+ */
12
+ /**
13
+ * Extract text from various AI response formats
14
+ * Handles: {text}, {choices[].message.content}, {output}, and raw strings
15
+ */
16
+ export declare function extractText(data: any): string;
17
+ /**
18
+ * Safe JSON parsing with fallback
19
+ */
20
+ export declare function safeJsonParse<T>(json: string, fallback: T): T;
21
+ /**
22
+ * Safe JSON stringify with circular reference handling
23
+ */
24
+ export declare function safeStringify(obj: any, indent?: number): string;
25
+ /**
26
+ * Compute BLAKE3 hash (using Node.js crypto with SHA3-256 as fallback)
27
+ * Note: Native BLAKE3 requires @noble/hashes or similar
28
+ */
29
+ export declare function blake3Hash(data: string | Buffer): string;
30
+ /**
31
+ * Compute SHA3-256 hash
32
+ */
33
+ export declare function sha3Hash(data: string | Buffer): string;
34
+ /**
35
+ * Compute SHA256 hash
36
+ */
37
+ export declare function sha256Hash(data: string | Buffer): string;
38
+ /**
39
+ * HMAC-SHA256
40
+ */
41
+ export declare function hmacSha256(key: string | Buffer, data: string | Buffer): string;
42
+ /**
43
+ * Generate a random UUID v4
44
+ */
45
+ export declare function uuid(): string;
46
+ /**
47
+ * Generate a short ID (8 characters)
48
+ */
49
+ export declare function shortId(length?: number): string;
50
+ /**
51
+ * Sleep for a given number of milliseconds
52
+ */
53
+ export declare function sleep(ms: number): Promise<void>;
54
+ /**
55
+ * Retry an async function with exponential backoff
56
+ */
57
+ export declare function retry<T>(fn: () => Promise<T>, options?: {
58
+ maxAttempts?: number;
59
+ initialDelay?: number;
60
+ maxDelay?: number;
61
+ backoff?: number;
62
+ onRetry?: (attempt: number, error: Error) => void;
63
+ }): Promise<T>;
64
+ /**
65
+ * Timeout a promise
66
+ */
67
+ export declare function timeout<T>(promise: Promise<T>, ms: number): Promise<T>;
68
+ /**
69
+ * Deep merge objects
70
+ */
71
+ export declare function deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T;
72
+ /**
73
+ * Deep clone an object
74
+ */
75
+ export declare function deepClone<T>(obj: T): T;
76
+ /**
77
+ * Pick specific keys from an object
78
+ */
79
+ export declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
80
+ /**
81
+ * Omit specific keys from an object
82
+ */
83
+ export declare function omit<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Omit<T, K>;
84
+ /**
85
+ * Truncate a string to a maximum length with ellipsis
86
+ */
87
+ export declare function truncate(str: string, maxLength: number, suffix?: string): string;
88
+ /**
89
+ * Capitalize the first letter of a string
90
+ */
91
+ export declare function capitalize(str: string): string;
92
+ /**
93
+ * Convert a string to camelCase
94
+ */
95
+ export declare function toCamelCase(str: string): string;
96
+ /**
97
+ * Convert a string to snake_case
98
+ */
99
+ export declare function toSnakeCase(str: string): string;
100
+ /**
101
+ * Type guard for non-null values
102
+ */
103
+ export declare function isNotNull<T>(value: T | null | undefined): value is T;
104
+ /**
105
+ * Type guard for strings
106
+ */
107
+ export declare function isString(value: unknown): value is string;
108
+ /**
109
+ * Type guard for objects
110
+ */
111
+ export declare function isObject(value: unknown): value is Record<string, any>;
112
+ /**
113
+ * Type guard for arrays
114
+ */
115
+ export declare function isArray(value: unknown): value is any[];
116
+ /**
117
+ * Get an environment variable with a default value
118
+ */
119
+ export declare function getEnv(key: string, defaultValue?: string): string;
120
+ /**
121
+ * Get an environment variable as a number
122
+ */
123
+ export declare function getEnvNumber(key: string, defaultValue?: number): number;
124
+ /**
125
+ * Get an environment variable as a boolean
126
+ */
127
+ export declare function getEnvBoolean(key: string, defaultValue?: boolean): boolean;
128
+ declare const _default: {
129
+ extractText: typeof extractText;
130
+ safeJsonParse: typeof safeJsonParse;
131
+ safeStringify: typeof safeStringify;
132
+ blake3Hash: typeof blake3Hash;
133
+ sha3Hash: typeof sha3Hash;
134
+ sha256Hash: typeof sha256Hash;
135
+ hmacSha256: typeof hmacSha256;
136
+ uuid: typeof uuid;
137
+ shortId: typeof shortId;
138
+ sleep: typeof sleep;
139
+ retry: typeof retry;
140
+ timeout: typeof timeout;
141
+ deepMerge: typeof deepMerge;
142
+ deepClone: typeof deepClone;
143
+ pick: typeof pick;
144
+ omit: typeof omit;
145
+ truncate: typeof truncate;
146
+ capitalize: typeof capitalize;
147
+ toCamelCase: typeof toCamelCase;
148
+ toSnakeCase: typeof toSnakeCase;
149
+ isNotNull: typeof isNotNull;
150
+ isString: typeof isString;
151
+ isObject: typeof isObject;
152
+ isArray: typeof isArray;
153
+ getEnv: typeof getEnv;
154
+ getEnvNumber: typeof getEnvNumber;
155
+ getEnvBoolean: typeof getEnvBoolean;
156
+ };
157
+ export default _default;
158
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,433 @@
1
+ "use strict";
2
+ /**
3
+ * @alsania-io/utils
4
+ * Shared utilities for Alsania ecosystem
5
+ *
6
+ * Features:
7
+ * - Response parsing (text/choices/output formats)
8
+ * - Hash utilities (BLAKE3, SHA3-256)
9
+ * - Configuration helpers
10
+ * - Type definitions
11
+ * - Async utilities
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.extractText = extractText;
15
+ exports.safeJsonParse = safeJsonParse;
16
+ exports.safeStringify = safeStringify;
17
+ exports.blake3Hash = blake3Hash;
18
+ exports.sha3Hash = sha3Hash;
19
+ exports.sha256Hash = sha256Hash;
20
+ exports.hmacSha256 = hmacSha256;
21
+ exports.uuid = uuid;
22
+ exports.shortId = shortId;
23
+ exports.sleep = sleep;
24
+ exports.retry = retry;
25
+ exports.timeout = timeout;
26
+ exports.deepMerge = deepMerge;
27
+ exports.deepClone = deepClone;
28
+ exports.pick = pick;
29
+ exports.omit = omit;
30
+ exports.truncate = truncate;
31
+ exports.capitalize = capitalize;
32
+ exports.toCamelCase = toCamelCase;
33
+ exports.toSnakeCase = toSnakeCase;
34
+ exports.isNotNull = isNotNull;
35
+ exports.isString = isString;
36
+ exports.isObject = isObject;
37
+ exports.isArray = isArray;
38
+ exports.getEnv = getEnv;
39
+ exports.getEnvNumber = getEnvNumber;
40
+ exports.getEnvBoolean = getEnvBoolean;
41
+ // ============================================
42
+ // Response Parsing
43
+ // ============================================
44
+ /**
45
+ * Extract text from various AI response formats
46
+ * Handles: {text}, {choices[].message.content}, {output}, and raw strings
47
+ */
48
+ function extractText(data) {
49
+ try {
50
+ if (typeof data === 'string')
51
+ return data;
52
+ if (typeof data !== 'object' || data === null)
53
+ return String(data);
54
+ // Direct text field
55
+ if (typeof data.text === 'string')
56
+ return data.text;
57
+ // OpenAI/Anthropic style: choices[].message.content
58
+ if (Array.isArray(data.choices) && data.choices.length > 0) {
59
+ const choice = data.choices[0];
60
+ if (choice && typeof choice === 'object') {
61
+ const message = choice.message;
62
+ if (message && typeof message === 'object') {
63
+ if (typeof message.content === 'string')
64
+ return message.content;
65
+ if (typeof message.text === 'string')
66
+ return message.text;
67
+ }
68
+ if (typeof choice.text === 'string')
69
+ return choice.text;
70
+ if (typeof choice.content === 'string')
71
+ return choice.content;
72
+ }
73
+ }
74
+ // Output field
75
+ if (typeof data.output === 'string')
76
+ return data.output;
77
+ // Fallback: JSON stringify
78
+ return JSON.stringify(data, null, 2);
79
+ }
80
+ catch (e) {
81
+ return String(data);
82
+ }
83
+ }
84
+ /**
85
+ * Safe JSON parsing with fallback
86
+ */
87
+ function safeJsonParse(json, fallback) {
88
+ try {
89
+ return JSON.parse(json);
90
+ }
91
+ catch {
92
+ return fallback;
93
+ }
94
+ }
95
+ /**
96
+ * Safe JSON stringify with circular reference handling
97
+ */
98
+ function safeStringify(obj, indent) {
99
+ try {
100
+ return JSON.stringify(obj, null, indent);
101
+ }
102
+ catch {
103
+ // Handle circular references
104
+ const seen = new WeakSet();
105
+ const replacer = (key, value) => {
106
+ if (typeof value === 'object' && value !== null) {
107
+ if (seen.has(value))
108
+ return '[Circular]';
109
+ seen.add(value);
110
+ }
111
+ return value;
112
+ };
113
+ return JSON.stringify(obj, replacer, indent);
114
+ }
115
+ }
116
+ // ============================================
117
+ // Hash Utilities
118
+ // ============================================
119
+ const crypto_1 = require("crypto");
120
+ /**
121
+ * Compute BLAKE3 hash (using Node.js crypto with SHA3-256 as fallback)
122
+ * Note: Native BLAKE3 requires @noble/hashes or similar
123
+ */
124
+ function blake3Hash(data) {
125
+ // Use SHA3-256 as a close alternative to BLAKE3
126
+ const hash = (0, crypto_1.createHash)('sha3-256');
127
+ if (typeof data === 'string') {
128
+ hash.update(data, 'utf-8');
129
+ }
130
+ else {
131
+ hash.update(data);
132
+ }
133
+ return '0x' + hash.digest('hex');
134
+ }
135
+ /**
136
+ * Compute SHA3-256 hash
137
+ */
138
+ function sha3Hash(data) {
139
+ const hash = (0, crypto_1.createHash)('sha3-256');
140
+ if (typeof data === 'string') {
141
+ hash.update(data, 'utf-8');
142
+ }
143
+ else {
144
+ hash.update(data);
145
+ }
146
+ return '0x' + hash.digest('hex');
147
+ }
148
+ /**
149
+ * Compute SHA256 hash
150
+ */
151
+ function sha256Hash(data) {
152
+ const hash = (0, crypto_1.createHash)('sha256');
153
+ if (typeof data === 'string') {
154
+ hash.update(data, 'utf-8');
155
+ }
156
+ else {
157
+ hash.update(data);
158
+ }
159
+ return hash.digest('hex');
160
+ }
161
+ /**
162
+ * HMAC-SHA256
163
+ */
164
+ function hmacSha256(key, data) {
165
+ const hmac = (0, crypto_1.createHmac)('sha256', key);
166
+ if (typeof data === 'string') {
167
+ hmac.update(data, 'utf-8');
168
+ }
169
+ else {
170
+ hmac.update(data);
171
+ }
172
+ return hmac.digest('hex');
173
+ }
174
+ // ============================================
175
+ // UUID Utilities
176
+ // ============================================
177
+ /**
178
+ * Generate a random UUID v4
179
+ */
180
+ function uuid() {
181
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
182
+ const r = Math.random() * 16 | 0;
183
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
184
+ return v.toString(16);
185
+ });
186
+ }
187
+ /**
188
+ * Generate a short ID (8 characters)
189
+ */
190
+ function shortId(length = 8) {
191
+ const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
192
+ let result = '';
193
+ for (let i = 0; i < length; i++) {
194
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
195
+ }
196
+ return result;
197
+ }
198
+ // ============================================
199
+ // Async Utilities
200
+ // ============================================
201
+ /**
202
+ * Sleep for a given number of milliseconds
203
+ */
204
+ function sleep(ms) {
205
+ return new Promise((resolve) => setTimeout(resolve, ms));
206
+ }
207
+ /**
208
+ * Retry an async function with exponential backoff
209
+ */
210
+ async function retry(fn, options = {}) {
211
+ const { maxAttempts = 5, initialDelay = 100, maxDelay = 10000, backoff = 2, onRetry = () => { }, } = options;
212
+ let lastError;
213
+ let delay = initialDelay;
214
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
215
+ try {
216
+ return await fn();
217
+ }
218
+ catch (error) {
219
+ lastError = error;
220
+ if (attempt < maxAttempts - 1) {
221
+ onRetry(attempt + 1, lastError);
222
+ await sleep(delay);
223
+ delay = Math.min(delay * backoff, maxDelay);
224
+ }
225
+ }
226
+ }
227
+ throw lastError;
228
+ }
229
+ /**
230
+ * Timeout a promise
231
+ */
232
+ function timeout(promise, ms) {
233
+ return new Promise((resolve, reject) => {
234
+ const timer = setTimeout(() => {
235
+ reject(new Error(`Timeout after ${ms}ms`));
236
+ }, ms);
237
+ promise.then((value) => {
238
+ clearTimeout(timer);
239
+ resolve(value);
240
+ }, (error) => {
241
+ clearTimeout(timer);
242
+ reject(error);
243
+ });
244
+ });
245
+ }
246
+ // ============================================
247
+ // Object Utilities
248
+ // ============================================
249
+ /**
250
+ * Deep merge objects
251
+ */
252
+ function deepMerge(target, source) {
253
+ const result = { ...target };
254
+ for (const key in source) {
255
+ const val = source[key];
256
+ if (val && typeof val === 'object' && !Array.isArray(val) && result[key]) {
257
+ result[key] = deepMerge(result[key], val);
258
+ }
259
+ else {
260
+ result[key] = val;
261
+ }
262
+ }
263
+ return result;
264
+ }
265
+ /**
266
+ * Deep clone an object
267
+ */
268
+ function deepClone(obj) {
269
+ if (obj === null || typeof obj !== 'object')
270
+ return obj;
271
+ if (Array.isArray(obj))
272
+ return obj.map(deepClone);
273
+ const result = {};
274
+ for (const key in obj) {
275
+ result[key] = deepClone(obj[key]);
276
+ }
277
+ return result;
278
+ }
279
+ /**
280
+ * Pick specific keys from an object
281
+ */
282
+ function pick(obj, keys) {
283
+ const result = {};
284
+ for (const key of keys) {
285
+ if (key in obj) {
286
+ result[key] = obj[key];
287
+ }
288
+ }
289
+ return result;
290
+ }
291
+ /**
292
+ * Omit specific keys from an object
293
+ */
294
+ function omit(obj, keys) {
295
+ const result = { ...obj };
296
+ for (const key of keys) {
297
+ delete result[key];
298
+ }
299
+ return result;
300
+ }
301
+ // ============================================
302
+ // String Utilities
303
+ // ============================================
304
+ /**
305
+ * Truncate a string to a maximum length with ellipsis
306
+ */
307
+ function truncate(str, maxLength, suffix = '...') {
308
+ if (str.length <= maxLength)
309
+ return str;
310
+ return str.slice(0, maxLength - suffix.length) + suffix;
311
+ }
312
+ /**
313
+ * Capitalize the first letter of a string
314
+ */
315
+ function capitalize(str) {
316
+ if (!str)
317
+ return str;
318
+ return str.charAt(0).toUpperCase() + str.slice(1);
319
+ }
320
+ /**
321
+ * Convert a string to camelCase
322
+ */
323
+ function toCamelCase(str) {
324
+ return str.replace(/[-_]([a-z])/g, (_, char) => char.toUpperCase());
325
+ }
326
+ /**
327
+ * Convert a string to snake_case
328
+ */
329
+ function toSnakeCase(str) {
330
+ return str.replace(/[A-Z]/g, (char) => '_' + char.toLowerCase()).replace(/^_/, '');
331
+ }
332
+ // ============================================
333
+ // Type Utilities
334
+ // ============================================
335
+ /**
336
+ * Type guard for non-null values
337
+ */
338
+ function isNotNull(value) {
339
+ return value !== null && value !== undefined;
340
+ }
341
+ /**
342
+ * Type guard for strings
343
+ */
344
+ function isString(value) {
345
+ return typeof value === 'string';
346
+ }
347
+ /**
348
+ * Type guard for objects
349
+ */
350
+ function isObject(value) {
351
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
352
+ }
353
+ /**
354
+ * Type guard for arrays
355
+ */
356
+ function isArray(value) {
357
+ return Array.isArray(value);
358
+ }
359
+ // ============================================
360
+ // Environment Utilities
361
+ // ============================================
362
+ /**
363
+ * Get an environment variable with a default value
364
+ */
365
+ function getEnv(key, defaultValue) {
366
+ const value = process.env[key];
367
+ if (value === undefined) {
368
+ if (defaultValue === undefined) {
369
+ throw new Error(`Environment variable ${key} is not set`);
370
+ }
371
+ return defaultValue;
372
+ }
373
+ return value;
374
+ }
375
+ /**
376
+ * Get an environment variable as a number
377
+ */
378
+ function getEnvNumber(key, defaultValue) {
379
+ const value = getEnv(key, defaultValue?.toString());
380
+ const num = Number(value);
381
+ if (isNaN(num)) {
382
+ throw new Error(`Environment variable ${key} is not a number: ${value}`);
383
+ }
384
+ return num;
385
+ }
386
+ /**
387
+ * Get an environment variable as a boolean
388
+ */
389
+ function getEnvBoolean(key, defaultValue) {
390
+ const value = getEnv(key, defaultValue?.toString());
391
+ return value.toLowerCase() === 'true' || value === '1';
392
+ }
393
+ // ============================================
394
+ // Export all
395
+ // ============================================
396
+ exports.default = {
397
+ // Response parsing
398
+ extractText,
399
+ safeJsonParse,
400
+ safeStringify,
401
+ // Hash
402
+ blake3Hash,
403
+ sha3Hash,
404
+ sha256Hash,
405
+ hmacSha256,
406
+ // UUID
407
+ uuid,
408
+ shortId,
409
+ // Async
410
+ sleep,
411
+ retry,
412
+ timeout,
413
+ // Object
414
+ deepMerge,
415
+ deepClone,
416
+ pick,
417
+ omit,
418
+ // String
419
+ truncate,
420
+ capitalize,
421
+ toCamelCase,
422
+ toSnakeCase,
423
+ // Type
424
+ isNotNull,
425
+ isString,
426
+ isObject,
427
+ isArray,
428
+ // Env
429
+ getEnv,
430
+ getEnvNumber,
431
+ getEnvBoolean,
432
+ };
433
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@alsania-io/utils",
3
+ "version": "0.1.0",
4
+ "description": "Shared utilities for Alsania ecosystem",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "clean": "rm -rf dist",
17
+ "prepublishOnly": "npm run build"
18
+ },
19
+ "keywords": [
20
+ "utils",
21
+ "alsania",
22
+ "shared",
23
+ "utilities",
24
+ "hash",
25
+ "parse"
26
+ ],
27
+ "author": "Alsania I/O <admin@alsania-io.com>",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/alsania-dev/alsania-io-utils.git"
32
+ },
33
+ "files": [
34
+ "dist",
35
+ "README.md"
36
+ ],
37
+ "engines": {
38
+ "node": ">=18.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.0.0",
42
+ "typescript": "^5.0.0"
43
+ }
44
+ }