elseware-nodejs 1.11.1 → 1.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var dotenv = require('dotenv');
3
4
  var mongoose = require('mongoose');
4
5
  var crypto = require('crypto');
5
6
  var async_hooks = require('async_hooks');
@@ -15,6 +16,7 @@ var multer = require('multer');
15
16
 
16
17
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
18
 
19
+ var dotenv__default = /*#__PURE__*/_interopDefault(dotenv);
18
20
  var mongoose__default = /*#__PURE__*/_interopDefault(mongoose);
19
21
  var fs3__default = /*#__PURE__*/_interopDefault(fs3);
20
22
  var cloudinaryModule__default = /*#__PURE__*/_interopDefault(cloudinaryModule);
@@ -25,6 +27,160 @@ var juice__default = /*#__PURE__*/_interopDefault(juice);
25
27
  var jwt__default = /*#__PURE__*/_interopDefault(jwt);
26
28
  var multer__default = /*#__PURE__*/_interopDefault(multer);
27
29
 
30
+ // src/core/constants/defaultOrigins.ts
31
+ var DEFAULT_ALLOWED_ORIGINS = ["http://localhost:3000"];
32
+
33
+ // src/utils/errorToString.ts
34
+ function errorToString(error) {
35
+ if (error instanceof Error) {
36
+ return `${error.name}: ${error.message}
37
+ ${error.stack ?? ""}`;
38
+ }
39
+ if (typeof error === "object") {
40
+ try {
41
+ return JSON.stringify(error, null, 2);
42
+ } catch {
43
+ return "[Unserializable object]";
44
+ }
45
+ }
46
+ return String(error);
47
+ }
48
+
49
+ // src/core/logger/colors.ts
50
+ var colors = {
51
+ reset: "\x1B[0m",
52
+ blue: "\x1B[34m",
53
+ yellow: "\x1B[33m",
54
+ red: "\x1B[31m",
55
+ cyan: "\x1B[36m"
56
+ };
57
+
58
+ // src/core/logger/Logger.ts
59
+ var Logger = class {
60
+ enabled = true;
61
+ timestamp = true;
62
+ colorsEnabled = true;
63
+ minimumLevel = "INFO" /* INFO */;
64
+ configure(options = {}) {
65
+ this.enabled = options.enabled ?? this.enabled;
66
+ this.timestamp = options.timestamp ?? this.timestamp;
67
+ this.colorsEnabled = options.colors ?? this.colorsEnabled;
68
+ this.minimumLevel = options.level ?? this.minimumLevel;
69
+ }
70
+ levelWeight(level) {
71
+ switch (level) {
72
+ case "DEBUG" /* DEBUG */:
73
+ return 10;
74
+ case "INFO" /* INFO */:
75
+ return 20;
76
+ case "WARN" /* WARN */:
77
+ return 30;
78
+ case "ERROR" /* ERROR */:
79
+ return 40;
80
+ }
81
+ }
82
+ shouldLog(level) {
83
+ return this.levelWeight(level) >= this.levelWeight(this.minimumLevel);
84
+ }
85
+ formatLevel(level) {
86
+ if (!this.colorsEnabled) {
87
+ return level;
88
+ }
89
+ switch (level) {
90
+ case "DEBUG" /* DEBUG */:
91
+ return `${colors.cyan}${level}${colors.reset}`;
92
+ case "INFO" /* INFO */:
93
+ return `${colors.blue}${level}${colors.reset}`;
94
+ case "WARN" /* WARN */:
95
+ return `${colors.yellow}${level}${colors.reset}`;
96
+ case "ERROR" /* ERROR */:
97
+ return `${colors.red}${level}${colors.reset}`;
98
+ }
99
+ }
100
+ write(level, message) {
101
+ if (!this.enabled) {
102
+ return;
103
+ }
104
+ if (!this.shouldLog(level)) {
105
+ return;
106
+ }
107
+ const timestamp = this.timestamp ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : "";
108
+ console.log(`${timestamp}[${this.formatLevel(level)}] ${message}`);
109
+ }
110
+ debug(message) {
111
+ this.write("DEBUG" /* DEBUG */, message);
112
+ }
113
+ info(message) {
114
+ this.write("INFO" /* INFO */, message);
115
+ }
116
+ warn(message) {
117
+ this.write("WARN" /* WARN */, message);
118
+ }
119
+ error(message, error) {
120
+ if (error) {
121
+ this.write("ERROR" /* ERROR */, `${message}
122
+ ${errorToString(error)}`);
123
+ return;
124
+ }
125
+ this.write("ERROR" /* ERROR */, message);
126
+ }
127
+ };
128
+
129
+ // src/core/logger/index.ts
130
+ var logger = new Logger();
131
+
132
+ // src/core/environment/loadEnv.ts
133
+ dotenv__default.default.config({ quiet: true });
134
+ function loadEnv(options) {
135
+ const result = options.schema.safeParse(process.env);
136
+ if (!result.success) {
137
+ handleValidationError(result.error);
138
+ }
139
+ logger.info("Environment variables validated");
140
+ const env = result.data;
141
+ return options.transform ? options.transform(env) : env;
142
+ }
143
+ function handleValidationError(error) {
144
+ logger.error("Environment validation failed");
145
+ const grouped = {};
146
+ for (const issue of error.issues) {
147
+ const key = issue.path.join(".") || "unknown";
148
+ const rawValue = key !== "unknown" ? process.env[key] : void 0;
149
+ const safeValue = key.toLowerCase().includes("secret") ? "***" : rawValue;
150
+ const message = [
151
+ `message: ${issue.message}`,
152
+ `code: ${issue.code}`,
153
+ rawValue !== void 0 ? `value: ${JSON.stringify(safeValue)}` : null
154
+ ].filter(Boolean).join(" | ");
155
+ grouped[key] ??= [];
156
+ grouped[key].push(message);
157
+ }
158
+ Object.entries(grouped).forEach(([key, messages]) => {
159
+ logger.error(`ENV: ${key}`);
160
+ messages.forEach((message) => logger.error(` - ${message}`));
161
+ });
162
+ logger.error("Application startup aborted");
163
+ process.exit(1);
164
+ }
165
+
166
+ // src/core/errors/AppError.ts
167
+ var AppError = class extends Error {
168
+ statusCode;
169
+ status;
170
+ isOperational;
171
+ code;
172
+ details;
173
+ constructor(message, statusCode = 500, options) {
174
+ super(message);
175
+ this.statusCode = statusCode;
176
+ this.status = statusCode >= 400 && statusCode < 500 ? "fail" : "error";
177
+ this.isOperational = options?.isOperational ?? true;
178
+ this.code = options?.code;
179
+ this.details = options?.details;
180
+ Error.captureStackTrace(this, this.constructor);
181
+ }
182
+ };
183
+
28
184
  // src/data-structures/array/CircularArray.ts
