@bloomneo/appkit 1.2.9 → 1.5.2

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.
Files changed (118) hide show
  1. package/AGENTS.md +195 -0
  2. package/CHANGELOG.md +253 -0
  3. package/README.md +147 -799
  4. package/bin/commands/generate.js +7 -7
  5. package/cookbook/README.md +26 -0
  6. package/cookbook/api-key-service.ts +106 -0
  7. package/cookbook/auth-protected-crud.ts +112 -0
  8. package/cookbook/file-upload-pipeline.ts +113 -0
  9. package/cookbook/multi-tenant-saas.ts +87 -0
  10. package/cookbook/real-time-chat.ts +121 -0
  11. package/dist/auth/auth.d.ts +21 -4
  12. package/dist/auth/auth.d.ts.map +1 -1
  13. package/dist/auth/auth.js +56 -44
  14. package/dist/auth/auth.js.map +1 -1
  15. package/dist/auth/defaults.d.ts +1 -1
  16. package/dist/auth/defaults.js +35 -35
  17. package/dist/cache/cache.d.ts +29 -6
  18. package/dist/cache/cache.d.ts.map +1 -1
  19. package/dist/cache/cache.js +72 -44
  20. package/dist/cache/cache.js.map +1 -1
  21. package/dist/cache/defaults.js +29 -29
  22. package/dist/cache/index.d.ts +19 -10
  23. package/dist/cache/index.d.ts.map +1 -1
  24. package/dist/cache/index.js +21 -18
  25. package/dist/cache/index.js.map +1 -1
  26. package/dist/config/defaults.d.ts +1 -1
  27. package/dist/config/defaults.js +11 -11
  28. package/dist/config/index.d.ts +3 -3
  29. package/dist/config/index.js +4 -4
  30. package/dist/database/adapters/mongoose.d.ts +4 -4
  31. package/dist/database/adapters/mongoose.js +7 -7
  32. package/dist/database/adapters/prisma.d.ts +4 -4
  33. package/dist/database/adapters/prisma.js +7 -7
  34. package/dist/database/defaults.d.ts +1 -1
  35. package/dist/database/defaults.js +4 -4
  36. package/dist/database/index.js +2 -2
  37. package/dist/database/index.js.map +1 -1
  38. package/dist/email/defaults.js +26 -26
  39. package/dist/email/index.js +7 -7
  40. package/dist/email/strategies/resend.js +1 -1
  41. package/dist/error/defaults.d.ts +1 -1
  42. package/dist/error/defaults.js +13 -13
  43. package/dist/error/error.d.ts +12 -0
  44. package/dist/error/error.d.ts.map +1 -1
  45. package/dist/error/error.js +19 -0
  46. package/dist/error/error.js.map +1 -1
  47. package/dist/error/index.d.ts +14 -3
  48. package/dist/error/index.d.ts.map +1 -1
  49. package/dist/error/index.js +14 -3
  50. package/dist/error/index.js.map +1 -1
  51. package/dist/event/defaults.js +35 -35
  52. package/dist/event/index.js +7 -7
  53. package/dist/logger/defaults.d.ts +1 -1
  54. package/dist/logger/defaults.js +40 -40
  55. package/dist/logger/index.d.ts +1 -0
  56. package/dist/logger/index.d.ts.map +1 -1
  57. package/dist/logger/index.js.map +1 -1
  58. package/dist/logger/logger.d.ts +8 -0
  59. package/dist/logger/logger.d.ts.map +1 -1
  60. package/dist/logger/logger.js +13 -3
  61. package/dist/logger/logger.js.map +1 -1
  62. package/dist/logger/transports/console.js +2 -2
  63. package/dist/logger/transports/http.d.ts +1 -1
  64. package/dist/logger/transports/http.js +2 -2
  65. package/dist/logger/transports/webhook.d.ts +1 -1
  66. package/dist/logger/transports/webhook.js +3 -3
  67. package/dist/queue/defaults.d.ts +2 -2
  68. package/dist/queue/defaults.js +38 -38
  69. package/dist/security/defaults.d.ts +1 -1
  70. package/dist/security/defaults.js +30 -30
  71. package/dist/security/index.d.ts +1 -1
  72. package/dist/security/index.js +3 -3
  73. package/dist/security/security.d.ts +1 -1
  74. package/dist/security/security.js +4 -4
  75. package/dist/storage/defaults.js +26 -26
  76. package/dist/storage/index.js +3 -3
  77. package/dist/util/defaults.d.ts +1 -1
  78. package/dist/util/defaults.js +41 -41
  79. package/dist/util/env.d.ts +35 -0
  80. package/dist/util/env.d.ts.map +1 -0
  81. package/dist/util/env.js +50 -0
  82. package/dist/util/env.js.map +1 -0
  83. package/dist/util/errors.d.ts +52 -0
  84. package/dist/util/errors.d.ts.map +1 -0
  85. package/dist/util/errors.js +82 -0
  86. package/dist/util/errors.js.map +1 -0
  87. package/dist/util/util.js +1 -1
  88. package/examples/.env.example +80 -0
  89. package/examples/README.md +16 -0
  90. package/examples/auth.ts +228 -0
  91. package/examples/cache.ts +36 -0
  92. package/examples/config.ts +45 -0
  93. package/examples/database.ts +69 -0
  94. package/examples/email.ts +53 -0
  95. package/examples/error.ts +50 -0
  96. package/examples/event.ts +42 -0
  97. package/examples/logger.ts +41 -0
  98. package/examples/queue.ts +58 -0
  99. package/examples/security.ts +46 -0
  100. package/examples/storage.ts +44 -0
  101. package/examples/util.ts +47 -0
  102. package/llms.txt +591 -0
  103. package/package.json +19 -10
  104. package/src/auth/README.md +850 -0
  105. package/src/cache/README.md +756 -0
  106. package/src/config/README.md +604 -0
  107. package/src/database/README.md +818 -0
  108. package/src/email/README.md +759 -0
  109. package/src/error/README.md +660 -0
  110. package/src/event/README.md +729 -0
  111. package/src/logger/README.md +435 -0
  112. package/src/queue/README.md +851 -0
  113. package/src/security/README.md +612 -0
  114. package/src/storage/README.md +1008 -0
  115. package/src/util/README.md +955 -0
  116. package/bin/templates/backend/docs/APPKIT_CLI.md +0 -507
  117. package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +0 -61
  118. package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +0 -2539
