@catbee/utils 2.0.0-next.0 → 2.0.0-next.1

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 (97) hide show
  1. package/README.md +52 -16
  2. package/array/index.cjs +180 -71
  3. package/array/index.d.ts +293 -1
  4. package/array/index.mjs +171 -72
  5. package/async/index.cjs +92 -36
  6. package/async/index.d.ts +275 -1
  7. package/async/index.mjs +92 -36
  8. package/cache/index.cjs +1 -1
  9. package/cache/index.d.ts +155 -1
  10. package/cache/index.mjs +2 -2
  11. package/config/index.cjs +78 -64
  12. package/config/index.d.ts +64 -2
  13. package/config/index.mjs +76 -64
  14. package/context-store/index.d.ts +192 -1
  15. package/crypto/index.d.ts +163 -1
  16. package/date/index.cjs +46 -1
  17. package/date/index.d.ts +190 -1
  18. package/date/index.mjs +45 -2
  19. package/decorators/index.cjs +1156 -18
  20. package/decorators/index.d.ts +684 -1
  21. package/decorators/index.mjs +1156 -18
  22. package/dir/index.cjs +4 -3
  23. package/dir/index.d.ts +195 -1
  24. package/dir/index.mjs +4 -3
  25. package/env/index.cjs +10 -26
  26. package/env/index.d.ts +379 -1
  27. package/env/index.mjs +10 -26
  28. package/exception/index.d.ts +232 -1
  29. package/fs/index.cjs +70 -36
  30. package/fs/index.d.ts +205 -1
  31. package/fs/index.mjs +64 -34
  32. package/http-status-codes/index.d.ts +267 -1
  33. package/id/index.d.ts +37 -1
  34. package/index.cjs +3 -3
  35. package/index.d.ts +1 -1
  36. package/index.mjs +1 -1
  37. package/logger/index.cjs +11 -11
  38. package/logger/index.d.ts +189 -1
  39. package/logger/index.mjs +12 -12
  40. package/middleware/index.d.ts +103 -1
  41. package/obj/index.cjs +150 -162
  42. package/obj/index.d.ts +136 -1
  43. package/obj/index.mjs +150 -162
  44. package/package.json +11 -11
  45. package/performance/index.cjs +2 -2
  46. package/performance/index.d.ts +138 -1
  47. package/performance/index.mjs +2 -2
  48. package/request/index.cjs +1 -1
  49. package/request/index.d.ts +241 -2
  50. package/request/index.mjs +1 -1
  51. package/response/index.d.ts +318 -2
  52. package/server/index.cjs +27 -23
  53. package/server/index.d.ts +785 -4
  54. package/server/index.mjs +28 -23
  55. package/stream/index.d.ts +90 -1
  56. package/string/index.d.ts +102 -1
  57. package/type/index.cjs +1 -1
  58. package/type/index.d.ts +107 -1
  59. package/type/index.mjs +1 -1
  60. package/types/index.d.ts +774 -4
  61. package/url/index.cjs +2 -4
  62. package/url/index.d.ts +142 -1
  63. package/url/index.mjs +2 -4
  64. package/{validate → validation}/index.cjs +89 -42
  65. package/{validate/validate.utils.d.ts → validation/index.d.ts} +32 -23
  66. package/{validate → validation}/index.mjs +85 -42
  67. package/array/array.utils.d.ts +0 -191
  68. package/async/async.utils.d.ts +0 -296
  69. package/cache/cache.utils.d.ts +0 -176
  70. package/config/config.d.ts +0 -57
  71. package/context-store/context-store.utils.d.ts +0 -212
  72. package/crypto/crypto.utils.d.ts +0 -183
  73. package/date/date.utils.d.ts +0 -190
  74. package/decorators/decorators.utils.d.ts +0 -705
  75. package/dir/dir.utils.d.ts +0 -216
  76. package/env/env.utils.d.ts +0 -400
  77. package/exception/exception.utils.d.ts +0 -253
  78. package/fs/fs.utils.d.ts +0 -196
  79. package/http-status-codes/http-status-codes.d.ts +0 -289
  80. package/id/id.utils.d.ts +0 -59
  81. package/logger/logger.utils.d.ts +0 -210
  82. package/middleware/middleware.utils.d.ts +0 -123
  83. package/obj/obj.utils.d.ts +0 -156
  84. package/performance/performance.utils.d.ts +0 -159
  85. package/request/request.utils.d.ts +0 -109
  86. package/response/response.utils.d.ts +0 -186
  87. package/server/server.builder.d.ts +0 -531
  88. package/server/server.d.ts +0 -303
  89. package/stream/stream.utils.d.ts +0 -111
  90. package/string/string.utils.d.ts +0 -124
  91. package/type/type.utils.d.ts +0 -129
  92. package/types/api-response.d.ts +0 -175
  93. package/types/common.d.ts +0 -148
  94. package/types/config.d.ts +0 -88
  95. package/types/server.d.ts +0 -291
  96. package/url/url.utils.d.ts +0 -164
  97. package/validate/index.d.ts +0 -25
