@venizia/ignis-helpers 0.1.1-10 → 0.1.1-12

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.
@@ -5,7 +5,7 @@ const error_1 = require("../../modules/error");
5
5
  const module_utility_1 = require("../../utilities/module.utility");
6
6
  const common_1 = require("./common");
7
7
  const system_envs_1 = require("./system-envs");
8
- // node-vault / @dotenvx/dotenvx are optional peers reached only via `ModuleUtility.load`: never eagerly loaded, invisible to bundlers. Compiled apps that use a provider must ship the peer in node_modules or inject the client via options.
8
+ // node-vault / @dotenvx/dotenvx are optional peers reached only via `ModuleUtility.load`: never eagerly loaded, invisible to bundlers. Compiled apps that use a provider must ship the peer in node_modules, inject the client via options, or register it with `ModuleUtility.register`.
9
9
  async function createSecretsHelper(opts) {
10
10
  const shared = {
11
11
  identifier: opts.identifier,
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/modules/secrets/factory.ts"],"names":[],"mappings":";;AAOA,kDA6BC;AAnCD,2CAA2C;AAC3C,+DAA2D;AAC3D,qCAA2F;AAC3F,+CAAiD;AAEjD,8OAA8O;AACvO,KAAK,UAAU,mBAAmB,CACvC,IAAoD;IAEpD,MAAM,MAAM,GAAG;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC;IAEF,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,wBAAe,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,8BAAgB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,wBAAe,CAAC,eAAe,CAAC,CAAC,CAAC;YACrC,8BAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC1F,MAAM,EAAE,oBAAoB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAY,CAAC;YACnF,OAAO,IAAI,oBAAoB,CAAC,EAAE,GAAI,IAAI,CAAC,MAAkB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,wBAAe,CAAC,YAAY,CAAC,CAAC,CAAC;YAClC,8BAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7F,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAY,CAAC;YAC7E,OAAO,IAAI,iBAAiB,CAAC,EAAE,GAAI,IAAI,CAAC,MAAkB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAA,gBAAQ,EAAC;gBACb,OAAO,EAAE,sDAAsD,IAAI,CAAC,QAAQ,EAAE;aAC/E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/modules/secrets/factory.ts"],"names":[],"mappings":";;AAOA,kDA6BC;AAnCD,2CAA2C;AAC3C,+DAA2D;AAC3D,qCAA2F;AAC3F,+CAAiD;AAEjD,0RAA0R;AACnR,KAAK,UAAU,mBAAmB,CACvC,IAAoD;IAEpD,MAAM,MAAM,GAAG;QACb,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC;IAEF,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,KAAK,wBAAe,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,OAAO,IAAI,8BAAgB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,KAAK,wBAAe,CAAC,eAAe,CAAC,CAAC,CAAC;YACrC,8BAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAC1F,MAAM,EAAE,oBAAoB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAY,CAAC;YACnF,OAAO,IAAI,oBAAoB,CAAC,EAAE,GAAI,IAAI,CAAC,MAAkB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,KAAK,wBAAe,CAAC,YAAY,CAAC,CAAC,CAAC;YAClC,8BAAa,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC7F,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAY,CAAC;YAC7E,OAAO,IAAI,iBAAiB,CAAC,EAAE,GAAI,IAAI,CAAC,MAAkB,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,IAAA,gBAAQ,EAAC;gBACb,OAAO,EAAE,sDAAsD,IAAI,CAAC,QAAQ,EAAE;aAC/E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,9 +1,20 @@
1
1
  import type { AnyType } from '../common/types';
2
2
  /** Loads an optional peer without letting `Bun.build` see it: every specifier stays a parameter, so there is no literal (nor a `minify.syntax`-folded const) for the bundler to resolve. */
3
3
  export declare class ModuleUtility {
4
+ /** Peers handed over by the application, keyed by specifier. Checked before any filesystem lookup. */
5
+ private static readonly registered;
4
6
  /** Resolves peers against the APP's node_modules, not this package's own `dist/` location. */
5
7
  private static appRequire;
6
8
  private static fail;
9
+ /**
10
+ * Hands the framework a peer the application already holds, so no filesystem lookup is needed.
11
+ * A `bun build --compile` binary ships without `node_modules`, which leaves runtime resolution
12
+ * nothing to resolve against: the application imports such a peer statically - that import is
13
+ * what gets it into the binary - and registers it here before the consuming component boots.
14
+ */
15
+ static register(opts: {
16
+ modules: Record<string, AnyType>;
17
+ }): void;
7
18
  /** Loads the module. Use this everywhere except a constructor, which cannot await. */
8
19
  static load<T = AnyType>(opts: {
9
20
  module: string;
@@ -1 +1 @@
1
- {"version":3,"file":"module.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/module.utility.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,4LAA4L;AAC5L,qBAAa,aAAa;IACxB,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,IAAI;IAanB,sFAAsF;WACzE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAUpE,kFAAkF;IAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC;IAUzD,yFAAyF;IACzF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAY/E"}
1
+ {"version":3,"file":"module.utility.d.ts","sourceRoot":"","sources":["../../src/utilities/module.utility.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAM9C,4LAA4L;AAC5L,qBAAa,aAAa;IACxB,sGAAsG;IACtG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEhE,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB,OAAO,CAAC,MAAM,CAAC,IAAI;IAanB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAOjE,sFAAsF;WACzE,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAcpE,kFAAkF;IAClF,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC;IAczD,yFAAyF;IACzF,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAgB/E"}
@@ -11,6 +11,8 @@ const error_1 = require("../modules/error");
11
11
  const logger = logger_1.LoggerFactory.getLogger(['ModuleUtility']);
12
12
  /** Loads an optional peer without letting `Bun.build` see it: every specifier stays a parameter, so there is no literal (nor a `minify.syntax`-folded const) for the bundler to resolve. */
13
13
  class ModuleUtility {
14
+ /** Peers handed over by the application, keyed by specifier. Checked before any filesystem lookup. */
15
+ static { this.registered = new Map(); }
14
16
  /** Resolves peers against the APP's node_modules, not this package's own `dist/` location. */
15
17
  static appRequire() {
16
18
  return (0, node_module_1.createRequire)(node_path_1.default.join(process.cwd(), 'node_modules'));
@@ -23,9 +25,24 @@ class ModuleUtility {
23
25
  message: `[ModuleUtility.${method}] ${module} is required${scope ? ` for ${scope}` : ''}. Please install '${module}' | Error: ${reason}`,
24
26
  });
25
27
  }
28
+ /**
29
+ * Hands the framework a peer the application already holds, so no filesystem lookup is needed.
30
+ * A `bun build --compile` binary ships without `node_modules`, which leaves runtime resolution
31
+ * nothing to resolve against: the application imports such a peer statically - that import is
32
+ * what gets it into the binary - and registers it here before the consuming component boots.
33
+ */
34
+ static register(opts) {
35
+ for (const [module, value] of Object.entries(opts.modules)) {
36
+ this.registered.set(module, value);
37
+ logger.for(this.register.name).debug("Registered module: '%s'", module);
38
+ }
39
+ }
26
40
  /** Loads the module. Use this everywhere except a constructor, which cannot await. */
27
41
  static async load(opts) {
28
42
  const { module } = opts;
43
+ if (this.registered.has(module)) {
44
+ return this.registered.get(module);
45
+ }
29
46
  try {
30
47
  return (await import(module));
31
48
  }
@@ -36,6 +53,9 @@ class ModuleUtility {
36
53
  /** Sync twin of {@link load}, for a constructor or any path that cannot await. */
37
54
  static loadSync(opts) {
38
55
  const { module } = opts;
56
+ if (this.registered.has(module)) {
57
+ return this.registered.get(module);
58
+ }
39
59
  try {
40
60
  return this.appRequire()(module);
41
61
  }
@@ -48,6 +68,9 @@ class ModuleUtility {
48
68
  const { modules, scope } = opts;
49
69
  const appRequire = this.appRequire();
50
70
  for (const module of modules) {
71
+ if (this.registered.has(module)) {
72
+ continue;
73
+ }
51
74
  try {
52
75
  appRequire.resolve(module);
53
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.utility.js","sourceRoot":"","sources":["../../src/utilities/module.utility.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA4C;AAC5C,0DAA6B;AAE7B,6CAAiD;AACjD,2CAA2C;AAE3C,MAAM,MAAM,GAAG,sBAAa,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAE1D,4LAA4L;AAC5L,MAAa,aAAa;IACxB,8FAA8F;IACtF,MAAM,CAAC,UAAU;QACvB,OAAO,IAAA,2BAAa,EAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,IAAI,CAAC,IAAwE;QAC1F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAO,IAAA,gBAAQ,EAAC;YACd,OAAO,EAAE,kBAAkB,MAAM,KAAK,MAAM,eAC1C,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,EAC5B,qBAAqB,MAAM,cAAc,MAAM,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAc,IAAwB;QACrD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAM,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,QAAQ,CAAc,IAAwB;QACnD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAM,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,eAAe,CAAC,IAAgD;QACrE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAtDD,sCAsDC"}
1
+ {"version":3,"file":"module.utility.js","sourceRoot":"","sources":["../../src/utilities/module.utility.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA4C;AAC5C,0DAA6B;AAE7B,6CAAiD;AACjD,2CAA2C;AAE3C,MAAM,MAAM,GAAG,sBAAa,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAE1D,4LAA4L;AAC5L,MAAa,aAAa;IACxB,sGAAsG;aAC9E,eAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEhE,8FAA8F;IACtF,MAAM,CAAC,UAAU;QACvB,OAAO,IAAA,2BAAa,EAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,IAAI,CAAC,IAAwE;QAC1F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5E,OAAO,IAAA,gBAAQ,EAAC;YACd,OAAO,EAAE,kBAAkB,MAAM,KAAK,MAAM,eAC1C,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,EAC5B,qBAAqB,MAAM,cAAc,MAAM,EAAE;SAClD,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,IAA0C;QACxD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,KAAK,CAAC,IAAI,CAAc,IAAwB;QACrD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAM,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,QAAQ,CAAc,IAAwB;QACnD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAM,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAM,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,yFAAyF;IACzF,MAAM,CAAC,eAAe,CAAC,IAAgD;QACrE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;;AAjFH,sCAkFC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venizia/ignis-helpers",
3
- "version": "0.1.1-10",
3
+ "version": "0.1.1-12",
4
4
  "description": "Production-ready TypeScript utility library: pluggable logging (winston or pino behind one ILogger contract), Redis single/cluster/sentinel with pub/sub, BullMQ/MQTT/Kafka message queues, MinIO/Disk/Bun-S3 object storage, AES-256/RSA/ECDH cryptography, Snowflake UID generation, cron scheduling, Socket.IO/WebSocket, TCP/TLS/UDP networking, HTTP clients, secrets/Vault, worker thread pools, and environment management. Sub-path imports isolate optional peer dependencies so the root barrel never forces a peer into your bundle.",
5
5
  "keywords": [
6
6
  "aes",