equipped 5.3.0 → 5.3.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.
Files changed (191) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/cjs/cache/adapters/in-memory/index.cjs +155 -155
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -1
  4. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +3 -3
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -1
  6. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -1
  7. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +2 -2
  8. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -1
  9. package/dist/cjs/dbs/index.cjs +181 -179
  10. package/dist/cjs/dbs/index.cjs.map +1 -1
  11. package/dist/cjs/dbs/index.min.cjs +3 -3
  12. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  13. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -1
  14. package/dist/cjs/events/adapters/kafka/index.min.cjs +2 -2
  15. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -1
  16. package/dist/cjs/events/adapters/rabbitmq/index.cjs +179 -179
  17. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -1
  18. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +3 -3
  19. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -1
  20. package/dist/cjs/orm/adapters/mongodb/index.cjs +144 -144
  21. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -1
  22. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +1 -1
  23. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -1
  24. package/dist/cjs/orm/adapters/postgresql/index.cjs +144 -215
  25. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -1
  26. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +11 -11
  27. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -1
  28. package/dist/cjs/server/adapters/express/index.cjs +338 -226
  29. package/dist/cjs/server/adapters/express/index.cjs.map +1 -1
  30. package/dist/cjs/server/adapters/express/index.min.cjs +7 -7
  31. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -1
  32. package/dist/cjs/server/adapters/fastify/index.cjs +323 -211
  33. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -1
  34. package/dist/cjs/server/adapters/fastify/index.min.cjs +7 -7
  35. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -1
  36. package/dist/cjs/server/index.cjs +128 -16
  37. package/dist/cjs/server/index.cjs.map +1 -1
  38. package/dist/cjs/server/index.min.cjs +6 -6
  39. package/dist/cjs/server/index.min.cjs.map +1 -1
  40. package/dist/cjs/utilities/index.cjs +0 -5
  41. package/dist/cjs/utilities/index.cjs.map +1 -1
  42. package/dist/cjs/utilities/index.min.cjs +2 -2
  43. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  44. package/dist/esm/cache/adapters/in-memory/index.min.mjs +1 -1
  45. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -1
  46. package/dist/esm/cache/adapters/in-memory/index.mjs +6 -3
  47. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -1
  48. package/dist/esm/cache/adapters/redis/index.min.mjs +1 -1
  49. package/dist/esm/cache/adapters/redis/index.mjs +5 -3
  50. package/dist/esm/cache/index.min.mjs +1 -1
  51. package/dist/esm/cache/index.mjs +2 -2
  52. package/dist/esm/{chunk-PNZNNUMN.mjs → chunk-26BOI6IL.mjs} +7 -5
  53. package/dist/esm/{chunk-PNZNNUMN.mjs.map → chunk-26BOI6IL.mjs.map} +1 -1
  54. package/dist/esm/{chunk-4JLDXF7T.min.mjs → chunk-AODOD22O.min.mjs} +2 -2
  55. package/dist/esm/chunk-APSDCRY5.min.mjs +32 -0
  56. package/dist/esm/chunk-APSDCRY5.min.mjs.map +1 -0
  57. package/dist/esm/{chunk-MDQKODYQ.mjs → chunk-CEYT5YBA.mjs} +204 -348
  58. package/dist/esm/chunk-CEYT5YBA.mjs.map +1 -0
  59. package/dist/esm/chunk-CU2HU5UE.min.mjs +2 -0
  60. package/dist/esm/chunk-CU2HU5UE.min.mjs.map +1 -0
  61. package/dist/esm/chunk-DAK7OKSH.min.mjs +2 -0
  62. package/dist/esm/{chunk-SGZNOYC3.min.mjs.map → chunk-DAK7OKSH.min.mjs.map} +1 -1
  63. package/dist/esm/{chunk-PCAUXBAG.min.mjs → chunk-DAUQA32Q.min.mjs} +2 -2
  64. package/dist/esm/{chunk-JH6EBXY4.mjs → chunk-FQYRVHQT.mjs} +2 -2
  65. package/dist/esm/chunk-NEF3UYFA.mjs +144 -0
  66. package/dist/esm/chunk-NEF3UYFA.mjs.map +1 -0
  67. package/dist/esm/chunk-NNFUYHQ7.mjs +135 -0
  68. package/dist/esm/chunk-NNFUYHQ7.mjs.map +1 -0
  69. package/dist/esm/{chunk-4MXYZS5R.mjs → chunk-PCEHFZ6G.mjs} +9 -5
  70. package/dist/esm/{chunk-4MXYZS5R.mjs.map → chunk-PCEHFZ6G.mjs.map} +1 -1
  71. package/dist/esm/{chunk-B5QQ32YY.min.mjs → chunk-QCCDJLBH.min.mjs} +2 -2
  72. package/dist/esm/{chunk-PQCBVQL6.mjs → chunk-RIXTQQUU.mjs} +2 -2
  73. package/dist/esm/{chunk-Z2TZ3KR7.mjs → chunk-RPPYCWXW.mjs} +2 -2
  74. package/dist/esm/{chunk-AKQBDYUO.mjs → chunk-T2O72JBW.mjs} +3 -3
  75. package/dist/esm/{chunk-TVTYDU2D.mjs → chunk-VQO4MSEC.mjs} +5 -5
  76. package/dist/esm/{chunk-ZGMFFK6Y.min.mjs → chunk-X7VNAGLR.min.mjs} +2 -2
  77. package/dist/esm/chunk-XTXAEBXY.min.mjs +2 -0
  78. package/dist/esm/{chunk-5VW3JAFR.min.mjs.map → chunk-XTXAEBXY.min.mjs.map} +1 -1
  79. package/dist/esm/{chunk-QHLKB47N.min.mjs → chunk-YDQW6ETS.min.mjs} +2 -2
  80. package/dist/esm/chunk-ZDBDR3IB.min.mjs +2 -0
  81. package/dist/esm/chunk-ZDBDR3IB.min.mjs.map +1 -0
  82. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +1 -1
  83. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -1
  84. package/dist/esm/dbs/adapters/mongodb/index.mjs +8 -5
  85. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -1
  86. package/dist/esm/dbs/index.min.mjs +1 -1
  87. package/dist/esm/dbs/index.mjs +5 -3
  88. package/dist/esm/errors/index.min.mjs +1 -1
  89. package/dist/esm/errors/index.mjs +1 -1
  90. package/dist/esm/events/adapters/kafka/index.min.mjs +1 -1
  91. package/dist/esm/events/adapters/kafka/index.mjs +4 -2
  92. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +1 -1
  93. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -1
  94. package/dist/esm/events/adapters/rabbitmq/index.mjs +7 -3
  95. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -1
  96. package/dist/esm/index.min.mjs +1 -1
  97. package/dist/esm/index.mjs +1 -1
  98. package/dist/esm/instance/index.min.mjs +1 -1
  99. package/dist/esm/instance/index.mjs +1 -1
  100. package/dist/esm/{introspection-32BRYKYY.mjs → introspection-FGDVYTPP.mjs} +3 -3
  101. package/dist/esm/introspection-UDWDS6DV.min.mjs +2 -0
  102. package/dist/esm/jobs/adapters/redis/index.min.mjs +1 -1
  103. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -1
  104. package/dist/esm/jobs/adapters/redis/index.mjs +10 -6
  105. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -1
  106. package/dist/esm/orm/adapters/in-memory/index.min.mjs +1 -1
  107. package/dist/esm/orm/adapters/in-memory/index.mjs +4 -3
  108. package/dist/esm/orm/adapters/json/index.min.mjs +1 -1
  109. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -1
  110. package/dist/esm/orm/adapters/json/index.mjs +6 -5
  111. package/dist/esm/orm/adapters/json/index.mjs.map +1 -1
  112. package/dist/esm/orm/adapters/mongodb/index.min.mjs +1 -1
  113. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -1
  114. package/dist/esm/orm/adapters/mongodb/index.mjs +6 -4
  115. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -1
  116. package/dist/esm/orm/adapters/postgresql/index.min.mjs +2 -2
  117. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -1
  118. package/dist/esm/orm/adapters/postgresql/index.mjs +8 -5
  119. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -1
  120. package/dist/esm/orm/index.min.mjs +1 -1
  121. package/dist/esm/orm/index.mjs +3 -3
  122. package/dist/esm/server/adapters/express/index.min.mjs +1 -1
  123. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -1
  124. package/dist/esm/server/adapters/express/index.mjs +7 -3
  125. package/dist/esm/server/adapters/express/index.mjs.map +1 -1
  126. package/dist/esm/server/adapters/fastify/index.min.mjs +1 -1
  127. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -1
  128. package/dist/esm/server/adapters/fastify/index.mjs +7 -3
  129. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -1
  130. package/dist/esm/server/index.min.mjs +1 -1
  131. package/dist/esm/server/index.mjs +1 -1
  132. package/dist/esm/utilities/index.min.mjs +1 -1
  133. package/dist/esm/utilities/index.mjs +5 -4
  134. package/dist/esm/validations/index.min.mjs +1 -1
  135. package/dist/esm/validations/index.mjs +1 -1
  136. package/dist/types/{base-DVr0fHil.d.ts → base-qDndMBf8.d.ts} +9 -3
  137. package/dist/types/cache/adapters/in-memory/index.js +7 -4
  138. package/dist/types/cache/adapters/redis/index.js +5 -3
  139. package/dist/types/cache/index.js +2 -2
  140. package/dist/types/{chunk-NJ2FHI3U.js → chunk-35CDCTLR.js} +4 -4
  141. package/dist/types/{chunk-XGGGAEET.js → chunk-4YQA5GPT.js} +8 -4
  142. package/dist/types/{chunk-65EHKCDZ.js → chunk-AQIV47BY.js} +6 -4
  143. package/dist/types/{chunk-YTY3EFNB.js → chunk-BKDWUJRG.js} +203 -347
  144. package/dist/types/{chunk-JQ2FWX4W.js → chunk-DA2VYP7D.js} +1 -1
  145. package/dist/types/{chunk-3TKJGSCZ.js → chunk-GDMGPX4C.js} +1 -1
  146. package/dist/types/chunk-H5V6ADFD.js +134 -0
  147. package/dist/types/{chunk-3M4PBZAQ.js → chunk-OOKJEMQI.js} +2 -2
  148. package/dist/types/chunk-PPD4WDG6.js +143 -0
  149. package/dist/types/{chunk-OHFTQGQG.js → chunk-T7K7PO6G.js} +1 -1
  150. package/dist/types/dbs/adapters/mongodb/index.js +8 -5
  151. package/dist/types/dbs/index.js +5 -3
  152. package/dist/types/errors/index.js +1 -1
  153. package/dist/types/events/adapters/kafka/index.js +4 -2
  154. package/dist/types/events/adapters/rabbitmq/index.js +7 -3
  155. package/dist/types/index.js +1 -1
  156. package/dist/types/instance/index.js +1 -1
  157. package/dist/types/{introspection-VOIU3XE6.js → introspection-FSNS33CQ.js} +2 -2
  158. package/dist/types/jobs/adapters/redis/index.js +10 -6
  159. package/dist/types/orm/adapters/in-memory/index.js +4 -3
  160. package/dist/types/orm/adapters/json/index.js +6 -5
  161. package/dist/types/orm/adapters/mongodb/index.js +6 -4
  162. package/dist/types/orm/adapters/postgresql/index.js +8 -5
  163. package/dist/types/orm/index.js +3 -3
  164. package/dist/types/server/adapters/express/index.d.ts +1 -1
  165. package/dist/types/server/adapters/express/index.js +7 -3
  166. package/dist/types/server/adapters/fastify/index.d.ts +1 -1
  167. package/dist/types/server/adapters/fastify/index.js +7 -3
  168. package/dist/types/server/index.d.ts +2 -2
  169. package/dist/types/server/index.js +1 -1
  170. package/dist/types/utilities/index.d.ts +1 -2
  171. package/dist/types/utilities/index.js +5 -4
  172. package/dist/types/validations/index.js +1 -1
  173. package/package.json +1 -1
  174. package/dist/esm/chunk-5VW3JAFR.min.mjs +0 -2
  175. package/dist/esm/chunk-FLAPYQUT.min.mjs +0 -32
  176. package/dist/esm/chunk-FLAPYQUT.min.mjs.map +0 -1
  177. package/dist/esm/chunk-MDQKODYQ.mjs.map +0 -1
  178. package/dist/esm/chunk-SGZNOYC3.min.mjs +0 -2
  179. package/dist/esm/introspection-A72WMWE3.min.mjs +0 -2
  180. /package/dist/esm/{chunk-4JLDXF7T.min.mjs.map → chunk-AODOD22O.min.mjs.map} +0 -0
  181. /package/dist/esm/{chunk-PCAUXBAG.min.mjs.map → chunk-DAUQA32Q.min.mjs.map} +0 -0
  182. /package/dist/esm/{chunk-JH6EBXY4.mjs.map → chunk-FQYRVHQT.mjs.map} +0 -0
  183. /package/dist/esm/{chunk-B5QQ32YY.min.mjs.map → chunk-QCCDJLBH.min.mjs.map} +0 -0
  184. /package/dist/esm/{chunk-PQCBVQL6.mjs.map → chunk-RIXTQQUU.mjs.map} +0 -0
  185. /package/dist/esm/{chunk-Z2TZ3KR7.mjs.map → chunk-RPPYCWXW.mjs.map} +0 -0
  186. /package/dist/esm/{chunk-AKQBDYUO.mjs.map → chunk-T2O72JBW.mjs.map} +0 -0
  187. /package/dist/esm/{chunk-TVTYDU2D.mjs.map → chunk-VQO4MSEC.mjs.map} +0 -0
  188. /package/dist/esm/{chunk-ZGMFFK6Y.min.mjs.map → chunk-X7VNAGLR.min.mjs.map} +0 -0
  189. /package/dist/esm/{chunk-QHLKB47N.min.mjs.map → chunk-YDQW6ETS.min.mjs.map} +0 -0
  190. /package/dist/esm/{introspection-32BRYKYY.mjs.map → introspection-FGDVYTPP.mjs.map} +0 -0
  191. /package/dist/esm/{introspection-A72WMWE3.min.mjs.map → introspection-UDWDS6DV.min.mjs.map} +0 -0