29
185
  var CircularArray = class {
30
186
  capacity;
@@ -4707,9 +4863,6 @@ var SegmentTree = class {
4707
4863
  }
4708
4864
  };
4709
4865
 
4710
- // src/core/constants/defaultOrigins.ts
4711
- var DEFAULT_ALLOWED_ORIGINS = ["http://localhost:3000"];
4712
-
4713
4866
  // src/infrastructure/cors/createAllowedOrigins.ts
4714
4867
  function createAllowedOrigins(options = {}) {
4715
4868
  const { origins, defaults = DEFAULT_ALLOWED_ORIGINS } = options;
@@ -4748,105 +4901,6 @@ function createCorsOptions(allowedOrigins) {
4748
4901
  };
4749
4902
  }
4750
4903
 
4751
- // src/utils/errorToString.ts
4752
- function errorToString(error) {
4753
- if (error instanceof Error) {
4754
- return `${error.name}: ${error.message}
4755
- ${error.stack ?? ""}`;
4756
- }
4757
- if (typeof error === "object") {
4758
- try {
4759
- return JSON.stringify(error, null, 2);
4760
- } catch {
4761
- return "[Unserializable object]";
4762
- }
4763
- }
4764
- return String(error);
4765
- }
4766
-
4767
- // src/core/logger/colors.ts
4768
- var colors = {
4769
- reset: "\x1B[0m",
4770
- blue: "\x1B[34m",
4771
- yellow: "\x1B[33m",
4772
- red: "\x1B[31m",
4773
- cyan: "\x1B[36m"
4774
- };
4775
-
4776
- // src/core/logger/Logger.ts
4777
- var Logger = class {
4778
- enabled = true;
4779
- timestamp = true;
4780
- colorsEnabled = true;
4781
- minimumLevel = "INFO" /* INFO */;
4782
- configure(options = {}) {
4783
- this.enabled = options.enabled ?? this.enabled;
4784
- this.timestamp = options.timestamp ?? this.timestamp;
4785
- this.colorsEnabled = options.colors ?? this.colorsEnabled;
4786
- this.minimumLevel = options.level ?? this.minimumLevel;
4787
- }
4788
- levelWeight(level) {
4789
- switch (level) {
4790
- case "DEBUG" /* DEBUG */:
4791
- return 10;
4792
- case "INFO" /* INFO */:
4793
- return 20;
4794
- case "WARN" /* WARN */:
4795
- return 30;
4796
- case "ERROR" /* ERROR */:
4797
- return 40;
4798
- }
4799
- }
4800
- shouldLog(level) {
4801
- return this.levelWeight(level) >= this.levelWeight(this.minimumLevel);
4802
- }
4803
- formatLevel(level) {
4804
- if (!this.colorsEnabled) {
4805
- return level;
4806
- }
4807
- switch (level) {
4808
- case "DEBUG" /* DEBUG */:
4809
- return `${colors.cyan}${level}${colors.reset}`;
4810
- case "INFO" /* INFO */:
4811
- return `${colors.blue}${level}${colors.reset}`;
4812
- case "WARN" /* WARN */:
4813
- return `${colors.yellow}${level}${colors.reset}`;
4814
- case "ERROR" /* ERROR */:
4815
- return `${colors.red}${level}${colors.reset}`;
4816
- }
4817
- }
4818
- write(level, message) {
4819
- if (!this.enabled) {
4820
- return;
4821
- }
4822
- if (!this.shouldLog(level)) {
4823
- return;
4824
- }
4825
- const timestamp = this.timestamp ? `[${(/* @__PURE__ */ new Date()).toISOString()}] ` : "";
4826
- console.log(`${timestamp}[${this.formatLevel(level)}] ${message}`);
4827
- }
4828
- debug(message) {
4829
- this.write("DEBUG" /* DEBUG */, message);
4830
- }
4831
- info(message) {
4832
- this.write("INFO" /* INFO */, message);
4833
- }
4834
- warn(message) {
4835
- this.write("WARN" /* WARN */, message);
4836
- }
4837
- error(message, error) {
4838
- if (error) {
4839
- this.write("ERROR" /* ERROR */, `${message}
4840
- ${errorToString(error)}`);
4841
- return;
4842
- }
4843
- this.write("ERROR" /* ERROR */, message);
4844
- }
4845
- };
4846
-
4847
- // src/core/logger/index.ts
4848
- var logger = new Logger();
4849
-
4850
4904
  // src/infrastructure/database/DatabaseManager.ts