@@ -8,7 +8,7 @@
8
8
  * @llm-rule NOTE: Called once at startup, cached globally for performance
9
9
  */
10
10
  /**
11
- * Gets smart defaults using VOILA_ERROR_* environment variables
11
+ * Gets smart defaults using BLOOM_ERROR_* environment variables
12
12
  * @llm-rule WHEN: App startup to get production-ready error configuration
13
13
  * @llm-rule AVOID: Calling repeatedly - expensive validation, cache the result
14
14
  * @llm-rule NOTE: Automatically configures dev vs production error behavior
@@ -23,7 +23,7 @@ export function getSmartDefaults() {
23
23
  // Error message defaults with environment awareness
24
24
  messages: {
25
25
  badRequest: 'Bad Request',
26
- unauthorized: process.env.VOILA_AUTH_MESSAGE || 'Authentication required',
26
+ unauthorized: process.env.BLOOM_AUTH_MESSAGE || 'Authentication required',
27
27
  forbidden: 'Access denied',
28
28
  notFound: 'Not found',
29
29
  conflict: 'Conflict',
@@ -31,8 +31,8 @@ export function getSmartDefaults() {
31
31
  },
32
32
  // Error handling behavior with smart defaults
33
33
  middleware: {
34
- showStack: process.env.VOILA_ERROR_STACK === 'true' || isDevelopment,
35
- logErrors: process.env.VOILA_ERROR_LOG !== 'false',
34
+ showStack: process.env.BLOOM_ERROR_STACK === 'true' || isDevelopment,
35
+ logErrors: process.env.BLOOM_ERROR_LOG !== 'false',
36
36
  },
37
37
  // Environment information
38
38
  environment: {
@@ -50,25 +50,25 @@ export function getSmartDefaults() {
50
50
  * @llm-rule NOTE: Validates essential boolean environment variables and NODE_ENV only
51
51
  */
