elseware-nodejs 1.11.1 → 1.11.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.
- package/dist/index.cjs +163 -122
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +57 -2
- package/dist/index.d.ts +57 -2
- package/dist/index.js +158 -123
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
+
error.issues.forEach((issue) => {
|
|
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
|
|
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 =
|
|
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;
|