package/server/index.cjs CHANGED
@@ -32,18 +32,17 @@ var middleware = require('@catbee/utils/middleware');
32
32
  var env = require('@catbee/utils/env');
33
33
  var logger = require('@catbee/utils/logger');
34
34
  var exception = require('@catbee/utils/exception');
35
- var fs$1 = require('fs');
36
35
  var config = require('@catbee/utils/config');
37
36
  var obj = require('@catbee/utils/obj');
38
37
  var fs = require('@catbee/utils/fs');
39
- var validate = require('@catbee/utils/validate');
38
+ var validation = require('@catbee/utils/validation');
40
39
  var async = require('@catbee/utils/async');
40
+ var id = require('@catbee/utils/id');
41
41
 
42
42
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
43
43
 
44
44
  var express__default = /*#__PURE__*/_interopDefault(express);
45
45
  var https__default = /*#__PURE__*/_interopDefault(https);
46
- var fs__default = /*#__PURE__*/_interopDefault(fs$1);
47
46
 
48
47
  var __defProp = Object.defineProperty;
49
48
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -61,7 +60,7 @@ var ServerConfigBuilder = class {
61
60
  * @throws {Error} If port is not an integer or is outside the valid range (1-65535)
62
61
  */
63
62
  validatePort(port) {
64
- if (!validate.isPort(port)) {
63
+ if (!validation.isPort(port)) {
65
64
  throw new Error(`Port must be a valid number between 1 and 65535, got: ${port}`);
66
65
  }
67
66
  }
@@ -506,7 +505,10 @@ var ServerConfigBuilder = class {
506
505
  * ```
507
506
  */
508
507
  withBodyParser(opts) {
509
- this.config.bodyParser = obj.deepObjMerge({}, this.config.bodyParser ?? {}, opts);
508
+ this.config.bodyParser = {
509
+ ...this.config.bodyParser,
510
+ ...opts
511
+ };
510
512
  return this;
511
513
  }
512
514
  /**
@@ -649,7 +651,7 @@ var ServerConfigBuilder = class {
649
651
  * ```
650
652
  */
651
653
  build() {
652
- const config$1 = obj.deepObjMerge({}, config.defaultServerConfig, this.config);
654
+ const config$1 = obj.deepObjMerge({}, config.getCatbeeServerGlobalConfig(), this.config);
653
655
  if (config$1.openApi?.enable && !config$1.openApi.filePath) {
654
656
  throw new Error("OpenAPI is enabled but no filePath is specified");
655
657
  }
@@ -659,7 +661,7 @@ var ServerConfigBuilder = class {
659
661
  });
660
662
  }
661
663
  mergeConfig(key, value) {
662
- const current = typeof this.config[key] === "object" && this.config[key] !== null ? this.config[key] : {};
664
+ const current = this.config[key] && typeof this.config[key] === "object" ? obj.deepClone(this.config[key]) : {};
663
665
  this.config[key] = obj.deepObjMerge({}, current, value);
664
666
  }
665
667
  setEnabled(key, enable, overrides = {}) {
@@ -670,9 +672,11 @@ var ServerConfigBuilder = class {
670
672
  return this;
671
673
  }
672
674
  };
673
-
674
- // src/server/server.ts
675
- var getDependencyErrorMessage = /* @__PURE__ */ __name((packageName, x) => `Missing required dependency ${x ? `for ${x}` : ""}: ${packageName}. Please install it to proceed.`, "getDependencyErrorMessage");
675
+ var getDependencyErrorMessage = /* @__PURE__ */ __name((packageName, context) => {
676
+ const ctxPart = context ? `for ${context}` : "";
677
+ const spacer = ctxPart ? ` ${ctxPart}` : "";
678
+ return `Missing required dependency${spacer}: ${packageName}. Please install it to proceed.`;
679
+ }, "getDependencyErrorMessage");
676
680
  var DependencyErrors = {
677
681
  express: getDependencyErrorMessage("express"),
678
682
  helmet: getDependencyErrorMessage("helmet"),
@@ -737,12 +741,12 @@ var ExpressServer = class {
737
741
  * - Request tracing
738
742
  */
739
743
  constructor(config$1, hooks = {}) {
740
- if (this.isBuiltServerConfig(config$1)) {
744
+ if (this.hasBuildMarker(config$1)) {
741
745
  this.config = config$1;
742
746
  } else {
743
- this.config = obj.deepObjMerge({}, config.defaultServerConfig, config$1);
747
+ this.config = obj.deepObjMerge({}, config.getCatbeeServerGlobalConfig(), config$1);
744
748
  }
745
- if (!validate.isPort(this.config.port)) {
749
+ if (!validation.isPort(this.config.port)) {
746
750
  const msg = `Port must be a valid number between 1 and 65535, got: ${this.config.port}`;
747
751
  logger.getLogger().error(msg);
748
752
  throw new Error(msg);
@@ -842,7 +846,7 @@ var ExpressServer = class {
842
846
  async runHook(hook, ...args) {
843
847
  try {
844
848
  const fn = this.hooks[hook];
845
- if (fn) await fn.apply(null, args);
849
+ if (fn) await fn(...args);
846
850
  } catch (err) {
847
851
  logger.getLogger().error({
848
852
  err,
@@ -889,7 +893,7 @@ var ExpressServer = class {
889
893
  this.app.use(middleware.requestId({
890
894
  headerName: this.config.requestId?.headerName,
891
895
  exposeHeader: this.config.requestId?.exposeHeader,
892
- generator: this.config.requestId?.generator
896
+ generator: this.config.requestId?.generator || id.uuid
893
897
  }));
894
898
  this.app.use(middleware.setupRequestContext({
895
899
  headerName: this.config.requestId?.headerName,
@@ -1053,7 +1057,7 @@ var ExpressServer = class {
1053
1057
  }
1054
1058
  this.app.use(openApiMountPath, apiReference({
1055
1059
  spec: {
1056
- content: await fs__default.default.promises.readFile(openApiFilePath, "utf8")
1060
+ content: await fs.readFile(openApiFilePath, "utf8")
1057
1061
  }
1058
1062
  }));
1059
1063
  if (this.config.openApi?.verbose) {
@@ -1117,7 +1121,7 @@ var ExpressServer = class {
1117
1121
  const healthCheckPath = this.normalizePath(this.config.healthCheck?.path || "/healthz", this.config.healthCheck?.withGlobalPrefix);
1118
1122
  this.app.get(healthCheckPath, async (_req, res) => {
1119
1123
  try {
1120
- if (!this.healthChecks.length || config.defaultCatbeeConfig.server.skipHealthz) {
1124
+ if (!this.healthChecks.length || config.getCatbeeServerGlobalConfig().skipHealthz) {
1121
1125
  return res.status(httpStatusCodes.HttpStatusCodes.OK).json(new response.SuccessResponse("OK"));
1122
1126
  }
1123
1127
  const checkResults = await Promise.allSettled(this.healthChecks.map(async ({ name, check }) => {
@@ -1216,7 +1220,7 @@ var ExpressServer = class {
1216
1220
  */
1217
1221
  async ready() {
1218
1222
  try {
1219
- if (!this.healthChecks.length || config.defaultCatbeeConfig.server.skipHealthz) return true;
1223
+ if (!this.healthChecks.length || config.getCatbeeServerGlobalConfig().skipHealthz) return true;
1220
1224
  const checkResults = await Promise.allSettled(this.healthChecks.map(async ({ name, check }) => {
1221
1225
  try {
1222
1226
  const status = await Promise.resolve(check());
@@ -1305,11 +1309,11 @@ var ExpressServer = class {
1305
1309
  if (this.config.https) {
1306
1310
  const httpsOptions = {
1307
1311
  ...this.config.https,
1308
- key: fs__default.default.readFileSync(this.config.https.key),
1309
- cert: fs__default.default.readFileSync(this.config.https.cert)
1312
+ key: fs.readFileSync(this.config.https.key),
1313
+ cert: fs.readFileSync(this.config.https.cert)
1310
1314
  };
1311
1315
  if (this.config.https.ca) {
1312
- httpsOptions.ca = fs__default.default.readFileSync(this.config.https.ca);
1316
+ httpsOptions.ca = fs.readFileSync(this.config.https.ca);
1313
1317
  }
1314
1318
  if (this.config.https.passphrase) {
1315
1319
  httpsOptions.passphrase = this.config.https.passphrase;
@@ -1534,7 +1538,7 @@ var ExpressServer = class {
1534
1538
  /**
1535
1539
  * Get server configuration
1536
1540
  *
1537
- * @return {*} {ServerConfig}
1541
+ * @return {*} {CatbeeServerConfig}
1538
1542
  */
1539
1543
  getConfig() {
1540
1544
  return this.config;
@@ -1608,7 +1612,7 @@ var ExpressServer = class {
1608
1612
  throw new Error(msg);
1609
1613
  }
1610
1614
  }
1611
- isBuiltServerConfig(config) {
1615
+ hasBuildMarker(config) {
1612
1616
  if (config?.[BUILD_MARKER]) {
1613
1617
  return true;
1614
1618
  }