4851
4905
  var DatabaseManager = class {
4852
4906
  constructor(provider, options = {
@@ -4931,24 +4985,6 @@ var MongoDatabaseProvider = class {
4931
4985
  }
4932
4986
  };
4933
4987
 
4934
- // src/core/errors/AppError.ts
4935
- var AppError = class extends Error {
4936
- statusCode;
4937
- status;
4938
- isOperational;
4939
- code;
4940
- details;
4941
- constructor(message, statusCode = 500, options) {
4942
- super(message);
4943
- this.statusCode = statusCode;
4944
- this.status = statusCode >= 400 && statusCode < 500 ? "fail" : "error";
4945
- this.isOperational = options?.isOperational ?? true;
4946
- this.code = options?.code;
4947
- this.details = options?.details;
4948
- Error.captureStackTrace(this, this.constructor);
4949
- }
4950
- };
4951
-
4952
4988
  // src/infrastructure/http/handlers/AsyncHandler.ts
4953
4989
  var AsyncHandler = (fn) => (req, res, next) => {
4954
4990
  Promise.resolve(fn(req, res, next)).catch(next);
@@ -5248,7 +5284,7 @@ var handleDuplicateKey = (err) => {
5248
5284
  code: "DUPLICATE_FIELD"
5249
5285
  });
5250
5286
  };
5251
- var handleValidationError = (err) => {
5287
+ var handleValidationError2 = (err) => {
5252
5288
  const errors = Object.entries(err.errors).reduce(
5253
5289
  (acc, [key, value]) => {
5254
5290
  acc[key] = value.message;
@@ -5285,7 +5321,7 @@ var ErrorMiddleware = (isProduction = false) => (err, _req, res, _next) => {
5285
5321
  );
5286
5322
  }
5287
5323
  if (err && err.name === "ValidationError") {
5288
- error = handleValidationError(err);
5324
+ error = handleValidationError2(err);
5289
5325
  }
5290
5326
  if (err?.name === "JsonWebTokenError") {
5291
5327
  error = handleJWTError();
@@ -6304,6 +6340,7 @@ exports.AdjacencyList = AdjacencyList;
6304
6340
  exports.AdjacencyMatrix = AdjacencyMatrix;
6305
6341
  exports.ApiFeatures = ApiFeatures;
6306
6342
  exports.ApiResponse = ApiResponse;
6343
+ exports.AppError = AppError;
6307
6344
  exports.AsyncHandler = AsyncHandler;
6308
6345
  exports.AzureBlobStorageService = AzureBlobStorageService;
6309
6346
  exports.BPlusTree = BPlusTree;
@@ -6321,6 +6358,7 @@ exports.ConsistentHash = ConsistentHash;
6321
6358
  exports.CorrelationId = CorrelationId;
6322
6359
  exports.CountMinSketch = CountMinSketch;
6323
6360
  exports.CrudControllerFactory = CrudControllerFactory;
6361
+ exports.DEFAULT_ALLOWED_ORIGINS = DEFAULT_ALLOWED_ORIGINS;
6324
6362
  exports.DEFAULT_LIMIT = DEFAULT_LIMIT;
6325
6363
  exports.DEFAULT_PAGE = DEFAULT_PAGE;
6326
6364
  exports.DEFAULT_SORT_DIRECTION = DEFAULT_SORT_DIRECTION;
@@ -6349,6 +6387,7 @@ exports.JoiValidator = JoiValidator;
6349
6387
  exports.KDTree = KDTree;
6350
6388
  exports.LFUCache = LFUCache;
6351
6389
  exports.LRUCache = LRUCache;
6390
+ exports.Logger = Logger;
6352
6391
  exports.MaxHeap = MaxHeap;
6353
6392
  exports.MaxStack = MaxStack;
6354
6393
  exports.MinHeap = MinHeap;
@@ -6396,6 +6435,8 @@ exports.errorToString = errorToString;
6396
6435
  exports.hours = hours;
6397
6436
  exports.isJoiSchema = isJoiSchema;
6398
6437
  exports.isZodSchema = isZodSchema;
6438
+ exports.loadEnv = loadEnv;
6439
+ exports.logger = logger;
6399
6440
  exports.milliseconds = milliseconds;
6400
6441
  exports.minutes = minutes;
6401
6442
  exports.pickFields = pickFields;