@devbro/pashmak 0.1.49 → 0.1.52

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 (30) hide show
  1. package/dist/DatabaseServiceProvider.d.mts +2 -2
  2. package/dist/DatabaseServiceProvider.mjs +5 -1
  3. package/dist/DatabaseServiceProvider.mjs.map +1 -1
  4. package/dist/app/console/generate/GenerateApiDocsCommand.mjs +5 -5
  5. package/dist/app/console/generate/GenerateApiDocsCommand.mjs.map +1 -1
  6. package/dist/app/console/project/base_project/src/config/default.mts.tpl +16 -1
  7. package/dist/bin/DatabaseServiceProvider.cjs +4 -0
  8. package/dist/bin/app/console/DefaultCommand.cjs +97 -58
  9. package/dist/bin/app/console/KeyGenerateCommand.cjs +97 -58
  10. package/dist/bin/app/console/StartCommand.cjs +97 -58
  11. package/dist/bin/app/console/generate/GenerateApiDocsCommand.cjs +102 -63
  12. package/dist/bin/app/console/generate/GenerateControllerCommand.cjs +97 -58
  13. package/dist/bin/app/console/generate/index.cjs +102 -63
  14. package/dist/bin/app/console/index.cjs +102 -63
  15. package/dist/bin/app/console/migrate/GenerateMigrateCommand.cjs +97 -58
  16. package/dist/bin/app/console/migrate/MigrateCommand.cjs +97 -58
  17. package/dist/bin/app/console/migrate/MigrateRollbackCommand.cjs +97 -58
  18. package/dist/bin/app/console/migrate/index.cjs +97 -58
  19. package/dist/bin/app/console/queue/GenerateQueueMigrateCommand.cjs +97 -58
  20. package/dist/bin/cache.cjs +97 -58
  21. package/dist/bin/facades.cjs +97 -58
  22. package/dist/bin/factories.cjs +97 -58
  23. package/dist/bin/http.cjs +97 -58
  24. package/dist/bin/index.cjs +106 -63
  25. package/dist/bin/middlewares.cjs +97 -58
  26. package/dist/bin/queue.cjs +97 -58
  27. package/dist/facades.d.mts +6 -6
  28. package/dist/facades.mjs +97 -58
  29. package/dist/facades.mjs.map +1 -1
  30. package/package.json +1 -1