52
52
  function validateEnvironment() {
53
- // Validate VOILA_ERROR_STACK (essential for security)
54
- const errorStack = process.env.VOILA_ERROR_STACK;
53
+ // Validate BLOOM_ERROR_STACK (essential for security)
54
+ const errorStack = process.env.BLOOM_ERROR_STACK;
55
55
  if (errorStack && !['true', 'false'].includes(errorStack.toLowerCase())) {
56
- throw new Error(`Invalid VOILA_ERROR_STACK: "${errorStack}". Must be "true" or "false"`);
56
+ throw new Error(`Invalid BLOOM_ERROR_STACK: "${errorStack}". Must be "true" or "false"`);
57
57
  }
58
- // Validate VOILA_ERROR_LOG (essential for debugging)
59
- const errorLog = process.env.VOILA_ERROR_LOG;
58
+ // Validate BLOOM_ERROR_LOG (essential for debugging)
59
+ const errorLog = process.env.BLOOM_ERROR_LOG;
60
60
  if (errorLog && !['true', 'false'].includes(errorLog.toLowerCase())) {
61
- throw new Error(`Invalid VOILA_ERROR_LOG: "${errorLog}". Must be "true" or "false"`);
61
+ throw new Error(`Invalid BLOOM_ERROR_LOG: "${errorLog}". Must be "true" or "false"`);
62
62
  }
63
63
  // Validate NODE_ENV (essential for environment detection)
64
64
  const nodeEnv = process.env.NODE_ENV;
65
65
  if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
66
- console.warn(`[VoilaJSX AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
66
+ console.warn(`[Bloomneo AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
67
67
  `Expected: development, production, test, or staging`);
68
68
  }
69
69
  // Essential production safety check
70
- if (nodeEnv === 'production' && process.env.VOILA_ERROR_STACK === 'true') {
71
- console.warn(`[VoilaJSX AppKit] Security warning: VOILA_ERROR_STACK=true in production. ` +
70
+ if (nodeEnv === 'production' && process.env.BLOOM_ERROR_STACK === 'true') {
71
+ console.warn(`[Bloomneo AppKit] Security warning: BLOOM_ERROR_STACK=true in production. ` +
72
72
  `Stack traces may expose internal application structure. Consider setting to false.`);
73
73
  }
74
74
  }
@@ -82,6 +82,18 @@ export declare class ErrorClass {
82
82
  * @llm-rule NOTE: PATTERN: catch (dbError) { throw error.serverError('Database unavailable'); }
83
83
  */
84
84
  serverError(message?: string): AppError;
85
+ /**
86
+ * Creates a 429 Too Many Requests error
87
+ * @llm-rule WHEN: Client has exceeded rate limits
88
+ * @llm-rule NOTE: PATTERN: if (rateExceeded) throw error.tooMany('Slow down');
89
+ */
90
+ tooMany(message?: string): AppError;
91
+ /**
92
+ * Creates a 500 Internal Server Error (alias for serverError — prefer serverError())
93
+ * @llm-rule WHEN: Unexpected internal failures where serverError() feels too generic
94
+ * @llm-rule NOTE: Identical to serverError() — use either, not both in the same codebase
95
+ */
96
+ internal(message?: string): AppError;
85
97
  /**
86
98
  * Creates a custom error with any status code
87
99
  * @llm-rule WHEN: Need custom HTTP status codes not covered by semantic methods
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAU;IACd,MAAM,EAAE,WAAW,CAAC;gBAEf,MAAM,EAAE,WAAW;IAI/B;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOtC;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOxC;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOrC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOpC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOpC;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOvC;;;;;;OAMG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOzE;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,mBAAmB;IAyCpE;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,iBAAiB,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI;IAMjH;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIvC;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIvC;;;;OAIG;IACH,kBAAkB,IAAI;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQxF;;;;OAIG;IACH,SAAS,IAAI,WAAW;CAGzB"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/error/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,UAAU;IACd,MAAM,EAAE,WAAW,CAAC;gBAEf,MAAM,EAAE,WAAW;IAI/B;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOtC;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOxC;;;;;;OAMG;IACH,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOrC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOpC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOpC;;;;;;OAMG;IACH,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOvC;;;;OAIG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ;IAIpC;;;;;;OAMG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ;IAOzE;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,mBAAmB;IAyCpE;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,EAAE,iBAAiB,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI;IAMjH;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIvC;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIvC;;;;OAIG;IACH,kBAAkB,IAAI;QAAE,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAQxF;;;;OAIG;IACH,SAAS,IAAI,WAAW;CAGzB"}
@@ -93,6 +93,25 @@ export class ErrorClass {
93
93
  error.type = 'SERVER_ERROR';
94
94
  return error;
95
95
  }
96
+ /**
97
+ * Creates a 429 Too Many Requests error
98
+ * @llm-rule WHEN: Client has exceeded rate limits
99
+ * @llm-rule NOTE: PATTERN: if (rateExceeded) throw error.tooMany('Slow down');
100
+ */
101
+ tooMany(message) {
102
+ const error = new Error(message || 'Too many requests');
103
+ error.statusCode = 429;
104
+ error.type = 'TOO_MANY_REQUESTS';
105
+ return error;
106
+ }
107
+ /**
108
+ * Creates a 500 Internal Server Error (alias for serverError — prefer serverError())
109
+ * @llm-rule WHEN: Unexpected internal failures where serverError() feels too generic
110
+ * @llm-rule NOTE: Identical to serverError() — use either, not both in the same codebase
111
+ */
112
+ internal(message) {
113
+ return this.serverError(message);
114
+ }
96
115
  /**
97
116
  * Creates a custom error with any status code
98
117
  * @llm-rule WHEN: Need custom HTTP status codes not covered by semantic methods
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwCH;;GAEG;AACH,MAAM,OAAO,UAAU;IACd,MAAM,CAAc;IAE3B,YAAY,MAAmB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,OAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAa,CAAC;QAChF,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,aAAa,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,OAAgB;QAC3B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAa,CAAC;QAClF,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CAAC,OAAgB;QACxB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAa,CAAC;QAC/E,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,OAAgB;QACvB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAa,CAAC;QAC9E,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,QAAQ,CAAC,OAAgB;QACvB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAa,CAAC;QAC9E,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,OAAgB;QAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAa,CAAC;QACjF,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,UAAkB,EAAE,OAAe,EAAE,IAAa;QAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAa,CAAC;QAC7C,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,QAAQ,UAAU,EAAE,CAAC;QAC1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,UAA+B,EAAE;QAC5C,6DAA6D;QAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS;YAC/C,CAAC,CAAC,OAAO,CAAC,SAAS;YACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAErC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS;YAC/C,CAAC,CAAC,OAAO,CAAC,SAAS;YACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAErC,OAAO,CAAC,KAAe,EAAE,GAAmB,EAAE,GAAoB,EAAE,IAAyB,EAAQ,EAAE;YACrG,wBAAwB;YACxB,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;YAE3C,uBAAuB;YACvB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAEtF,wBAAwB;YACxB,MAAM,QAAQ,GAAQ;gBACpB,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;aAC9C,CAAC;YAEF,qCAAqC;YACrC,IAAI,SAAS,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC7B,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC/B,CAAC;YAED,sBAAsB;YACtB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,EAAqB;QAC9B,OAAO,CAAC,GAAmB,EAAE,GAAoB,EAAE,IAAyB,EAAQ,EAAE;YACpF,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,KAAe;QAC3B,OAAO,KAAK,CAAC,UAAU,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IAC3D,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,KAAe;QAC3B,OAAO,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACH,kBAAkB;QAChB,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;YACpD,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY;YAClD,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO;SACzC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,SAAS;QACP,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error/error.ts"],"names":[],"mappings":"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"}
@@ -104,11 +104,22 @@ export declare const errorClass: {
104
104
  * @llm-rule NOTE: PATTERN: catch (dbError) { throw error.serverError('DB unavailable'); }
105
105
  */
106
106
  readonly serverError: (message?: string) => import("./error.js").AppError;
107
+ /**
108
+ * Creates 429 Too Many Requests error
109
+ * @llm-rule WHEN: Client exceeded rate limit
110
+ * @llm-rule NOTE: PATTERN: if (rateExceeded) throw error.tooMany('Slow down');
111
+ */
112
+ readonly tooMany: (message?: string) => import("./error.js").AppError;
113
+ /**
114
+ * Creates 500 Internal Server Error (alias for serverError)
115
+ * @llm-rule WHEN: Unexpected internal failures
116
+ * @llm-rule NOTE: Identical to serverError() — use either, not both in the same codebase
117
+ */
118
+ readonly internal: (message?: string) => import("./error.js").AppError;
107
119
  /**
108
120
  * Creates custom error with any status code
109
- * @llm-rule WHEN: Need non-standard HTTP status codes
110
- * @llm-rule NOTE: EXAMPLES: 429 rate limit, 503 maintenance, 418 teapot
111
- * @llm-rule NOTE: PATTERN: error.createError(429, 'Rate limited', 'RATE_LIMIT');
121
+ * @llm-rule WHEN: Need non-standard HTTP status codes not covered above
122
+ * @llm-rule NOTE: PATTERN: error.createError(503, 'Maintenance mode', 'MAINTENANCE');
112
123
  */
113
124
  readonly createError: (statusCode: number, message: string, type?: string) => import("./error.js").AppError;
114
125
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAKD;;;;;;;GAOG;AACH,iBAAS,GAAG,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CAS7D;AAED;;;;;GAKG;AACH,iBAAS,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CAK/D;AAED;;;;GAIG;AACH,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;IASrB;;;;;OAKG;oCACoB,MAAM;IAE7B;;;;;OAKG;sCACsB,MAAM;IAE/B;;;;;OAKG;mCACmB,MAAM;IAE5B;;;;;OAKG;kCACkB,MAAM;IAE3B;;;;;OAKG;kCACkB,MAAM;IAE3B;;;;;OAKG;qCACqB,MAAM;IAE9B;;;;;OAKG;uCACuB,MAAM,WAAW,MAAM,SAAS,MAAM;IAGhE;;;;;;OAMG;sCACsB,mBAAmB;IAE5C;;;;;;OAMG;8BACc,iBAAiB;IAElC;;;;OAIG;kCACkB,QAAQ;IAE7B;;;;OAIG;kCACkB,QAAQ;CACrB,CAAC;AAGX,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,WAAW,QAAS,SAAQ,KAAK;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAChC,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,IAAI,CAAC;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAC9B,GAAG,EAAE,cAAc,EACnB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,mBAAmB,KACtB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAKD;;;;;;;GAOG;AACH,iBAAS,GAAG,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CAS7D;AAED;;;;;GAKG;AACH,iBAAS,KAAK,CAAC,SAAS,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,UAAU,CAK/D;AAED;;;;GAIG;AACH,iBAAS,UAAU,IAAI,IAAI,CAE1B;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU;;;;IASrB;;;;;OAKG;oCACoB,MAAM;IAE7B;;;;;OAKG;sCACsB,MAAM;IAE/B;;;;;OAKG;mCACmB,MAAM;IAE5B;;;;;OAKG;kCACkB,MAAM;IAE3B;;;;;OAKG;kCACkB,MAAM;IAE3B;;;;;OAKG;qCACqB,MAAM;IAE9B;;;;OAIG;iCACiB,MAAM;IAE1B;;;;OAIG;kCACkB,MAAM;IAE3B;;;;OAIG;uCACuB,MAAM,WAAW,MAAM,SAAS,MAAM;IAGhE;;;;;;OAMG;sCACsB,mBAAmB;IAE5C;;;;;;OAMG;8BACc,iBAAiB;IAElC;;;;OAIG;kCACkB,QAAQ;IAE7B;;;;OAIG;kCACkB,QAAQ;CACrB,CAAC;AAGX,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -104,11 +104,22 @@ export const errorClass = {
104
104
  * @llm-rule NOTE: PATTERN: catch (dbError) { throw error.serverError('DB unavailable'); }
105
105
  */
106
106
  serverError: (message) => get().serverError(message),
107
+ /**
108
+ * Creates 429 Too Many Requests error
109
+ * @llm-rule WHEN: Client exceeded rate limit
110
+ * @llm-rule NOTE: PATTERN: if (rateExceeded) throw error.tooMany('Slow down');
111
+ */
112
+ tooMany: (message) => get().tooMany(message),
113
+ /**
114
+ * Creates 500 Internal Server Error (alias for serverError)
115
+ * @llm-rule WHEN: Unexpected internal failures
116
+ * @llm-rule NOTE: Identical to serverError() — use either, not both in the same codebase
117
+ */
118
+ internal: (message) => get().internal(message),
107
119
  /**
108
120
  * Creates custom error with any status code
109
- * @llm-rule WHEN: Need non-standard HTTP status codes
110
- * @llm-rule NOTE: EXAMPLES: 429 rate limit, 503 maintenance, 418 teapot
111
- * @llm-rule NOTE: PATTERN: error.createError(429, 'Rate limited', 'RATE_LIMIT');
121
+ * @llm-rule WHEN: Need non-standard HTTP status codes not covered above
122
+ * @llm-rule NOTE: PATTERN: error.createError(503, 'Maintenance mode', 'MAINTENANCE');
112
123
  */
113
124
  createError: (statusCode, message, type) => get().createError(statusCode, message, type),
114
125
  // Middleware and utility shortcuts
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAoB,MAAM,eAAe,CAAC;AAsCnE,wCAAwC;AACxC,IAAI,WAAW,GAAsB,IAAI,CAAC;AAE1C;;;;;;;GAOG;AACH,SAAS,GAAG,CAAC,YAAkC,EAAE;IAC/C,+CAA+C;IAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;QACpC,MAAM,MAAM,GAAgB,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;QAC1D,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAS,KAAK,CAAC,YAAkC,EAAE;IACjD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAgB,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;IAC1D,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU;IACjB,WAAW,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc;IACd,GAAG;IAEH,kBAAkB;IAClB,KAAK;IACL,UAAU;IAEV,sDAAsD;IACtD;;;;;OAKG;IACH,UAAU,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;IAE3D;;;;;OAKG;IACH,YAAY,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;IAE/D;;;;;OAKG;IACH,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;IAEzD;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEvD;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;IAEvD;;;;;OAKG;IACH,WAAW,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;IAE7D;;;;;OAKG;IACH,WAAW,EAAE,CAAC,UAAkB,EAAE,OAAe,EAAE,IAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC;IAEjH,mCAAmC;IACnC;;;;;;OAMG;IACH,YAAY,EAAE,CAAC,OAA6B,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;IAE5E;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,EAAqB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAE3D;;;;OAIG;IACH,aAAa,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;IAE1D;;;;OAIG;IACH,aAAa,EAAE,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;CAClD,CAAC;AAIX,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/error/index.ts"],"names":[],"mappings":"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"}
@@ -26,28 +26,28 @@ export function getSmartDefaults() {
26
26
  // Strategy selection with smart detection
27
27
  strategy,
28
28
  // Namespace with service identification
29
- namespace: process.env.VOILA_EVENT_NAMESPACE || process.env.VOILA_SERVICE_NAME || 'default',
29
+ namespace: process.env.BLOOM_EVENT_NAMESPACE || process.env.BLOOM_SERVICE_NAME || 'default',
30
30
  // Redis configuration (only used when strategy is 'redis')
31
31
  redis: {
32
32
  url: process.env.REDIS_URL || 'redis://localhost:6379',
33
33
  password: process.env.REDIS_PASSWORD,
34
- maxRetries: parseInt(process.env.VOILA_EVENT_REDIS_RETRIES || '3'),
35
- retryDelay: parseInt(process.env.VOILA_EVENT_REDIS_RETRY_DELAY || '1000'),
36
- connectTimeout: parseInt(process.env.VOILA_EVENT_REDIS_CONNECT_TIMEOUT || '10000'),
37
- commandTimeout: parseInt(process.env.VOILA_EVENT_REDIS_COMMAND_TIMEOUT || '5000'),
38
- keyPrefix: process.env.VOILA_EVENT_REDIS_PREFIX || 'events',
34
+ maxRetries: parseInt(process.env.BLOOM_EVENT_REDIS_RETRIES || '3'),
35
+ retryDelay: parseInt(process.env.BLOOM_EVENT_REDIS_RETRY_DELAY || '1000'),
36
+ connectTimeout: parseInt(process.env.BLOOM_EVENT_REDIS_CONNECT_TIMEOUT || '10000'),
37
+ commandTimeout: parseInt(process.env.BLOOM_EVENT_REDIS_COMMAND_TIMEOUT || '5000'),
38
+ keyPrefix: process.env.BLOOM_EVENT_REDIS_PREFIX || 'events',
39
39
  },
40
40
  // Memory configuration (only used when strategy is 'memory')
41
41
  memory: {
42
- maxListeners: parseInt(process.env.VOILA_EVENT_MEMORY_MAX_LISTENERS || '1000'),
43
- maxHistory: parseInt(process.env.VOILA_EVENT_MEMORY_HISTORY || '100'),
44
- checkInterval: parseInt(process.env.VOILA_EVENT_MEMORY_CHECK_INTERVAL || '30000'), // 30 seconds
45
- enableGC: process.env.VOILA_EVENT_MEMORY_GC !== 'false',
42
+ maxListeners: parseInt(process.env.BLOOM_EVENT_MEMORY_MAX_LISTENERS || '1000'),
43
+ maxHistory: parseInt(process.env.BLOOM_EVENT_MEMORY_HISTORY || '100'),
44
+ checkInterval: parseInt(process.env.BLOOM_EVENT_MEMORY_CHECK_INTERVAL || '30000'), // 30 seconds
45
+ enableGC: process.env.BLOOM_EVENT_MEMORY_GC !== 'false',
46
46
  },
47
47
  // Event history configuration
48
48
  history: {
49
- enabled: process.env.VOILA_EVENT_HISTORY_ENABLED !== 'false',
50
- maxSize: parseInt(process.env.VOILA_EVENT_HISTORY_SIZE || (isProduction ? '50' : '100')),
49
+ enabled: process.env.BLOOM_EVENT_HISTORY_ENABLED !== 'false',
50
+ maxSize: parseInt(process.env.BLOOM_EVENT_HISTORY_SIZE || (isProduction ? '50' : '100')),
51
51
  },
52
52
  // Environment information
53
53
  environment: {
@@ -66,7 +66,7 @@ export function getSmartDefaults() {
66
66
  */
67
67
  function detectEventStrategy() {
68
68
  // Explicit override wins (for testing/debugging)
69
- const explicit = process.env.VOILA_EVENT_STRATEGY?.toLowerCase();
69
+ const explicit = process.env.BLOOM_EVENT_STRATEGY?.toLowerCase();
70
70
  if (explicit === 'redis' || explicit === 'memory') {
71
71
  return explicit;
72
72
  }
@@ -76,7 +76,7 @@ function detectEventStrategy() {
76
76
  }
77
77
  // Default to memory for development/testing
78
78
  if (process.env.NODE_ENV === 'production') {
79
- console.warn('[VoilaJSX AppKit] No REDIS_URL found in production. ' +
79
+ console.warn('[Bloomneo AppKit] No REDIS_URL found in production. ' +
80
80
  'Using memory event strategy which will not work across multiple servers. ' +
81
81
  'Set REDIS_URL for distributed events.');
82
82
  }
@@ -90,9 +90,9 @@ function detectEventStrategy() {
90
90
  */
91
91
  function validateEnvironment() {
92
92
  // Validate event strategy if explicitly set
93
- const strategy = process.env.VOILA_EVENT_STRATEGY;
93
+ const strategy = process.env.BLOOM_EVENT_STRATEGY;
94
94
  if (strategy && !['redis', 'memory'].includes(strategy.toLowerCase())) {
95
- throw new Error(`Invalid VOILA_EVENT_STRATEGY: "${strategy}". Must be "redis" or "memory"`);
95
+ throw new Error(`Invalid BLOOM_EVENT_STRATEGY: "${strategy}". Must be "redis" or "memory"`);
96
96
  }
97
97
  // Validate Redis URL if provided
98
98
  const redisUrl = process.env.REDIS_URL;
@@ -100,23 +100,23 @@ function validateEnvironment() {
100
100
  throw new Error(`Invalid REDIS_URL: "${redisUrl}". Must start with redis:// or rediss://`);
101
101
  }
102
102
  // Validate namespace
103
- const namespace = process.env.VOILA_EVENT_NAMESPACE;
103
+ const namespace = process.env.BLOOM_EVENT_NAMESPACE;
104
104
  if (namespace && !/^[a-zA-Z0-9_-]+$/.test(namespace)) {
105
- throw new Error(`Invalid VOILA_EVENT_NAMESPACE: "${namespace}". Must contain only letters, numbers, underscores, and hyphens`);
105
+ throw new Error(`Invalid BLOOM_EVENT_NAMESPACE: "${namespace}". Must contain only letters, numbers, underscores, and hyphens`);
106
106
  }
107
107
  // Validate numeric values
108
- validateNumericEnv('VOILA_EVENT_REDIS_RETRIES', 0, 10);
109
- validateNumericEnv('VOILA_EVENT_REDIS_RETRY_DELAY', 100, 10000);
110
- validateNumericEnv('VOILA_EVENT_REDIS_CONNECT_TIMEOUT', 1000, 60000);
111
- validateNumericEnv('VOILA_EVENT_REDIS_COMMAND_TIMEOUT', 1000, 30000);
112
- validateNumericEnv('VOILA_EVENT_MEMORY_MAX_LISTENERS', 10, 10000);
113
- validateNumericEnv('VOILA_EVENT_MEMORY_HISTORY', 10, 1000);
114
- validateNumericEnv('VOILA_EVENT_MEMORY_CHECK_INTERVAL', 5000, 300000); // 5s to 5min
115
- validateNumericEnv('VOILA_EVENT_HISTORY_SIZE', 1, 1000);
108
+ validateNumericEnv('BLOOM_EVENT_REDIS_RETRIES', 0, 10);
109
+ validateNumericEnv('BLOOM_EVENT_REDIS_RETRY_DELAY', 100, 10000);
110
+ validateNumericEnv('BLOOM_EVENT_REDIS_CONNECT_TIMEOUT', 1000, 60000);
111
+ validateNumericEnv('BLOOM_EVENT_REDIS_COMMAND_TIMEOUT', 1000, 30000);
112
+ validateNumericEnv('BLOOM_EVENT_MEMORY_MAX_LISTENERS', 10, 10000);
113
+ validateNumericEnv('BLOOM_EVENT_MEMORY_HISTORY', 10, 1000);
114
+ validateNumericEnv('BLOOM_EVENT_MEMORY_CHECK_INTERVAL', 5000, 300000); // 5s to 5min
115
+ validateNumericEnv('BLOOM_EVENT_HISTORY_SIZE', 1, 1000);
116
116
  // Validate Redis key prefix
117
- const keyPrefix = process.env.VOILA_EVENT_REDIS_PREFIX;
117
+ const keyPrefix = process.env.BLOOM_EVENT_REDIS_PREFIX;
118
118
  if (keyPrefix && !/^[a-zA-Z0-9_-]+$/.test(keyPrefix)) {
119
- throw new Error(`Invalid VOILA_EVENT_REDIS_PREFIX: "${keyPrefix}". Must contain only letters, numbers, underscores, and hyphens`);
119
+ throw new Error(`Invalid BLOOM_EVENT_REDIS_PREFIX: "${keyPrefix}". Must contain only letters, numbers, underscores, and hyphens`);
120
120
  }
121
121
  // Production-specific validations
122
122
  const nodeEnv = process.env.NODE_ENV;
@@ -125,7 +125,7 @@ function validateEnvironment() {
125
125
  }
126
126
  // Validate NODE_ENV
127
127
  if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
128
- console.warn(`[VoilaJSX AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
128
+ console.warn(`[Bloomneo AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
129
129
  `Expected: development, production, test, or staging`);
130
130
  }
131
131
  }
@@ -165,15 +165,15 @@ function validateNumericEnv(name, min, max) {
165
165
  function validateProductionConfig() {
166
166
  const strategy = detectEventStrategy();
167
167
  if (strategy === 'memory') {
168
- console.warn('[VoilaJSX AppKit] Using memory event strategy in production. ' +
168
+ console.warn('[Bloomneo AppKit] Using memory event strategy in production. ' +
169
169
  'Events will only work within single server instance. ' +
170
170
  'Set REDIS_URL for distributed events across multiple servers.');
171
171
  }
172
172
  // Validate namespace is set in production
173
- const namespace = process.env.VOILA_EVENT_NAMESPACE;
173
+ const namespace = process.env.BLOOM_EVENT_NAMESPACE;
174
174
  if (!namespace) {
175
- console.warn('[VoilaJSX AppKit] No event namespace configured in production. ' +
176
- 'Set VOILA_EVENT_NAMESPACE for proper event isolation.');
175
+ console.warn('[Bloomneo AppKit] No event namespace configured in production. ' +
176
+ 'Set BLOOM_EVENT_NAMESPACE for proper event isolation.');
177
177
  }
178
178
  }
179
179
  /**
@@ -200,7 +200,7 @@ export function validateProductionRequirements() {
200
200
  const config = getSmartDefaults();
201
201
  if (config.environment.isProduction) {
202
202
  if (config.strategy === 'memory') {
203
- console.warn('[VoilaJSX AppKit] Using memory event strategy in production. ' +
203
+ console.warn('[Bloomneo AppKit] Using memory event strategy in production. ' +
204
204
  'Events will not work across multiple server instances. ' +
205
205
  'Set REDIS_URL for distributed events.');
206
206
  }
@@ -241,7 +241,7 @@ export function validateStartupConfiguration() {
241
241
  // Namespace validation
242
242
  if (!config.namespace || config.namespace === 'default') {
243
243
  if (config.environment.isProduction) {
244
- warnings.push('Using default namespace in production - consider setting VOILA_EVENT_NAMESPACE');
244
+ warnings.push('Using default namespace in production - consider setting BLOOM_EVENT_NAMESPACE');
245
245
  }
246
246
  }
247
247
  // Environment-specific warnings
@@ -170,13 +170,13 @@ function validateConfig() {
170
170
  try {
171
171
  const validation = validateStartupConfiguration();
172
172
  if (validation.errors.length > 0) {
173
- console.error('[VoilaJSX AppKit] Event configuration errors:', validation.errors);
173
+ console.error('[Bloomneo AppKit] Event configuration errors:', validation.errors);
174
174
  }
175
175
  if (validation.warnings.length > 0) {
176
- console.warn('[VoilaJSX AppKit] Event configuration warnings:', validation.warnings);
176
+ console.warn('[Bloomneo AppKit] Event configuration warnings:', validation.warnings);
177
177
  }
178
178
  if (validation.ready) {
179
- console.log(`✅ [VoilaJSX AppKit] Events configured with ${validation.strategy} strategy`);
179
+ console.log(`✅ [Bloomneo AppKit] Events configured with ${validation.strategy} strategy`);
180
180
  }
181
181
  return {
182
182
  valid: validation.errors.length === 0,
@@ -188,7 +188,7 @@ function validateConfig() {
188
188
  }
189
189
  catch (error) {
190
190
  const errorMessage = error.message;
191
- console.error('[VoilaJSX AppKit] Event configuration validation failed:', errorMessage);
191
+ console.error('[Bloomneo AppKit] Event configuration validation failed:', errorMessage);
192
192
  return {
193
193
  valid: false,
194
194
  strategy: 'unknown',
@@ -208,13 +208,13 @@ function validateProduction() {
208
208
  try {
209
209
  validateProductionRequirements();
210
210
  if (process.env.NODE_ENV === 'production' && !hasRedis()) {
211
- console.warn('[VoilaJSX AppKit] No Redis configured in production. ' +
211
+ console.warn('[Bloomneo AppKit] No Redis configured in production. ' +
212
212
  'Set REDIS_URL for distributed events across servers.');
213
213
  }
214
- console.log('✅ [VoilaJSX AppKit] Production event requirements validated');
214
+ console.log('✅ [Bloomneo AppKit] Production event requirements validated');
215
215
  }
216
216
  catch (error) {
217
- console.error('[VoilaJSX AppKit] Production event validation failed:', error.message);
217
+ console.error('[Bloomneo AppKit] Production event validation failed:', error.message);
218
218
  throw error;
219
219
  }
220
220
  }
@@ -52,7 +52,7 @@ export interface LoggingConfig {
52
52
  };
53
53
  }
54
54
  /**
55
- * Get smart defaults using direct VOILA_LOGGER_* environment access
55
+ * Get smart defaults using direct BLOOM_LOGGER_* environment access
56
56
  * @llm-rule WHEN: App startup to get production-ready logging configuration
57
57
  * @llm-rule AVOID: Calling repeatedly - validates environment each time, expensive operation
58
58
  * @llm-rule NOTE: Called once at startup, cached globally for performance
@@ -9,7 +9,7 @@
9
9
  * @llm-rule NOTE: Now includes visual error configuration for enhanced developer experience
10
10
  */
11
11
  /**
12
- * Get smart defaults using direct VOILA_LOGGER_* environment access
12
+ * Get smart defaults using direct BLOOM_LOGGER_* environment access
13
13
  * @llm-rule WHEN: App startup to get production-ready logging configuration
14
14
  * @llm-rule AVOID: Calling repeatedly - validates environment each time, expensive operation
15
15
  * @llm-rule NOTE: Called once at startup, cached globally for performance
@@ -34,39 +34,39 @@ export function getSmartDefaults() {
34
34
  transports,
35
35
  // Console config - direct env access
36
36
  console: {
37
- colorize: process.env.VOILA_LOGGER_CONSOLE_COLOR !== 'false' && !isProduction,
38
- timestamps: process.env.VOILA_LOGGER_CONSOLE_TIME !== 'false',
37
+ colorize: process.env.BLOOM_LOGGER_CONSOLE_COLOR !== 'false' && !isProduction,
38
+ timestamps: process.env.BLOOM_LOGGER_CONSOLE_TIME !== 'false',
39
39
  prettyPrint: isDevelopment && !minimal,
40
40
  },
41
41
  // File config - direct env access
42
42
  file: {
43
- dir: process.env.VOILA_LOGGER_DIR || 'logs',
44
- filename: process.env.VOILA_LOGGER_FILE_NAME || 'app.log',
45
- maxSize: parseInt(process.env.VOILA_LOGGER_FILE_SIZE || (isProduction ? '50000000' : '10000000')),
46
- retentionDays: parseInt(process.env.VOILA_LOGGER_FILE_RETENTION || (isProduction ? '30' : '7')),
43
+ dir: process.env.BLOOM_LOGGER_DIR || 'logs',
44
+ filename: process.env.BLOOM_LOGGER_FILE_NAME || 'app.log',
45
+ maxSize: parseInt(process.env.BLOOM_LOGGER_FILE_SIZE || (isProduction ? '50000000' : '10000000')),
46
+ retentionDays: parseInt(process.env.BLOOM_LOGGER_FILE_RETENTION || (isProduction ? '30' : '7')),
47
47
  },
48
48
  // Database config - direct env access
49
49
  database: {
50
50
  url: process.env.DATABASE_URL || null,
51
- table: process.env.VOILA_LOGGER_DB_TABLE || 'logs',
52
- batchSize: parseInt(process.env.VOILA_LOGGER_DB_BATCH || (minimal ? '50' : '100')),
51
+ table: process.env.BLOOM_LOGGER_DB_TABLE || 'logs',
52
+ batchSize: parseInt(process.env.BLOOM_LOGGER_DB_BATCH || (minimal ? '50' : '100')),
53
53
  },
54
54
  // HTTP config - direct env access
55
55
  http: {
56
- url: process.env.VOILA_LOGGER_HTTP_URL || null,
57
- batchSize: parseInt(process.env.VOILA_LOGGER_HTTP_BATCH || (minimal ? '25' : '50')),
58
- timeout: parseInt(process.env.VOILA_LOGGER_HTTP_TIMEOUT || '30000'),
56
+ url: process.env.BLOOM_LOGGER_HTTP_URL || null,
57
+ batchSize: parseInt(process.env.BLOOM_LOGGER_HTTP_BATCH || (minimal ? '25' : '50')),
58
+ timeout: parseInt(process.env.BLOOM_LOGGER_HTTP_TIMEOUT || '30000'),
59
59
  },
60
60
  // Webhook config - direct env access
61
61
  webhook: {
62
- url: process.env.VOILA_LOGGER_WEBHOOK_URL || null,
63
- level: process.env.VOILA_LOGGER_WEBHOOK_LEVEL || 'error',
64
- rateLimit: parseInt(process.env.VOILA_LOGGER_WEBHOOK_RATE || (minimal ? '5' : '10')),
62
+ url: process.env.BLOOM_LOGGER_WEBHOOK_URL || null,
63
+ level: process.env.BLOOM_LOGGER_WEBHOOK_LEVEL || 'error',
64
+ rateLimit: parseInt(process.env.BLOOM_LOGGER_WEBHOOK_RATE || (minimal ? '5' : '10')),
65
65
  },
66
66
  // Service identification - direct env access
67
67
  service: {
68
- name: process.env.VOILA_SERVICE_NAME || process.env.npm_package_name || 'app',
69
- version: process.env.VOILA_SERVICE_VERSION || process.env.npm_package_version || '1.0.0',
68
+ name: process.env.BLOOM_SERVICE_NAME || process.env.npm_package_name || 'app',
69
+ version: process.env.BLOOM_SERVICE_VERSION || process.env.npm_package_version || '1.0.0',
70
70
  environment: nodeEnv,
71
71
  },
72
72
  };
@@ -78,7 +78,7 @@ export function getSmartDefaults() {
78
78
  */
79
79
  function getScope() {
80
80
  // Manual override wins (like auth module pattern)
81
- const manual = process.env.VOILA_LOGGER_SCOPE?.toLowerCase();
81
+ const manual = process.env.BLOOM_LOGGER_SCOPE?.toLowerCase();
82
82
  if (manual === 'minimal' || manual === 'full') {
83
83
  return manual;
84
84
  }
@@ -87,7 +87,7 @@ function getScope() {
87
87
  return 'minimal'; // CI/CD pipelines
88
88
  if (process.env.NODE_ENV === 'production')
89
89
  return 'minimal'; // Production efficiency
90
- if (process.env.DEBUG || process.env.VOILA_DEBUG)
90
+ if (process.env.DEBUG || process.env.BLOOM_DEBUG)
91
91
  return 'full'; // Debug sessions
92
92
  return 'minimal'; // Safe default for clean logs
93
93
  }
@@ -98,7 +98,7 @@ function getScope() {
98
98
  */
99
99
  function getLevel(isProduction, isDevelopment) {
100
100
  // Manual override wins (like auth module)
101
- const manual = process.env.VOILA_LOGGER_LEVEL?.toLowerCase();
101
+ const manual = process.env.BLOOM_LOGGER_LEVEL?.toLowerCase();
102
102
  if (manual && ['debug', 'info', 'warn', 'error'].includes(manual)) {
103
103
  return manual;
104
104
  }
@@ -118,15 +118,15 @@ function getLevel(isProduction, isDevelopment) {
118
118
  function getEnabledTransports(isTest) {
119
119
  return {
120
120
  // Console: default on (except test)
121
- console: process.env.VOILA_LOGGER_CONSOLE !== 'false' && !isTest,
121
+ console: process.env.BLOOM_LOGGER_CONSOLE !== 'false' && !isTest,
122
122
  // File: default on (except test)
123
- file: process.env.VOILA_LOGGER_FILE !== 'false' && !isTest,
123
+ file: process.env.BLOOM_LOGGER_FILE !== 'false' && !isTest,
124
124
  // Database: auto-enable if DATABASE_URL exists
125
- database: process.env.VOILA_LOGGER_DATABASE === 'true' && !!process.env.DATABASE_URL,
125
+ database: process.env.BLOOM_LOGGER_DATABASE === 'true' && !!process.env.DATABASE_URL,
126
126
  // HTTP: auto-enable if URL provided
127
- http: !!process.env.VOILA_LOGGER_HTTP_URL,
127
+ http: !!process.env.BLOOM_LOGGER_HTTP_URL,
128
128
  // Webhook: auto-enable if URL provided
129
- webhook: !!process.env.VOILA_LOGGER_WEBHOOK_URL,
129
+ webhook: !!process.env.BLOOM_LOGGER_WEBHOOK_URL,
130
130
  };
131
131
  }
132
132
  /**
@@ -136,42 +136,42 @@ function getEnabledTransports(isTest) {
136
136
  */
137
137
  export function validateEnvironment() {
138
138
  // Validate log level
139
- const level = process.env.VOILA_LOGGER_LEVEL;
139
+ const level = process.env.BLOOM_LOGGER_LEVEL;
140
140
  if (level && !['debug', 'info', 'warn', 'error'].includes(level)) {
141
- throw new Error(`Invalid VOILA_LOGGER_LEVEL: "${level}". Must be: debug, info, warn, error`);
141
+ throw new Error(`Invalid BLOOM_LOGGER_LEVEL: "${level}". Must be: debug, info, warn, error`);
142
142
  }
143
143
  // Validate scope
144
- const scope = process.env.VOILA_LOGGER_SCOPE;
144
+ const scope = process.env.BLOOM_LOGGER_SCOPE;
145
145
  if (scope && !['minimal', 'full'].includes(scope.toLowerCase())) {
146
- throw new Error(`Invalid VOILA_LOGGER_SCOPE: "${scope}". Must be: minimal, full`);
146
+ throw new Error(`Invalid BLOOM_LOGGER_SCOPE: "${scope}". Must be: minimal, full`);
147
147
  }
148
148
  // Validate visual errors setting
149
- const visualErrors = process.env.VOILA_VISUAL_ERRORS;
149
+ const visualErrors = process.env.BLOOM_VISUAL_ERRORS;
150
150
  if (visualErrors && !['true', 'false'].includes(visualErrors)) {
151
- throw new Error(`Invalid VOILA_VISUAL_ERRORS: "${visualErrors}". Must be: true, false`);
151
+ throw new Error(`Invalid BLOOM_VISUAL_ERRORS: "${visualErrors}". Must be: true, false`);
152
152
  }
153
153
  // Validate URLs if provided
154
- const httpUrl = process.env.VOILA_LOGGER_HTTP_URL;
154
+ const httpUrl = process.env.BLOOM_LOGGER_HTTP_URL;
155
155
  if (httpUrl && !isValidUrl(httpUrl)) {
156
- throw new Error(`Invalid VOILA_LOGGER_HTTP_URL: "${httpUrl}"`);
156
+ throw new Error(`Invalid BLOOM_LOGGER_HTTP_URL: "${httpUrl}"`);
157
157
  }
158
- const webhookUrl = process.env.VOILA_LOGGER_WEBHOOK_URL;
158
+ const webhookUrl = process.env.BLOOM_LOGGER_WEBHOOK_URL;
159
159
  if (webhookUrl && !isValidUrl(webhookUrl)) {
160
- throw new Error(`Invalid VOILA_LOGGER_WEBHOOK_URL: "${webhookUrl}"`);
160
+ throw new Error(`Invalid BLOOM_LOGGER_WEBHOOK_URL: "${webhookUrl}"`);
161
161
  }
162
162
  // Validate database URL if database logging enabled
163
- const dbEnabled = process.env.VOILA_LOGGER_DATABASE === 'true';
163
+ const dbEnabled = process.env.BLOOM_LOGGER_DATABASE === 'true';
164
164
  const dbUrl = process.env.DATABASE_URL;
165
165
  if (dbEnabled && !dbUrl) {
166
- throw new Error('VOILA_LOGGER_DATABASE=true but DATABASE_URL not provided');
166
+ throw new Error('BLOOM_LOGGER_DATABASE=true but DATABASE_URL not provided');
167
167
  }
168
168
  if (dbUrl && !isValidDatabaseUrl(dbUrl)) {
169
169
  throw new Error(`Invalid DATABASE_URL: "${dbUrl}"`);
170
170
  }
171
171
  // Validate numeric values
172
- validateNumericEnv('VOILA_LOGGER_FILE_SIZE', 1000000, 100000000); // 1MB to 100MB
173
- validateNumericEnv('VOILA_LOGGER_FILE_RETENTION', 1, 365); // 1 to 365 days
174
- validateNumericEnv('VOILA_LOGGER_HTTP_TIMEOUT', 1000, 300000); // 1s to 5min
172
+ validateNumericEnv('BLOOM_LOGGER_FILE_SIZE', 1000000, 100000000); // 1MB to 100MB
173
+ validateNumericEnv('BLOOM_LOGGER_FILE_RETENTION', 1, 365); // 1 to 365 days
174
+ validateNumericEnv('BLOOM_LOGGER_HTTP_TIMEOUT', 1000, 300000); // 1s to 5min
175
175
  }
176
176
  /**
177
177
  * Validate numeric environment variable
@@ -16,6 +16,7 @@ export interface Logger {
16
16
  error(message: string, meta?: LogMeta): void;
17
17
  warn(message: string, meta?: LogMeta): void;
18
18
  debug(message: string, meta?: LogMeta): void;
19
+ fatal(message: string, meta?: LogMeta): void;
19
20
  child(bindings: LogMeta): Logger;
20
21
  flush(): Promise<void>;
21
22
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBvC;AAED;;;;GAIG;AACH,iBAAe,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpC;AAED;;;;GAIG;AACH,iBAAS,mBAAmB,IAAI,MAAM,EAAE,CAKvC;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK3C;AAED;;;;GAIG;AACH,iBAAS,SAAS;;;;;;;;;;;;;;;;SAKjB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CASd,CAAC;AAGX,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;GAMG;AACH,iBAAS,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBvC;AAED;;;;GAIG;AACH,iBAAe,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpC;AAED;;;;GAIG;AACH,iBAAS,mBAAmB,IAAI,MAAM,EAAE,CAKvC;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAK3C;AAED;;;;GAIG;AACH,iBAAS,SAAS;;;;;;;;;;;;;;;;SAKjB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;CASd,CAAC;AAGX,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,eAAe,WAAW,CAAC"}