@bloomneo/appkit 1.2.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/LICENSE +21 -0
- package/README.md +902 -0
- package/bin/appkit.js +71 -0
- package/bin/commands/generate.js +1050 -0
- package/bin/templates/backend/README.md.template +39 -0
- package/bin/templates/backend/api.http.template +0 -0
- package/bin/templates/backend/docs/APPKIT_CLI.md +507 -0
- package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +61 -0
- package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +2539 -0
- package/bin/templates/backend/package.json.template +34 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.http.template +29 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.route.ts.template +36 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.service.ts.template +88 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.types.ts.template +18 -0
- package/bin/templates/backend/src/api/lib/api-router.ts.template +84 -0
- package/bin/templates/backend/src/api/server.ts.template +188 -0
- package/bin/templates/backend/tsconfig.api.json.template +24 -0
- package/bin/templates/backend/tsconfig.json.template +40 -0
- package/bin/templates/feature/feature.http.template +63 -0
- package/bin/templates/feature/feature.route.ts.template +36 -0
- package/bin/templates/feature/feature.service.ts.template +81 -0
- package/bin/templates/feature/feature.types.ts.template +23 -0
- package/bin/templates/feature-db/feature.http.template +63 -0
- package/bin/templates/feature-db/feature.model.ts.template +74 -0
- package/bin/templates/feature-db/feature.route.ts.template +58 -0
- package/bin/templates/feature-db/feature.service.ts.template +231 -0
- package/bin/templates/feature-db/feature.types.ts.template +25 -0
- package/bin/templates/feature-db/schema-addition.prisma.template +9 -0
- package/bin/templates/feature-db/seeding/README.md.template +57 -0
- package/bin/templates/feature-db/seeding/feature.seed.js.template +67 -0
- package/bin/templates/feature-user/schema-addition.prisma.template +19 -0
- package/bin/templates/feature-user/user.http.template +157 -0
- package/bin/templates/feature-user/user.model.ts.template +244 -0
- package/bin/templates/feature-user/user.route.ts.template +379 -0
- package/bin/templates/feature-user/user.seed.js.template +182 -0
- package/bin/templates/feature-user/user.service.ts.template +426 -0
- package/bin/templates/feature-user/user.types.ts.template +127 -0
- package/dist/auth/auth.d.ts +182 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +477 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/defaults.d.ts +104 -0
- package/dist/auth/defaults.d.ts.map +1 -0
- package/dist/auth/defaults.js +374 -0
- package/dist/auth/defaults.js.map +1 -0
- package/dist/auth/index.d.ts +70 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +94 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/cache/cache.d.ts +118 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +249 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/defaults.d.ts +63 -0
- package/dist/cache/defaults.d.ts.map +1 -0
- package/dist/cache/defaults.js +193 -0
- package/dist/cache/defaults.js.map +1 -0
- package/dist/cache/index.d.ts +101 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +203 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/strategies/memory.d.ts +138 -0
- package/dist/cache/strategies/memory.d.ts.map +1 -0
- package/dist/cache/strategies/memory.js +348 -0
- package/dist/cache/strategies/memory.js.map +1 -0
- package/dist/cache/strategies/redis.d.ts +105 -0
- package/dist/cache/strategies/redis.d.ts.map +1 -0
- package/dist/cache/strategies/redis.js +318 -0
- package/dist/cache/strategies/redis.js.map +1 -0
- package/dist/config/config.d.ts +62 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +107 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +44 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +217 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +105 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +163 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/adapters/mongoose.d.ts +106 -0
- package/dist/database/adapters/mongoose.d.ts.map +1 -0
- package/dist/database/adapters/mongoose.js +480 -0
- package/dist/database/adapters/mongoose.js.map +1 -0
- package/dist/database/adapters/prisma.d.ts +106 -0
- package/dist/database/adapters/prisma.d.ts.map +1 -0
- package/dist/database/adapters/prisma.js +494 -0
- package/dist/database/adapters/prisma.js.map +1 -0
- package/dist/database/defaults.d.ts +87 -0
- package/dist/database/defaults.d.ts.map +1 -0
- package/dist/database/defaults.js +271 -0
- package/dist/database/defaults.js.map +1 -0
- package/dist/database/index.d.ts +137 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +490 -0
- package/dist/database/index.js.map +1 -0
- package/dist/email/defaults.d.ts +100 -0
- package/dist/email/defaults.d.ts.map +1 -0
- package/dist/email/defaults.js +400 -0
- package/dist/email/defaults.js.map +1 -0
- package/dist/email/email.d.ts +139 -0
- package/dist/email/email.d.ts.map +1 -0
- package/dist/email/email.js +316 -0
- package/dist/email/email.js.map +1 -0
- package/dist/email/index.d.ts +176 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +251 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/strategies/console.d.ts +90 -0
- package/dist/email/strategies/console.d.ts.map +1 -0
- package/dist/email/strategies/console.js +268 -0
- package/dist/email/strategies/console.js.map +1 -0
- package/dist/email/strategies/resend.d.ts +84 -0
- package/dist/email/strategies/resend.d.ts.map +1 -0
- package/dist/email/strategies/resend.js +266 -0
- package/dist/email/strategies/resend.js.map +1 -0
- package/dist/email/strategies/smtp.d.ts +77 -0
- package/dist/email/strategies/smtp.d.ts.map +1 -0
- package/dist/email/strategies/smtp.js +286 -0
- package/dist/email/strategies/smtp.js.map +1 -0
- package/dist/error/defaults.d.ts +40 -0
- package/dist/error/defaults.d.ts.map +1 -0
- package/dist/error/defaults.js +75 -0
- package/dist/error/defaults.js.map +1 -0
- package/dist/error/error.d.ts +140 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/error.js +200 -0
- package/dist/error/error.js.map +1 -0
- package/dist/error/index.d.ts +145 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +145 -0
- package/dist/error/index.js.map +1 -0
- package/dist/event/defaults.d.ts +111 -0
- package/dist/event/defaults.d.ts.map +1 -0
- package/dist/event/defaults.js +378 -0
- package/dist/event/defaults.js.map +1 -0
- package/dist/event/event.d.ts +171 -0
- package/dist/event/event.d.ts.map +1 -0
- package/dist/event/event.js +391 -0
- package/dist/event/event.js.map +1 -0
- package/dist/event/index.d.ts +173 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/event/index.js +302 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/strategies/memory.d.ts +122 -0
- package/dist/event/strategies/memory.d.ts.map +1 -0
- package/dist/event/strategies/memory.js +331 -0
- package/dist/event/strategies/memory.js.map +1 -0
- package/dist/event/strategies/redis.d.ts +115 -0
- package/dist/event/strategies/redis.d.ts.map +1 -0
- package/dist/event/strategies/redis.js +434 -0
- package/dist/event/strategies/redis.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/defaults.d.ts +67 -0
- package/dist/logger/defaults.d.ts.map +1 -0
- package/dist/logger/defaults.js +213 -0
- package/dist/logger/defaults.js.map +1 -0
- package/dist/logger/index.d.ts +84 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +101 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.d.ts +165 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +843 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/logger/transports/console.d.ts +102 -0
- package/dist/logger/transports/console.d.ts.map +1 -0
- package/dist/logger/transports/console.js +276 -0
- package/dist/logger/transports/console.js.map +1 -0
- package/dist/logger/transports/database.d.ts +153 -0
- package/dist/logger/transports/database.d.ts.map +1 -0
- package/dist/logger/transports/database.js +539 -0
- package/dist/logger/transports/database.js.map +1 -0
- package/dist/logger/transports/file.d.ts +146 -0
- package/dist/logger/transports/file.d.ts.map +1 -0
- package/dist/logger/transports/file.js +464 -0
- package/dist/logger/transports/file.js.map +1 -0
- package/dist/logger/transports/http.d.ts +128 -0
- package/dist/logger/transports/http.d.ts.map +1 -0
- package/dist/logger/transports/http.js +401 -0
- package/dist/logger/transports/http.js.map +1 -0
- package/dist/logger/transports/webhook.d.ts +152 -0
- package/dist/logger/transports/webhook.d.ts.map +1 -0
- package/dist/logger/transports/webhook.js +485 -0
- package/dist/logger/transports/webhook.js.map +1 -0
- package/dist/queue/defaults.d.ts +66 -0
- package/dist/queue/defaults.d.ts.map +1 -0
- package/dist/queue/defaults.js +205 -0
- package/dist/queue/defaults.js.map +1 -0
- package/dist/queue/index.d.ts +124 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +116 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.d.ts +156 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +387 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/transports/database.d.ts +165 -0
- package/dist/queue/transports/database.d.ts.map +1 -0
- package/dist/queue/transports/database.js +595 -0
- package/dist/queue/transports/database.js.map +1 -0
- package/dist/queue/transports/memory.d.ts +143 -0
- package/dist/queue/transports/memory.d.ts.map +1 -0
- package/dist/queue/transports/memory.js +415 -0
- package/dist/queue/transports/memory.js.map +1 -0
- package/dist/queue/transports/redis.d.ts +203 -0
- package/dist/queue/transports/redis.d.ts.map +1 -0
- package/dist/queue/transports/redis.js +744 -0
- package/dist/queue/transports/redis.js.map +1 -0
- package/dist/security/defaults.d.ts +64 -0
- package/dist/security/defaults.d.ts.map +1 -0
- package/dist/security/defaults.js +159 -0
- package/dist/security/defaults.js.map +1 -0
- package/dist/security/index.d.ts +110 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +160 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/security.d.ts +138 -0
- package/dist/security/security.d.ts.map +1 -0
- package/dist/security/security.js +419 -0
- package/dist/security/security.js.map +1 -0
- package/dist/storage/defaults.d.ts +79 -0
- package/dist/storage/defaults.d.ts.map +1 -0
- package/dist/storage/defaults.js +358 -0
- package/dist/storage/defaults.js.map +1 -0
- package/dist/storage/index.d.ts +153 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +242 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/storage.d.ts +151 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +439 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/storage/strategies/local.d.ts +117 -0
- package/dist/storage/strategies/local.d.ts.map +1 -0
- package/dist/storage/strategies/local.js +368 -0
- package/dist/storage/strategies/local.js.map +1 -0
- package/dist/storage/strategies/r2.d.ts +130 -0
- package/dist/storage/strategies/r2.d.ts.map +1 -0
- package/dist/storage/strategies/r2.js +470 -0
- package/dist/storage/strategies/r2.js.map +1 -0
- package/dist/storage/strategies/s3.d.ts +121 -0
- package/dist/storage/strategies/s3.d.ts.map +1 -0
- package/dist/storage/strategies/s3.js +461 -0
- package/dist/storage/strategies/s3.js.map +1 -0
- package/dist/util/defaults.d.ts +77 -0
- package/dist/util/defaults.d.ts.map +1 -0
- package/dist/util/defaults.js +193 -0
- package/dist/util/defaults.js.map +1 -0
- package/dist/util/index.d.ts +97 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +165 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/util.d.ts +145 -0
- package/dist/util/util.d.ts.map +1 -0
- package/dist/util/util.js +481 -0
- package/dist/util/util.js.map +1 -0
- package/package.json +234 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart defaults and environment validation for utilities
|
|
3
|
+
* @module @bloomneo/appkit/util
|
|
4
|
+
* @file src/util/defaults.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: App startup - need to configure utility behavior and performance settings
|
|
7
|
+
* @llm-rule AVOID: Calling multiple times - expensive environment parsing, use lazy loading in get()
|
|
8
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance like other modules
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Gets smart defaults using VOILA_UTIL_* environment variables
|
|
12
|
+
* @llm-rule WHEN: App startup to get production-ready utility configuration
|
|
13
|
+
* @llm-rule AVOID: Calling repeatedly - expensive validation, cache the result
|
|
14
|
+
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
15
|
+
*/
|
|
16
|
+
export function getSmartDefaults() {
|
|
17
|
+
validateEnvironment();
|
|
18
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
19
|
+
const isDevelopment = nodeEnv === 'development';
|
|
20
|
+
const isProduction = nodeEnv === 'production';
|
|
21
|
+
const isTest = nodeEnv === 'test';
|
|
22
|
+
return {
|
|
23
|
+
version: process.env.npm_package_version || '1.0.0',
|
|
24
|
+
// Cache configuration with direct environment access
|
|
25
|
+
cache: {
|
|
26
|
+
enabled: process.env.VOILA_UTIL_CACHE !== 'false' && !isTest,
|
|
27
|
+
maxSize: parseInt(process.env.VOILA_UTIL_CACHE_SIZE || '1000'),
|
|
28
|
+
ttl: parseInt(process.env.VOILA_UTIL_CACHE_TTL || '300000'), // 5 minutes
|
|
29
|
+
},
|
|
30
|
+
// Performance optimization settings
|
|
31
|
+
performance: {
|
|
32
|
+
enabled: process.env.VOILA_UTIL_PERFORMANCE !== 'false',
|
|
33
|
+
memoization: process.env.VOILA_UTIL_MEMOIZATION !== 'false' && !isTest,
|
|
34
|
+
largeArrayThreshold: parseInt(process.env.VOILA_UTIL_ARRAY_THRESHOLD || '10000'),
|
|
35
|
+
chunkSizeLimit: parseInt(process.env.VOILA_UTIL_CHUNK_LIMIT || '100000'),
|
|
36
|
+
},
|
|
37
|
+
// Debug configuration - enabled in development
|
|
38
|
+
debug: {
|
|
39
|
+
enabled: process.env.VOILA_UTIL_DEBUG === 'true' || isDevelopment,
|
|
40
|
+
logOperations: process.env.VOILA_UTIL_LOG_OPS === 'true' || isDevelopment,
|
|
41
|
+
trackPerformance: process.env.VOILA_UTIL_TRACK_PERF === 'true' || isDevelopment,
|
|
42
|
+
},
|
|
43
|
+
// Slugify configuration with locale support
|
|
44
|
+
slugify: {
|
|
45
|
+
lowercase: process.env.VOILA_UTIL_SLUGIFY_LOWERCASE !== 'false',
|
|
46
|
+
strict: process.env.VOILA_UTIL_SLUGIFY_STRICT === 'true',
|
|
47
|
+
locale: process.env.VOILA_UTIL_LOCALE || 'en',
|
|
48
|
+
replacement: process.env.VOILA_UTIL_SLUGIFY_REPLACEMENT || '-',
|
|
49
|
+
},
|
|
50
|
+
// Format configuration for locale-aware formatting
|
|
51
|
+
format: {
|
|
52
|
+
locale: process.env.VOILA_UTIL_LOCALE || 'en-US',
|
|
53
|
+
currency: process.env.VOILA_UTIL_CURRENCY || 'USD',
|
|
54
|
+
dateFormat: process.env.VOILA_UTIL_DATE_FORMAT || 'YYYY-MM-DD',
|
|
55
|
+
numberPrecision: parseInt(process.env.VOILA_UTIL_NUMBER_PRECISION || '2'),
|
|
56
|
+
},
|
|
57
|
+
// Environment information
|
|
58
|
+
environment: {
|
|
59
|
+
isDevelopment,
|
|
60
|
+
isProduction,
|
|
61
|
+
isTest,
|
|
62
|
+
nodeEnv,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Validates environment variables for utility configuration
|
|
68
|
+
* @llm-rule WHEN: App startup to ensure proper utility environment configuration
|
|
69
|
+
* @llm-rule AVOID: Skipping validation - improper config causes performance issues
|
|
70
|
+
* @llm-rule NOTE: Validates cache sizes, performance thresholds, and locale settings
|
|
71
|
+
*/
|
|
72
|
+
function validateEnvironment() {
|
|
73
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
74
|
+
// Validate cache configuration
|
|
75
|
+
const cacheSize = process.env.VOILA_UTIL_CACHE_SIZE;
|
|
76
|
+
if (cacheSize) {
|
|
77
|
+
const cacheSizeNum = parseInt(cacheSize);
|
|
78
|
+
if (isNaN(cacheSizeNum) || cacheSizeNum <= 0) {
|
|
79
|
+
throw new Error(`Invalid VOILA_UTIL_CACHE_SIZE: "${cacheSize}". Must be a positive number.`);
|
|
80
|
+
}
|
|
81
|
+
if (cacheSizeNum > 100000) {
|
|
82
|
+
console.warn(`[VoilaJSX AppKit] Large cache size: ${cacheSizeNum}. This may impact memory usage.`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate cache TTL
|
|
86
|
+
const cacheTTL = process.env.VOILA_UTIL_CACHE_TTL;
|
|
87
|
+
if (cacheTTL) {
|
|
88
|
+
const cacheTTLNum = parseInt(cacheTTL);
|
|
89
|
+
if (isNaN(cacheTTLNum) || cacheTTLNum <= 0) {
|
|
90
|
+
throw new Error(`Invalid VOILA_UTIL_CACHE_TTL: "${cacheTTL}". Must be a positive number (milliseconds).`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Validate array threshold
|
|
94
|
+
const arrayThreshold = process.env.VOILA_UTIL_ARRAY_THRESHOLD;
|
|
95
|
+
if (arrayThreshold) {
|
|
96
|
+
const thresholdNum = parseInt(arrayThreshold);
|
|
97
|
+
if (isNaN(thresholdNum) || thresholdNum <= 0) {
|
|
98
|
+
throw new Error(`Invalid VOILA_UTIL_ARRAY_THRESHOLD: "${arrayThreshold}". Must be a positive number.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Validate chunk size limit
|
|
102
|
+
const chunkLimit = process.env.VOILA_UTIL_CHUNK_LIMIT;
|
|
103
|
+
if (chunkLimit) {
|
|
104
|
+
const chunkLimitNum = parseInt(chunkLimit);
|
|
105
|
+
if (isNaN(chunkLimitNum) || chunkLimitNum <= 0) {
|
|
106
|
+
throw new Error(`Invalid VOILA_UTIL_CHUNK_LIMIT: "${chunkLimit}". Must be a positive number.`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Validate number precision
|
|
110
|
+
const numberPrecision = process.env.VOILA_UTIL_NUMBER_PRECISION;
|
|
111
|
+
if (numberPrecision) {
|
|
112
|
+
const precisionNum = parseInt(numberPrecision);
|
|
113
|
+
if (isNaN(precisionNum) || precisionNum < 0 || precisionNum > 20) {
|
|
114
|
+
throw new Error(`Invalid VOILA_UTIL_NUMBER_PRECISION: "${numberPrecision}". Must be between 0 and 20.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Validate locale if provided
|
|
118
|
+
const locale = process.env.VOILA_UTIL_LOCALE;
|
|
119
|
+
if (locale && !isValidLocale(locale)) {
|
|
120
|
+
console.warn(`[VoilaJSX AppKit] Invalid locale: "${locale}". Using default 'en-US'.`);
|
|
121
|
+
}
|
|
122
|
+
// Validate currency if provided
|
|
123
|
+
const currency = process.env.VOILA_UTIL_CURRENCY;
|
|
124
|
+
if (currency && !isValidCurrency(currency)) {
|
|
125
|
+
console.warn(`[VoilaJSX AppKit] Invalid currency: "${currency}". Using default 'USD'.`);
|
|
126
|
+
}
|
|
127
|
+
// Validate slugify replacement
|
|
128
|
+
const replacement = process.env.VOILA_UTIL_SLUGIFY_REPLACEMENT;
|
|
129
|
+
if (replacement && replacement.length > 5) {
|
|
130
|
+
console.warn(`[VoilaJSX AppKit] Long slugify replacement: "${replacement}". Consider using shorter replacement.`);
|
|
131
|
+
}
|
|
132
|
+
// Production-specific warnings
|
|
133
|
+
if (nodeEnv === 'production') {
|
|
134
|
+
if (process.env.VOILA_UTIL_DEBUG === 'true') {
|
|
135
|
+
console.warn('[VoilaJSX AppKit] Debug mode enabled in production. This may impact performance.');
|
|
136
|
+
}
|
|
137
|
+
if (process.env.VOILA_UTIL_LOG_OPS === 'true') {
|
|
138
|
+
console.warn('[VoilaJSX AppKit] Operation logging enabled in production. This may impact performance.');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Validate NODE_ENV
|
|
142
|
+
if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
|
|
143
|
+
console.warn(`[VoilaJSX AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
|
|
144
|
+
`Expected: development, production, test, or staging`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Validates locale format using basic pattern matching
|
|
149
|
+
* @llm-rule WHEN: Validating user-provided locale settings
|
|
150
|
+
* @llm-rule AVOID: Complex locale validation - basic pattern matching is sufficient
|
|
151
|
+
*/
|
|
152
|
+
function isValidLocale(locale) {
|
|
153
|
+
// Basic locale pattern: language[-Country]
|
|
154
|
+
const localePattern = /^[a-z]{2}(-[A-Z]{2})?$/;
|
|
155
|
+
return localePattern.test(locale);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Validates currency code format (ISO 4217)
|
|
159
|
+
* @llm-rule WHEN: Validating user-provided currency settings
|
|
160
|
+
* @llm-rule AVOID: Full ISO 4217 validation - basic pattern matching is sufficient
|
|
161
|
+
*/
|
|
162
|
+
function isValidCurrency(currency) {
|
|
163
|
+
// Basic currency pattern: 3 uppercase letters
|
|
164
|
+
const currencyPattern = /^[A-Z]{3}$/;
|
|
165
|
+
return currencyPattern.test(currency);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Creates utility error with helpful context
|
|
169
|
+
* @llm-rule WHEN: Creating errors in utility functions for better debugging
|
|
170
|
+
* @llm-rule AVOID: Using generic Error objects - utility errors need context
|
|
171
|
+
*/
|
|
172
|
+
export function createUtilityError(message, operation, input) {
|
|
173
|
+
const error = new Error(message);
|
|
174
|
+
if (operation) {
|
|
175
|
+
error.operation = operation;
|
|
176
|
+
}
|
|
177
|
+
if (input !== undefined) {
|
|
178
|
+
error.input = input;
|
|
179
|
+
}
|
|
180
|
+
return error;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Default configuration constants for reference
|
|
184
|
+
*/
|
|
185
|
+
export const DEFAULT_CACHE_SIZE = 1000;
|
|
186
|
+
export const DEFAULT_CACHE_TTL = 300000; // 5 minutes
|
|
187
|
+
export const DEFAULT_ARRAY_THRESHOLD = 10000;
|
|
188
|
+
export const DEFAULT_CHUNK_LIMIT = 100000;
|
|
189
|
+
export const DEFAULT_NUMBER_PRECISION = 2;
|
|
190
|
+
export const DEFAULT_LOCALE = 'en-US';
|
|
191
|
+
export const DEFAULT_CURRENCY = 'USD';
|
|
192
|
+
export const DEFAULT_SLUGIFY_REPLACEMENT = '-';
|
|
193
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/util/defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-simple utilities that just work
|
|
3
|
+
* @module @bloomneo/appkit/util
|
|
4
|
+
* @file src/util/index.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need common utility functions (get, chunk, slugify, debounce, etc.)
|
|
7
|
+
* @llm-rule AVOID: Manual utility implementation - this provides tested, optimized functions with edge cases handled
|
|
8
|
+
* @llm-rule NOTE: Common pattern - utilclass.get() → util.get() → util.chunk() → util.slugify()
|
|
9
|
+
* @llm-rule NOTE: 12 essential utilities: get, isEmpty, slugify, chunk, debounce, pick, unique, clamp, formatBytes, truncate, sleep, uuid
|
|
10
|
+
*/
|
|
11
|
+
import { UtilClass } from './util.js';
|
|
12
|
+
import { type UtilConfig } from './defaults.js';
|
|
13
|
+
/**
|
|
14
|
+
* Get utility instance - the only function you need to learn
|
|
15
|
+
* Environment variables parsed once for performance
|
|
16
|
+
* @llm-rule WHEN: Starting any utility operation - this is your main entry point
|
|
17
|
+
* @llm-rule AVOID: Calling new UtilClass() directly - always use this function
|
|
18
|
+
* @llm-rule NOTE: Typical flow - get() → util.get() → util.chunk() → util.slugify()
|
|
19
|
+
*/
|
|
20
|
+
declare function get(overrides?: Partial<UtilConfig>): UtilClass;
|
|
21
|
+
/**
|
|
22
|
+
* Reset global instance (useful for testing or config changes)
|
|
23
|
+
* @llm-rule WHEN: Testing utility logic with different configurations
|
|
24
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
25
|
+
*/
|
|
26
|
+
declare function reset(newConfig?: Partial<UtilConfig>): UtilClass;
|
|
27
|
+
/**
|
|
28
|
+
* Clear the cached utility instance
|
|
29
|
+
* @llm-rule WHEN: Testing or when you need to reload environment variables
|
|
30
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
31
|
+
*/
|
|
32
|
+
declare function clearCache(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get current utility configuration for inspection
|
|
35
|
+
* @llm-rule WHEN: Debugging utility behavior or documenting utility configuration
|
|
36
|
+
* @llm-rule AVOID: Using for runtime utility decisions - use get() instead
|
|
37
|
+
*/
|
|
38
|
+
declare function getConfig(): UtilConfig;
|
|
39
|
+
/**
|
|
40
|
+
* Check if running in development mode (affects utility logging)
|
|
41
|
+
* @llm-rule WHEN: Need to conditionally add debug information to utility operations
|
|
42
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
43
|
+
*/
|
|
44
|
+
declare function isDevelopment(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if running in production mode (affects utility performance optimizations)
|
|
47
|
+
* @llm-rule WHEN: Need to conditionally enable performance optimizations
|
|
48
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
49
|
+
*/
|
|
50
|
+
declare function isProduction(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get utility status for health checks and monitoring
|
|
53
|
+
* @llm-rule WHEN: Building health check endpoints or utility monitoring
|
|
54
|
+
* @llm-rule AVOID: Exposing internal utility details - this only shows availability
|
|
55
|
+
*/
|
|
56
|
+
declare function getStatus(): {
|
|
57
|
+
cacheEnabled: boolean;
|
|
58
|
+
performance: boolean;
|
|
59
|
+
environment: string;
|
|
60
|
+
version: string;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Quick utility setup helper for common patterns
|
|
64
|
+
* @llm-rule WHEN: Setting up utilities with custom configuration quickly
|
|
65
|
+
* @llm-rule AVOID: Using without understanding - review configuration for your needs
|
|
66
|
+
* @llm-rule NOTE: Returns utility instance with optimized settings for common use cases
|
|
67
|
+
*/
|
|
68
|
+
declare function quickSetup(options?: {
|
|
69
|
+
performance?: boolean;
|
|
70
|
+
cache?: boolean;
|
|
71
|
+
debug?: boolean;
|
|
72
|
+
}): UtilClass;
|
|
73
|
+
/**
|
|
74
|
+
* Validate utility configuration at startup
|
|
75
|
+
* @llm-rule WHEN: App startup to ensure utility config is valid
|
|
76
|
+
* @llm-rule AVOID: Using in request handlers - expensive validation
|
|
77
|
+
* @llm-rule NOTE: Validates performance settings and cache configuration
|
|
78
|
+
*/
|
|
79
|
+
declare function validateConfig(): void;
|
|
80
|
+
/**
|
|
81
|
+
* Single utility export with enhanced functionality
|
|
82
|
+
*/
|
|
83
|
+
export declare const utilClass: {
|
|
84
|
+
readonly get: typeof get;
|
|
85
|
+
readonly reset: typeof reset;
|
|
86
|
+
readonly clearCache: typeof clearCache;
|
|
87
|
+
readonly getConfig: typeof getConfig;
|
|
88
|
+
readonly isDevelopment: typeof isDevelopment;
|
|
89
|
+
readonly isProduction: typeof isProduction;
|
|
90
|
+
readonly quickSetup: typeof quickSetup;
|
|
91
|
+
readonly validateConfig: typeof validateConfig;
|
|
92
|
+
readonly getStatus: typeof getStatus;
|
|
93
|
+
};
|
|
94
|
+
export type { UtilConfig } from './defaults.js';
|
|
95
|
+
export type { GetOptions, ChunkOptions, TruncateOptions, DebounceOptions, FormatBytesOptions, SlugifyOptions, } from './util.js';
|
|
96
|
+
export { UtilClass } from './util.js';
|
|
97
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAKlE;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,SAAS,CAS3D;AAED;;;;GAIG;AACH,iBAAS,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,UAAU,CAAM,GAAG,SAAS,CAK7D;AAED;;;;GAIG;AACH,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED;;;;GAIG;AACH,iBAAS,SAAS,IAAI,UAAU,CAG/B;AAED;;;;GAIG;AACH,iBAAS,aAAa,IAAI,OAAO,CAGhC;AAED;;;;GAIG;AACH,iBAAS,YAAY,IAAI,OAAO,CAG/B;AAED;;;;GAIG;AACH,iBAAS,SAAS,IAAI;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB,CASA;AAED;;;;;GAKG;AACH,iBAAS,UAAU,CAAC,OAAO,GAAE;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACZ,GAAG,SAAS,CA6BjB;AAED;;;;;GAKG;AACH,iBAAS,cAAc,IAAI,IAAI,CAkB9B;AAED;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;CAiBZ,CAAC;AAGX,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,YAAY,EACV,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ultra-simple utilities that just work
|
|
3
|
+
* @module @bloomneo/appkit/util
|
|
4
|
+
* @file src/util/index.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need common utility functions (get, chunk, slugify, debounce, etc.)
|
|
7
|
+
* @llm-rule AVOID: Manual utility implementation - this provides tested, optimized functions with edge cases handled
|
|
8
|
+
* @llm-rule NOTE: Common pattern - utilclass.get() → util.get() → util.chunk() → util.slugify()
|
|
9
|
+
* @llm-rule NOTE: 12 essential utilities: get, isEmpty, slugify, chunk, debounce, pick, unique, clamp, formatBytes, truncate, sleep, uuid
|
|
10
|
+
*/
|
|
11
|
+
import { UtilClass } from './util.js';
|
|
12
|
+
import { getSmartDefaults } from './defaults.js';
|
|
13
|
+
// Global utility instance for performance
|
|
14
|
+
let globalUtility = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get utility instance - the only function you need to learn
|
|
17
|
+
* Environment variables parsed once for performance
|
|
18
|
+
* @llm-rule WHEN: Starting any utility operation - this is your main entry point
|
|
19
|
+
* @llm-rule AVOID: Calling new UtilClass() directly - always use this function
|
|
20
|
+
* @llm-rule NOTE: Typical flow - get() → util.get() → util.chunk() → util.slugify()
|
|
21
|
+
*/
|
|
22
|
+
function get(overrides = {}) {
|
|
23
|
+
// Lazy initialization - parse environment once
|
|
24
|
+
if (!globalUtility) {
|
|
25
|
+
const defaults = getSmartDefaults();
|
|
26
|
+
const config = { ...defaults, ...overrides };
|
|
27
|
+
globalUtility = new UtilClass(config);
|
|
28
|
+
}
|
|
29
|
+
return globalUtility;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Reset global instance (useful for testing or config changes)
|
|
33
|
+
* @llm-rule WHEN: Testing utility logic with different configurations
|
|
34
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
35
|
+
*/
|
|
36
|
+
function reset(newConfig = {}) {
|
|
37
|
+
const defaults = getSmartDefaults();
|
|
38
|
+
const config = { ...defaults, ...newConfig };
|
|
39
|
+
globalUtility = new UtilClass(config);
|
|
40
|
+
return globalUtility;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Clear the cached utility instance
|
|
44
|
+
* @llm-rule WHEN: Testing or when you need to reload environment variables
|
|
45
|
+
* @llm-rule AVOID: Using in production - only for tests and development
|
|
46
|
+
*/
|
|
47
|
+
function clearCache() {
|
|
48
|
+
globalUtility = null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get current utility configuration for inspection
|
|
52
|
+
* @llm-rule WHEN: Debugging utility behavior or documenting utility configuration
|
|
53
|
+
* @llm-rule AVOID: Using for runtime utility decisions - use get() instead
|
|
54
|
+
*/
|
|
55
|
+
function getConfig() {
|
|
56
|
+
const util = get();
|
|
57
|
+
return util.config;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if running in development mode (affects utility logging)
|
|
61
|
+
* @llm-rule WHEN: Need to conditionally add debug information to utility operations
|
|
62
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
63
|
+
*/
|
|
64
|
+
function isDevelopment() {
|
|
65
|
+
const config = getConfig();
|
|
66
|
+
return config.environment.isDevelopment;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if running in production mode (affects utility performance optimizations)
|
|
70
|
+
* @llm-rule WHEN: Need to conditionally enable performance optimizations
|
|
71
|
+
* @llm-rule AVOID: Manual NODE_ENV checks - use this for consistency
|
|
72
|
+
*/
|
|
73
|
+
function isProduction() {
|
|
74
|
+
const config = getConfig();
|
|
75
|
+
return config.environment.isProduction;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get utility status for health checks and monitoring
|
|
79
|
+
* @llm-rule WHEN: Building health check endpoints or utility monitoring
|
|
80
|
+
* @llm-rule AVOID: Exposing internal utility details - this only shows availability
|
|
81
|
+
*/
|
|
82
|
+
function getStatus() {
|
|
83
|
+
const config = getConfig();
|
|
84
|
+
return {
|
|
85
|
+
cacheEnabled: config.cache.enabled,
|
|
86
|
+
performance: config.performance.enabled,
|
|
87
|
+
environment: config.environment.nodeEnv,
|
|
88
|
+
version: config.version,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Quick utility setup helper for common patterns
|
|
93
|
+
* @llm-rule WHEN: Setting up utilities with custom configuration quickly
|
|
94
|
+
* @llm-rule AVOID: Using without understanding - review configuration for your needs
|
|
95
|
+
* @llm-rule NOTE: Returns utility instance with optimized settings for common use cases
|
|
96
|
+
*/
|
|
97
|
+
function quickSetup(options = {}) {
|
|
98
|
+
const config = {};
|
|
99
|
+
if (options.performance !== undefined) {
|
|
100
|
+
config.performance = {
|
|
101
|
+
enabled: options.performance,
|
|
102
|
+
memoization: options.performance,
|
|
103
|
+
largeArrayThreshold: 10000,
|
|
104
|
+
chunkSizeLimit: 100000
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (options.cache !== undefined) {
|
|
108
|
+
config.cache = {
|
|
109
|
+
enabled: options.cache,
|
|
110
|
+
maxSize: 1000,
|
|
111
|
+
ttl: 300000
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (options.debug !== undefined) {
|
|
115
|
+
config.debug = {
|
|
116
|
+
enabled: options.debug,
|
|
117
|
+
logOperations: options.debug,
|
|
118
|
+
trackPerformance: options.debug
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return get(config);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate utility configuration at startup
|
|
125
|
+
* @llm-rule WHEN: App startup to ensure utility config is valid
|
|
126
|
+
* @llm-rule AVOID: Using in request handlers - expensive validation
|
|
127
|
+
* @llm-rule NOTE: Validates performance settings and cache configuration
|
|
128
|
+
*/
|
|
129
|
+
function validateConfig() {
|
|
130
|
+
try {
|
|
131
|
+
const config = getConfig();
|
|
132
|
+
// Basic validation
|
|
133
|
+
if (!config.version) {
|
|
134
|
+
throw new Error('Utility version is required');
|
|
135
|
+
}
|
|
136
|
+
if (!config.environment.nodeEnv) {
|
|
137
|
+
throw new Error('NODE_ENV is required');
|
|
138
|
+
}
|
|
139
|
+
console.log('✅ Utility configuration validation passed');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error('❌ Utility configuration validation failed:', error.message);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Single utility export with enhanced functionality
|
|
148
|
+
*/
|
|
149
|
+
export const utilClass = {
|
|
150
|
+
// Core method
|
|
151
|
+
get,
|
|
152
|
+
// Utility methods
|
|
153
|
+
reset,
|
|
154
|
+
clearCache,
|
|
155
|
+
getConfig,
|
|
156
|
+
// Environment helpers
|
|
157
|
+
isDevelopment,
|
|
158
|
+
isProduction,
|
|
159
|
+
// Utility helpers
|
|
160
|
+
quickSetup,
|
|
161
|
+
validateConfig,
|
|
162
|
+
getStatus,
|
|
163
|
+
};
|
|
164
|
+
export { UtilClass } from './util.js';
|
|
165
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core utility class with 12 essential JavaScript functions
|
|
3
|
+
* @module @bloomneo/appkit/util
|
|
4
|
+
* @file src/util/util.ts
|
|
5
|
+
*
|
|
6
|
+
* @llm-rule WHEN: Building apps that need common utility functions (get, chunk, slugify, debounce, etc.)
|
|
7
|
+
* @llm-rule AVOID: Using directly - always get instance via utilClass.get()
|
|
8
|
+
* @llm-rule NOTE: Provides 12 essential utilities: get, isEmpty, slugify, chunk, debounce, pick, unique, clamp, formatBytes, truncate, sleep, uuid
|
|
9
|
+
*/
|
|
10
|
+
import type { UtilConfig } from './defaults.js';
|
|
11
|
+
export interface GetOptions {
|
|
12
|
+
strict?: boolean;
|
|
13
|
+
throwOnMissing?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ChunkOptions {
|
|
16
|
+
fillIncomplete?: boolean;
|
|
17
|
+
fillValue?: any;
|
|
18
|
+
}
|
|
19
|
+
export interface TruncateOptions {
|
|
20
|
+
length: number;
|
|
21
|
+
suffix?: string;
|
|
22
|
+
separator?: string;
|
|
23
|
+
preserveWords?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface DebounceOptions {
|
|
26
|
+
leading?: boolean;
|
|
27
|
+
trailing?: boolean;
|
|
28
|
+
maxWait?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface FormatBytesOptions {
|
|
31
|
+
decimals?: number;
|
|
32
|
+
binary?: boolean;
|
|
33
|
+
unitSeparator?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface SlugifyOptions {
|
|
36
|
+
replacement?: string;
|
|
37
|
+
lowercase?: boolean;
|
|
38
|
+
strict?: boolean;
|
|
39
|
+
locale?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Utility class with 12 essential JavaScript functions
|
|
43
|
+
*/
|
|
44
|
+
export declare class UtilClass {
|
|
45
|
+
config: UtilConfig;
|
|
46
|
+
private memoCache;
|
|
47
|
+
private debounceCache;
|
|
48
|
+
constructor(config: UtilConfig);
|
|
49
|
+
/**
|
|
50
|
+
* Safe property access with dot notation and array indexing
|
|
51
|
+
* @llm-rule WHEN: Accessing nested object properties safely to prevent "Cannot read property of undefined" errors
|
|
52
|
+
* @llm-rule AVOID: Direct property access on potentially undefined objects - always use this for nested access
|
|
53
|
+
* @llm-rule NOTE: Supports array indexing, optional chaining syntax, and type-safe defaults
|
|
54
|
+
*/
|
|
55
|
+
get<T = any>(obj: any, path: string, defaultValue?: T, options?: GetOptions): T;
|
|
56
|
+
/**
|
|
57
|
+
* Universal empty check for all JavaScript values
|
|
58
|
+
* @llm-rule WHEN: Validating if any value is truly empty (null, undefined, {}, [], "", whitespace-only strings)
|
|
59
|
+
* @llm-rule AVOID: Manual empty checks like !value - this handles all edge cases properly
|
|
60
|
+
* @llm-rule NOTE: Returns true for null, undefined, {}, [], "", " ", false for 0 and false
|
|
61
|
+
*/
|
|
62
|
+
isEmpty(value: any): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Convert text to URL-safe slugs
|
|
65
|
+
* @llm-rule WHEN: Creating URLs, filenames, or IDs from user text input
|
|
66
|
+
* @llm-rule AVOID: Manual string replacement - this handles unicode, special characters, and edge cases
|
|
67
|
+
* @llm-rule NOTE: Converts "Hello World! 123" to "hello-world-123", handles accents and special characters
|
|
68
|
+
*/
|
|
69
|
+
slugify(text: string, options?: SlugifyOptions): string;
|
|
70
|
+
/**
|
|
71
|
+
* Split array into smaller chunks of specified size
|
|
72
|
+
* @llm-rule WHEN: Processing large arrays in batches, creating pagination, or organizing data into grids
|
|
73
|
+
* @llm-rule AVOID: Manual array slicing - this handles edge cases and provides consistent behavior
|
|
74
|
+
* @llm-rule NOTE: chunk([1,2,3,4,5], 2) returns [[1,2], [3,4], [5]], handles empty arrays safely
|
|
75
|
+
*/
|
|
76
|
+
chunk<T>(array: T[], size: number, options?: ChunkOptions): T[][];
|
|
77
|
+
/**
|
|
78
|
+
* Debounce function calls to prevent excessive execution
|
|
79
|
+
* @llm-rule WHEN: Handling user input events (search, resize, scroll) to optimize performance
|
|
80
|
+
* @llm-rule AVOID: Manual setTimeout management - this handles cleanup and edge cases properly
|
|
81
|
+
* @llm-rule NOTE: Delays function execution until after specified wait period, cancels previous calls
|
|
82
|
+
*/
|
|
83
|
+
debounce<T extends (...args: any[]) => any>(func: T, wait: number, options?: DebounceOptions): T & {
|
|
84
|
+
cancel: () => void;
|
|
85
|
+
flush: () => any;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Extract specific properties from an object
|
|
89
|
+
* @llm-rule WHEN: Cleaning API responses, extracting specific data, or creating object subsets
|
|
90
|
+
* @llm-rule AVOID: Manual property extraction - this handles nested keys and edge cases
|
|
91
|
+
* @llm-rule NOTE: pick(user, ['id', 'name', 'email']) returns object with only specified properties
|
|
92
|
+
*/
|
|
93
|
+
pick<T extends object, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
94
|
+
/**
|
|
95
|
+
* Remove duplicate values from array
|
|
96
|
+
* @llm-rule WHEN: Cleaning arrays with duplicate values, creating unique lists
|
|
97
|
+
* @llm-rule AVOID: Manual duplicate removal - this is optimized and handles all value types
|
|
98
|
+
* @llm-rule NOTE: Uses Set for performance, handles primitives and object references
|
|
99
|
+
*/
|
|
100
|
+
unique<T>(array: T[]): T[];
|
|
101
|
+
/**
|
|
102
|
+
* Constrain number within specified bounds
|
|
103
|
+
* @llm-rule WHEN: Validating user input, constraining values for UI controls (volume, opacity, progress)
|
|
104
|
+
* @llm-rule AVOID: Manual min/max checking - this handles edge cases and type conversion
|
|
105
|
+
* @llm-rule NOTE: clamp(150, 0, 100) returns 100, clamp(-10, 0, 100) returns 0
|
|
106
|
+
*/
|
|
107
|
+
clamp(value: number, min: number, max: number): number;
|
|
108
|
+
/**
|
|
109
|
+
* Format byte sizes in human-readable format
|
|
110
|
+
* @llm-rule WHEN: Displaying file sizes, memory usage, or data transfer amounts
|
|
111
|
+
* @llm-rule AVOID: Manual byte formatting - this handles all units and edge cases properly
|
|
112
|
+
* @llm-rule NOTE: formatBytes(1024) returns "1 KB", formatBytes(0) returns "0 Bytes"
|
|
113
|
+
*/
|
|
114
|
+
formatBytes(bytes: number, options?: FormatBytesOptions): string;
|
|
115
|
+
/**
|
|
116
|
+
* Truncate text with intelligent word boundary detection
|
|
117
|
+
* @llm-rule WHEN: Displaying text previews, card descriptions, or mobile content
|
|
118
|
+
* @llm-rule AVOID: Simple string.slice() - this preserves words and handles edge cases
|
|
119
|
+
* @llm-rule NOTE: truncate("Hello World", 8) returns "Hello...", respects word boundaries
|
|
120
|
+
*/
|
|
121
|
+
truncate(text: string, options: TruncateOptions): string;
|
|
122
|
+
/**
|
|
123
|
+
* Promise-based sleep function for async delays
|
|
124
|
+
* @llm-rule WHEN: Adding delays in async functions, rate limiting, or animation timing
|
|
125
|
+
* @llm-rule AVOID: setTimeout in async/await contexts - this provides clean Promise-based delays
|
|
126
|
+
* @llm-rule NOTE: await sleep(1000) pauses execution for 1 second without blocking the event loop
|
|
127
|
+
*/
|
|
128
|
+
sleep(ms: number): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Generate RFC4122 version 4 UUID
|
|
131
|
+
* @llm-rule WHEN: Creating unique identifiers for sessions, temporary keys, or object IDs
|
|
132
|
+
* @llm-rule AVOID: Manual ID generation - this provides cryptographically secure UUIDs
|
|
133
|
+
* @llm-rule NOTE: Returns standard UUID format: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
|
|
134
|
+
*/
|
|
135
|
+
uuid(): string;
|
|
136
|
+
/**
|
|
137
|
+
* Parse object path with dot notation and array indexing
|
|
138
|
+
*/
|
|
139
|
+
private parsePath;
|
|
140
|
+
/**
|
|
141
|
+
* Setup automatic cache cleanup
|
|
142
|
+
*/
|
|
143
|
+
private setupCacheCleanup;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util/util.ts"],"names":[],"mappings":"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"}
|