@@ -689,27 +689,58 @@ import_neko_storage.StorageProviderFactory.register("sftp", (opt) => {
689
689
  // src/facades.mts
690
690
  var import_neko_cache2 = require("@devbro/neko-cache");
691
691
  var import_neko_queue2 = require("@devbro/neko-queue");
692
+ function wrapSingletonWithAccessors(singletonFn) {
693
+ let methodsInitialized = false;
694
+ const initializeMethods = /* @__PURE__ */ __name(() => {
695
+ if (methodsInitialized) return;
696
+ const defaultInstance = singletonFn();
697
+ const prototype = Object.getPrototypeOf(defaultInstance);
698
+ const methodNames = Object.getOwnPropertyNames(prototype).filter(
699
+ (name) => name !== "constructor" && typeof prototype[name] === "function"
700
+ );
701
+ for (const methodName of methodNames) {
702
+ singletonFn[methodName] = (...args) => {
703
+ const instance = singletonFn();
704
+ return instance[methodName](...args);
705
+ };
706
+ }
707
+ methodsInitialized = true;
708
+ }, "initializeMethods");
709
+ return new Proxy(singletonFn, {
710
+ get(target, prop, receiver) {
711
+ if (typeof prop === "string" && !Reflect.has(target, prop)) {
712
+ initializeMethods();
713
+ }
714
+ return Reflect.get(target, prop, receiver);
715
+ }
716
+ });
717
+ }
718
+ __name(wrapSingletonWithAccessors, "wrapSingletonWithAccessors");
692
719
  var router = (0, import_neko_helper3.createSingleton)(() => new Router());
693
- var scheduler = (0, import_neko_helper3.createSingleton)(() => {
694
- const rc = new import_neko_scheduler.Scheduler();
695
- rc.setErrorHandler((err, job) => {
696
- logger().error({
697
- msg: "Scheduled job error",
698
- err,
699
- job_name: job.getName()
720
+ var scheduler = wrapSingletonWithAccessors(
721
+ (0, import_neko_helper3.createSingleton)(() => {
722
+ const rc = new import_neko_scheduler.Scheduler();
723
+ rc.setErrorHandler((err, job) => {
724
+ logger().error({
725
+ msg: "Scheduled job error",
726
+ err,
727
+ job_name: job.getName()
728
+ });
700
729
  });
701
- });
702
- return rc;
703
- });
730
+ return rc;
731
+ })
732
+ );
704
733
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context3.ctx)().getOrThrow(["database", label]), "db");
705
- var storage = (0, import_neko_helper3.createSingleton)((label = "default") => {
706
- let storage_config = import_neko_config.config.get(["storages", label].join("."));
707
- const provider = import_neko_storage2.StorageProviderFactory.create(
708
- storage_config.provider,
709
- storage_config.config
710
- );
711
- return new import_neko_storage2.Storage(provider);
712
- });
734
+ var storage = wrapSingletonWithAccessors(
735
+ (0, import_neko_helper3.createSingleton)((label = "default") => {
736
+ let storage_config = import_neko_config.config.get(["storages", label].join("."));
737
+ const provider = import_neko_storage2.StorageProviderFactory.create(
738
+ storage_config.provider,
739
+ storage_config.config
740
+ );
741
+ return new import_neko_storage2.Storage(provider);
742
+ })
743
+ );
713
744
  var cli = (0, import_neko_helper3.createSingleton)(() => {
714
745
  const [node, app, ...args] = process.argv;
715
746
  return new import_clipanion.Cli({
@@ -724,46 +755,54 @@ var httpServer = (0, import_neko_helper3.createSingleton)(() => {
724
755
  server.setRouter(router());
725
756
  return server;
726
757
  });
727
- var logger = (0, import_neko_helper3.createSingleton)((label) => {
728
- const logger_config = import_neko_config.config.get(["loggers", label].join("."));
729
- const rc = new import_neko_logger.Logger(logger_config);
730
- rc.setExtrasFunction((message) => {
731
- message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
732
- return message;
733
- });
734
- return rc;
735
- });
736
- var mailer = (0, import_neko_helper3.createSingleton)((label) => {
737
- const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
738
- const provider = import_neko_mailer2.MailerProviderFactory.create(
739
- mailer_config.provider,
740
- mailer_config.config
741
- );
742
- const rc = new import_neko_mailer2.Mailer(provider);
743
- return rc;
744
- });
745
- var queue = (0, import_neko_helper3.createSingleton)((label) => {
746
- const queue_config = import_neko_config.config.get(["queues", label].join("."));
747
- if (!queue_config) {
748
- throw new Error(`Queue configuration for '${label}' not found`);
749
- }
750
- const provider = import_neko_queue2.QueueTransportFactory.create(
751
- queue_config.provider,
752
- queue_config.config
753
- );
754
- return new import_neko_queue2.QueueConnection(provider);
755
- });
756
- var cache = (0, import_neko_helper3.createSingleton)((label) => {
757
- const cache_config = import_neko_config.config.get(["caches", label].join("."));
758
- if (!cache_config) {
759
- throw new Error(`Cache configuration for '${label}' not found`);
760
- }
761
- const provider = CacheProviderFactory.create(
762
- cache_config.provider,
763
- cache_config.config
764
- );
765
- return new import_neko_cache2.Cache(provider);
766
- });
758
+ var logger = wrapSingletonWithAccessors(
759
+ (0, import_neko_helper3.createSingleton)((label) => {
760
+ const logger_config = import_neko_config.config.get(["loggers", label].join("."));
761
+ const rc = new import_neko_logger.Logger(logger_config);
762
+ rc.setExtrasFunction((message) => {
763
+ message.requestId = (0, import_neko_context3.ctxSafe)()?.get("requestId") || "N/A";
764
+ return message;
765
+ });
766
+ return rc;
767
+ })
768
+ );
769
+ var mailer = wrapSingletonWithAccessors(
770
+ (0, import_neko_helper3.createSingleton)((label) => {
771
+ const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
772
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
773
+ mailer_config.provider,
774
+ mailer_config.config
775
+ );
776
+ const rc = new import_neko_mailer2.Mailer(provider);
777
+ return rc;
778
+ })
779
+ );
780
+ var queue = wrapSingletonWithAccessors(
781
+ (0, import_neko_helper3.createSingleton)((label) => {
782
+ const queue_config = import_neko_config.config.get(["queues", label].join("."));
783
+ if (!queue_config) {
784
+ throw new Error(`Queue configuration for '${label}' not found`);
785
+ }
786
+ const provider = import_neko_queue2.QueueTransportFactory.create(
787
+ queue_config.provider,
788
+ queue_config.config
789
+ );
790
+ return new import_neko_queue2.QueueConnection(provider);
791
+ })
792
+ );
793
+ var cache = wrapSingletonWithAccessors(
794
+ (0, import_neko_helper3.createSingleton)((label) => {
795
+ const cache_config = import_neko_config.config.get(["caches", label].join("."));
796
+ if (!cache_config) {
797
+ throw new Error(`Cache configuration for '${label}' not found`);
798
+ }
799
+ const provider = CacheProviderFactory.create(
800
+ cache_config.provider,
801
+ cache_config.config
802
+ );
803
+ return new import_neko_cache2.Cache(provider);
804
+ })
805
+ );
767
806
 
768
807
  // src/middlewares.mts
769
808
  var import_neko_http2 = require("@devbro/neko-http");
@@ -585,27 +585,58 @@ import_neko_storage.StorageProviderFactory.register("sftp", (opt) => {
585
585
  // src/facades.mts
586
586
  var import_neko_cache2 = require("@devbro/neko-cache");
587
587
  var import_neko_queue2 = require("@devbro/neko-queue");
588
+ function wrapSingletonWithAccessors(singletonFn) {
589
+ let methodsInitialized = false;
590
+ const initializeMethods = /* @__PURE__ */ __name(() => {
591
+ if (methodsInitialized) return;
592
+ const defaultInstance = singletonFn();
593
+ const prototype = Object.getPrototypeOf(defaultInstance);
594
+ const methodNames = Object.getOwnPropertyNames(prototype).filter(
595
+ (name) => name !== "constructor" && typeof prototype[name] === "function"
596
+ );
597
+ for (const methodName of methodNames) {
598
+ singletonFn[methodName] = (...args) => {
599
+ const instance = singletonFn();
600
+ return instance[methodName](...args);
601
+ };
602
+ }
603
+ methodsInitialized = true;
604
+ }, "initializeMethods");
605
+ return new Proxy(singletonFn, {
606
+ get(target, prop, receiver) {
607
+ if (typeof prop === "string" && !Reflect.has(target, prop)) {
608
+ initializeMethods();
609
+ }
610
+ return Reflect.get(target, prop, receiver);
611
+ }
612
+ });
613
+ }
614
+ __name(wrapSingletonWithAccessors, "wrapSingletonWithAccessors");
588
615
  var router = (0, import_neko_helper2.createSingleton)(() => new Router());
589
- var scheduler = (0, import_neko_helper2.createSingleton)(() => {
590
- const rc = new import_neko_scheduler.Scheduler();
591
- rc.setErrorHandler((err, job) => {
592
- logger().error({
593
- msg: "Scheduled job error",
594
- err,
595
- job_name: job.getName()
616
+ var scheduler = wrapSingletonWithAccessors(
617
+ (0, import_neko_helper2.createSingleton)(() => {
618
+ const rc = new import_neko_scheduler.Scheduler();
619
+ rc.setErrorHandler((err, job) => {
620
+ logger().error({
621
+ msg: "Scheduled job error",
622
+ err,
623
+ job_name: job.getName()
624
+ });
596
625
  });
597
- });
598
- return rc;
599
- });
626
+ return rc;
627
+ })
628
+ );
600
629
  var db = /* @__PURE__ */ __name((label = "default") => (0, import_neko_context2.ctx)().getOrThrow(["database", label]), "db");
601
- var storage = (0, import_neko_helper2.createSingleton)((label = "default") => {
602
- let storage_config = import_neko_config.config.get(["storages", label].join("."));
603
- const provider = import_neko_storage2.StorageProviderFactory.create(
604
- storage_config.provider,
605
- storage_config.config
606
- );
607
- return new import_neko_storage2.Storage(provider);
608
- });
630
+ var storage = wrapSingletonWithAccessors(
631
+ (0, import_neko_helper2.createSingleton)((label = "default") => {
632
+ let storage_config = import_neko_config.config.get(["storages", label].join("."));
633
+ const provider = import_neko_storage2.StorageProviderFactory.create(
634
+ storage_config.provider,
635
+ storage_config.config
636
+ );
637
+ return new import_neko_storage2.Storage(provider);
638
+ })
639
+ );
609
640
  var cli = (0, import_neko_helper2.createSingleton)(() => {
610
641
  const [node, app, ...args] = process.argv;
611
642
  return new import_clipanion.Cli({
@@ -620,46 +651,54 @@ var httpServer = (0, import_neko_helper2.createSingleton)(() => {
620
651
  server.setRouter(router());
621
652
  return server;
622
653
  });
623
- var logger = (0, import_neko_helper2.createSingleton)((label) => {
624
- const logger_config = import_neko_config.config.get(["loggers", label].join("."));
625
- const rc = new import_neko_logger.Logger(logger_config);
626
- rc.setExtrasFunction((message) => {
627
- message.requestId = (0, import_neko_context2.ctxSafe)()?.get("requestId") || "N/A";
628
- return message;
629
- });
630
- return rc;
631
- });
632
- var mailer = (0, import_neko_helper2.createSingleton)((label) => {
633
- const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
634
- const provider = import_neko_mailer2.MailerProviderFactory.create(
635
- mailer_config.provider,
636
- mailer_config.config
637
- );
638
- const rc = new import_neko_mailer2.Mailer(provider);
639
- return rc;
640
- });
641
- var queue = (0, import_neko_helper2.createSingleton)((label) => {
642
- const queue_config = import_neko_config.config.get(["queues", label].join("."));
643
- if (!queue_config) {
644
- throw new Error(`Queue configuration for '${label}' not found`);
645
- }
646
- const provider = import_neko_queue2.QueueTransportFactory.create(
647
- queue_config.provider,
648
- queue_config.config
649
- );
650
- return new import_neko_queue2.QueueConnection(provider);
651
- });
652
- var cache = (0, import_neko_helper2.createSingleton)((label) => {
653
- const cache_config = import_neko_config.config.get(["caches", label].join("."));
654
- if (!cache_config) {
655
- throw new Error(`Cache configuration for '${label}' not found`);
656
- }
657
- const provider = CacheProviderFactory.create(
658
- cache_config.provider,
659
- cache_config.config
660
- );
661
- return new import_neko_cache2.Cache(provider);
662
- });
654
+ var logger = wrapSingletonWithAccessors(
655
+ (0, import_neko_helper2.createSingleton)((label) => {
656
+ const logger_config = import_neko_config.config.get(["loggers", label].join("."));
657
+ const rc = new import_neko_logger.Logger(logger_config);
658
+ rc.setExtrasFunction((message) => {
659
+ message.requestId = (0, import_neko_context2.ctxSafe)()?.get("requestId") || "N/A";
660
+ return message;
661
+ });
662
+ return rc;
663
+ })
664
+ );
665
+ var mailer = wrapSingletonWithAccessors(
666
+ (0, import_neko_helper2.createSingleton)((label) => {
667
+ const mailer_config = import_neko_config.config.get(["mailer", label].join("."));
668
+ const provider = import_neko_mailer2.MailerProviderFactory.create(
669
+ mailer_config.provider,
670
+ mailer_config.config
671
+ );
672
+ const rc = new import_neko_mailer2.Mailer(provider);
673
+ return rc;
674
+ })
675
+ );
676
+ var queue = wrapSingletonWithAccessors(
677
+ (0, import_neko_helper2.createSingleton)((label) => {
678
+ const queue_config = import_neko_config.config.get(["queues", label].join("."));
679
+ if (!queue_config) {
680
+ throw new Error(`Queue configuration for '${label}' not found`);
681
+ }
682
+ const provider = import_neko_queue2.QueueTransportFactory.create(
683
+ queue_config.provider,
684
+ queue_config.config
685
+ );
686
+ return new import_neko_queue2.QueueConnection(provider);
687
+ })
688
+ );
689
+ var cache = wrapSingletonWithAccessors(
690
+ (0, import_neko_helper2.createSingleton)((label) => {
691
+ const cache_config = import_neko_config.config.get(["caches", label].join("."));
692
+ if (!cache_config) {
693
+ throw new Error(`Cache configuration for '${label}' not found`);
694
+ }
695
+ const provider = CacheProviderFactory.create(
696
+ cache_config.provider,
697
+ cache_config.config
698
+ );
699
+ return new import_neko_cache2.Cache(provider);
700
+ })
701
+ );
663
702
 
664
703
  // src/queue.mts
665
704
  var import_neko_helper3 = require("@devbro/neko-helper");
@@ -12,14 +12,14 @@ import { Logger } from '@devbro/neko-logger';
12
12
  import { Cache } from '@devbro/neko-cache';
13
13
 
14
14
  declare const router: (label?: string, ...args: any[]) => Router;
15
- declare const scheduler: (label?: string, ...args: any[]) => Scheduler;
15
+ declare const scheduler: ((label?: string, ...args: any[]) => Scheduler) & Omit<Scheduler, keyof Function>;
16
16
  declare const db: (label?: string) => Connection;
17
- declare const storage: (label?: string, ...args: any[]) => Storage;
17
+ declare const storage: ((label?: string, ...args: any[]) => Storage) & Omit<Storage, keyof Function>;
18
18
  declare const cli: (label?: string, ...args: any[]) => Cli<clipanion.BaseContext>;
19
19
  declare const httpServer: (label?: string, ...args: any[]) => HttpServer;
20
- declare const logger: (label?: string, ...args: any[]) => Logger;
21
- declare const mailer: (label?: string, ...args: any[]) => Mailer;
22
- declare const queue: (label?: string, ...args: any[]) => QueueConnection<Record<string, _devbro_neko_queue.QueueMessageInterface>>;
23
- declare const cache: (label?: string, ...args: any[]) => Cache;
20
+ declare const logger: ((label?: string, ...args: any[]) => Logger) & Omit<Logger, keyof Function>;
21
+ declare const mailer: ((label?: string, ...args: any[]) => Mailer) & Omit<Mailer, keyof Function>;
22
+ declare const queue: ((label?: string, ...args: any[]) => QueueConnection<Record<string, _devbro_neko_queue.QueueMessageInterface>>) & Omit<QueueConnection<Record<string, _devbro_neko_queue.QueueMessageInterface>>, keyof Function>;
23
+ declare const cache: ((label?: string, ...args: any[]) => Cache) & Omit<Cache, keyof Function>;
24
24
 
25
25
  export { cache, cli, db, httpServer, logger, mailer, queue, router, scheduler, storage };
package/dist/facades.mjs CHANGED
@@ -16,27 +16,58 @@ import { Logger } from "@devbro/neko-logger";
16
16
  import { CacheProviderFactory } from "./factories.mjs";
17
17
  import { Cache } from "@devbro/neko-cache";
18
18
  import { QueueConnection, QueueTransportFactory } from "@devbro/neko-queue";
19
+ function wrapSingletonWithAccessors(singletonFn) {
20
+ let methodsInitialized = false;
21
+ const initializeMethods = /* @__PURE__ */ __name(() => {
22
+ if (methodsInitialized) return;
23
+ const defaultInstance = singletonFn();
24
+ const prototype = Object.getPrototypeOf(defaultInstance);
25
+ const methodNames = Object.getOwnPropertyNames(prototype).filter(
26
+ (name) => name !== "constructor" && typeof prototype[name] === "function"
27
+ );
28
+ for (const methodName of methodNames) {
29
+ singletonFn[methodName] = (...args) => {
30
+ const instance = singletonFn();
31
+ return instance[methodName](...args);
32
+ };
33
+ }
34
+ methodsInitialized = true;
35
+ }, "initializeMethods");
36
+ return new Proxy(singletonFn, {
37
+ get(target, prop, receiver) {
38
+ if (typeof prop === "string" && !Reflect.has(target, prop)) {
39
+ initializeMethods();
40
+ }
41
+ return Reflect.get(target, prop, receiver);
42
+ }
43
+ });
44
+ }
45
+ __name(wrapSingletonWithAccessors, "wrapSingletonWithAccessors");
19
46
  const router = createSingleton(() => new Router());
20
- const scheduler = createSingleton(() => {
21
- const rc = new Scheduler();
22
- rc.setErrorHandler((err, job) => {
23
- logger().error({
24
- msg: "Scheduled job error",
25
- err,
26
- job_name: job.getName()
47
+ const scheduler = wrapSingletonWithAccessors(
48
+ createSingleton(() => {
49
+ const rc = new Scheduler();
50
+ rc.setErrorHandler((err, job) => {
51
+ logger().error({
52
+ msg: "Scheduled job error",
53
+ err,
54
+ job_name: job.getName()
55
+ });
27
56
  });
28
- });
29
- return rc;
30
- });
57
+ return rc;
58
+ })
59
+ );
31
60
  const db = /* @__PURE__ */ __name((label = "default") => ctx().getOrThrow(["database", label]), "db");
32
- const storage = createSingleton((label = "default") => {
33
- let storage_config = config.get(["storages", label].join("."));
34
- const provider = StorageProviderFactory.create(
35
- storage_config.provider,
36
- storage_config.config
37
- );
38
- return new Storage(provider);
39
- });
61
+ const storage = wrapSingletonWithAccessors(
62
+ createSingleton((label = "default") => {
63
+ let storage_config = config.get(["storages", label].join("."));
64
+ const provider = StorageProviderFactory.create(
65
+ storage_config.provider,
66
+ storage_config.config
67
+ );
68
+ return new Storage(provider);
69
+ })
70
+ );
40
71
  const cli = createSingleton(() => {
41
72
  const [node, app, ...args] = process.argv;
42
73
  return new Cli({
@@ -51,46 +82,54 @@ const httpServer = createSingleton(() => {
51
82
  server.setRouter(router());
52
83
  return server;
53
84
  });
54
- const logger = createSingleton((label) => {
55
- const logger_config = config.get(["loggers", label].join("."));
56
- const rc = new Logger(logger_config);
57
- rc.setExtrasFunction((message) => {
58
- message.requestId = ctxSafe()?.get("requestId") || "N/A";
59
- return message;
60
- });
61
- return rc;
62
- });
63
- const mailer = createSingleton((label) => {
64
- const mailer_config = config.get(["mailer", label].join("."));
65
- const provider = MailerProviderFactory.create(
66
- mailer_config.provider,
67
- mailer_config.config
68
- );
69
- const rc = new Mailer(provider);
70
- return rc;
71
- });
72
- const queue = createSingleton((label) => {
73
- const queue_config = config.get(["queues", label].join("."));
74
- if (!queue_config) {
75
- throw new Error(`Queue configuration for '${label}' not found`);
76
- }
77
- const provider = QueueTransportFactory.create(
78
- queue_config.provider,
79
- queue_config.config
80
- );
81
- return new QueueConnection(provider);
82
- });
83
- const cache = createSingleton((label) => {
84
- const cache_config = config.get(["caches", label].join("."));
85
- if (!cache_config) {
86
- throw new Error(`Cache configuration for '${label}' not found`);
87
- }
88
- const provider = CacheProviderFactory.create(
89
- cache_config.provider,
90
- cache_config.config
91
- );
92
- return new Cache(provider);
93
- });
85
+ const logger = wrapSingletonWithAccessors(
86
+ createSingleton((label) => {
87
+ const logger_config = config.get(["loggers", label].join("."));
88
+ const rc = new Logger(logger_config);
89
+ rc.setExtrasFunction((message) => {
90
+ message.requestId = ctxSafe()?.get("requestId") || "N/A";
91
+ return message;
92
+ });
93
+ return rc;
94
+ })
95
+ );
96
+ const mailer = wrapSingletonWithAccessors(
97
+ createSingleton((label) => {
98
+ const mailer_config = config.get(["mailer", label].join("."));
99
+ const provider = MailerProviderFactory.create(
100
+ mailer_config.provider,
101
+ mailer_config.config
102
+ );
103
+ const rc = new Mailer(provider);
104
+ return rc;
105
+ })
106
+ );
107
+ const queue = wrapSingletonWithAccessors(
108
+ createSingleton((label) => {
109
+ const queue_config = config.get(["queues", label].join("."));
110
+ if (!queue_config) {
111
+ throw new Error(`Queue configuration for '${label}' not found`);
112
+ }
113
+ const provider = QueueTransportFactory.create(
114
+ queue_config.provider,
115
+ queue_config.config
116
+ );
117
+ return new QueueConnection(provider);
118
+ })
119
+ );
120
+ const cache = wrapSingletonWithAccessors(
121
+ createSingleton((label) => {
122
+ const cache_config = config.get(["caches", label].join("."));
123
+ if (!cache_config) {
124
+ throw new Error(`Cache configuration for '${label}' not found`);
125
+ }
126
+ const provider = CacheProviderFactory.create(
127
+ cache_config.provider,
128
+ cache_config.config
129
+ );
130
+ return new Cache(provider);
131
+ })
132
+ );
94
133
  export {
95
134
  cache,
96
135
  cli,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/facades.mts"],"sourcesContent":["import { Router } from \"./router.mjs\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage, StorageProviderFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n MailerProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer, HttpError, handleHttpErrors } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\nimport { CacheProviderFactory } from \"./factories.mjs\";\nimport { Cache } from \"@devbro/neko-cache\";\nimport { QueueConnection, QueueTransportFactory } from \"@devbro/neko-queue\";\n\nexport const router = createSingleton<Router>(() => new Router());\nexport const scheduler = createSingleton<Scheduler>(() => {\n const rc = new Scheduler();\n rc.setErrorHandler((err: any, job: Schedule) => {\n logger().error({\n msg: \"Scheduled job error\",\n err,\n job_name: job.getName(),\n });\n });\n return rc;\n});\nexport const db = (label = \"default\") =>\n ctx().getOrThrow<Connection>([\"database\", label]);\n\nexport const storage = createSingleton<Storage>((label: string = \"default\") => {\n let storage_config: any = config.get([\"storages\", label].join(\".\"));\n\n const provider = StorageProviderFactory.create(\n storage_config.provider,\n storage_config.config,\n );\n\n return new Storage(provider);\n});\n\nexport const cli = createSingleton<Cli>(() => {\n const [node, app, ...args] = process.argv;\n return new Cli({\n binaryLabel: `My Application`,\n binaryName: `${node} ${app}`,\n binaryVersion: `1.0.0`,\n });\n});\n\nexport const httpServer = createSingleton<HttpServer>(() => {\n const server = new HttpServer();\n\n server.setErrorHandler(handleHttpErrors);\n server.setRouter(router());\n\n return server;\n});\n\nexport const logger = createSingleton<Logger>((label) => {\n const logger_config: any = config.get([\"loggers\", label].join(\".\"));\n const rc = new Logger(logger_config);\n rc.setExtrasFunction((message: any) => {\n message.requestId = ctxSafe()?.get(\"requestId\") || \"N/A\";\n return message;\n });\n\n return rc;\n});\n\nexport const mailer = createSingleton((label) => {\n const mailer_config: any = config.get([\"mailer\", label].join(\".\"));\n\n const provider: MailerProvider = MailerProviderFactory.create(\n mailer_config.provider,\n mailer_config.config,\n );\n\n const rc = new Mailer(provider);\n return rc;\n});\n\nexport const queue = createSingleton((label) => {\n const queue_config: any = config.get([\"queues\", label].join(\".\"));\n if (!queue_config) {\n throw new Error(`Queue configuration for '${label}' not found`);\n }\n const provider = QueueTransportFactory.create(\n queue_config.provider,\n queue_config.config,\n );\n return new QueueConnection(provider);\n});\n\nexport const cache = createSingleton((label) => {\n const cache_config: any = config.get([\"caches\", label].join(\".\"));\n if (!cache_config) {\n throw new Error(`Cache configuration for '${label}' not found`);\n }\n const provider = CacheProviderFactory.create(\n cache_config.provider,\n cache_config.config,\n );\n\n return new Cache(provider);\n});\n"],"mappings":";;AAAA,SAAS,cAAc;AACvB,SAAmB,iBAAiB;AACpC,SAAS,uBAAuB;AAChC,SAAS,KAAK,eAAe;AAE7B,SAAS,SAAS,8BAA8B;AAChD;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AACP,SAAS,cAAc;AACvB,SAAS,WAAW;AACpB,SAAS,YAAuB,wBAAwB;AAExD,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC,SAAS,aAAa;AACtB,SAAS,iBAAiB,6BAA6B;AAEhD,MAAM,SAAS,gBAAwB,MAAM,IAAI,OAAO,CAAC;AACzD,MAAM,YAAY,gBAA2B,MAAM;AACxD,QAAM,KAAK,IAAI,UAAU;AACzB,KAAG,gBAAgB,CAAC,KAAU,QAAkB;AAC9C,WAAO,EAAE,MAAM;AAAA,MACb,KAAK;AAAA,MACL;AAAA,MACA,UAAU,IAAI,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT,CAAC;AACM,MAAM,KAAK,wBAAC,QAAQ,cACzB,IAAI,EAAE,WAAuB,CAAC,YAAY,KAAK,CAAC,GADhC;AAGX,MAAM,UAAU,gBAAyB,CAAC,QAAgB,cAAc;AAC7E,MAAI,iBAAsB,OAAO,IAAI,CAAC,YAAY,KAAK,EAAE,KAAK,GAAG,CAAC;AAElE,QAAM,WAAW,uBAAuB;AAAA,IACtC,eAAe;AAAA,IACf,eAAe;AAAA,EACjB;AAEA,SAAO,IAAI,QAAQ,QAAQ;AAC7B,CAAC;AAEM,MAAM,MAAM,gBAAqB,MAAM;AAC5C,QAAM,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,QAAQ;AACrC,SAAO,IAAI,IAAI;AAAA,IACb,aAAa;AAAA,IACb,YAAY,GAAG,IAAI,IAAI,GAAG;AAAA,IAC1B,eAAe;AAAA,EACjB,CAAC;AACH,CAAC;AAEM,MAAM,aAAa,gBAA4B,MAAM;AAC1D,QAAM,SAAS,IAAI,WAAW;AAE9B,SAAO,gBAAgB,gBAAgB;AACvC,SAAO,UAAU,OAAO,CAAC;AAEzB,SAAO;AACT,CAAC;AAEM,MAAM,SAAS,gBAAwB,CAAC,UAAU;AACvD,QAAM,gBAAqB,OAAO,IAAI,CAAC,WAAW,KAAK,EAAE,KAAK,GAAG,CAAC;AAClE,QAAM,KAAK,IAAI,OAAO,aAAa;AACnC,KAAG,kBAAkB,CAAC,YAAiB;AACrC,YAAQ,YAAY,QAAQ,GAAG,IAAI,WAAW,KAAK;AACnD,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT,CAAC;AAEM,MAAM,SAAS,gBAAgB,CAAC,UAAU;AAC/C,QAAM,gBAAqB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,KAAK,GAAG,CAAC;AAEjE,QAAM,WAA2B,sBAAsB;AAAA,IACrD,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAEA,QAAM,KAAK,IAAI,OAAO,QAAQ;AAC9B,SAAO;AACT,CAAC;AAEM,MAAM,QAAQ,gBAAgB,CAAC,UAAU;AAC9C,QAAM,eAAoB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,KAAK,GAAG,CAAC;AAChE,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,4BAA4B,KAAK,aAAa;AAAA,EAChE;AACA,QAAM,WAAW,sBAAsB;AAAA,IACrC,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACA,SAAO,IAAI,gBAAgB,QAAQ;AACrC,CAAC;AAEM,MAAM,QAAQ,gBAAgB,CAAC,UAAU;AAC9C,QAAM,eAAoB,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,KAAK,GAAG,CAAC;AAChE,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,4BAA4B,KAAK,aAAa;AAAA,EAChE;AACA,QAAM,WAAW,qBAAqB;AAAA,IACpC,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAEA,SAAO,IAAI,MAAM,QAAQ;AAC3B,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/facades.mts"],"sourcesContent":["import { Router } from \"./router.mjs\";\nimport { Schedule, Scheduler } from \"@devbro/neko-scheduler\";\nimport { createSingleton } from \"@devbro/neko-helper\";\nimport { ctx, ctxSafe } from \"@devbro/neko-context\";\nimport { Connection } from \"@devbro/neko-sql\";\nimport { Storage, StorageProviderFactory } from \"@devbro/neko-storage\";\nimport {\n Mailer,\n MailerProvider,\n MailerProviderFactory,\n} from \"@devbro/neko-mailer\";\nimport { config } from \"@devbro/neko-config\";\nimport { Cli } from \"clipanion\";\nimport { HttpServer, handleHttpErrors } from \"./http.mjs\";\nimport * as yup from \"yup\";\nimport { Logger } from \"@devbro/neko-logger\";\nimport { CacheProviderFactory } from \"./factories.mjs\";\nimport { Cache } from \"@devbro/neko-cache\";\nimport { QueueConnection, QueueTransportFactory } from \"@devbro/neko-queue\";\n\n/**\n * Wraps a singleton function with property accessors that delegate to the default instance.\n * This allows both `facade()` and `facade.method()` calling patterns.\n * @param singletonFn - The singleton function to wrap\n * @returns The wrapped singleton with property accessors\n */\nfunction wrapSingletonWithAccessors<T>(\n singletonFn: (label?: string, ...args: any[]) => T,\n): typeof singletonFn & Omit<T, keyof Function> {\n // Create a proxy that lazily adds method accessors on first access\n let methodsInitialized = false;\n\n const initializeMethods = () => {\n if (methodsInitialized) return;\n\n const defaultInstance = singletonFn();\n const prototype = Object.getPrototypeOf(defaultInstance);\n\n // Get all method names from the instance's prototype\n const methodNames = Object.getOwnPropertyNames(prototype).filter(\n (name) =>\n name !== \"constructor\" &&\n typeof (prototype as any)[name] === \"function\",\n );\n\n // Attach each method as a property on the singleton function\n for (const methodName of methodNames) {\n (singletonFn as any)[methodName] = (...args: any[]) => {\n const instance = singletonFn();\n return (instance as any)[methodName](...args);\n };\n }\n\n methodsInitialized = true;\n };\n\n // Use a proxy to intercept property access and lazily initialize methods\n return new Proxy(singletonFn, {\n get(target, prop, receiver) {\n // If accessing a method that doesn't exist yet, initialize methods\n if (typeof prop === \"string\" && !Reflect.has(target, prop)) {\n initializeMethods();\n }\n return Reflect.get(target, prop, receiver);\n },\n }) as typeof singletonFn & Omit<T, keyof Function>;\n}\n\nexport const router = createSingleton<Router>(() => new Router());\nexport const scheduler = wrapSingletonWithAccessors(\n createSingleton<Scheduler>(() => {\n const rc = new Scheduler();\n rc.setErrorHandler((err: any, job: Schedule) => {\n logger().error({\n msg: \"Scheduled job error\",\n err,\n job_name: job.getName(),\n });\n });\n return rc;\n }),\n);\n\nexport const db = (label = \"default\") =>\n ctx().getOrThrow<Connection>([\"database\", label]);\n\nexport const storage = wrapSingletonWithAccessors(\n createSingleton<Storage>((label: string = \"default\") => {\n let storage_config: any = config.get([\"storages\", label].join(\".\"));\n\n const provider = StorageProviderFactory.create(\n storage_config.provider,\n storage_config.config,\n );\n\n return new Storage(provider);\n }),\n);\n\nexport const cli = createSingleton<Cli>(() => {\n const [node, app, ...args] = process.argv;\n return new Cli({\n binaryLabel: `My Application`,\n binaryName: `${node} ${app}`,\n binaryVersion: `1.0.0`,\n });\n});\n\nexport const httpServer = createSingleton<HttpServer>(() => {\n const server = new HttpServer();\n\n server.setErrorHandler(handleHttpErrors);\n server.setRouter(router());\n\n return server;\n});\n\nexport const logger = wrapSingletonWithAccessors(\n createSingleton<Logger>((label) => {\n const logger_config: any = config.get([\"loggers\", label].join(\".\"));\n const rc = new Logger(logger_config);\n rc.setExtrasFunction((message: any) => {\n message.requestId = ctxSafe()?.get(\"requestId\") || \"N/A\";\n return message;\n });\n\n return rc;\n }),\n);\n\nexport const mailer = wrapSingletonWithAccessors(\n createSingleton((label) => {\n const mailer_config: any = config.get([\"mailer\", label].join(\".\"));\n\n const provider: MailerProvider = MailerProviderFactory.create(\n mailer_config.provider,\n mailer_config.config,\n );\n\n const rc = new Mailer(provider);\n return rc;\n }),\n);\n\nexport const queue = wrapSingletonWithAccessors(\n createSingleton((label) => {\n const queue_config: any = config.get([\"queues\", label].join(\".\"));\n if (!queue_config) {\n throw new Error(`Queue configuration for '${label}' not found`);\n }\n const provider = QueueTransportFactory.create(\n queue_config.provider,\n queue_config.config,\n );\n return new QueueConnection(provider);\n }),\n);\n\nexport const cache = wrapSingletonWithAccessors(\n createSingleton((label) => {\n const cache_config: any = config.get([\"caches\", label].join(\".\"));\n if (!cache_config) {\n throw new Error(`Cache configuration for '${label}' not found`);\n }\n const provider = CacheProviderFactory.create(\n cache_config.provider,\n cache_config.config,\n );\n\n return new Cache(provider);\n }),\n);\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devbro/pashmak",
3
- "version": "0.1.49",
3
+ "version": "0.1.52",
4
4
  "description": "testing application for the entire repo",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",