@@ -610,216 +610,6 @@ ${settingsValidity.error.toString()}`, {
610
610
  }
611
611
  });
612
612
 
613
- // src/utilities/authProviders.ts
614
- var import_axios, import_jsonwebtoken, import_jwks_rsa;
615
- var init_authProviders = __esm({
616
- "src/utilities/authProviders.ts"() {
617
- "use strict";
618
- import_axios = __toESM(require("axios"), 1);
619
- import_jsonwebtoken = __toESM(require("jsonwebtoken"), 1);
620
- import_jwks_rsa = __toESM(require("jwks-rsa"), 1);
621
- }
622
- });
623
-
624
- // src/utilities/configurable.ts
625
- function configurable(pipeFn, base) {
626
- const pipe = pipeFn();
627
- import_valleyed3.v.compile(pipe);
628
- class Configurable extends base {
629
- constructor(config, ...baseArgs) {
630
- super(...baseArgs);
631
- this.config = config;
632
- }
633
- static create(input, ...args) {
634
- const r = import_valleyed3.v.validate(pipe, input);
635
- if (!r.valid) throw r.error;
636
- return new this(r.value, ...args);
637
- }
638
- }
639
- return Configurable;
640
- }
641
- var import_valleyed3;
642
- var init_configurable = __esm({
643
- "src/utilities/configurable.ts"() {
644
- "use strict";
645
- import_valleyed3 = require("valleyed");
646
- if (void 0) {
647
- const { describe, test, expect, expectTypeOf } = void 0;
648
- const { v: v6 } = null;
649
- const testPipe = () => v6.object({
650
- host: v6.string(),
651
- port: v6.number()
652
- });
653
- class TestBase {
654
- baseValue;
655
- constructor() {
656
- this.baseValue = "base";
657
- }
658
- }
659
- class TestBaseWithArgs {
660
- label;
661
- constructor(label) {
662
- this.label = label;
663
- }
664
- }
665
- describe("configurable", () => {
666
- test("validation runs in static create before constructor body executes", () => {
667
- let constructorRan = false;
668
- const Wrapped = configurable(testPipe, TestBase);
669
- class MyClass extends Wrapped {
670
- constructor(config) {
671
- super(config);
672
- constructorRan = true;
673
- }
674
- }
675
- expect(() => MyClass.create({ host: 123, port: "bad" })).toThrow();
676
- expect(constructorRan).toBe(false);
677
- MyClass.create({ host: "localhost", port: 3e3 });
678
- expect(constructorRan).toBe(true);
679
- });
680
- test("constructor receives validated value", () => {
681
- const Wrapped = configurable(testPipe, TestBase);
682
- let receivedConfig;
683
- class MyClass extends Wrapped {
684
- constructor(config) {
685
- super(config);
686
- receivedConfig = this.config;
687
- }
688
- }
689
- MyClass.create({ host: "localhost", port: 3e3 });
690
- expect(receivedConfig).toEqual({ host: "localhost", port: 3e3 });
691
- });
692
- test("external new is a compile error", () => {
693
- const Wrapped = configurable(testPipe, TestBase);
694
- class MyClass extends Wrapped {
695
- constructor(config) {
696
- super(config);
697
- }
698
- }
699
- void (() => new MyClass({ host: "localhost", port: 3e3 }));
700
- });
701
- test("static Config resolves to PipeOutput<P> at the type level", () => {
702
- const Wrapped = configurable(testPipe, TestBase);
703
- class MyClass extends Wrapped {
704
- constructor(config) {
705
- super(config);
706
- }
707
- }
708
- expectTypeOf().toEqualTypeOf();
709
- expect(MyClass.create).toBeTypeOf("function");
710
- });
711
- test("ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures", () => {
712
- const Wrapped = configurable(testPipe, TestBase);
713
- class MyClass extends Wrapped {
714
- extra;
715
- constructor(config, extra) {
716
- super(config);
717
- this.extra = extra;
718
- }
719
- }
720
- const instance = MyClass.create({ host: "localhost", port: 3e3 }, 42);
721
- expect(instance.extra).toBe(42);
722
- expectTypeOf(instance).toHaveProperty("extra");
723
- expectTypeOf(instance.extra).toEqualTypeOf();
724
- void (() => MyClass.create({ host: "localhost", port: 3e3 }, "not-a-number"));
725
- });
726
- test("base-args forwarding works for non-zero-arg bases", () => {
727
- const Wrapped = configurable(testPipe, TestBaseWithArgs);
728
- class MyClass extends Wrapped {
729
- constructor(config, label) {
730
- super(config, label);
731
- }
732
- }
733
- const instance = MyClass.create({ host: "localhost", port: 3e3 }, "test-label");
734
- expect(instance.label).toBe("test-label");
735
- });
736
- test("config is accessible as protected readonly on instances", () => {
737
- const Wrapped = configurable(testPipe, TestBase);
738
- class MyClass extends Wrapped {
739
- constructor(config) {
740
- super(config);
741
- }
742
- getHost() {
743
- return this.config.host;
744
- }
745
- }
746
- const instance = MyClass.create({ host: "localhost", port: 3e3 });
747
- expect(instance.getHost()).toBe("localhost");
748
- });
749
- test("accepts an abstract base class", () => {
750
- class AbstractBase {
751
- }
752
- const Wrapped = configurable(testPipe, AbstractBase);
753
- class Concrete extends Wrapped {
754
- constructor(config) {
755
- super(config);
756
- }
757
- greet() {
758
- return `hello from ${this.config.host}`;
759
- }
760
- }
761
- const instance = Concrete.create({ host: "localhost", port: 3e3 });
762
- expect(instance.greet()).toBe("hello from localhost");
763
- expectTypeOf(instance).toHaveProperty("config");
764
- });
765
- });
766
- }
767
- }
768
- });
769
-
770
- // src/utilities/hash.ts
771
- var bcrypt;
772
- var init_hash = __esm({
773
- "src/utilities/hash.ts"() {
774
- "use strict";
775
- bcrypt = __toESM(require("bcryptjs"), 1);
776
- }
777
- });
778
-
779
- // src/utilities/json.ts
780
- var init_json = __esm({
781
- "src/utilities/json.ts"() {
782
- "use strict";
783
- }
784
- });
785
-
786
- // src/utilities/media.ts
787
- var import_music_metadata;
788
- var init_media = __esm({
789
- "src/utilities/media.ts"() {
790
- "use strict";
791
- import_music_metadata = require("music-metadata");
792
- }
793
- });
794
-
795
- // src/utilities/random.ts
796
- var init_random = __esm({
797
- "src/utilities/random.ts"() {
798
- "use strict";
799
- }
800
- });
801
-
802
- // src/utilities/retry.ts
803
- var init_retry = __esm({
804
- "src/utilities/retry.ts"() {
805
- "use strict";
806
- }
807
- });
808
-
809
- // src/utilities/index.ts
810
- var init_utilities = __esm({
811
- "src/utilities/index.ts"() {
812
- "use strict";
813
- init_authProviders();
814
- init_configurable();
815
- init_hash();
816
- init_json();
817
- init_media();
818
- init_random();
819
- init_retry();
820
- }
821
- });
822
-
823
613
  // src/errors/types/badRequestError.ts
824
614
  var init_badRequestError = __esm({
825
615
  "src/errors/types/badRequestError.ts"() {
@@ -948,7 +738,7 @@ var import_valleyed5 = require("valleyed");
948
738
  init_errors();
949
739
 
950
740
  // src/orm/fields.ts
951
- var import_valleyed4 = require("valleyed");
741
+ var import_valleyed3 = require("valleyed");
952
742
  var Field = class {
953
743
  name;
954
744
  path;
@@ -987,7 +777,7 @@ if (void 0) {
987
777
  });
988
778
  describe("SchemaField", () => {
989
779
  test("extends Field and stores pipe", () => {
990
- const mockPipe = v4.string();
780
+ const mockPipe = v3.string();
991
781
  const f = new SchemaField("email", mockPipe);
992
782
  expect(f).toBeInstanceOf(Field);
993
783
  expect(f.name).toBe("email");
@@ -995,7 +785,7 @@ if (void 0) {
995
785
  expect(f.pipe).toBe(mockPipe);
996
786
  });
997
787
  test("stores lifecycle hooks when provided", () => {
998
- const mockPipe = v4.number();
788
+ const mockPipe = v3.number();
999
789
  const f = new SchemaField("updatedAt", mockPipe, {
1000
790
  onCreate: () => 1e3,
1001
791
  onUpdate: () => 2e3
@@ -1004,7 +794,7 @@ if (void 0) {
1004
794
  expect(f.onUpdate?.()).toBe(2e3);
1005
795
  });
1006
796
  test("keeps lifecycle hooks undefined when omitted", () => {
1007
- const mockPipe = v4.string();
797
+ const mockPipe = v3.string();
1008
798
  const f = new SchemaField("name", mockPipe);
1009
799
  expect(f.onCreate).toBeUndefined();
1010
800
  expect(f.onUpdate).toBeUndefined();
@@ -2466,7 +2256,146 @@ if (void 0) {
2466
2256
 
2467
2257
  // src/orm/adapters/postgresql/index.ts
2468
2258
  init_errors();
2469
- init_utilities();
2259
+
2260
+ // src/utilities/configurable.ts
2261
+ var import_valleyed4 = require("valleyed");
2262
+ function configurable(pipeFn, base) {
2263
+ const pipe = pipeFn();
2264
+ import_valleyed4.v.compile(pipe);
2265
+ class Configurable extends base {
2266
+ constructor(config, ...baseArgs) {
2267
+ super(...baseArgs);
2268
+ this.config = config;
2269
+ }
2270
+ static create(input, ...args) {
2271
+ const r = import_valleyed4.v.validate(pipe, input);
2272
+ if (!r.valid) throw r.error;
2273
+ return new this(r.value, ...args);
2274
+ }
2275
+ }
2276
+ return Configurable;
2277
+ }
2278
+ if (void 0) {
2279
+ const { describe, test, expect, expectTypeOf } = void 0;
2280
+ const { v: v6 } = null;
2281
+ const testPipe = () => v6.object({
2282
+ host: v6.string(),
2283
+ port: v6.number()
2284
+ });
2285
+ class TestBase {
2286
+ baseValue;
2287
+ constructor() {
2288
+ this.baseValue = "base";
2289
+ }
2290
+ }
2291
+ class TestBaseWithArgs {
2292
+ label;
2293
+ constructor(label) {
2294
+ this.label = label;
2295
+ }
2296
+ }
2297
+ describe("configurable", () => {
2298
+ test("validation runs in static create before constructor body executes", () => {
2299
+ let constructorRan = false;
2300
+ const Wrapped = configurable(testPipe, TestBase);
2301
+ class MyClass extends Wrapped {
2302
+ constructor(config) {
2303
+ super(config);
2304
+ constructorRan = true;
2305
+ }
2306
+ }
2307
+ expect(() => MyClass.create({ host: 123, port: "bad" })).toThrow();
2308
+ expect(constructorRan).toBe(false);
2309
+ MyClass.create({ host: "localhost", port: 3e3 });
2310
+ expect(constructorRan).toBe(true);
2311
+ });
2312
+ test("constructor receives validated value", () => {
2313
+ const Wrapped = configurable(testPipe, TestBase);
2314
+ let receivedConfig;
2315
+ class MyClass extends Wrapped {
2316
+ constructor(config) {
2317
+ super(config);
2318
+ receivedConfig = this.config;
2319
+ }
2320
+ }
2321
+ MyClass.create({ host: "localhost", port: 3e3 });
2322
+ expect(receivedConfig).toEqual({ host: "localhost", port: 3e3 });
2323
+ });
2324
+ test("external new is a compile error", () => {
2325
+ const Wrapped = configurable(testPipe, TestBase);
2326
+ class MyClass extends Wrapped {
2327
+ constructor(config) {
2328
+ super(config);
2329
+ }
2330
+ }
2331
+ void (() => new MyClass({ host: "localhost", port: 3e3 }));
2332
+ });
2333
+ test("static Config resolves to PipeOutput<P> at the type level", () => {
2334
+ const Wrapped = configurable(testPipe, TestBase);
2335
+ class MyClass extends Wrapped {
2336
+ constructor(config) {
2337
+ super(config);
2338
+ }
2339
+ }
2340
+ expectTypeOf().toEqualTypeOf();
2341
+ expect(MyClass.create).toBeTypeOf("function");
2342
+ });
2343
+ test("ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures", () => {
2344
+ const Wrapped = configurable(testPipe, TestBase);
2345
+ class MyClass extends Wrapped {
2346
+ extra;
2347
+ constructor(config, extra) {
2348
+ super(config);
2349
+ this.extra = extra;
2350
+ }
2351
+ }
2352
+ const instance = MyClass.create({ host: "localhost", port: 3e3 }, 42);
2353
+ expect(instance.extra).toBe(42);
2354
+ expectTypeOf(instance).toHaveProperty("extra");
2355
+ expectTypeOf(instance.extra).toEqualTypeOf();
2356
+ void (() => MyClass.create({ host: "localhost", port: 3e3 }, "not-a-number"));
2357
+ });
2358
+ test("base-args forwarding works for non-zero-arg bases", () => {
2359
+ const Wrapped = configurable(testPipe, TestBaseWithArgs);
2360
+ class MyClass extends Wrapped {
2361
+ constructor(config, label) {
2362
+ super(config, label);
2363
+ }
2364
+ }
2365
+ const instance = MyClass.create({ host: "localhost", port: 3e3 }, "test-label");
2366
+ expect(instance.label).toBe("test-label");
2367
+ });
2368
+ test("config is accessible as protected readonly on instances", () => {
2369
+ const Wrapped = configurable(testPipe, TestBase);
2370
+ class MyClass extends Wrapped {
2371
+ constructor(config) {
2372
+ super(config);
2373
+ }
2374
+ getHost() {
2375
+ return this.config.host;
2376
+ }
2377
+ }
2378
+ const instance = MyClass.create({ host: "localhost", port: 3e3 });
2379
+ expect(instance.getHost()).toBe("localhost");
2380
+ });
2381
+ test("accepts an abstract base class", () => {
2382
+ class AbstractBase {
2383
+ }
2384
+ const Wrapped = configurable(testPipe, AbstractBase);
2385
+ class Concrete extends Wrapped {
2386
+ constructor(config) {
2387
+ super(config);
2388
+ }
2389
+ greet() {
2390
+ return `hello from ${this.config.host}`;
2391
+ }
2392
+ }
2393
+ const instance = Concrete.create({ host: "localhost", port: 3e3 });
2394
+ expect(instance.greet()).toBe("hello from localhost");
2395
+ expectTypeOf(instance).toHaveProperty("config");
2396
+ });
2397
+ });
2398
+ }
2470
2399
 
2471
2400
  // src/orm/orm-adapter.ts
2472
2401
  init_errors();